우테코 프리코스 후기

[우아한 테크코스] 프리코스 후기

라우브 2020. 12. 14. 22:11

드디어 3주간의 프리코스가 끝이 났다. 정말 순식간에 지나간 듯하다. 3주간 프리코스를 진행하면서 많은 것들을 배웠다. 사실 우테코의 프리코스에 어떤 요구사항, 피드백이 등장하는 지는 이미 인터넷에 많이 올라와 있다. 그래서 나는 이러한 교육의 디테일한 내용보다는 내가 3주간 어떻게 학습했는지 그리고 우테코 프리코스를 진행하면서 내가 느낀 점에 대해 쓰고자 한다.

 

1주차

첫 번째 미션으로는 숫자 야구 게임 미션이 주어졌다. 아무래도 첫 번째 미션이다 보니 그리 어렵게 느껴지지는 않았다. (지금 다시 보니 개선할 점들이 보인다. 아무래도 자만이었나 보다. 그래도 지금이라도 개선할 점이 보인다는 것은 3주간 성장했다는 의미이기도 하니까 좋게 생각해야겠다.) 짧은 시간 안에 최대한 집중하여 미션을 끝낸 후 다음 미션을 준비해야겠다고 생각했었다. 미션을 끝내고 바로 책장에 꽂아두었던 "Modern-java-in-action"책을 끄집어 들었다. 이전에 수박 겉핥기식으로 본 적이 있는데, 막상 미션에 적용하려 하니 잘 떠오르지 않아서 이 책을 보면서 동작 파라미터화, 람다, 함수형 인터페이스, 스트림 등에 대해 학습했다. 나는 이게 정말 "신의 한 수"라고 생각한다. 이때 학습한 내용들을 이후에 출제된 미션들에 굉장히 많이 활용했다. 혹시나 위에 언급한 내용들이 생소하다면 저 책을 보는 것을 추천한다. 나는 굉장히 도움이 많이 됐던 책이다.

 

2주차

두 번째 미션으로는 자동차 경주 미션이 주어졌다. 난이도는 첫 번째 미션과 비슷했던 것 같다. 1주차에 학습한 내용들을 적용해 볼 수 있었고 다 구현하고 나니 확실히 1주차 미션보다는 높은 퀄리티의 결과물이 나온 것 같아서 뿌듯해했던 기억이 난다. 후기 메일에도 그렇게 적었던 것 같다. 이 때는 과제 진행과 동시에 우테코 저장소에 있는 체스 미션을 구현해보려 시도했었다. 완성은 못했지만 이전 기수분들이 제출했던 Pull Request를 보면서 많은 공부가 되었다. 두 번째 미션을 제출하고 하루? 이틀 정도 여유가 있었다. 이 때는 혼자 홀짝 게임 미션을 구상해서 구현해보았다. 오프라인 시험을 대비하여 미션이 주어졌을 때 빠르고 정확하게 구현하는 능력을 키우고 싶었다.

 

3주차

 마지막 미션으로는 지하철 노선도 미션이 주어졌다. 처음 봤을 때는 금방 하겠다 싶었는데 시간이 지날수록 금방 하겠다고 생각했던 그 때의 나를 반성하게 되었다. 세상은 아는 만큼 보인다는데, 내가 무지했기에 금방하겠다고 생각한 건 아닌가 싶다. 보기보다 고려해야 할 상황들이 많았다. 요구 사항에는 적혀있지 않지만 구현해야 할 기능들이 많았다. (예를 들어, 2호선이 삭제되면 강남역에 저장되어있던 2호선에 대한 정보를 삭제하는 것 등). 마지막 미션을 진행하면서 테스트 코드 작성하는 것에 어려움을 많이 느꼈다. 예를 들어 구간을 삭제하는 기능을 테스트하려면, 각 종점들이 먼저 StationRepository에 등록되어있어야 하며, 이 종점을 기반으로 만들어진 Line이 LineRepository에 등록되어 있어야 한다. 또한 종점 이외에 역이 하나 더 노선에 추가되어야 한다.(노선에 등록된 역이 2개 이하이면 제거할 수 없다.) 즉 배보다 배꼽이 더 커지는 상황이 발생한다. 삭제 기능 한 줄을 위해 초기화 작업만 열 줄 가량 나오는 상황이 발생했다. 이를 해결하기 위에 @BeforeEach로 매 테스트가 시작하기 전 기본적으로 하나의 노선에 3개의 역이 등록되도록 구현했다. 하지만 이를 작성한 나는 해당 테스트를 이해하지만 @BeforeEach를 보지 못한 사람에게는 이해하기 힘든 코드가 될 수 있어서 썩 마음에 들지는 않았다. 좀 더 공부해봐야겠다.

 

