티스토리 뷰

회고

2019년 우아한테크코스 회고

wbluke 2019. 12. 27. 23:37

시작의 설렘

프리코스

첫 기억은 간절한 마음으로 한 달이라는 시간을 보냈던 프리코스부터 시작한다. 1차 지원을 합격한 후 3월 말부터 4월 초까지 3주 간의 프리코스에 매진했다. 당시에 국비지원 학원을 다니고 있었는데, 원하던 교육 분위기와 달라 나에게 잘 맞지 않는 수업과 여러모로 힘들었던 팀 프로젝트는 테크코스가 아니면 안될 것 같다는 간절한 마음을 더욱 강하게 만들어주었다.

 

밥을 급히 먹고 나서도 10분 밖에 남지 않는 짧은 점심시간에 청계천을 매일 같이 산책했다. 산책하면서 끊임없이 되뇌었다.
테크코스..테크코스.. 주어진 미션에 나의 최대와 최선을 담아내기 위해 수십 번을 고민했다. 어떻게 하면 채점하시는 분들이 코드를 통해 나를 가감 없이 읽을 수 있을까? 지금 다시 찾아보니 매번 이메일로 제출할 때마다 평균 3500자씩 적었더랬다. 매주 자소서를 한편씩 썼네

 

프리코스의 마지막 미션인 3주차 미션을 제출하면서 같이 썼던 프리코스 후기에 이 때의 감정이 가득 녹아 있다.

우테코 합격!

오프라인 코딩 테스트는 잘 본 것인지 알 수 없었지만 다행히 프리코스의 장문 메일들을 어여삐 봐주셨는지 최종 합격을 했다! 어찌나 기쁘던지. 싱글벙글한 얼굴을 애써 감추며 학원에는 이별 통보를 했다. 그동안 고생 많으셨습니다.

 

안녕히 계세요 여러분!


성장하는 즐거움

TDD와 클린코드

테스트...? 짜는 걸 시도해본 적은 있어요. JUnit? 그건 뭐죠. Test Driven...? 테스트를 먼저 짜라구요. 그게 가능한가?

 

첫 주부터 코스에 대한 기대감과 잘하고 싶다는 욕심이 뒤섞여 묘한 혼란함을 가져다 주었다. 1단계의 여러 가지 게임 미션들은 (물론 프리코스에서 충분히 경험을 했다고는 하지만) 단위 테스트와 TDD라는 새로운 개념의 적용을 요구했다. 심지어 갑자기 페어 프로그래밍이라니. 나는 혼자가 편한데.

 

하지만 주차를 거듭할수록 코드에 대한 시야가 점점 넓어진다는 것을 종종 느끼고는 했다. 테스트를 먼저 작성하는 것에 대한 약간의 귀찮음을 감수하면, 곧이어 나타나는 테스트 코드가 주는 안정감. 그리고 테스트 코드가 보장해주는 과감한 리팩토링. 속도는 조금 느릴 수 있어도 방향이 틀리지는 않는다는 확신을 가질 수 있었다. 가끔은 테스트를 귀찮아하며 짜지 않고 머릿속으로만 테스트를 그리며 넘어갔던 적도 있었는데, 생각지도 못한 곳에서 에러가 나서 고생했던 경험도 많았다. 사실 최근에도

 

현재의 런타임 시점인 내 머리보다 과거의 컴파일 시점인 내가 짠 테스트 코드가 더 신뢰성이 높다는 것을 이젠 내 머리도 알고 있다. 무슨 말이야

 

그리고 정말 색다른 경험인 페어 프로그래밍의 최대 장점은 바로 암묵지 습득이다. 암묵지는 내가 좋아하는 단어 중 하나인데, 페어를 하다보면 상대방의 암묵지를 여과없이 목격할 수 있다. 절대 그 포인트를 놓쳐서는 안된다. 물어봐야 한다. 어! 그 단축키 뭐예요? 어! 그 설정 뭔가요?

 

암묵지가 점점 쌓이면 생산성에 지대한 영향을 준다. 하지만 이런 지식들은 가지고 있는 사람이 쉽게 설명해 줄 수도, 설명할 기회도 잘 없는 그런 종류의 것들이다. 그래서 더더욱 페어 프로그래밍을 하는 순간에 상대방에게 얻어내야 한다. 물론 반대로 내가 알고 있는 것을 알려주는 기쁨도 충만하다. 남에게 얻은 것을 또 다른 남에게 전달하는 순간도 기쁘다. 다만 출처는 센스 있게 꼭 밝혀준다.

