2019년 연간회고

2018 연간회고를 쓴지가 엊그제 같은데 벌써 2019가 끝나가면서 연간회고를 쓰게 되었다.
올해 뭐 했지 싶다가도 2018년부터 지금까지 작성해온 회고들을 보니 저때 저런것도 했었지 싶어 꾸준히 회고쓰기 참 잘했다는 생각이 들었다.
1년간 중단하지 않고 느리게나마 꾸준히 주간 회고를 작성해왔는데 올해 잘한일 중 하나이다.
이번 연간 회고는 2018년에 비해 얼마나 성장했는지, 2019년엔 어떤 기술을 배웠으며 어떤 토이프로젝트를 만들었는지를 작성하려한다.

2018년에 배운 기술과 지금을 비교해보자

  • Git, GitHub

    • 작년엔 Git, Github를 처음 접했었다.
    • 작년엔 토이프로젝트에서 revert 사고도 치고, conflict도 잘 해결하지 못해 끙끙댔는데 이젠 능숙하게 깃을 다룰 줄 알게되었다.
    • 이젠 동료분들에게 깃 관련 문제가 생길때 마다 용병(?)갈 정도로 능숙해져 뿌듯하다.
  • GitHub Blog

    • 작년엔 jekyll을 이용해 깃허브 블로그를 처음 만들었었고 그로인한 많은 시행착오와 삽질이 있었다. 특히 jekyll theme를 포크떠서 시작하는경우 기존의 디자인을 깨트리지 않으면서 원하는 기능(사이드 바 등)을 넣기가 어려웠다.
      그러던 차에 우연히 hexo를 발견하게 되었다. 지금은 hexo로 갈아탔다.
    • 지금 블로그는 마음에 들며, 앞으로 딱히 바꾸지 않을 것 같다.
    • 올해 회사 기술블로그를 만들었다. jekyll로 깃허브 블로그를 만들었는데 오픈까지 대략 하루~이틀정도 걸렸던 것 같다.
      과거에 해뒀던 삽질들 덕분에 이번엔 빠르고 쉽게 구축할 수 있었다.
  • React

    • 난 더이상 리액트 공부를 하지 않는다. 프론트에 별 관심이 없어졌기 때문이다.
    • 프론트가 나와 맞는지 아닌지 알아내기 위해 조금이나마 Vue도 해보고 리액트도 해보고 심지어 리액트 네이티브도 하는 등 조금씩 공부해봤지만 나와는 별로 맞지 않았던 것 같다. 나는 백엔드가 재밌다. 그래서 리액트는 더이상 하지 않는다.
  • CI/CD

    • 작년엔 jenkins로 처음으로 CI/CD를 구축했었다. 자동배포라니!
    • 올해는 회사에 Jenkins로 자동배포환경을 만들었다. 작년의 경험이 있어 올해는 회사에서 쉽게 구축할 수 있었다.
    • 또한 TravisCI, Gitlab CI, AWS CI/CD(aws code commit부터 deploy까지)를 이용한 자동배포 구축등 이제 왠만한 CI/CD 구축 및 설정을 무리없이 할수있게 되었다.

2018년에 배웠던 기술들은 올해 더욱 능숙해졌다. 1년뒤 2020년 회고를 쓸때 2019년에 배운 기술에 비해 더 많이 발전했다고 쓸 수 있으면 좋겠다.

2019년에 배운 기술

클린코드

클린코드를 읽었다. 그간 구현에 급급했는데. 이 책을 읽고 더 나은 네이밍, 아키텍쳐, 가독성을 고려하게 되었으며 테스트코드를 작성하기 시작했다.
이 책은 내 코딩스타일을 완전히 바꿔놓았다. 그 이후로 나는 주위 동료 개발자들에게 이 책을 추천하고 다녔다.
약간 책 홍보같은데.. 그정도로 나한텐 좋은 책이었다. 이 주제로 사내 스터디에서 발표도 했다 [클린코드와 TDD]

TDD와 테스트코드

막연하게나마 느껴졌던 TDD를 클린코드를 읽고 시작하게 되었었다.
처음엔 자료가 적어 구글링을 하거나 책을 보며 서툴게나마 시작했는데 지금은 능숙 까진 아니여도 무리없이 테스트코드를 짤수 있게 되었다.
그 과정에서 groovy의 테스트 프레임워크인 spock로 BDD를 해보기도 하고 테스트코드 작성에 관한 포스팅을 작성하기도 했다.
처음엔 어떻게 짜야할지 몰라서 무작정 작성했다. 애초에 테스트를 하려면 테스트대상을 리팩토링해야 하는데 그래야하는 줄 몰라서 엄청 고생했었다.
레거시를 리팩토링해 나가면서 기능별로 테스트코드를 작성하다보니 지금은 어떤 기능을 어떻게 테스트할건지, 이 기능을 테스트하려면 어느부분을 mocking하고 어느부분을 assert 해야되는지를 조금 알게 되었다. 그렇게 프로덕션에 테스트코드 통합 커버리지 80퍼센트를 달성하게 되었다.
우아한형제들에서 진행한 DDD교육에선 기능 구현을 위해 무조건 테스트코드를 짜야 했는데 다른 사람이 짠 테스트코드를 보면서 많이 배울수 있었다.

