우아한 형제들에서 운영하는 개발자 교육 프로그램인 우아한테크코스 7기에 웹 백엔드로 합격했다.
지원하기부터 1차, 최종 합격까지의 과정을 정리해보고자 한다.
우아한테크코스를 지원한 이유
최근 1년 동안 나는 프로그래밍을 혼자 공부해 왔다.
멋쟁이사자처럼 12기 서버파트장을 하며 얻은 것들도 많았지만, 아무래도 실력적으로 성장하는 데에는 한계가 있었다.
혼자 서버 파트를 책임지다 보니 프로젝트를 하는 데에 있어서 백엔드적인 의사결정을 전부 혼자 해야 했다. 이 과정에서 나름대로 장단점을 비교한다거나, 다른 좋은 해결책은 없는지 고민했다. 하지만, 함께 걸어가는 동료가 없다는 것이 아쉬웠고 내 지식과 의사결정이 올바른가에 대한 확신을 가질 수 없었다.
이 부족함을 채우기 위해 우아한테크코스의 프로젝트 레포지토리를 클론받아 혼자 공부하기도 했었다. 다른 사람의 코드를 보면 내가 했던 고민들과 몰랐던 것들을 배울 수 있을 것이라 생각했고, 무엇보다도 내가 알고 있다고 생각하고 사용하는 것들을 다시 한번 되돌아볼 수 있었기 때문이다.
6개월 정도 우아한테크코스의 프로젝트 레포지토리를 보며 공부하다 보니 내 시야가 정말 좁았다는 것을 깨달을 수 있었다. 두리뭉실하게 알고 사용하는 것이 많았고, 아무 생각 없이 설계한 코드도 많았다.
하지만, 우아한테크코스의 크루들은 처음부터 모든 것을 알고 있지 않았을 것이다. 또한, 그 모든 것들을 우아한테크코스에서 배운 것도 아니었을 것이다. 그렇다면, 그들과 나의 차이점은 무엇일까?
우아한테크코스를 조사하면서 내가 내린 답은 "방향을 제대로 설정했는가?"와 "함께 성장할 동료가 있는가?"였다. 크루들이 수행한 미션을 보면 정말 디테일한 부분까지 의견을 나누며 지식을 습득하고 있었다. 나도 그들처럼 되고 싶었다.
우아한테크코스에서 활동하며 단순히 지식을 습득하는 것에 그치지 않고 성장하기 위해 나아가야 할 방향을 주도적으로 찾아나가고 싶다는 생각이 들어 지원하게 되었다.
자기소개서
1. 프로그래밍 교육 이력
있는 그대로를 적었다.
- 학력
- 멋쟁이사자처럼 명지대(자연) 11기 서버파트원
- 멋쟁이사자처럼 명지대(자연) 12기 서버파트장 활동 중
2. 프로그래머가 되려는 이유와 지원 동기
나는 원래 수학과를 가고 싶은 수시러였다. 하지만 대입에서 미끄러져 정시로 대학을 가게 되었고, 적당히 성적을 맞춰 정보통신공학과에 가게 되었다.
프로그래밍에 대해서 아무것도 모르고 컴퓨터는 게임하기 위한 도구 정도로 생각하고 있던 터라 앞길이 막막했지만, 우선 학교를 다니기로 마음먹었다.
그러다 전공 C언어에서 cli 묵찌빠 게임을 구현하는 과제가 나왔는데, 이 과제를 하며 프로그래밍에 빠져들었다. 내 논리가 실제 프로그램으로 동작하는 것이 재미있었고, 이는 수학에서 느낀 즐거움과 유사했다.
이 과제를 계기로 컴퓨터공학과로 진로를 변경하게 되었고, 컴퓨터공학과로 반수를 하게 되었다.
위 내용을 토대로 내가 프로그래밍을 하게 된 이유, 프로그래밍을 하며 느낀 즐거움과 어떤 프로그래머가 되고 싶은지, 내가 원하는 프로그래머가 되기 위해 우아한테크코스는 어떤 도움이 될 것 같은지를 풀어서 작성했다.
3. 오랜 시간 몰입했던 경험 그리고 도전
이 항목만큼은 누구보다 자신 있었다. 나는 초등학교 4학년부터 지금까지 드럼을 연주하는 취미를 가지고 있다. 교회에서 드럼을 치던 형을 보고 드럼에 빠져들었고, 학창 시절 내내 드럼을 쳤다. 군대에 가서도 패드를 구매해 드럼을 쳤고, 대학 밴드 동아리 회장과 부회장을 한 경험도 있다.
내가 어떻게 드럼을 연습했는지, 이 과정에서 어떤 어려움이 있었는지를 풀어서 작성했다. 드럼을 연습하는 과정에서 메타인지를 했던 경험도 있었기에 나에게 유리한 문항이었다. 증빙 자료 제출을 위해 공연 영상을 취합하는데, 영상이 57개나 되었다.
4. 프리코스 목표 설정
우아한테크코스 프로젝트 레포지토리를 보며 공부하는 과정에서 나는 이미 두 가지 목표를 세웠다.
1. 내가 무엇을 아는지, 무엇을 모르는지 확실하게 정리하기
공부를 하며 가장 충격받았던 것은, 내가 안다고 생각했던 Spring AOP 개념을 전혀 설명할 수 없었던 것이었다. 혼자 공부하고 끝냈던 것이 문제였던 것 같다. 실제 프로젝트에서 로그를 남기기 위해 AOP를 적용한 코드가 있었는데, 이해하는데 한참 걸렸었다. 이 경험을 하고 나니 프로그래밍을 할 때마다 내가 정말 이걸 아는 걸까? 하는 질문을 던지려고 노력하게 되었다.
2. 의사결정의 근거를 명확하게 하기
프로그래밍을 할 때, 무의식적으로 혹은 당연한 것이라 생각하며 의사결정을 하게 되는 경향이 있었다. Read만 있는 Service의 모든 메서드에 @Transactional(readOnly = true)를 붙인다거나 하는 경향이었다. DB와 소통하지 않는 메서드인데도 트랜잭션을 거는 것이 좋은 방법인가? 에 대한 생각은 하지 않았다.
이런 문제들은 항상 해당 기능에 대한 개발이 끝나고 발견되었다. 이 현상에서 나는 평소 내가 의사결정의 근거를 명확하게 하지 않는다는 문제점을 발견했다.
위 두 가지 목표를 그대로 프리코스에 대입했다. Spring에서 자바로 바뀌었을 뿐이다.
프리코스
여름방학부터 프리코스를 준비했었다. 사실 프리코스를 방학부터 준비해야 하는가? 에 대한 질문에 그렇다고는 답하기 어려울 것 같다.
하지만, 프리코스 미션에서 얻을 수 있는 것들은 정말 많았다. 인터페이스를 사용하는 방법, 의존성 분리와 IoC, DI 등 말로만 들었던 것들을 여름방학 동안 체화시킬 수 있었다.
1주차부터 차례대로 숫자 계산기, 자동차 경주, 로또, 편의점 미션이 주어졌다.
나는 각 미션을 제출할 때마다 고민했던 점들과 안다고 생각했지만 몰랐던 것들을 정리해 함께 제출했다. 신기하게도 매주 새로운 쓸거리들이 생겼다.
각 미션 별로 커밋은 평균 220개 정도였다. 프리코스 기간에는 정말 미션에만 몰입하며 살았기 때문에, 계속해서 리팩터링을 했던 것 같다.
소감문은 평균 4900자 정도 적었으며, 내용 흐름은 다음과 같다.
1. 기존 목표를 달성하기 위해 노력하며 느낀 점들과 겪은 일.
2. 기존 목표를 수행하는 과정에서 변경이 필요하다고 생각한 목표와 이유.
3. 알고 있다고 생각했지만, 몰랐던 점들.
4. 고민했던 점들의 의사결정 이유.
1차 합격

