우아한테크코스 레벨 3이 끝이 났다. 포비는 레벨 3이 코스 중 가장 어려운 미션들이라고 말했다. 바로 '바퀴를 재발명'하는 미션이었다. 이미 오래전에 만들어져 계속해서 발전해온 프레임워크, 라이브러리를 직접 만들어보는 것이다. 포비가 말한대로 정말 쉽지 않았다. 미션 하나마다 2주 가량 시간을 주었고, 기본 미션 이외에도 advanced 미션이 있었지만 해보지 못했다. 미션뿐 아니라 중간에 면접 일정이 있어서 더욱 시간이 없었다. 하지만 면접을 준비하면서 개발자로 어떻게 살아가야할지 조금 깊게 생각해볼 수 있는 시간이었다. 레벨 3을 되돌아보면 많은 일들이 있었고, 이전보다 발전할 수 있는 시간이었다.

레벨 3 시작 전에 세웠던 계획들...

글쓰기

레벨 2가 끝났을 때, 우아한테크코스 레벨 1, 2 회고를 작성하면서 블로그를 시작했다. 나 자신을 좀 더 잘 표현하기 위해 글쓰기를 시작하자고 계획했다. 매주 나 자신을 되돌아보는 회고와 개발 공부를 하면서 정리하고 싶은 것들을 블로그에 포스팅했다. 레벨 3동안 매주 회고를 한 번도 빠짐없이 수행한 것에 대해 나 자신을 조금 칭찬해주고 싶다. 회고 방식은 자주 변경하면서 이어나갔는데, 조금씩 나에게 맞는 방식을 찾는 과정이라고 생각한다. 매주 회고 외에도 로컬 공간에 일기를 적고 있다. 하루를 시작하면서 할 일을 계획에 적고 하루가 끝났을 때 그 날 있었던 일들을 회고하는 방식으로 진행하고 있다. 확실히 나만 볼 수 있는 개인 공간에 적다보니 좀 더 솔직히 나 자신을 표현할 수 있었다. 회고는 꾸준히 이어나갔으면 좋겠다.

공부한 것을 정리하는 방법도 조금씩 바꿔나갔다. 초반에는 단순히 책을 정리하거나 개념을 정리하는 것도 블로그에 포스팅했지만 생각을 바꿨다. 블로그는 여러 곳에 흩어진 것을 정리하거나 세미나 정리, 삽질 경험 등 조금 깊게 쓸 수 있는 주제를 위주로 적기로 했다. 나머지 단순 책 정리나 개념 정리는 GITHUB에 위키로 정리하고 있다. 그리고 스터디 또한 GITHUB에 따로 레포지토리를 파서 진행하고 있기 때문에 일관성이 있게 글 주제가 정리되는 느낌이다.

해야 할 회고와 정리한 것이 계속해서 쌓여나가는게 심적으로 불안하다. 계획했을 때 바로바로 처리할 수 있으면 좋겠다. 계속해서 미루다보면 포기하는 경우가 생긴다. 아직도 정리하지 못한 것들이 많은데 빠르게 해나아갔으면 한다. 회고도 적어야할 시기에 적지 못하고 시간이 지나면 회고할 내용을 잊어버릴 수도 있다. 특히 매일하는 회고를 그 다음날 하는 경우가 많은데 정말 고쳤으면 좋겠다. 매주 회고도 한 번씩 큰 이벤트가 있으면 미루는 경향이 있다. 항상 계획한 것을 바로바로 하는 습관을 만들었으면 좋겠다.

건강