런치봇, 야망 가득한 시도

역시나 욕심이 많아서, Step1 때 주어진 미션 진행하기도 바빴는데 토이 프로젝트도 시작했다. 점심추천 슬랙봇이었다. 같이 지원해서 합격한 김덕수 님과 슬랙봇을 개발했다. 잠실이 낯선 크루들(우테코에서는 교육생들을 '크루'라고 부른다)에게는 늘 점심 메뉴로 무엇을 먹을 것인지가 고민이었다. 잠실이 친숙한 나도 잠실에서 밥을 먹은 적은 많이 없어서 메뉴 선택이 힘들었는데 오죽할까.

점심 추천 슬랙봇

 

사용자가 요청을 하면 랜덤으로 주변 맛집을 4개씩 추천해주는 슬랙봇을 만들었다. 예쁜 UI를 중요시 여기는지라 나름 여러가지 장치들도 넣어 꾸며 보았다. 가장 중요했던 것은 피드백 시스템. 사용자가 좋았거나 별로였던 식당에 대해 위 사진에서 보이는 것처럼 따봉 이모지 혹은 un따봉 이모지를 누르면 그 반응을 저장해 다음 번 사용자의 요청에 반영해 주었다. 이모지를 누르는 행위가 사용자들의 참여를 끌어내기에 그렇게 접근성이 좋은 방법은 아니었지만 나름 좋은 시도였다고 생각한다.

 

50명의 크루들에게 작지만 큰 서비스를 해볼 수 있었던 점. 잘 모르는 파이썬으로 영차영차 도전했던 점. 물론 비동기 처리의 벽에 알 수 없는 에러가 터져서 서비스를 끝까지 끌고가지는 못했지만, 주도적으로 서비스 기획부터 자료 수집, 운영과 배포까지 큰 그림을 그려볼 수 있었던 아주 소중한 시간이었다.

JPA, 성공하는 스터디란?

Step 2가 시작하자마자 코스에서 JPA 스터디를 모집했다. 학원을 다닐 때 마음의 알러지가 생길 정도로 싫어했던 부분이 바로 날 것의 DAO를 만드는 부분이었다. 단순한 CRUD를 하는데도 한 쿼리 당 열 몇 줄의 메소드를 작성해야 한다니. 나중에 myBatis를 아주 잠깐 경험해보긴 했지만, JPA라는 기술의 존재를 알고나서부터는 심장이 뛰었다. 저거다.

 

6명의 크루가 모였다. 생각보다 빠르게 6주만에 책 한 권을 쭉 돌았다. 마침 코스에서도 스프링과 JPA 미션을 진행하고 있었기에 동기부여가 더 커서 그런지 속도에 비해 다들 잘 흡수했다.

 

한 달 뒤에 광일공방에서도 한번 더 JPA 스터디를 모집했다. 이번에는 책에 있는 JSP 예제를 전부 스프링부트와 Vue.js + Vuetify 기반의 예제로 자발적인 고문 리팩토링 후에 스터디를 진행했다. 개인적으로 아쉬운 부분도 있었지만 좋은 시도였다고 생각한다.

 

같은 책으로 두 번의 스터디를 기획하고 진행하면서 깨달은 것이 있다. 성공하는 스터디란 무엇일까? 라는 질문이 스터디를 진행하는 세 달 간 마음 속에서 끊이지 않았다. 최종적인 결론은 다음과 같다.

 

성공하는 스터디의 조건
1. 동기부여가 명확해야 한다.
2. 유의미한 산출물이 나와야 한다.

 

동기부여가 간절할수록 스터디가 잘 굴러갈 확률이 크다. 동기부여는 개인적으로 다 다르다. 내가 이 스터디에서 무엇을 얻고자 할 것인지, 끝난 시점에 어떤 모습을 바라는지를 명확하게 설정하지 않으면 어영부영 시간과 돈과 에너지만 소비하는 스터디가 되어버린다. 그리고 어떤 형식이든 약간의 강압이 들어간(?) 산출물이 존재해야 후반부까지 지치지 않고 스터디를 진행할 수 있다. 매 주 공부한 내용을 정리한 리포트를 공유, 혹은 블로그 포스팅을 한다던가. 아니면 애초에 스터디가 어떤 산출물을 만들어가는 방식으로 진행되는 것이 가장 좋을 수도 있을 것 같다. 산출물 자체가 동기부여가 될테니까.

바퀴의 재발명

