내 경력은 계산하기 매우 쉽다. 2010년 1월 2일에 처음 출근했다. 그리고 다음 주에는 2020년 1월 2일이 있다. 벌써 경력 10년차라니… 그래서 2018년과 다르게 2019년 회고를 써보기로 했다.
회사과 관련된 이야기가 보안상의 이유로 빠지니까 내용도 같이 빠졌다. 인생이 너무 재미없어져서 회사 이야기 빼면 할 말이 없다니.
기술
2019년은 신기술을 손대지 않았다. 이전에 만져봤던 기술을 프로덕션에 적용해본 1년이다. 쓸만한 것도 있었고 못쓰는 물건도 있었다. 각각의 기술 붙잡고 길게 글을 쓸수도 있는데 2019년 회고니까 간단하게만 적었다. 자세한 이야기는 다른 글에서 다룬다.
serverelss framework
2018년에는 토이 프로젝트 수준에서만 만져봤다. 2019년에는 프로덕션에 적용했다. 처음에는 전통적인 node.js 웹서버의 구성인 docker + express로 백엔드 서버를 만들었다. 서버 운영의 귀찮은 점을 없애고자 aws lambda를 도입하고 몇차례의 설계 변경 끝에 지금은 aws-serverless-express로 작업하고 있다.
aws lambda를 사용할거면 serverless framework를 꼭 써야한다. 인생이 편해진다.
microservice framework
확장성, 재사용성이라는 빅-픽쳐에 낚여서 손댔었다. 그리고 개발력 부족으로 포기했다. 마이크로서비스가 보여준 이상은 좋은데 그걸 따라가기에는 사람이 부족하고 일정도 부족했다.
우리 속담에 ‘뱁새가 황새 따라가다 가랑이 찢어진다’는 말이 있다. 넷플릭스는 마이크로서비스 써도 된다. 근데 나는 안된다. 나는 넷플릭스가 아니거든.
모놀리틱 아키텍쳐로 만들었던 서비스를 마이크로서비스 아키텍쳐로 바꾸면서 해체했다가 다시 모놀리틱 아키텍쳐로 합치는 짓을 했다. 그래도 삽질은 무의미하지 않았다. 마이크로서비스로 바꾸는 과정에서 복잡한 foreign key 관계를 제거했으니까.
Github도 샤딩같은 문제로 foregin key 쓰지 않는다고 한다. 그리고 현재 프로젝트에도 샤딩이 필요해졌거든. https://twitter.com/GeekNewsBot/status/1193319549254295552
reactive programming
2018년에 토이 프로젝트에서 만져보고 2019년에 프로덕션에 적용했다.
UniRx를 사용해서 UI뿐만 아니라 게임 로직까지 구현했다.
Update()
가 짧아져서 좋더라.
나중에는 rx.js를 사용해서 백엔드 서버도 구현했다.
BaaS
BaaS (Backend as a Service), firebase는 몇년전부터 들었지만 관심을 가지지 않았다. 나는 백엔드 개발할 줄 아니까 굳이 BaaS를 쓸 필요가 없었다. 2019년에 처음으로 firebase도 썻다.
firebase 달고 프로덕션으로 나가기에는 문제가 있어서 걷어냈지만 프로토타입 수준에서는 유용하게 썼다. (firebase는 중국에서 안돌아간다)
프로덕션에 들어갈지 안들어갈지도 모르는 기능을 프로토타이핑 하기 위해서 서버, 클라 개발자가 동시에 끌려들어가는걸 보고 싶진 않았다. firebase를 붙여서 클라 개발자가 혼자서도 프로토타이핑 할수 있도록 만들고 나는 다른걸 구현했다.
개인 프로젝트 / 오픈소스
2019년은 내가 진정한 사축으로 완성된 해이다. 회사 코딩만 열심히 한거같다. 집에서도 회사 코딩 많이 했다.
이전에는 회사에서 사용할 툴을 만들어도 비공개 저장소의 갯수를 아끼기 위해서 오픈소스로 만들었다. 2019년에는 새로 바뀐 github plan을 쓰고있다. 비공개 저장소의 갯수가 무제한이 되니까 오픈소스로 만들어야할 이유가 없어졌다.
수동 트위터 박제기
트윗 id, url을 넣으면 zip으로 받는 서비스이다. 2018년에 aws lambda, serverless framework 한번 써보려고 작업한 서비스이다. 2018년에는 인증 기능이 없어서 내 API 토큰을 직접 때려박았다. 2019년에 firebase authentication을 붙였다.
ioredis-mock 기여
https://github.com/stipsan/ioredis-mock/pull/851
ioredis-mock에 zrank, zrevrank가 없었다. 나는 zrank, zrevrank가 필요했다. 풀리퀘를 만들어서 넣어도 언제 적용될지 모르고 이슈 영어로 쓰기도 귀찮고… 그래서 몽키패칭으로 우회해서 썼다. (타입스크립트 너무 좋은 언어다)
const mock = new RedisMock() as Redis.Redis;
mock.zrevrank = async (key: string, member: string): Promise<number | null> => {...};
mock.zrank = async (key: string, member: string): Promise<number | null> => {...};
이건 아니다 싶어서 나중에 풀리퀘 넣었고 반영되었다.
공부
나는 2015년 가을에 졸업했다. 학교 다닐때 기계학습, 데이터마이닝 같은 용어를 들었는데 무시했었다. 역사적으로 AI가 몇번이나 망했다는걸 들어서 알고 있었고 대용량의 데이터가 없으면 쓸모없는 기술이라고 생각했다. 이번에도 망할거라고 생각했다.
근데 2016년에 알파고가 나왔네? 딥러닝이 떡상하네? 졸업하기 전에 인공지능 수업을 안들은게 후회되었다. 졸업학기에 인공지능 수업이 열렸는데 교수님이 안식년인지 강사가 수업하길래 다른 과목을 들었다. 그땐 알파고가 나올줄 몰랐으니까.
나이도 그렇고 경력도 그렇고 공부를 해볼 수 있는 시간이 얼마 남지 않은거 같으니 마지막으로 해보기로 했다. 동문회원 가입해놔서 도서관 출입이 가능하고 회사도 학교 근처니까 파트타임으로 바꾸고 도서관으로 공부했다.
오랜만에 공부하는거니까 실용적인게 아니라 원론적인걸 목표로 했다. mongodb 사용법, c# 내장 라이브러리 등등은 회사에서 돈받고 공부해도 된다. 미적분, 집합론, 회귀분석, 인공지능, sicp같이 회사 프로젝트에서 즉시 사용 가능하지 않은것 위주로 공부했다.
그리고 더이상 공부를 할수 있는 뇌가 아니라는걸 깨달았다. 이론적인건 즉시 돈이 안되는 일이며 펜을 붙잡고 공부하는 영역이다. 실용적인건 즉시 돈이 되는 일이며 키보드를 붙잡고 공부하는 영역이다. 제품 만들기, 코딩이 너무 재밌다. 내가 왜 대학교 다니다 휴학하고 일하러 갔는지 생각났다.
2월말부터 새로운 프로젝트가 시작되어서 파트타임으로 일하는게 끝났고 도서관으로 공부하러 가는 것도 끝났다. 그래도 2개월 동안 이것저것 책은 좀 읽었다. 목록을 정리 안해서 문제지 -_-
게임
나한테 있어서 게임은 시간의 기준이다. 어떤 일이 있었으면 “XX년 X월"로 기억하지 못한다. “A 게임을 했던 시기"로 기억한다. 한번 엔딩 본 게임을 다시 손대는 일이 거의 없다보니 시간순서가 뒤섞이지 않아서 유용하더라.
올해에 클리어한 게임들이다. baba is you 같이 손댔지만 멍청해서 엔딩을 보지 못한건 목록에서 제외되었다.
- 에이스 컴뱃 7 1/24 ~ 1/27
- 라스트 가디언 ~2/6
- 언차티드 잃어버린 유산 2/17 ~ 3/10
- 호라이즌 제로 던 메인 시나리오 4/6 ~ 5/5
- 호라이즌 제로 던 프로즌 와일드 ~ 5/26
- 저니 ~ 5/31
- 워치독스 6/2 ~ 6/11
- 디스가이아 5 6/22 ~ 10/27
- 다잉 라이트 11/3 ~ 11/24
- 타입:라이더 11/27 ~ 11/30
- 디트로이드 비컴 휴먼 11/30 ~ 12/1 (2회차 진행중)
- deus ex go ~12/15
- 콜 오브 듀티 WWII 12/17 ~ 12/25
- superhot 12/25 ~12/28
하라는 공부, 코딩은 안하고 게임만 열심히 한 2019년이다.
회사
망해버린 풀스택 개발자답게 이것저것했다. 유니티로 게임도 구현하고 타입스크립트로 백엔드 서버도 구현했다. 다목적 사축답게 돈되는 일은 다 했다. 일하는 동기는 대출에서 나온다.
마무리
사고방식이 완전히 바뀌었다는걸 느낀 1년이었다.
내가 무엇을 할수있고 무엇을 못하는지 깨달았다. 문제를 처리하는 능력은 있지만 새로운 문제를 만드는 능력은 없다는걸 알았다. 개인 프로젝트는 내가 목표를 잡아야한다. 무엇을 만들것인가? 왜 만들어야하는가? 언제까지 만들것인가? 어디까지 만들어야하는가? 회사 코딩은 목표를 외부에서 만들어준다. 왜 만들어야하는가? 무엇을 만들어야하는가? 사축은 이런거로 고민하면 안된다. 목표는 이미 정해져있고 나는 효율적인 방법을 찾아서 문제를 처리하면 된다. 문제를 정의하는건 나한테 어렵고 하기 싫은 일이지만 문제를 코딩으로 처리하는건 재밌다. 그래서 집에서 회사 코딩을 하는 사축이 된거같다.
신기술 따라가는거 때려치우고 이미 아는 기술을 조합해서 문제를 해결하기 시작했다. 알고 있다고 생각한 기술인데 깊이 아는건 없다는걸 많이 느꼈다. 10년 동안 삽질만 했더니 쌓아둔건 많다. 새로운거 뒤지러 가는 것보다 이미 아는 것을 더 깊이 파기 시작했다. 하지만 쌓아둔게 너무 많아서 한참 걸릴거같다.
10주년 이야기는 다음에 써야지. 10년 분량은 정리할게 많다.