레벨 3에는 건강에 더욱 신경을 쓰고 있다. 레벨 1때는 아무것도 신경쓰지 않아 눈이 뻑뻑하고 아팠던 적이 자주 있었다. 레벨 2때부터 영양제를 챙겨먹기 시작했다. 레벨 3때는 헬스를 등록하여 운동을 하고, 영양제의 종류도 늘렸다. 헬스는 정말 오랜만에 하는 거라 기초 운동을 다시 하고 있다. 이전에 할 때는 몸을 키우는 것이 목적이었는데, 이제는 체력을 기르기 위해 유산소하는 시간을 늘렸다. 그리고 중량을 드는 것은 운동을 반년 가량 쉬다보니 무리하고 싶지 않았다. 그래서 덤벨이나 바벨을 들기보다는 푸쉬업, 턱걸이, 맨몸 스쿼트를 하면서 몸을 풀어주고 있다. 유산소는 런닝머신을 뛰는데, 달리기를 원체 싫어하다보니 뛰는 시간을 늘리는게 정말 힘들다. 물론 너무 오랜만에 뛰다 보니 힘들어서 못하는 경우가 대부분이긴 한데, 계속 하다보면 지루해지는 경우도 많았다. 운동하는 시간은 일주일에 3일 이상으로 정했다. 근데 이것 마저도 미션하랴 다른 것 하랴 못한 경우도 많았다. 최대한 헬스장가는 것이 귀찮지 않게 집 바로 앞에 등록했는데도 단순히 가기 싫어서 가지 않은 적도 있었다. 그래서 최근에는 몇몇 크루들과 헬스 인증방을 만들었다. 자신이 헬스장 간 것을 증명할 수 있는 사진을 찍어서 슬랙 채널에 올리는 것이다. 일주일에 3일 이상 인증해야하고 안할 시 커피를 사기로 했다. 확실히 효과는 있었다. 다른 크루가 헬스장 간 것에 동기부여가 되었고, 커피사기가 싫어서 억지로라도 헬스장에 갈 수 있었다. 레벨 4 때도 꾸준히 운동을 하자.

영양제는 레벨 3 이전까지는 루테인 + 오메가, 비타민 B를 먹었다. 루테인을 먹으니 레벨 1처럼 눈이 아팠던 적은 거의 없었던 것 같다. 물론 다른 여러가지 이유가 있었을 수도 있다. 안경은 블루라이트 차단 렌즈로 바꿨고, 노트북도 맥북으로 바꿨다. 하지만 영양제의 효과도 있었다고 생각되어 요즘에는 반드시 먹어야하는 필수 영양제들을 찾아보고 챙겨먹고 있다. 크루들에게도 추천받고, 유튜브를 통해 찾아보면서 몇 가지를 추가로 구입했다. 가장 중요한 눈에 좋은 영양제는 루테인보다 빌베리가 좋다고 하여 이로 바꿨다. 그 외에도 피로회복에 좋다는 마그네슘, 유산균, 비타민 B, 오메가를 먹고 있고, 피곤할 때마다 비타민 C 가루를 물에 타서 먹고 있다. 건강은 미리 미리 챙기는 것이 좋다고 생각한다. 그리고 개발자는 오랫동안 앉아 있어야 하는 직업이다 보니 더 많이 신경을 써야 할 것 같다.

요즘에는 오른쪽 손목의 통증이 좀 심해진 것 같다. 그래서 좀 더 운동을 꾸준히 하고 손목에 좋은 스트레칭을 하고 있다. 오른쪽 손목은 예전에도 안좋다고 느껴졌었는데, 요즘에는 통증이 좀 더 심해진 것 같았다. 병원에 가보는 것도 좋을 듯 하다.

개발자

레벨 3을 진행하면서 면접 일정이 있었다. 그래서 내가 왜 개발자가 되고 싶은지에 대해 처음으로 깊게 생각해보았다. 내가 왜 개발자가 되려고 하는지, 개발할 때 즐거움이 무엇인지, 어떤 개발자가 되고 싶은지 등에 대해 고민해보았다.

왜 개발자가 되고 싶은가...

