2018년 회고

2018년을 돌아보며

매년 스스로의 회고를 조금씩 해봤지만, 공개적으로 회고를 올린 적은 없었다. 핑계를 대자면 다른 일들로 바쁘기도 했고 “혼자서 하는 회고만으로도 충분하지 않나”하는 생각 때문이었다. 하지만 이번 회고는 제대로 글로 옮기기로 결심했다.

계기는 여러 가지 있겠지만, 2018년에 유난히 여러 일들이 많았으며 배우고 느낀 것도 많았던 한 해였고, 앞으로 다가오는 미래들의 내가 뒤돌아볼 발자취를 남기기 위해서 이다.

나는 소프트웨어 엔지니어(개인적으로 개발자라는 말보다 이 단어를 더 좋아한다)로 일하고 있으며, 2015년 하반기부터 시작했으니 어느새 3년 가량(중간에 공백기가 좀 있긴 했었다)이 지났다.

2017년 초부터 자체적으로 서비스를 운영하는 스타트업에서 일했고, 2018년 중반에 현재 다니고 있는 회사로 이직했다.

이전 회사(상반기, 1~6월)

API 개발

이전 회사에서 새로 런칭하는 서비스가 있었는데, 해당 서비스에서 내가 관리하고 있는 서비스의 일부 데이터 및 기능을 공유하여 사용해야 하는 필요가 생겼다. 그래서 타 서비스에 필요한 일부분을 API로 제공하기로 결정했고 직접 설계부터 들어갔다.

최대한 RESTful한 API를 제공할 수 있게 설계하려고 했지만, 주어진 HTTP 메서드를 전부 활용할 수 없다는 제약과 처음 해보는 API 설계였기 때문에 RESTful하다고 만족할만한 결과물은 아니었다. 그렇지만 처음으로 API를 설계 및 구현해보면서 좋은 경험을 했다.

책을 통해 REST에 대한 내용들을 완벽하게는 아니더라도 배울 수 있었는데, 각각의 HTTP 메서드에 내포되어 있는 의미들과 리소스를 어떻게 분류해서 제공하는지, 무상태성이 무엇을 의미하는지, API 사용자에게 어떤 인터페이스로 제공해주는 것이 좋은지, 쿼리 스트링(Query String)을 통한 질의 방식이라든지…

또한 요청 URI에 해당하는 API 코드와 매핑시켜 줄 API 리퀘스트 라우터(Request Router)를 따로 사용하고 있던 것이 없어서 간단하게 직접 구현해볼 수 있었던 좋은 기회였다.

새로운 비즈니스 기능 개발

사업은 새로운 방향으로의 확장이라는 길이 언제나 필요한가보다. 이전 회사에서도 새로운 비즈니스에 필요한 기능 개발을 요청했고, 부족한 리소스를 가지고 개발을 진행했다.

*”회사의 비즈니스와 기술을 어떻게 잘 조합해내고 균형을 맞출 수 있는가”* 에 대해 답을 찾는 것은 정말 어려운 일인 것 같다. 회사의 입장에서는 비즈니스적인 부분이 더 중요하고, 엔지니어 입장에서는 기술적인 부분이 중요할 것이다. 나는 아직 엔지니어의 입장이고, 되도록 앞으로도 좋은 엔지니어이고 싶다.

물론 그렇다고 회사의 비즈니스를 소홀히 해도 된다는 것은 아니다. 단체인 회사와 개인인 엔지니어로서의 나, 서로 윈윈할 수 있는 관계가 가장 이상적이다. 비즈니스와 기술은 상호보완적인 관계로 나아가야 하지 않을까. 너무 한 쪽에 치우치지 않도록 균형을 찾는 것이 어렵다는 것을 새삼 느낄 수 있었던 기간이었다.

그 외의 여러 가지 일들

소프트웨어라는 것이 릴리즈 해놓고 “완성, 이제 끝이다!”하고 깔끔하게 마무리된다면 얼마나 좋을까 싶지만 그렇지 않은 것은 잘 알고 있다. 구현과 별개로 운영, 관리가 필요하다.

당연히도 서비스의 여러 가지 기능들을 추가하고, 수정하는 등의 일은 다반사였다. 너무 많아서 일일이 기억도 나지 않을 정도로 시도 때도 없이 들어오는 그런 요청들을 처리하면서도, 때로는 아쉬운 소리를 들어 모든 것이 다 무의미하게 느껴질 때도 있었다. 하지만 시간이 지나고 생각해보니 그래도 의외로 많은 사람들이 “내가 했던 일들을 긍정적으로 받아들여주고 있었구나” 하는 생각이 들었다. 그러니 첫 마음을 잊지 말자.

