Lacti's Archive

2019년 정리

December 31, 2019

2018년에 대한 정리를 한 지 시간이 오래 지나지 않은 것 같은데 벌써 2019년이 끝났다. 시간은 갈수록 더 빠르게 흘러간다는 말을 실감하면서, 올해 한 해도 역시 찰나의 시간을 무수히 아껴 큰 덩어리 시간을 아낌없이 낭비한 좋은 한 해였다. 그럼 이제 어떻게 구체적으로 시간을 낭비했는지 굳이 데이터를 낭비해가며 자세히 정리해 훗날 이 글을 다시 보게될 내가 조금이라도 발전하고 있다는 마음을 가질 수 있도록 해보겠다. 그럼 의식의 흐름 시작..!

회사

회사를 또 바꾸었다. 2018년 라인을 그만두고 ML 스타트업으로 옮겼었는데 1년 좀 넘게 다니다가 아무래도 나와는 잘 맞지 않는 것 같아서 잠시간의 휴식을 갖고 뮤직메이트로 이직을 하였다. 자바가 싫어서 떠났다가 결국 다시 자바를 하는 회사로 이직했다는 점도 아이러니하고, 결국은 다시 스프링의 품 안으로 돌아갔다는 점도 참으로 아아니러했다.

이력으로 따로 정리하고 있지만 전 회사에서는 딱히 정해진 파트로 업무를 진행했다기 보다는 백엔드 엔지니어링과 DevOps 역할을 주로 수행하고 필요하면 프론트나 앱 개발도 진행하였다. 적은 구성원으로 다양한 실험을 하며 제품을 만들어야 했기 때문에 나름 그 시점에 가장 효율적인 방법을 선택하려고 끊임없이 고민하며 일을 했지만 실제 같이 일한 동료들도 그렇게 느꼈을 지는 잘 모르겠다 (…) 늘 스스로 기술에만 집착하고 좀 더 넓은 시야에서 엔지니어링을 대하고 효율적인 방법을 찾는 것은 부족하다고 생각했기 때문에 그 부분을 많이 연습하려고 했고, 이번에 업무의 경계가 상당히 모호하여 이것저것 다 해야 하는 상황이고 다들 구현 기술에 숙련된 상황은 아니었기 때문에 최대한 전체의 효율을 고려하며 작업하려고 노력했다고 생각한다. 아무튼 작년보다는 시야가 좀 넓어지지 않았을까 하는 기대가 있다.

업무의 경계가 없다는 것은 아무래도 이것저것 많이 해볼 수 있고 내가 달리는만큼 결과를 낼 수 있다는 점에서는 꽤 즐거운 일이었지만, 결국 혼자 달릴 때 느끼는 외로움을 견디지 못한 것도 있고, 그렇게 이것저것 하고 있을 동안 원래의 백엔드 기술을 익히는 사람들과의 격차가 점차 벌어지는 것 같은 두려움을 이길 수 없었다. 물론 이직한 곳이 그 두려움을 해결해줄 수 있는 곳인지는 좀 의문이 있지만 그건 2020년에 해결해야 할 과업이라고 치고 내년의 나에게 큰 부탁을 넘긴다.

또 다른 목표였던 일 즐겁게 하기 는 늘 염두에 두고 있기는 한데 임계점을 넘어가는 일이 종종 발생해서 몇몇 아쉬움을 남겼다. 그래도 예전보다는 많이 나아졌다는 행복회로를 돌리며 내년에는 좀 더 여유를 가지고 즐겁게 일할 수 있도록 조금씩 더 욕심을 버리도록 노력해야 겠다.

프로그래밍

아무래도 이것저것 많이 하다보니 올해는 정말 넓고 얕게 잘 살았던 것 같다.

React

이번이 아니면 언제 해볼까 싶어서 작년에 React를 시작한 이후로 올해도 기회가 있을 때마다 써봤다. 프론트 작업을 할 때에는 대부분 React만 썼고 중간에 Hooks으로 넘어가면서 잠시 주춤했지만 잉여톤의 힘을 빌려 게임 클라이언트도 대충 PoC해보고 여기저기서 사용할 툴들도 Electron과 조합해서 만들고 아주 잘 썼다. jQuery와 Bootstrap으로 웹을 만들 때와는 TypeScript로 Component 단위로 functional하게 코딩하는 재미가 있다. material-ui와 같이 이미 잘 구성된 UI component를 사용해 대충 만들어도 예쁘게 나오는 점도 아주 마음에 든다.

Electron

