1년 동안 나는 무엇을 했는가?
회사에서 내가 맡은 프로젝트의 완료
안정화
정말 치열하게 버그 잡기위해 노력한 결과 내가 맡은 앱 Crash free 100%를 달성 하였다.
완료
하나의 서비스를 완료하는 것은 끝이 없는 버그 픽스와 요구사항 반영의 작업인것 같다. 서비스 품질을 높히기 위해 그리고 나만의 생각에서 갖히지 않기위해 실무자 분들을 직접만나서 현재 만들어진 앱에서 어떤것이 불편한지, 어떤 기능이 추가 되었으면 하는지 물어보고 의견을 수렴하여 앱에 반영하는 작업을 주기적으로 진행하였다. 1년동안 열심히 작업한 프로젝트는 현재 2개월째 버그도 없고, 요구사항도 없어서 모두가 행복하게 사용하는 것으로 잠정 완료되었다.
경험 해본것
회사 파트너사들을 위한 앱이다보니 규모가 작아서인지 안드로이드 앱과 API 개발을 혼자서 맡아서 진행하게 되었다. 앱에 필요한 API가 있으면 직접 구현하고, 앱도 만들고 두 가지를 동시에 진행했는데, 처음에는 다른 개발환경과 언어의 스위칭 문제, 서버를 해본 경험이 없어서 상당히 괴로웠다. 하지만 내가 만든 서비스를 누군가가 써준다는것이 생각만해도 스스로 뿌듯할 것 같고, 즐거워서 시간 가는 줄 모르고 개발한 것 같다. 사내 API 서버 언어가 Php라서 처음에는 어색하고 적응되지 않았지만 지금은 Php로 API를 작성하는것에 대한 부담감이 제로에 수렴해버렸다. API 속도가 느리면 쿼리 튜닝도 해보고, 설계도 다시 해보며 앱에 특성에 맞게 API를 대부분 리펙토링하고, 특정 라우팅으로 통합작업도 하였다. 이 과정에서 삽질도 많이하고 특히 쿼리를 많이 짜봤던 것 같다. 프로젝트를 하기전에는 기본적인 CRUD 쿼리도 잘 다룰줄 몰랐는데 적어도 SQL을 작성하는데 거부감 없이 많이 친숙해진 것 같다. 그리고 클라이언트 개발자가 언제 그렇게 쿼리를 많이 짜볼까라는 생각이 들어서 절로 신이 났다. 새로운 것을 배운다는것은 늘 즐거운 일인 것 같다.
자기 개발서 10권 이상 읽기
- 미친실행력
- 나는 4시간만 일한다
- 좋아하는것을 돈으로 바꾸는법
- 소프트스킬
- 오리지널스
- 파괴적 혁신
- 1만시간의 재발견
- 프로그래머 열정을 말하다
- 성공하는 프로그래밍 공부법
- 혼자하는 공부의 정석
보통 자기 개발서 책을 읽고나면 당장 뭐든지 다 잘 할 수 있고 꾸준히 노력해서 책의 저자와 같이 될 수 있을거라 생각한다. 그리고 당장 이 깨닳음을 실천 하기위해 무엇인가를 계획하고 실행에 옮기게 된다. 하지만 3일이 지나면? "그래 나는 원래 이런 사람이야”, "귀찮아서 못하겠어”, “오늘 말고 내일하자”라는 마음이 스멀스멀 올라와서 다시 예전으로 되돌아 가버린다. 나도 그 범주에 속하는 사람이라고 생각한다. 작심 열흘정도쯤 되는것 같은데. 그런 나자신을 알기에 책을 아예 꾸준히 읽어버리기로 마음먹었다. 그럼 작심 열흘이 신기하게도 계속 유지(?)된다. 무슨 말이냐면, 내가 계획한 것을 꾸준히 실행하다가 지칠때쯤 또다른 자극제를 투여하는 방식인데, 이게 꾸준히 반복 되다보면 작심 열흘이 한달이 되고 세달이 되어도 꾸준히 목표한 바를 향게 노력하고있는 나를 발견하게 된다. 그래서 지금은 책읽는 것이 습관이 되었다. 매일 출퇴근때 지하철에서 보내는 시간이 꽤 되는데 그 시간에 되도록 폰을 조금만 보고, 바로 책을 펴고 집중하는게 일상에 습관이 되었다. 이것도 꾸준히 할 수 있는 방법을 찾아보다가 매일 내가 했다는걸 체크하기 하기 위해서 To do 앱을 적극 활용하고 있는데, 어느덧 3개월째 꾸준히 To do 기록을 진행중에 있다. 현재 진행형일때는 내가 뭘 했는지 잘 모르지만 뒤돌아 보면 꽤 많은 것들을 이루져있는 신비한? 경험을 할 수 있다. 책을 읽는다는 것은 예전 같으면 나에게 피곤해서 하지못하는 일이었거나, 지루한 활동이었지만, 현재는 인생을 살아가는데 있어서 내가 조금더 목표한 바를 꾸준히 할 수 있도록 자극제가 되어주는 존재 또는, 다방면으로 삽질할 시간을 줄여줌으로써 내 삶을 즐겁게 해주는 존재가 되었다.
매일 하는 To do list
(위젯으로 폰 메인에 보이는데 체크를 하지 못하면 상당히 마음이 불편하다, 심지어 내가 지정한 시각에 빨리 미션완료 하라고 보채기까지 한다.)
TDD, Refactoring, Clean Code 교육 신청
생각의 전환
5주간의 교육이 끝났다. 어렸을적 극기훈련 수련장에 갔다가 집으로 돌아온 기분이 들었다. 교육을 들으며 했던 훈련은 익숙한 방식의 코딩이 아닌 "else문을 쓰지마라", "클래스의 인스턴스는 가급적 2개 미만으로 해라", "메소드는 하나의 기능만 해라", "인덴트의 뎁스는 1뎁스만 허용한다”등등 기존에 하던 코딩과는 전혀 다른 규칙들을 지켜야 했다. 코딩을 할 때마다 “내가 늘 해오던 방식대로 구현을 하면 정말 간단하게 짤 수 있을 것 같은데…”라는 생각이 매번 머리에 멤돌았는데, 이를 떨쳐내고 교수님이 제시한 규칙들을 준수하며 미션을 완수 하려니 결코 쉽지 않았다. 어떤 미션은 설계에 대한 고민만 하다가 일주일이 흘러버리기도 했고, 설계 자체를 잘못해서 프로젝트 전체 코드를 3번이나 갈아엎는 상황도 있었다. 이런 삽질 과정 속에서 들었던 생각중 하나라면 "조금만 더하면 해결할 수 있을 것 같은데!”하는 기분좋은 스트레스(?)를 겪는 상황이 늘 반복 된다는 것이었다.
정말 고심한 끝에 미션을 완료후 PR을 생성하고 코드리뷰를 신청하면 어느 부분의 설계가 잘못되었는지, 어느 부분을 고쳐야 성능 개선이 되는지 핵심 적인 부분에 대해 고기잡는 법을 알려주셨고, 피드백을 통한 인사이트가 많이 생기게 되었다.
이전에는 클래스를 어떻게 나누면 좋을지, 메소드는 어떻게 분리하는게 좋은것인지, 막막하기도 하고 나만의 방식으로 해왔었는데 늘 시간이 지나면 내가 작성한 코드들은 보기싫은 코드가 되어있었다. 하지만 이번에 배운 방식대로 테스트 코드를 작성하고, 매번 중간중간 점진적인 리팩토링 경험을 하며, 코드의 역할에 맞게끔 잘 분리하는 기술을 배워보니 나도 앞으로 깔끔한 코드를 작성할 수 있겠다라는 자신감이 생기게 되었다. 교육을 끝난 시점에서 생각해보면, 그동안 내가 해왔던 학습은 새로운 기술이나 라이브러리 사용하는 방법에만 치중해왔거나, 우선 빠르게 문제 해결을 하는것에만 집중하고 개발이 끝나버리는 과정의 반복이었다. 이는 제대로된 학습이 아님을 이제서야 알 게 되었다. 정작 가장 중요한것은 좋은 설계와 서비스의 안정성을 위한 테스트, 그리고 누구나 알아먹을 수있는 깔끔한 클린코드임을 왜 그동안 알지 못했을까. 나 자신을 다시한번 되돌아 보게 되는 시간이었다. 수업이 끝나고 홀가분한 마음도 들고 얼른 회사에서 이때까지 배운 내용을 한번 다 써먹어보고 싶다는 욕심이 생긴다. TDD, Refactoring, Clean Code 앞으로 코드를 작성하며 필수 조건으로 생각하고 꾸준히 연습해봐야겠다.
회사에서 교육내용 발표
회사에서 교육 지원을 해주셔서 감사한 마음으로 교육 내용을 정리해서 발표하는 시간을 가졌다.
교육 들었던 전반적인 내용이나, 생각들을 정리하여 발표 하였고, 끝에는 간단한 문자열 덧셈 계산기를 지금 하고 있는 코딩 규칙들( "else문을 쓰지마라", "클래스의 인스턴스는 가급적 2개 미만으로 해라", "메소드는 하나의 기능만 해라", "인덴트의 뎁스는 1뎁스만 허용한다”, 등등)에 맞춰서 실습해보는 시간들을 가졌다. (실습도중 많은 분들이 원한 가득한 눈빛을 나에게 보내더라. ㅋㅋ)
많은 분들이 발표 이후 좋은 피드백을 주셨고, 실제 다른분 코드리뷰에서 for문 안에 인덴트 뎁스를 줄이기 위해 메서드로 분리하시는것을 목격해서 뿌듯함을 느낄 수 있었다.
토이 프로젝트
내가 생각하는 "프로그래밍은 왜 즐거운가?"에 대한 이유는 아래와 같다.
1. 배움에 끝이 없다.
(끝이 있는 게임은 끝에 다다르면 할게 없어지거나, 재미가 없어져버린다. 하지만 프로그래밍은 끝이 없다.)
2. 내가 한만큼 성과가 나온다. (내가 열심히 하면 할 수록 끝이 없는 성과가 있다.)
4. 내가 만들고 싶은것을 마음껏 만들 수 있다.
5. 즉각적인 피드백을 받을 수 있다.
위에 나열한 이유로 나는 프로그래밍이 즐겁다. 프로그래밍 자체가 나에게는 취미이자, 놀이이고, 고민의 대상 또는 학습의 대상, 그리고 직업이다. 그래서 회사에서 일이 끝나면, 주말이되면 내가 살면서 불편하다고 느꼈거나, 필요하다고 생각되는 토이 프로젝트를 만들어 보는것을 즐기게 되었다.
1년동안 앱 20개 개발 및 배포
정확히는 12/30일날 앱하나를 추가로 배포하여 21개가 되었다. 쓸때없는 앱도 많이 있고, 그냥 심심해서 만들어본것도 있으며, 단 10분만에 개발과 배포를 끝내버린 앱, 8개월동안 열심히 만든 앱, 내가 정말 필요해서 만든 앱, 그리고 내가 가진 취미생활을 조금 더 윤택하게 하기위한 앱 등 많은 주제로 앱을 만들었다.
21개의 앱을 배포해보니 아래와 같은 성과가 있었다.
- 1만명 다운로드 앱 3개
- 5000명 다운로드 3개
- 1000명 다운로드 다수
- 100명 미만 다운로드 다수 등
개발자로써의 경험치 축적은 간단하게 나열만하면 아래와 같다.
- Kotlin + Spring Boot를 활용하여 API를 구축.
- AWS를 활용한 인프라 구축. EC2, S3, RDS, CodeDeploy
- Android MVVM 구조로 앱 구현.
- Android Koin Injection 사용.
- 모든 앱은 100% Kotlin으로 구현.
- Firebase 왠만한 제품은 대부분 사용해본 경험.
- Firebase 크래시 및 레포트 분석
- 다량의 앱 관리 및 배포.
토이 프로젝트를 하면서 느낀점
(장점)
- 하나의 서비스 전체를 한바퀴 돌려볼 수 있는 경험. 큰 숲을 그릴 수 있게 됨.
- 경험해보지 못한 새로운 기술들을 사용해 볼 수 있음. 무엇이 좋고 나쁜지 스스로 판단할 수 있는 기회.
- 피드백을 통한 꾸준한 코딩 지속가능. (이거 고쳐주세요, 잘 사용하고 있어요!, 이게 안되네요, etc)
- 보상(수입)이 생김.
- 처음부터 끝까지 다 내가 만들기 때문에 설계에 대한 고민을 많이 할 수 있음.
- 회사에서 앞으로 해야 될 공부나 내용들을 미리 학습하여 공부하고 적용해 볼 수 있다. (토이 프로젝트때 미리 경험해본 내용이 회사에서 필요로 하게 됬을때, 이미 한번 경험해본 내용이기 때문에 빠르고 안정적으로 회사 일을 마무리 할 수 있었다.)
(단점)
- 하다보면 나도모르게 기능 구현 완료에만 초점이 맞춰지게 됨.
- 새로운 기술 사용에만 집착하게 됨.
- 정말 어려운 난관에 봉착하면 회피하게 됨.
- 나는 유용하다고 생각하고 만들었는데, 나쁜 피드백 + 사용자가 없다면 돌아오는 허탈감.
- 실력을 깊이있게 키울 수 있다라는 내용은 글쎄...
(결론)
- 확실히 아무것도 안하는것 보다는 훠얼씬 낫다!
(기타)
무조건 좋은 서비스 == 좋은 품질 이라고만 생각했는데 직접 경험해본 바로는 저 공식이 100%는 아닌것을 알 수 있었다. 8개월동안 열심히 만들어서 좋은 품질을 가진 앱은 서버 비용도 안나오는 수익을 내고 있고 사용량도 저조한 반면, 별 생각 없이 10분만에 만들고 배포한 앱은 대박이 났다. 결국 좋은 서비스란 고객이 원하거나 필요로 하는 서비스라는 걸로 결론 짓게되었다. 개발과는 상관없을수도 있지만, 토이 프로젝트를 통해서 알게된 값진 경험중 하나가 아닐까하는 생각이 든다.
커리어 변경
올해 12월 팀 이동을했다. 기존에는 Php API 개발 + Php 약간의 백오피스 개발 지원 + 안드로이드 앱개발 크게 3가지의 업무를 맡아서 진행하였는데. 이제는 팀이동을 함으로써 (Kotlin + Spring Boot) 서버 개발만 맡게될 것 같다. 맡은 서비스도 달라지게 되었다. 기존에는 내부 직원용 프로젝트를 맡아서 진행하였다면, 앞으로는 고객용 앱의 서버 작업을 진행하게 될 것이다. 기존에는 트래픽이 대한 부담도 크게 없었고, 개발하다가 실수 하더라도 큰 타격이 없었지만 이제는 내가 실수 하게 되면 실제 회사 수익과도 연관이 있을 수 있어서 조금 더 탄탄하게 테스트 코드를 작성하고, 서버 관련 공부를 많이 해야할 것이다. 글을 작성하다보니 어렴풋이 부정해온 사실이 생각났는데, 나의 포지션은 서버 개발자도 아니고 앱 클라이언트 개발자도 아닌 중간 어디쯤에 걸쳐있었는데, 어려운 일이 생기면 늘 회피할 좋은 핑계거리가 된 것 같다. 서버적으로 어려운 상황이 닥치면 "난 클라이언트 개발자라서 잘 몰라요." 라고 한발 물러서거나, 반대로 클라이언트에 문제가 생기면 "내가 구현한 부분은 서버쪽만 해서 그 부분은 잘 모르겠다"라고 직접적으로는 아니지만 마음속으로 그런 빠져나갈 구멍을 항상 만들어 두었던 것 같다. 하지만 이제는 "나는 서버 개발자가 아니라서 몰라요"라는 마음을 가지지 못할테고, "나 아니면 아무도 해결하지 못한다", 와 같은 마음 가짐으로 임해야겠다는 생각이 든다. 지금은 당장은 서버 개발을 본격적으로 하는 것이 처음이라 두려움, 떨림, 조급함 여러가지의 감정이 들지만, 앞으로 열심히 해서 팀원중 캐리할 수 있는 개발자가 되도록 열심히 할 생각이다.
반성
올해는 체력관리에 실패한것 같다.
회사 다니는 1년 6개월 가량 동안 10kg이 졌다.
작년에도 살이쪄서 운동을 해야겠다라는 다짐을 했지만 올해도 지키지 못했다. 물론 헬스장도 등록하고 꾸준히는 아니지만 종종(?) 헬스를 다녔는데 근육은 많이 증가했는데 지방이 하나도 빠지지 않아서 근육돼지가 되었다. 몸무게는 작년과 비교하면 무려 7키로가 쪘다. 입사할때와 비교하면 거의 10kg가 증가가 되었다. 몸에 살이 찌니 자신감도 떨어지는것 같고, 체력이 감소하니 오랫동안 코딩하기가 쉽지 않은것 같은 기분이 든다. 코딩하기 바빠서 시간없다는 핑계로 운동을 게을리 했는데, 역설적이게도 운동을 하지 않아서 코딩할 수 있는 시간이 줄어든다는게 이상하지 않은가? 매달 인생 몸무게를 꾸준히 갱신중이라서 내년에는 10Kg 감량에 성공하는게 목표이다.
수면 시간을 늘리자.
코딩을 조금이라도 더 하기위해 잠자는 시간을 줄였다. 하루 평균 4시간 정도 잤는데, 원하는 결과물은 나왔지만 몸이 망가지는게 점점 보이기 시작했다. 대상포진이 주기적으로 생기고, 입안에는 구내염, 피부도 푸석푸석해지고, 회사에서 업무에 집중도도 떨어지는것 같았다. 내년에는 회사와 인접한 곳으로 이사가서 출퇴근 시간을 단축시키고, 조금이라도 잠을 더 잘 수 있도록 해야겠다. 그리고 지금보다는 조금더 일찍 자는 습관을 들여야겠다.
롤모델
꿈을 가지고 살아간다는 것은 정말 행복한 일이다. 아무리 힘들고 지쳐도 앞으로 나아갈 수 있고, 집요하게 노력하게 되는데 신기하게도 전혀 힘들지 않고, 즐겁기까지하다. 나는 26살까지 꿈이 없었다. 당시만 해도 인생의 모토는 "뭘 하던 중간만하자"라는 꿈도 희망도 없는 소박한 모토를 가지고 있었는데, 두 분을 만나고 나서 내 인생이 바뀌게 되었다.
첫 번째 나의 롤모델은 내가 열심히 하면 스타급 개발자가 될 수 있다라는 것을 몸소 보여주고 계신 동욱이 형이다. 2015년 쯤 어딘가 처음 스터디에서 인연이 되어 알게 되었는데, 정말 열심히하고 최고의 개발자가 되겠다라는 꿈을 가지고 그걸 향해 열심히 달리시는 분이다. 스터디 참석에 중간에 텀이 있었지만, 아직도 매주 토요일 같이 스터디를 하고 있는데 옆에서 같이 노트북 타자만 치고 있어도 "형보다 내가 더 열심히 해야지", "지금의 나는 너무 부족해 앞으로 더 노력해야해!"라는 생각이 불끈불끈 솟아난다.(매주 봐와서 잘 몰랐지만 형은 이제 알만한 사람들은 다 아는 스타 개발자가 되었다.) 또 다른 한분은 개발자도 돈으로 부터 해방할 수 있음을 일 깨워주신 케빈님이다. 종종 같이 술한잔 기울이면서 이런 저런 이야기도 하고 많은 것들을 배우는데, 5년동안 4시간 이상 자본적이 없는, 그리고 현재는 앱을 700개 이상 만드신 분이다. 아마 작년 발표 때 보다 현재는 수익이 30배는 증가하셔서 내 마음속에는 부자개발자의 끝판왕(?)을 쭈욱 유지 중이시다. 이런 감사한 분들이 주변에 두분이나 있으니 어떻게 내가 나태해 질 수 있으며, 쉴 수 있겠는가? 늘 시간이 부족한게 아쉽고, 하루하루를 어떻게하면 더 알차게 보낼 수 있을까 고민하며 지낸 2018년 이었던 것 같다. 내년 새해에도 지금만 같이(체력관리 제외) 꾸준히 하면 나도 언젠가 개발자로써 지금도 행복하지만 더 행복한 삶을 누릴 수 있는날이 오지 않을까?! 지금도 하루하루 가슴 뛰는 삶을 살고 있지만 내년에는 더욱더 뜻깊은 한해를 만들것이다.
끝으로 마무리하며, 수고했다 나의 2018년.