*”내가 만든 것들이 나와 함께 일하고 있는 사람들, 그리고 서비스를 사용하고 있는 사용자들에게 도움을 줄 수 있었으면 좋겠다”*

현재 회사(하반기, 7~12월)

낯선 서비스와의 새로운 시작

이전 회사에서 이직을 결심하게 된 이유는 여러 가지가 있다. 어느 회사이건 문제가 없지는 않을거라고 생각했으나, 이전 회사의 상황이 나의 소프트웨어 엔지니어 커리어에 좋은 영향을 줄 수 없다는 확신과 함께, 현재 회사에 이직해서 맡게 될 일들이 흥미로웠기 때문이다. 물론 그 이유 하나만으로 결정한 건 아니지만, 이직하면서 중요하게 생각했던 것 중 하나가 바로 *”내가 앞으로 무엇을 개발하는가”* 였다. 이직하려는 회사(현재 회사)의 레거시 시스템이 여러 가지 문제를 가지고 있고, 그 문제를 해결하기 위해 새로운 서비스로 전환하려고 계획 중이라는 사실이 이직 결정에 꽤 큰 영향을 끼쳤다.

처음으로 만들어보는 마이크로서비스 아키텍처(를 표방한) 애플리케이션

그리고 시작된 모놀리식 아키텍처에서 마이크로서비스 아키텍처(자세한 내용은 이 글에서 적지 않겠지만 마이크로서비스 아키텍처의 모든 부분을 아직은 가져오지 못했다)로의 전환 프로젝트. 그 과정에서 레거시 시스템의 여러 가지 문제점을 해결할 수 있었다면 베스트였겠지만, “먼저 마이크로서비스 아키텍처로 전환하여 각각의 서비스들을 분리한 후, 사이드 이펙트를 최소화한 상태로 문제점을 하나씩 해결하자” 라는 게 내 생각이었고 나와 함께 프로젝트에 참여한 팀원들의 의견도 비슷했다.

그래서 레거시 시스템 중 가장 문제가 되는 부분 먼저 파악하여 여러 서비스로 분리하기로 결정했다. 비즈니스 도메인 식별부터, 최대한 마이크로서비스 아키텍처에 가까운 구조로 설계하고, 개발 환경부터 구성해서 애플리케이션 구현에 들어갔다. 처음 경험하는 프로젝트였지만 여태까지 지식으로만 알던 많은 부분들을 실제로 구현해볼 수 있는 좋은 기회였기에 포기하지 않고 조금씩, 허나 꾸준히 진행했다.

결국 릴리즈를 해냈다

그렇게 바쁘게 지내던 수 개월이 지나고 2018년 12월, 처음부터 만들어 온 새로운 서비스들을 릴리즈했다. 일정 관계 상 애당초의 계획보다는 축소된 스펙이었지만 걱정 반 기대 반인 상황에서 서비스들이 바깥 세상으로 나왔다. 문제가 아예 없었던 것은 아니지만 충분히 해결한 상태로 아직 별 탈 없이 잘 지내고 있다(?).

릴리즈 전에도 QA 테스트를 거치면서 나오는 버그들을 고치면서, 빌드 및 배포 환경을 구성하고, AWS에 프로덕션 서버들도 구성해야 했기에 쭉 바쁜 나날이었지만 서비스들을 릴리즈하고 모니터링하면서 한 시름 놓았달까, 안심이 되면서 그동안 쌓아뒀던 피로들이 밀려오는 것이 느껴졌다. 여태까지 경험했던 개발 중, 가장 규모가 크고 담당한 영역이 많은 개발이었다.

하지만 그게 끝은 아니었다

그렇다. 마이크로서비스 아키텍처 전환 프로젝트의 1차, 그것도 일부분은 나름 성공적으로 릴리즈했으나 회사 입장에서는 여전히 해야할 업무들이 많았고, 그 중 또 하나의 거대한 프로젝트인 글로벌 서비스 프로젝트가 있었다. 그리고 글로벌 서비스 프로젝트의 일부분은 마이크로서비스 아키텍처 전환 프로젝트와도 연관이 있었기 때문에, 비록 내 영역은 아니었지만 약간의 지원을 할 수 밖에 없었다.