웹으로 모든 툴을 다 만들 수 있으면 좋겠지만 결국 로컬 자원을 접근해야 하는 일이 발생하면서 React만으로는 아쉬움이 있었다. 다행히 Electron이 빠르게 성장해주었고 React로 만든 웹을 Electron으로 띄우는 수준에서 아예 Electron 앱을 React로 만드는 방향으로까지 전환하여 필요한 툴을 찍어냈다. 툴을 대충 만들어도 문제가 없다는 가정 하에 C#을 사용해야 할 마지막 이유가 사라졌고 이것저것 마구 찍어내는 코딩을 할 수 있어서 대단히 뿌듯했다. 특히 개인적으로 시스템을 받쳐주는 툴이 반드시 필요하다고 생각하기 때문에 툴을 꽤 많이 만드는 편인데 그 부분에서 생산성이 많이 올라가서 굉장히 좋았다. 물론 2020년에는 잉여력의 도움을 받아 Rust + WebAssembly으로 갈아타고 싶다(?)

Flutter

회사에서 회의록 앱을 만들 때 빠른 속도로 Android와 iOS 개발을 위해 Flutter를 사용하기 시작했고, 이후 앱 개발은 J2ME 이후 사실상 처음이었지만 Flutter 덕분에 꽤나 잘 개발할 수 있었다. UI 계층을 쌓는 방식이나 BLoC를 통해 로직을 제어하는 부분, 그리고 native plugin을 확장할 수 있는 방법도 꽤나 마음에 들었다. 다만 개발 환경 자체가 자원이 많이 들고해서 왠만한 상황에서는 그냥 React로 해결했었는데 그래도 모바일 앱으로 만들어서 배포했을 때의 느낌이 좋은 부분도 있어 모처럼 배운 기술 까먹지 않기 위해 일부러 개인 앱 개발 프로젝트를 시작해서 계속 사용해보려 하고 있다. 하지만 물론 다른 프로젝트보다 손이 안 간다.

TypeScript

마음의 고향같은 언어인 C++, 돌아가고 싶지 않은 고향같은 언어인 Java를 제외하면 사실상 주력으로 사용했던 언어는 C#이었다. 모던 자바스크립트를 공부했던 것도 꽤나 최근 일이었고 하지만 그나마도 제대로 개념이 잡히지 않아 2018년에 자바스크립트로 작성했던 코드들은 사실상 거의 복&붙 수준의 코드들이었다. 사실 Type이 없다는 점도 굉장히 마음에 안 들었던 것도 있고 babel이니 webpack이니 개발환경을 설정하는 작업도 익숙하지 않아서 손이 안 가던 것도 문제였는데, 이것저것 빨리 많이 해야 하는 상황이다보니 Serverless 환경으로 백엔드를 구축/배포할 일이 굉장히 많아졌고 그 와중에 프론트 개발도 React로 선택했기 때문에 TypeScript를 엄청 사용하게 되었다.

그 와중에 묘한 편리함과 어설프지만 귀여운 type system에 취하게 되었고, 어느새 가장 많이 사용하는 언어가 되었다. 그냥 뭐 간단한거 처리할 때도 쓰고 툴 만들 때도 쓰고 백엔드 구성할 때도 쓰고 프론트 만들 때도 쓰고 딱히 심각하지 않은 시스템을 만들 때에는 별 생각없이 TypeScript로 만들어버릴 정도로 애용하게 되었다.

Golang

옮긴 회사에서 Golang으로 만들어진 시스템의 업무를 맡게 되어서 잠깐 보게 되었다. 필요하면 그 때 보자는 마음으로 최대한 안 보고 있었는데 준비가 안 된 상태에서 마감 전까지 공부와 개발을 완료해야 하다보니 꽤나 스트레스를 받으며 진행하다보니 아쉬움이 좀 있었다. 어차피 goroutine 쓸 일도 별로 없었고 그냥 프레임워크 위에서 지정된 로직 구현하는 수준이라 기본 문법만 좀 배운 느낌이었지만 덕분에 golang 개발 환경도 구축하고 기본 문법 정도는 익힐 수 있게 되어서 나름 남는 장사였다.

AWS Lambda

사실상 올해는 AWS Lambda만 하다고 갔다고 해도 과언이 아닐 정도로 가장 애정하는 분야였고 가장 열심히 가지고 놀았던 분야였고 회사에서도 사용하여 덕업일치까지 했던 기술이었다.