나는 왜 개발자를 택했을까? 시작은 컴퓨터공학과를 전공했다. 이를 전공하지 않았다면 개발자에 대해 생각조차 해보지 못했을 것이다. 그런데 내 동기들을 보면 개발자보다는 공기업에 간 친구들이 더 많다. 공기업은 개발하려고 가지는 않는다. 그러면 왜 개발자가 되려고 할까? 물론 학교때도 공기업은 가고 싶지 않았지만 단순히 대기업 소프트웨어 개발직군에 가고 싶었다. 개발자에 대한 깊은 생각은 없었다. 하지만 내가 택한 전공이고, 과제나 프로젝트로 프로그래밍을 하면서 몰입을 경험한 것이 커서 개발자가 되려한 것 같다. 그 과정에서 힘든 점도 많았지만 재밌었다는 생각도 크게 차지하고 있다. 감명 깊게 본 연설 영상에서 살아가는데 필요한 것은 4가지가 있다고 한다. 해야 할 일, 사랑하는 사람, 믿을 수 있는 존재, 희망을 품을 일을 말한다. 여기서 나에게 개발은 끊임없이 해야 할 일을 주고, 이를 통해 희망을 품을 수 있기 때문이 아닐까 생각한다.

어떤 개발자가 되고 싶은가...

나는 '함께 일하고 싶은 개발자'가 되고 싶다. 함께 일하고 싶다는 것은 대화가 잘 통해야 한다고 생각한다. 여기에는 배려와 유연한 사고가 필요하다. 항상 말할 때 남을 배려하고 내가 틀렸다는 것을 인정할 수 있어야 한다. 우아한형제들 사내 투어를 하면서 이러한 문구를 보았다. '나보다 경험이 적은 사람에게 배울 수 있어야 하고, 나보다 경력이 많은 사람을 설득할 수 있어야 한다.' 대화를 할 때 경력과 상관없이 자신의 할 말을 할 수 있고, 이를 주의 깊게 들어준다면 같이 일하고 싶은 동료가 아닐까 생각한다. 물론 여기에는 개발 실력이 밑바탕이 되어야 한다. 말만으로 할 수 있는 것에는 한계가 있다고 생각한다. 내 실력이 이를 증명할 수 있어야 하므로 항상 발전하기 위해 노력해야 한다. 배울점이 있는 동료도 함께 일하고 싶은 동료일 것이다. 나도 언젠가는 이 분야만큼은 깊게 공부해서 잘한다는 생각을 갖고 싶다. 해당 분야에 문제가 생긴다면 동료들이 나를 찾아올 수 있는 그런 개발자가 되고 싶다.

아직 개발자를 지망하는 학생으로서 어떤 개발자가 되어야지 확신을 갖고 있지는 못하다. 계속해서 배우는 입장이고 어떤 개발자가 되어야하는지도 세세하게 기준이 변한다. 지금은 내가 생각하는 좋은 개발자와 맞는 롤모델을 정해서 따라가려는 연습을 하고 있다. 나도 언젠가 누군가의 롤모델인 개발자가 되고 싶기도 하다. 레벨 2때 개발자에 대해 고민하기 시작했다고 했었다. 레벨 3이 된 지금 조금은 개발자에 대한 기준이 생겼다고 생각한다. 레벨 4때는 좀 더 깊은 고민을 할 수 있었으면 좋겠다.

미션

미션을 통해 배운 것

  • 웹 서버와 WAS와의 차이
  • 웹 요청/응답 과정
  • HTTP
  • 스프링 MVC 구조
  • 점진적인 리펙토링
  • SQL
  • 스프링 빈 생성 과정
  • ...

바퀴를 재발명하자...