그리고 연말까지 남은 시간을 들여 새로 만들어진 서비스들의 무중단 배포를 실현하기 위해 블루 그린 배포 방식을 적용했다. 이것에 대한 자세한 내용은 별도의 글로 정리할 예정이지만, 처음 시도해 보는 것이라 애먹으면서도 첫 블루 그린 배포에 성공했을 때에는 *”이제 배포할 때 서버 하나씩 수동으로 할 필요도, 약간의 다운타임을 걱정할 필요도 없겠구나”* 라는 생각이 들어 나름대로 흐뭇했다.

물론 아직도 해결해야 할 과제들은 산더미 같이 남아있다. 회사의 비즈니스적인 측면에서도, 회사의 같은 소프트웨어 엔지니어 입장에서의 기술적인 측면에서도 말이다. 이렇게 남아있는 과제들을 보면 막막함에 한숨이 나오다가도, *”이 문제를 효과적으로 해결하기 위해서는 어떤 방법들이 필요한걸까”*, *”어떻게 하면 소중한 시간을 효율적으로 사용해서 문제를 해결할 수 있을까”* 를 생각해보게 된다. 물론 그렇다고 내가 정답을 아는 것도, 문제를 전부 해결할 수 있는 능력이 있는 것도 아니니까 쓰잘데기 없는 생각으로 끝나는 것이 많지만, 원래 생각해보고 상상해보는 걸 좋아하지는지라 어쩔 수가 없다.

첨언하자면, 이 회고 글의 초고에는 위의 프로젝트 회고 내용이 무진장 길게 들어가 있어서 그냥 별도의 글로 빼버렸다…

개인

학업과 자격증

뒤늦은 학업을 마무리했다. 회사를 다니면서 제 기간에 졸업할 수 있을까 걱정이 좀 됐었는데 어떻게든 제 기간에 졸업할 수 있게 되었다. 겸사겸사 졸업논문을 대체하기 위해 정보처리기사 자격증도 취득했다. 대단한 건 아니지만 목표로 잡았던 일을 해냈다는 사실이 스스로 뿌듯하기도 했고, 이제 내가 하고 싶은 것에 좀 더 집중할 수 있게 되었다는 사실이 기뻤다.

짧다면 짧고 길다면 긴 기간 동안 컴퓨터과학을 공부하면서 정말 이 분야가 방대함을 깨달았고, 공부할수록 배워야할 것이 더 많다는 사실도 함께 알게 되었다. 그리고 컴퓨터과학의 커리큘럼에 포함되어 있는 기초 이론들의 중요함에 대해서도 느낄 수 있었던, 힘들었지만 보람 있는 기간이었다.

라즈베리파이

라즈베리파이3 B+를 구매했다. 집에서 개인 서버 용도로 가지고 놀기 위해 구매했는데, 아직까지는 FTP 서버, VPN, 개인 위키 정도만 구축했다. 앞으로 조금 더 잘 가지고 놀아야 하는데, 무얼 하고 노는 게 좋을지 고민중이다. 개인적으로 라즈베리파이를 가지고 놀면서 리눅스, 네트워크에 대해 좀 더 알 수 있었으니 엔지니어에게는 꽤나 좋은 장난감 아닐까 싶다. 물론 실용성에는 한계가 있지만…

개발 공부

최근에 책을 다시 읽기 시작했다. 학업이 마무리되기 전에는 읽고 싶어도 못 읽었던 책들이(사두기만 하고…) 쌓여있었고, 빠른 속도는 아니지만 천천히 읽고 있다. 아직 부족한 부분이 많아서 공부해야 할 것은 많고, 시간은 한정되어 있으니 계획을 잘 세워서 하나씩 책도 읽고 정리하는 습관을 길들여야겠다.

2019년은…

2019년은 개인적으로 재정비하는 한 해로 만들고자 한다. 하고 싶은 일들은 여러 가지 많으나 일단 몇 가지를 다짐하고자 여기에 적어둔다.

블로깅

거의 1년 동안 방치해뒀던 블로그를 앞으로는 정기적으로 포스팅하는 습관을 들이려고 한다. 개인적인 기록으로써의 의미도 있고, 유용한 것을 공유하는 의미로도 블로깅은 필요한 듯 하다. 여태까지 사용했던 핑계 아닌 핑계인 개인적인 일들이 마무리 되었으니 게으름 부리지 말고 사소한 것이라도 쓰는 습관을 들이도록 해야겠다.