전 회사에서는 아무래도 서버까지 관리할 여력이 없다보니 적당한 성능과 적당히 관리되는 자원으로써 Lambda 기반으로 많은 시스템을 구축했다. S3의 CreateEvent 기반으로 Lambda pipeline도 구성하고 TensorFlow도 욱여넣고 Actor model도 구현하고 잉여톤 API도 만들었다. 개인적으로 제일 뿌듯했던 건 lightsail에 띄워놓은 Redis를 사용해서 AWS Lambda 위에 actor model을 올려서 concurrent update를 제어했다는 점인데 이는 앞으로 차차 글로 정리할 예정이다.

Test

이번 회사로 옮기면서 테스트 코드를 작성할 일이 좀 있었다. 예전부터 관심은 있었지만 뭔가 구체적인 지식이나 경험에는 도달하지 못한 채 피상적인 부분만 많이 작성했던 것 같다. 이번에도 크게 다르지는 않았지만 그래도 정식으로(?) 기회를 얻게 되었으니 좀 더 유의미한 경험을 할 수 있도록 내년까지 이어서 노력할 계획이다.

잉여톤

만약 올해 프로그래밍 실력이 향상했다면 그건 잉여톤 덕분이다. 2달에 한 번씩 행사를 진행하는 것은 꽤나 순조롭게 잘 진행되고 있고 최근 목표했던 바와 같이 조금씩 결과물을 남기는 시도가 어느 정도 성공하면서 게임 서버를 Serverless 환경에서 구축하기 위한 기반 component를 설계하고 배포하고 운영하면서도 그 비용을 최소화하려는 시도가 어느 정도 성공하고 있다. 이 과정에서 보다 일반적이고 재사용 가능한 API를 설계하기 위한 많은 공부와 고민을 할 수 있었고, 덩달하 TypeScript에 대한 이해와 AWS Serverless model에 대한 이해도 많이 늘 수 있었다. 최근 잉여톤에서 WebSocket API와 Actor on long-running Lambda를 기반으로 하는 간단한 세션 게임을 PoC했고 지인과 함께 빠른 시간 안에 출시까지 해보기로 결정하였다. 보다 많은 경험을 얻을 수 있기를 기대하면서 앞으로도 가능한 선에서 잉여톤은 계속 진행할 수 있는 방법을 찾으려 한다.

공부

올해 초 진행했던 알고리즘 스터디는 뜻밖의 기회를 통해 좋은 분들과 함께 할 수 있어서 굉장히 많은 도움이 되었다. 대부분의 알고리즘을 적어도 n^2 부터 시작하는 내가 어느덧 log n을 고민하기 시작하면서 꽤나 발전했구나(?) 싶었고 솔직히 혼자 하려고 하면 평생 안 할 것 같은 부분이었는데 스터디를 통해 leetcode 문제도 풀고 해법에 대해서도 많이 배울 수 있어서 꽤나 유의미했다.

그 이후에는 사실 거의 하고 싶은 코딩만 하느라 깊은 공부를 진행한 것은 없다. 코딩을 계속하면서 알게 되는 부분도 없는 것은 아니지만 설계나 테스팅, 혹은 알고리즘이나 네트워킹 등의 인프라에 대해서도 책을 꽤 샀는데 조금 보다가 덮은 경우가 많아서 제대로 공부한 부분이 없는 것이 아쉽다. 프로그래밍을 해서 얻은 지식도 어딘가에 정리해두지 않으면 금방 잊어버리게 되므로 글도 좀 열심히 썼어야 하는데 올해도 기대보다 훨씬 적게 써서 아쉬움이 크다. 내년에는 책도 많이 읽고 글도 많이 정리하기 위해 좀 더 실천 가능한 구체적인 전략을 만들어봐야겠다.

운동

사실상 한게 없다. 가끔 피로가 너무 안 풀리거나 조금만 코딩해도 쉽게 지치거나 하는 경우가 있는데 기본 체력의 부족인 것 같다. 추석 즈음에 운동을 하면 스티커를 받는 개념으로 잠깐 열심히 했던 적이 있었으나, 갑작스러운 운동은 부상으로 이어졌고(…) 그 뒤로 운동을 아예 안 하게 된 점도 문제가 크다. 이제 좀 더 구체적이고 안전한 계획을 세워 조금씩이라도 운동을 할 수 있도록 신경을 써야겠다.

정리

2시간 지나면 내일이다. 고작 그거 지났다고 뭐가 크게 바뀌는 것은 아니겠지만 지금 당장 재밌는 것을 좀 더 하려는 입장에서 오늘 할 일을 내일로 미루는 것은 오늘 좀 더 재밌는 것을 할 수 있는 가용 시간을 확보하는 귀중한 작업이므로, 이 쯤에서 글을 멈추고 어서 재밌는 코딩을 하러 가야겠다.

그럼 내년은 내년의 내가 힘내길 바란다.

Loading script...