사실 무조건 떨어질 줄 알았다. 3주차 미션까지는 모든 테스트가 통과했지만, 4주차 미션에서 4개 테스트 중 3개만 통과했기 때문이었다.

운이 좋았는지 다행히도 1차에 합격할 수 있었고, 일주일 뒤에 있는 코딩테스트를 준비하기 시작했다.
최종 코딩테스트 준비
일반적인 블로그에 있는 방식대로 준비했다. 합격할 줄 몰랐어서 급하게 준비하느라 힘들었다.
1. 4기~6기 최종 코딩테스트 미션 4시간 안에 푸는 연습.
2. 템플릿 작성하기(View, Controller).
이 두 가지를 준비하면서 가장 중요하게 생각했던 것은 돌아가는 쓰레기 만들기이다. 최종 코딩테스트에서 항상 강조되는 돌아가는 쓰레기 만들기는 절대 무시하고 지나가면 안 된다.
돌아가는 쓰레기를 만들기 위해 내가 세운 규칙은 두 가지이다.
1. 인터페이스를 최대한 사용하지 않고 의존성 분리를 아예 신경 쓰지 않는다.
나는 프리코스 기간 동안 인터페이스화와 의존성 분리를 정말 신경 써서 미션을 수행했었다. 하지만, 제한된 시간 내에 동작하는 프로그램을 만들기 위해서는 전혀 필요 없는 부분이라고 생각한다. 의존성 분리와 인터페이스화를 하는 이유에 대해 생각해 보면 감이 올 것이다.
2. 복잡도가 올라가면 한글로 변수, 함수명 짓기
나는 기억력이 그렇게 좋지 않다. 최종 코딩테스트 문제들을 풀며 느낀 것은 아무리 기능 명세서를 꼼꼼히 작성해도 시간이 지나면 어떤 함수가 어떤 기능을 하는지 까먹을 수 있다는 것이었다. 제한된 시간 내에 프로그램을 만들기 위해서는 머릿속으로 정말 많은 생각을 해야 했다. 하지만 영어로 된 함수명 + 의존성, 역할 분리 없는 코드는 이러한 생각을 방해하는 요소가 되었다. 이를 해결하기 위해 나는 기능이 조금 복잡해진다 싶으면 한글로 변수, 함수명을 작성했다.
실제로 최종 코딩 테스트에서도 한글, 영어 반반 섞인 코드를 제출했다.
최종 코딩테스트
최종 코딩테스트는 잠실 캠퍼스에서 봤다. 당일에 너무 긴장돼서 입맛도 없었고 다리도 계속 떨렸다. 내가 잘할 수 있을까? 하는 생각이 계속 들어 괴로웠다.
하지만, 막상 코딩테스트를 시작하니 잡생각이 전부 사라졌다. 코딩할 때 자주 듣는 래원 플레이리스트를 들으며 코딩테스트를 시작했다. 파일에서 데이터를 읽어와야 했었는데, 미리 작성한 템플릿이 큰 도움이 되었다.
그러나, 30분을 남기고 문제가 생겼다. 로컬에서 전부 통과하던 테스트가 제출을 하니 5개 중 1개만 통과하는 것이었다. 순식간에 멘탈이 무너질 뻔했다.
우선 걱정, 불안 같은 감정을 빠르게 버리고 원인을 찾기 시작했다. 그러던 중, 출력 포맷 하나를 제대로 설정하지 않았던 것을 발견했고, 테스트를 3개까지 통과할 수 있었다. 하지만, 남은 두 개는 이유를 찾을 수 없었고, 소감문도 5분 만에 써서 제출했다.
테스트 코드도 작성하지 못했고, 리팩터링도 하지 못했다.

코딩테스트가 끝나고 집에 가면서 기분이 좋지 않았다. 3개밖에 통과하지 못한 나 자신이 미웠고 너무 아쉬웠다.
최종 합격

합격 메일을 받고 너무 기뻤다. 그동안의 노력이 인정받는 기분이었다.