마지막 미션은 얻는 것도 가장 많았던 미션이지만, 아쉬움이 많이 남았다. 

 

위 코드처럼 입력값이 들어오면 입력값에 맞는 기능을 반환하도록 구현하였고, 이러한 FunctionMapper가 기능별로 존재하는 상황이었다. mapper의 key, value값은 달라질 수 있지만, matchFunction의 동작은 동일하기 때문에 모든 FunctionMapper마다 matchFunction메서드를 생성하면 이는 코드 중복이 된다. 이를 제거하기 위해 FunctionMapper클래스를 만들고 이를 상속하도록 구현했다. 하지만 이럴 경우 static {} 안의 초기화 작업들이 실행되지 않아 기능이 동작하지 않았다. static을 적용하지 않고 객체를 생성하도록 구현하면 쉽게 해결될 일이지만, 그것 또한 별로 좋은 방법은 아니어 보였다. 마치 체스를 두고 있는 듯했다. 왼쪽으로 가면 룩을 잃고 오른쪽으로 가면 퀸을 잃는 상황에 놓인 듯 했다. 결국 중복을 남긴 채로 뒀다. 실력이 좋은 사람은 둘 다 잃지 않는 수를 뒀을 것이다. 많이 아쉬웠고 더 성장해야겠다는 생각이 들었다. 

(혹시 이 문제의 해답을 아시는 분은 댓글로 달아주시면 정말 감사할 것 같아요 😀)

 

결론.

우테코의 프리코스는 쉽게 말해 "떠먹여 주는 교육" 은 아니다. 누군가 떠먹여 주듯이 하나하나 알려줘야 하는 사람들에게는 단언컨대 얻어가는 게 없는 교육일 수도 있다. 모두에게 동일한 시간, 동일한 미션이 주어지고 스스로 학습할 내용을 찾아 학습해야 한다. 내가 우테코 프리코스를 진행하면서 느낀 점은 "어떤 길을 걷다 다시 돌아온다 한들 이미 간만큼은 얻은 것이 있다"는 것이다. 실제로 1주차에 학습한 내용들이 굉장히 많은 도움이 되었고, 2주차에 체스 미션을 혼자 작성해보면서 입력 값에 따라 서로 다른 로직이 실행되도록 구현하는 법을 배웠고 이를 마지막 미션에 잘 활용할 수 있었다. 밥 먹으면서 틈틈이 봤던 우아한 테크 세미나 TDD 리팩토링 강의도 많은 도움이 되었다. 나는 이미 한 가지 일만 하고 있다고 생각한 함수가 더 작게 분리될 수 있다는 사실에 놀라웠고, 코드를 좀 더 작은 단위로 볼 수 있는 눈을 갖게 되었다.

 

프리코스를 3주간 진행하면서 클래스 및 함수 분리하는 법, 요구사항을 지키면서 개발하는 법 등 많은 배움이 있었지만 가장 큰 배움은 자기 주도적으로 학습하는 법이었다. 조금 더 나은 코드를 작성하기 위해서는 스스로 학습할 내용을 찾아 공부해야 했고 새롭게 학습한 내용을 직접 적용해 볼 수 있는 좋은 기회였다.

 

나는 사람이 성장하는 데 있어서 그 사람의 의지도 중요하지만 의지만큼이나 환경도 중요하다고 생각한다. 만약 프리코스 미션이 아니라, 혼자 공부해 보는 상황이었다면 분명 '이 정도는 그냥 넘어가도 괜찮지 않을까?' 하는 상황도 많았다. 하지만 우아한 테크코스 당락이라는 약간의 무게감을 더함으로써 저런 사소한 요소들까지 조금 더 깊게 고민해 볼 수 있었고, 이러한 과정에서 많은 배움을 얻었다. 이제는 이런 작은 고민에서 많은 깨달음을 얻는다는 사실을 알았기 때문에 내 성장을 위해서라도 조금 더 고민해보자 한다. 

 

 

마지막으로 이런 좋은 교육 만들어 주시고, 아직은 비록 프리코스이지만 교육에 참여하게 해 주셔서 감사합니다.👍🏻