건강 관리

2018년에 힘겨웠던 일 중 하나를 꼽자면, 만성 소화불량을 꼽을 수 있겠다. 워낙 원래의 식사량이 적지 않은 편이었고 먹는 걸 꽤 좋아했으며 소화에도 딱히 문제가 없었기 때문에 마음가는대로 먹고는 했는데 2018년에 갑자기 만성 소화불량이 생겼다. 이전보다 적게 먹어도 소화가 잘 되지 않아 고생이었고, 밤에 자려고 누웠을 때에도 소화불량 때문에 힘든 적이 많았다.

이제는 먹는 것도 관리하고, 운동도 규칙적으로 하는 생활이 필요한 것 같다. 2019년에는 충분한 휴식과 스트레스 관리, 규칙적인 운동과 식사로 더 이상 건강이 나빠지지 않도록 조절해야겠다.

지식 관리

개인적으로 에버노트를 사용하여 꽤 많은 노트를 작성했고, 드롭박스에 마크다운 포맷의 여러 노트들도 꽤 많이 만들어둔 상태다. 내가 공부하면서 정리했던 내용들이나 어디선가 발견한 지식들이 여기에 기록되어 있는데, 그동안 분류 또는 정리를 제대로 하지 못하고 거의 축적만 해온 상태이기 때문에 2019년 내에 이것을 한 번 제대로 정리하고자 한다.

그 방법은 여러 가지를 생각하고 있는데, 그중 한 가지가 바로 개인 위키이다. 개인 위키를 구축은 했지만 아직 많이 정리해놓지 못했는데, 2019년에는 많은 부분을 개인 위키에 정리해서 개인 위키의 활용도를 높이는 게 목표이다. 최대한 마크다운 포맷의 글을 작성하고 그것을 그대로 위키로 옮기는 방법을 생각하고 있는데 아직 마음에 쏙 드는 위키가 없다는 게 고민이다. 직접 만들라는 말도 들었지만, 배보다 배꼽이 더 큰 작업이지 않나 싶은 마음이 들어서 일단은 기존에 구현되어 있는 위키 중 하나를 선택하고 오픈소스라면 코드에 기여하는 방법을 고려하고 있다.

개발

새로운 것을 공부하는 것도 중요하지만 컴퓨터과학과를 다니면서 배운 기초 이론들을 좀 더 탄탄하게 재정비하는 시간이 필요하다고 생각한다. 일단 학교를 다니면서는 내가 만족할만큼 충분한 시간을 가지고 지식을 숙성(?)시킬만한 환경이 아니었다. 유한한 시간을 가지고 살아가는 인간이니 어쩔 수 없는 숙명이지만, 그래도 앞으로의 배움에도 기초가 될만한 지식들은 좀 더 숙성시켜서 훌륭한 밑거름이 되도록 만들어야 한다는 것이 지금의 내가 가진 생각이다.

그리고 사실 공부 말고도 개인적으로 해보고 싶은 토이 프로젝트도 있고, 배워보고 싶은 프로그래밍 언어도 있다. 또한 혼자 공부하는 것만이 아니라 같이 공부할 스터디 모임이 있는지도 찾아보고 있다.

영어

영어는 진짜 공부해야 할 필요성을 느끼고 있다. 요즘에 많은 레퍼런스들을 뒤지다보면 영어로 되어있는 것들이 정말 많기도 하고, 번역기가 아무리 잘 되어 있어도 부자연스러운 부분이 있고, 회사 비즈니스 상 영어를 사용해야 하는 경우도 있었다. 이렇다보니 영어의 필요성에 대해서 절실하게 느끼고 있다. 허나 학원은 정해진 시간에 가기가 쉽지 않으니 매체를 통한 공부 수단을 사용하려고 한다.

정리하며

2018년은 여러모로 의미있는 한 해였다. 회사에 관련되어서도, 그리고 개인적으로도. 나는 원래 완벽한 사람은 없다고 생각하며, 나 역시 수많은 단점을 안고 있는 사람이라는 것을 잘 알고 있다. 2018년에도 많은 일들을 이뤘지만 적지 않은 실수와 잘못들도 있었다. 하지만 반성하되 후회하지는 말자. 그러한 실수와 잘못 역시 내 일부분임을 잊지 말고, 2018년을 받아들이고 2019년을 나아가자. 2019년도 스스로에게 “성장했구나”라고 격려해줄 수 있는 한 해가 되길 바란다.