바퀴를 재발명하지 마라 라는 말이 있다. 하지만 캡틴 자바지기님께서는 학습 목적으로는 얼마든지 바퀴를 다시 발명해보는 것이 도움이 된다고 하셨다. 전적으로 동의했다. Step 3에서는 스프링의 내부 동작 원리를 파악하기 위해 주제별로 쪼개서 프레임워크를 다시 만들어 보았다.

 

물론 당연히 조악하지만, HTTP 요청을 받아서 파싱하고 요구 사항을 처리한 뒤에 response를 내려주는 WAS를 만들어보기도 하고. 레거시 코드에서 좀 더 좋은 코드로 변화시킬 때, 어떻게 컴파일 에러를 단 한순간도 발생시키지 않고 점진적인 리팩토링을 할 수 있는지를 배웠다. 스프링이 DI라는 강력한 개념을 통해 어떻게 Bean들을 주입하고 관리하는지를 알아가기도 했다. 정말 어디가서 쉽게 배울 수 없는 소중한 경험들이었다.

협업의 뿌듯함

인스타그램 카피 / 회의실 예약 슬랙봇

Step 2에서는 3주, Step 4에서는 5주 정도 팀 프로젝트를 진행했다. 협업이야말로 말그대로 혼자 경험할 수 없는 것들이다. 각각 다른 팀원들의 강점이 한데 모여 멋진 결과물을 만들어내는 경험. 갈등을 중재하고 서로 다른 의견을 하나로 모으는 경험. 기간 안에 스케줄을 관리해 Output을 만들어내는 경험. Git Flow, CI/CD도 경험하고. 게다가 실무 비즈니스 코드가 아니니 실패해도 된다! 짧은 기간이었지만 해보고 싶은 기술이나 기능 구현을 마음껏 해볼 수 있다는 점이 매력적이었다.

애자일, 집단 지성의 힘

우아한 형제들의 송파구에서 일 더 잘하는 11가지 방법에는 이런 문구가 있다. 가장 좋아하는 문구다. 잡담을 많이 나누는 것이 경쟁력이다.

 

무엇보다 이 문구에 가장 충실했던 공동체가 바로 테크코스였지않나 싶다. 그동안 겪어왔던 주입식 교육이 아니라 토의와 협업을 통한 주도적인 미션 기반의 학습. 점심을 먹으면서, 커피 한 잔 하면서 나오는 모든 잡담이 자연스레 미션 이야기, 코드 이야기, 그리고 개발자 이야기로 연결된다. 한 명의 지식은 곧 모두의 지식이 된다. 지식의 전염성은 무섭게도, 소문이 무서운 것 만큼 빠르게 퍼진다. 그래서 같이 성장할 수 있다. 50여 명의 개발자가 한 곳에 모여 같은 문화를 만들어가고, 코드를 대하는 장인 정신을 배워나간다.

 

배운 것을 나누고, 나눈 것을 다시 자기 자신에게 되먹인다. 리뷰어님들의 빠르고 자세한 피드백과, 나의 습관이나 결과물을 바로 수정할 수 있는 기회가 주어진다. 기민하게. 애자일한 성장을 피부로 느낄 수 있었다. 이것이야말로 테크코스의 최대 강점이라 자부한다. 이런 경험을 집중적으로 할 수 있는 곳이 얼마나 될까?


지속적인 성장을 기대하며

오늘로서 우아한테크코스 1기가 끝이 났다. 5월 7일부터 12월 27일까지 8개월에 이르는 길면 길고 짧으면 짧은 즐거운 항해였다. 감사하게도, 또 운이 좋게도 면접을 거쳐 우아한형제들에 합격을 했다. 심지어 jojoldu 이동욱님이 계시는 정산팀에도 지원해서 팀 매칭이 되었다.

 

고대하던 회사에서, 기대하던 팀에서 새로운 여정을 시작하려 한다. 기술적으로도, 관계적으로도 또 많은 성장을 이루어내고 싶다. 성장이라는 건물에는 천장이 없기 때문에, 내가 발을 디디고 있는 바닥이 어디인지를 항상 염두에 두는 것이 중요하지 싶다. 코스에서 배우고 다지고 닦은 것들이 내년에 빛을 발하길 간절히 바란다. 과정을 준비하고 이끌어주신 자바지기님과 코치님들께 감사의 인사를 드린다.

 

자만하지 않고, 치열하고, 겸손하게.

 

TAG
댓글
댓글쓰기 폼