서버리스

사내 레거시 문자시스템을 서버리스로 분리 및 구축했다. 어떻게 하면 정확한시간에 병목없이 대량 문자를 발송할수 있는지에 대한 고민을 많이 했는데, 그 과정에서 고려한게 MQ, SQS와 람다였다.
그 당시에 나는 MQ를 이용한 개발도, 서버리스 환경도 경험이 많지 않았는데 설상가상으로 구글링해봐도 관련 자료가 많지 않았다.
그래서 구축할때 굉장히 힘들었었다. [그때 당시의 포스팅1] [포스팅2]
그 뒤에도 운영단계에서 몇번 터졌지만 지금은 안정적으로 처리할 수 있도록 구축해뒀다.
구축하느라 정말 힘들었지만 안정화가 되면서 터지지도 병목이 생기지도 않아서 지금은 서버리스로 바꾸길 잘했다는 생각을 하고있다.
이후에 이 구축기를 get started 격의 포스팅으로 만들었다 [SQS, Lambda를 이용해 문자전송하기(1부)]

Scala

스칼라를 배웠다. 그냥 함수형 해보고싶어서 언어를 고르는데 스칼라가 좋았다. 그 과정에서 Scala vs Kotlin 같은 포스팅을 작성하기도 했다.
학습은 마틴오더스키-Programming in Scala 책과 코세라 강의 그리고 scala-exercise 사이트로 했다. scala-exercise 의 튜토리얼은 마틴오더스키님의 강의자료인데 번역이 되어있지 않아 겸사겸사 번역을 했다.[번역 리스트]
총 15개의 챕터중 8개를 번역해뒀으며 나머지는 내년 상반기안에 끝낼 생각을 하고있다.
스칼라는 듣던대로 어려웠다. 문법익히는 것 부터 어려워서 code wars등을 풀거나 자바코드를 스칼라 코드로 포팅하는 식으로 문법을 익혔다.
사내에서 쓸 환경변수를 관리하는 S3 파일 서빙 서버도 만들었는데 그땐 akka-http로 만들었다(그리고 어려웠다) 아직 미숙하지만 2020년엔 좀 더 능숙해졌으면 좋겠다.

비동기

올해초에 비동기를 접하게 됐다. 비동기 기초 정리
파이썬 asyncio등의 공식문서를 보며 공부했는데 도움이 많이 됐다. 특히 7가지 동시성 모델 이란 책이 좋았다.
그렇게 회사에서 오래걸리는 작업들을 처리하던 파이썬 스크립트들을 asyncio로 리팩토링하면서 소요시간을 대폭 줄일 수 있었다.
비동기 프레임워크를 사용해 [sanic-chatting-project][real-time-ws-pubsub-baas-api] 등의 토이프로젝트를 하기도 했다.

오픈소스 컨트리뷰트