바퀴를 재발명하는 것은 정말 쉽지 않았다. 프레임워크나 라이브러리를 구현하기 위해 사전지식이 많이 필요했다. HTTP 스펙, MVC 구조, 스프링 빈 생성 과정 등등 알아야 할게 많았고, 이를 구현하는 방식에도 문제가 많았다. 프레임워크 특성상 최대한 많은 기능을 제공해주어야 하는데 이를 객체지향적으로 구현하기는 매우 어려웠다. 처음에는 내 생각대로 구현하려고 했지만 시간이 너무 오래걸리고 비효율적이었다. 그래서 이미 만들어진 프레임워크를 더 깊게 공부하자는 생각으로 내부를 뜯어보면서 따라 구현해나갔다.

레벨 3 미션을 하면서 가장 재밌었던 것은 두 가지였다. 하나는 JDBC 라이브러리를 구현하면서 점진적인 리팩토링을 했던 것이다. 점진적인 리팩토링은 기본적으로 기존 코드의 테스트 코드가 깨지지 않는 선에서 리팩토링을 하는 것이다. 요구사항을 처음 봤을 때 TDD를 처음 봤을 때 마냥 멘붕했다. 어떻게 리팩토링 중간에 테스트코드가 깨지지 않을 수 있을까...그래서 힌트를 보면서 따라 구현해보았다. 점진적인 리팩토링에서 가장 중요한 점은 기존 코드를 고칠 때 메서드를 복사해서 두 개로 만들지, 클래스 전체를 복사해서 두 개로 만들지를 선택해야 한다는 것이다. 이 기준이 세워져야 능숙하게 점진적인 리팩토링이 가능하다고 한다. 한 번의 연습으로는 절대 부족하다고 느꼈고, 여러 번 이 연습을 해야겠다고 생각한다.

두 번째는 DI 프레임워크 미션이었다. 마지막 미션이었고, 마지막 페어 프로그래밍이었으므로 페어와 끝까지 미션을 수행했다. 레벨 3 페어 프로그래밍을 하면서 중간중간 큰 이벤트가 있어서 소홀했었는데, 마지막만큼은 제대로 해보자고 의견을 모았다. 마지막 미션에도 면접이라는 큰 이벤트가 있었지만 최대한 페어와 시간을 맞춰 미션을 진행했다. 그리고 DI 프레임워크를 구현하는 것도 재미있었다. 런타임 상황에서 어떤 빈이 생성될지 알 수 없어 재귀함수를 사용했는데, 오랜만에 재귀 함수를 써서 그런지 머리가 아팠다. 그래도 페어와 계속 토론하면서 하나하나 구현해나가는 것에 오랜만에 재미를 느꼈다. 솔직히 면접 준비하느라 코딩이 아닌 다른 것에 너무 몰두하느라 코딩하는게 더 즐거웠던 점도 있었다...

레벨 3 미션을 하면서 전반적으로 힘들었던 부분은 객체지향적으로 구현하는 것과 테스트 코드를 작성하는 것이었다. 프레임워크는 사용자의 편의를 위해 최대한 여러 상황을 고려해야한다. 그러다보니 if-else가 늘어나게 되는데, 이를 추상화하는 것이 힘들었다. 그리고 이에 대한 테스트 코드를 작성하는 것이 힘들었다. 의존 관계가 많았고, 테스트하기 어려운 코드와 쉬운 코드를 구분하는게 쉽지 않았다. 여러모로 어려운 점이 많았던 미션들이었다. 아직 실력이 많이 부족하다는 것을 알게되었다.

레벨 4 목표

  • 회고 꾸준히 하기
  • 레벨 1 미션 복습 스터디
  • 성공과 실패를 결정하는 1%의 네트워크 원리 책 스터디(OVER-10)
  • 우아한테크코스에서 배웠던 것, 스터디 책(java 8 in action, 토비의 스프링) 다시 정리해서 GITHUB에 올리기
  • 운영체제 복습
  • 객체지향 및 TDD 정리
    • 조영호님 세미나 정리
    • 개발자가 알아야할 객체지향과 디자인패턴, 객체지향의 사실과 오해 책 정리
  • SQL 첫걸음 책 정리
  • 책 많이 읽기!