ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [회고] 소주 1병 조지고 쓴 1년차 개발자의 아찔했던 순간들
    Jay's Story(내 이야기:D) 2019. 11. 27. 23:19

    안녕하세요 저는 현재 판교에서 백엔드 개발자로 일하고 있는 JAY라고 합니다.

    이번 글은 1년동안(2018-11-12 ~ 2019-11-12) 회사에서 했던 대표적인 실수와 어려웠던 점(?)에 대해 이야기 해보려고 합니다.

    (조금 프리하게 이야기하듯이 작성했으니 양해 부탁드려요!)

     

    하...소주 땡긴다..

     

     

    1.  월급루팡.. 나야나! 나야나! (혼돈의 카오스 회사 적응기) - 1개월차🤪


    전 직장에서 지옥같은 2년을 보내고 2018년 11월12일에 지금의 회사에 입사했다.

    전 직장(제조업)에서는 말이 개발자였지, 하는 일은 CS, 제조, QA, 문서... 뭐 대략 이런 일들이 90%였다. 물론 차장급 위이신 분들은 임베디드 개발, 서버 개발을 하셨고 정말 재밌어 보였다.(사실 이런걸 하고 싶..었는데..)

     

    우리(아니 전)팀은 TCMS(Train Computer Monitering System) 를 만드는 팀이었고, 내가 그나마 개발이라고 했던 건 열차의 여러 장비들에서 가져온 raw data 들을 보여주고 분석하는 분석프로그램을  유지보수하고 커스텀하는 일이었다. 물론 이 순간에는 재밌었지만...2년동안 회사에서 개발이라고 했던 시간은.. 음 ...길게봐서 2-3개월 정도였던 것 같다.

     

    *탈출 계획을 짜던 시기 : https://jay-ji.tistory.com/22?category=747899

     

    결국 나는 탈출의 기회를 노리다가 정말 감사하게도 지금의 회사를 오게 되었다.😂

     

    탈출 개꿀띠

    지금 이직한 회사는 완벽한 소프트웨어 회사였으며, 프엔드(?) 개발자로 입사하게 되었다.

    새로운 분야이기도 했고, 프론트-백엔드를 처음에 다 해보면서 포지션을 정하려고 했던 것 같다.(현재는 백엔드에 가까운 포지션)

    현 직장에서는 django, python 을 기술스택으로 사용하고 있었다.

     

    누구나 처음엔 마찬가지 겠지만, 진짜 뭐가 뭔지 1도 이해가 안갔다. 물론 전직장 탈출  프로젝트를 하면서 django, python을 해봤지만...진짜 이건 듀토리얼 수준도 아니었고... 심지어 개발환경 세팅이라는게 이게 다가 아니었다.

     

    github에서 프로젝트 clone 받아서 rabbitmq, mysql 커넥션 잡고, 또 이걸 docker에서 실행해야 해서 1도 모르는 docker 세팅에... 프로젝트 패키지 설치하면서 뿜어져 나오는 에러들(👊)...물론...선배들이 다 해결해주었다...

     

    진짜 처음 1개월 동안은 뭐라도 하고 싶은데, 할 수 있는건 회사 코드 분석과, 알고리즘 문제 풀기(?)... 이때 다들 다 열심히 일하는데 나만 밥값을 못 하는 것 같아서 아주 힘들었던 시기였다.

     

     

     

    2.  개발서버 패키지는 몰래 update 해야 개꿀잼  👨‍💻 (aka 똥싸지르기💩) - 2~3개월차


    뭐라도 하고싶다는 생각과 의욕이 불타 올랐을때, 거의 첫(?) 미션이 주어졌다. 회사 wikiapi에 대한 문서가 있었는데, api 문서화 + 테스트를 할 수 있는 걸 만들어 보라고 하셨다.

     

    다행히 swagger라는 문서화 툴이 있었는데 django에 맞는 drf-swagger라는 패키지가 있었다. 이 패키지를 설치하고 코드상에 주석을 yaml 문법으로 적으면 따로 몇가지 코드를 추가해, 웹페이지에서 api 설명과 함께 통신 테스트를 할 수 있는 환경을 만들 수 있었다.

     

    하지만 이것도 우리가 원하던 대로 커스텀이 잘 안됬어서, 다른 방법으로 찾은게 swagger-ui 프로젝트 였다. 같은 swagger이긴 하지만 node.js 기반의 프로젝트 였으며, api관련된 내용을 json 혹은 yaml 파일로 작성(10노가다)해서 웹에서 볼 수 있게 해줬다.

     

    이때는 docker에 익숙치 않아서 그냥 개발서버에서 node.js를 설치하고 테스트 했는데... 구글링 하면서 따라하다가 나도 모르게...

     

    헤헤헿ㅎ헿헤헤헤헤헤헿헿ㅎ
    update만 했어야 했는데...upgrade 해버렸지 뭐얌.....빠끄

    설치되어 있는 모든 패키지 업그레이드 되서... 뭔가 의존성 있는 패키지가 있어서 개발서버 접속이 안되었다.🤢

    그나마 다행히 개발서버였고... 큰 문제는 없었지만 (사실 뭐가 문제인지도 몰랐고... 그냥 저질러 버렸다)

    물론... 선배들이 뒷수습 해주었고ㅎㅎ 입사 후 처음 사고친 날이었다..ㅎㅎ 이때 진짜 cmd 창에서 뭐 할때 조심히 해야겠다고 생각했다.

     

     

     

    3.  JS는 HTML안에 써야 제맛 (첫 프로젝트 그리고 코드리뷰의 중요성) 👻- 5개월차


    회사에서 사용하는 기술, 언어에 조금 알아가기 시작할 때, 첫 프로젝트를 맡게 되었다. app에는 있는데 web에는 없었던 페이지를 만드는 것이었다. djangotemplate을 사용할수 있어서 별도로 프론트엔드 프레임워크를 사용하지 않고, viewtemplate을 이용해 프론트엔드를 구현할 수 있었다. (현재는 분리중)

     

    상남자라면 빠꾸없이 HTML 코드안에 JS코드 넣기

    위에 보이는게 이때 처음 작성했던 코드의 예시이다. 프로젝트를 하는 건 좋지만, 문제는 내가아는 html, css 지식은 몇가지 태그 지정과 style 사용(?)이 전부였다.. 그리고 생각보다 나에겐 큰 프로젝트 였던 것 같다. (아..물론 다른 분들에겐 쉽...)

     

    기본적인 코드가 이정돈데... 프론트 validation, 이벤트 버블링, form, 백단으로 넘어온 data에 대한 validation, 그리고 예외처리 ... 진짜 엉망진창인 상태로 3주동안 혼자 만들고, 어 이게 되네, 어 이것도 되네😂하면서 만들었던 것 같다.

     

    진짜 막말로, 디버그창에서 100개 id 랜덤으로 추가해서 POST로 보냈을때, 그냥 그 100개에 대해서 아무런 validation 체크가 없어 모델이 삭제되는 경우까지 일어날 수 있게 코드를 짜놨다.

     

    DB에 데이터가 없을때 예외처리도 없어서 서버 크래시(500) 나고...ㅎㅎ

     

    사실 처음부터 물어보면서, 코드리뷰도 받고 했었어야 했는데, 다른분들이 다 바빠보여서 뭔가 눈치를 봤던 것 같다. 이 글을 보는 신입분들이 계시다면 무조건 눈치보여도 물어보고 하시길...안그럼 저처럼 더 큰 똥을 생성...(다른 코드들도 참고 했어야 했는데..사실.. 봐도 몰랐다..ㅎ)

     

    결국 프로젝트 기간은 늘어났고, 매일 3주동안 야근하면서 선배 개발자 분들의 도움도 받아 프로젝트를 무사히(안짤리고) 마무리 했다. 이때 진짜 자괴감 오지게 들었고, 그만큼 많이 배웠던 때이기도 했다. 하지만...정말 심적으로 힘들었었다.😰

     

     

    4.  배포는...그냥 fab staging deploy 치면 되는거 아닌가요? -  7~8개월차


    첫 프로젝트를 마치고, 이것 저것 다른일들을 하다가 또다른 프로젝트를 맡게 되었다. 이번 프로젝트에서 나는 또다른 신세계를 마주하게 되었다.

    웹에서 rabbitMQ에 작업을 넣으면, worker 서버에서 받아서 그 작업을 실행(celery)해야하고, 그 어떤 작업을 하는 로직을 만들어야 했다.

     

    이번 프로젝트에서는 워커서버가 따로 있기때문에 로컬에서 작업해서 배포까지 해야 했다. 그동안 선배가 만들어준 docker-compose 파일로 ps, start, stop, restart ... 뭐 이정도만 사용하고 있었는데, 배포하기위해 CentOS 이미지를 받아서 docker로 실행하고 관련 패키지 설치하고~ 등등 그런 작업들을 해야했다.

     

    우리회사는 fabric을 이용해 배포를 했는데, 배포를 하기위해서는 일단 서버로 접속이 가능 해야했다.(당연한 말인가,,,) ssh로 접속하려고 하는데 계속 접속이 안되고... 원인도 모르고 검색해도 사실 개념같은 것도 몰랐으니.. 이해도 안되었다.

     

    뭐 문제는 ssh 서버 실행, 22번 port 개방. ssh key 생성, 등록 ... 뭐 이런 간단한 문제였다. 지금에서야 간단하지만.. 진짜 일주일동안 고생했고, 지어 소개팅까지 포기하며 안까먹고 익숙해지려고 계속 반복 학습을 했던 기억이 난다.

     

    잘가라 사랑아~

    * 배포관련 내용 : https://jay-ji.tistory.com/37?category=828550

     

    그리고 배포같은 것도 이미 만들어 있던 fabfile을 가지고 명령어만 쳐서 하니까, 정확히 어떻게 배포되는지 그 과정도 몰랐다. 이 프로젝트를 하면서 fabfile분석과 수정도 해보면서... 그나마 어느정도 개념은 생긴 것 같다... 역시 이런 환경설정이나 배포는 직접 해보고 경험해봐야 익숙해 지는 것 같다...(하지만 진심 현타온다..특히 소프트웨어 전공이 아닌 나같은 사람들에겐..)

     

    이때 느꼈던건 backend 개발자단순히 로직만 짜야하는게 아니라 서버를 구성하고, 프로세스들이 동작하면서 그 과정에서 일어날수 있는(서버에서) 일들까지 알고, 수습할 수 있어야 한다는 걸 느꼈다.

     

    예를 들자면 nginx 세팅이라든지 서버가 불의의 사고로 다운되면 재실행하고 관련 프로세스들을 다시 실행시켜줘야 한다던지 등등..

    이번 프로젝트를 하면서 개발환경 세팅의 중요성 또한 많이 깨달았다. 

     

     

    5.  99% 메모리 사용,  33% 메모리 Swag 아닌 Swap ... - 1년차


    진짜 1주년 축하도 아니고... 가장 최근 그리고 1년동안 했던 실수중 제일 큰 실수이다. 실서버에서 어떤 작업이 있었는데, 스크립트로 돌리기에는 조금 애매하고 간단히 쉘에서 작업을 하려고 하다가..

     

    실서버에서 빠꾸없이 1000만개 데이터를 list에 넣었음

    오케이! 여기까지는 그래 그럴수(아니 그럴수 없어) 있지만 여기서 order_by를 안해서 동일한 코드를 똑같이 썼는데,

    user_list를 그대로 사용해서 1000만개가 들어있는 list에 1000만개를 또 넣는 실수를 했다..

    이거 실환가...뭐지..불길한 느낌은...

    갑자기 쿼리 결과가 처음보다 엄청 느리게 나오고.... 서버 접속도 느려지는 상황이 발생하였다.. 뭐...지???!! 하는 순간 슬랙에..

     

    응..너 잣됬어..

    서버가 갑자기 메모리 99%잡고, swap까지 33%가 되서 시니어 개발자 분들에게 알림이 간 것이었다. 심지어 회사에는 나 혼자여서... 퇴근하신 시니어 개발자 분께서 서버 재실행하고 프로세스들 다시 실행시키고...난리도 아니었다. 그나마 다행해 admin서버이고 저녁이라 엄청난 일은 없었다..ㅠㅠ

     

    다음날 나의 실수에 시니어 개발자분께서 30분간의 조언을 해주신걸 정리하면, 나의 잘못은..

     

    • 쉘에서 직접 프리(?)코딩을 했다.
      실서버는 장남감이 아니다... 회사 모든 동료들에게 피해를 입힐수 있었다. 로컬에서 동일하게 코드를 작성하고, 개발서버에서 테스트하고, 스크립트로 실행하거나 코드를 전체 복사해서 썼어야 했다. 저 때 쉘에서 내가 작업한걸 보면 문법 틀려서 다시 작성하고, 에러나고... 다시쓰고.. 후.. 왜그랬는지 모르지만 너무 안일했던 것 같다.
    • 배포는 장난이 아니다.
      아무리 작은 배포라도 실서버 배포는 장난이 아니다. 배포전 미리와서 로컬, 개발서버, TDD(pytest) 까지 해보고 실서버 배포를 해야한다고 하셨고, 테스트 환경도 실서버보다 더 빡세게(DB)해서 테스트를 해야한다고 하셨다.


    이때 진짜 너무 힘들었다.(왜 맨날 힘든거지..ㅋㅋ후...) 옆에서 들리는 키보드 소리만 들어도 울렁거리고 실서버 접속하는 것 조차도 너무 무서웠다. 스스로에 대한 실망감과 동료들의 신뢰를 잃은것에서 큰 자괴감을 느꼈던 것 같다.

     

    지금은 동료 개발자 분들의 조언과 격려로 다시 힘내고, 다시는 똑같은 실수를 반복하지 않으려고 노력중이다.

     

     

     

    [마치며] 그래도 너 개발자 하고싶니? 👨‍💻


    나는 한국인! 무조건 콜이야(call 이야, korea).... 죄송합니다....

     

    뭐 모든 일 이 그렇겠지만, 개발자라는 직업은 계속 공부해야 하고, 알아야 할 것 도 많다.

     

    근데 개발은...공부하고 실수하고 뭐 그런걸 다 떠나서 그냥 졸라 재밌다.

     

    이제 고작 벡엔드 개발자로 1년을 지냈고, 앞으로 더 많은 일들이 있을 것이다. 그리고 늘 느끼는 거지만, 세상에는 멋지고 똑똑하고 열정있는 개발자 분들이 많다.

     

    개발자로서 작은 바램이 있다면, 이런 분들과 함께 일할 수 있는 기회, 경험이 많았으면 좋겠고(물론 지금 다니는 회사의 개발자 분들은 정말 다 멋지고 존경한다! 레알로), 내가 조금이라도 개발로 기여할 수 있는 일이 있다면 끝까지 포기하지 않고 이 분야에서 존버하고 싶다.

     

    나를 포함한 세상의 모든 뽀시래기 개발자들이 포기하지 않고 끝까지 존버하길 바라며! (with 열정)  이글을 마칩니다.

     

    긴글 읽어주셔서 감사합니다!!

    뽀시래기 개발자 존버 가즈아!!!

    댓글 21

운동하는 개발자 JAY-JI