hexo 프레임워크의 rss 관련해 첫 컨트리뷰트를 했다 [fix : add feed icon to rss2.xml #102]
그냥 rss에 이미지를 넣고싶어서 해당 파일 수정 후 풀리퀘를 날렸는데 해당 부분을 수정하면서 발생하는 문제들이 있어 생각보다 신경써야할 부분이 많았다. 그러나 엄격한(?) 스택오버플로우와는 달리 깃허브는 조금 더 친절한 분위기였다. 나는 JS를 잘 못하지만 친절한 hexo 컨트리뷰터 및 오거나이져분들의 도움으로 무사히 작성 후 merge 될 수 있었다.

크롤링

크롤링 고수이신 지인분께 크롤링 과외를 받았다. 특히 패킷까보면서 하니 신세계였다. 그렇게 크롤링을 할 수 있게 됨에 따라 회사에서도 크롤링을 참 많이 하게되었다.. 직접적으로 일상생활에(나에게) 도움이 되는 것들을 많이 만들었는데, 대략 세미나나 콘서트 자리나면 알려줌 이라던가 무료게임이나 날씨정보를 주기적으로 보내준다거나 비행기등의 최저가가 뜨면 알려준다거나하는 것들을 만들었다. 내년에도 이것저것 크롤링해서 소소하게 도움이되는 것들을 만들 것 같다.

2019년에 진행한 토이프로젝트

sanic chatting project

python의 sanic 프레임워크로 만든 채팅 서버이다. 비동기 학습 후 처음 만든 비동기 채팅서버인데 채팅서버다 보니 DB부터 신중하게 찾아보며 골랐다.
asyncio-redis 라이브러리의 문서가 빈약해 고생하긴 했지만 여차저차 구축할 수 있었다.
api document도 만들고.. 여러모로 신경을 좀 쓴 프로젝트였다.

real time ws pubsub baas api

Amazon에서 주최한 Amathon에서 python으로 만들었던 프로젝트이다. Amathon 참가 포스팅
우리조 주제는 websocket 기반의 스케일아웃 고려한 real time Pub/Sub Baas였고 python asyncio + sanic + redis + zeroMQ 등을 썼었다.

구조는 이러했다. 내 생각엔 beanstalk 같은 scalable 한 서비스를 만들어 beanstalk을 대체했어야 할 것 같았는데 시간이 촉박해 그러진 못했다(그리고 그부분이 가장 어렵다) 다른 조 주제도 재미있는게 많았고 내년에 또 열린다면 참가할 것 같다.

racoon man

너굴맨 이라는 슬랙봇 이다. python 으로 만들었으며 심심할때마다 기능을 조금씩 붙여 지금은 굉장히 거대해졌다.
9XD의 유이 라는 슬랙봇에서 아이디어를 얻었으며 회사 개발자들의 소소한 유희(?)을 위해 만들었다.
지금은 동료분들의 많은 사랑을 받고 있다.

너굴맨에는 다음과 같은 기능이 있다.

  • 날씨 및 미세먼지, 한강수온, 현재 비 오는지 여부 알림
  • 랜덤 골라줌, 로또 번호 골라줌, 점심 및 저녁추천
  • 한영 번역 기능
  • festa 세미나, 오늘의 운세 알림 기능
  • 일정 기억 기능
  • 소라고동 기능
  • pingpong 챗봇 api를 붙여 사람같이 대답하는 기능
  • 기타등등 등록해둔 대답 셋

simple anonymous board

java의 springboot로 사내 익명게시판을 만들었었다.
github project로 일정관리부터 문서까지 만들었으며, 사용하고 싶은 기술을 많이 사용해서 재밌었다.
특히 프론트는 handlebars 를 사용했는데, 어려웠지만 커스텀 함수를 쉽게 만들 수 있어 개인적으로 thymeleaf 보다 좋았다.

angelcell admin

이 프로젝트는 AngelHack 2019 Seoul 해커톤 에서 만든 커넥터스라는 서비스의 모니터링 서버인데, springboot로 만들었다.
후기 포스팅을 작성했었다.
해커톤에서 스프링부트로 개발하는건 좀 아닌것 같다는 생각이 들었었다. 설정잡는데에 꽤 시간이 걸렸으며 자바 자체도 보일러플레이트가 많은 언어라 짧은 시간에 많은 코드를 작성하느라 많이 힘들었었다.
역시 해커톤은 파이썬인 것 같다.


올해는 토이프로젝트를 하기보단 그냥 자잘한 스크립트나 학습위주로 해서 만든 토이프로젝트가 적을 줄 알았는데, 모아보니 생각보다 많은 것 같다.
내년엔 보안관련 C 오픈소스 프로젝트를 만들 생각을 하고 있다. 아마 내가 여지껏 한 프로젝트중 가장 어렵고 가장 괜찮은 프로젝트가 될 것이다.

2019년에 참석한 세미나 및 해커톤

다음은 2019년도에 참석한 세미나 및 해커톤 리스트이다.

하나하나 정리를 하려 했지만 내용이 너무 많아지며, 주간회고에서 한차례 정리를 했었기 때문에 연간회고에서 따로 정리하진 않으려 한다.
주로 페스타나 밋업 혹은 동료분들의 영업 으로 종종 세미나나 밋업에 참석하는데 올해 가장 기억에 남는 세미나는 KCD와 파이콘이었다.
KCD는 스칼라를 시작하게되는 계기가 되었으며 파이콘은 즐거웠어서 기억에 남는다.

2019 총평

올해는 꾸준히 주간회고를 쓰며 많은 학습을 한 해였다 포스팅은 올해 45개를 작성했다. 이 부분이 가장 뿌듯하다.
퇴근 후 나태해지거나 슬럼프가 오기도 했는데, 그럼에도 불구하고 모아보니 한게 꽤 돼서 놀랐다.
내년엔 좀더 C, 리버싱 등의 로우레벨을 공부할 것이고 파이썬으로 비동기로 짜는것에 좀 더 익숙해질 생각이다.
스칼라는 계속 할 것이고 프로덕션의 몇몇 서비스들을 계속 서버리스로 분리해나갈 생각을 하고 있다.
실무 기간만 보자면 1년 좀 넘었고 그냥 개발 한 기간은 2년정도 됐는데, 아직까지도 개발은 재밌고 직업 잘 선택한 것 같다는 생각이 든다.
내년은 올해보다 더 부지런한 한해가 됐으면 좋겠다.