우아한테크코스 3기 지원후기(프리코스 3주차)
by me
해당 내용은 2020년도 10월 우아한테크코스(이하, 우테코)를 어떤 생각을 하며 지원했는지에 대한 이야기를 다룹니다.
12월 9일 3주차 미션이 시작되었습니다!
3주차 미션은 1, 2주차 미션에 비해 기능 요구사항이 많았고 객체지향을 준수하며 구현하기에 다소 난이도가 높게 느꼈습니다.
3주차는 “지하철 노선도” 가 미션으로 주어졌습니다. 미션의 요구사항은 아래와 같습니다.
미션 수행 계획 및 목표
우테코 프리코스는 각 주차별 목표가 있습니다.
- 1주차: 함수 분리하기
- 2주차: 함수 분리하기 + 클래스 분리하기
이번 3주차 미션의 목표는 1주차 + 2주차 그리고 “여러 개의 클래스를 분리한 후 서로 관계를 맺어 하나의 프로그램을 완성하는 것” 입니다.
위의 미션을 읽고 이번 3주차 미션은 입력, 출력 화면과 비즈니스 로직을 분리한 MVC 패턴으로 개발할 계획을 세웠습니다.
요구사항 파악하기
미션 요구사항을 파악하기 위해 먼저 아래와 같이 시스템의 전체 구조를 직접 그려보았습니다.
그리고 이후 각 메뉴에 있는 기능들의 예외 사항 에 대해서 정리하며 미션 요구사항을 파악했습니다.
기능 구현 목록 작성하기
기능 구현 목록을 작성할때 입력, 처리, 출력 으로 구분하여 작성하였습니다.
이렇게 구분해서 작성한 이유는 각각의 로직을 분리해서 구현하기 위한 목적 그리고 각 기능에 대한 예외 사항을 파악하기 쉽기 때문에 이와 같이 작성하였습니다.
또한, 구현할 기능이 많은 만큼 요구사항을 꼼꼼하게 체크하고 기능 구현 목록을 작성하였습니다.
고민한 부분
3주차 미션은 기능에 대한 어려움? 고민 보다는 3주차 목표인 “여러 개의 클래스를 분리한 후 어떻게 서로 관계를 맺을지” 에 대한 고민을 하였습니다.
그래서 아래와 사진과 같이 각 클래스들의 역할을 구분하고 서로 관계를 맺으며 구현했습니다.
- Controller: 지하철 노선도 시작점
- Service: 각 메뉴의 비즈니스 로직 담당
- View: 입력, 출력 화면 담당
- Domain: 객체와 객체의 상태 관리 담당
- Utils: 입력값 검증 및 파싱 관련 유틸 모음
프리코스에 참여하며…
3주간 프리코스를 진행하면서 배운점, 느낀점은 아래와 같습니다.
프리코스 목표!
저는 프리코스에 합격하고 3주간 프리코스에서 “매주 미션에 대한 회고를 작성하자” 라는 목표를 세웠습니다.
3주차 미션이 끝나가는 지금 목표한 3개의 회고를 모두 작성할 수 있어 뿌듯합니다ㅎ
이렇게 매주 회고를 작성하면서 느낀점은 기록을 통해 과거의 나의 생각과 행동을 통해 지금 현재 내가 얼마나 성장하고 있는지 혹은 멈춰있는지 느낄 수 있었습니다.
앞으로도 꾸준히 회고를 작성하기 위해 노력해야겠다고 느꼈습니다.
프리코스 학습 방법?
저는 이전 기수들의 프리코스 미션들을 직접 풀어보며 미션을 미리 분석하고 미션 구현을 위한 큰 틀을 잡으며 학습해왔습니다. 그리고 특히 Java API를 적극 활용하여 기능을 구현하고자 했기 때문에 모던 자바 인 액션 책을 참고하며 Java API 에 대해 학습하였습니다.
첫 번째: git과 좀 더 친해졌어요 :)
저는 프리코스 이전부터 git을 자주 사용했기 때문에(add, commit..ㅎ) 거부감은 없었습니다. 그러나 매주 미션은 fork/clone 하고 git branch를 나누고 로컬에서 미션을 수행 후 PR(Pull Request)을 날리며 진행했기 때문에 git을 사용하면서 처음으로 PR을 날려보는 경험을 할 수 있었습니다. 또한, 3주간 README에 기능 구현 목록을 작성하고 목록에 맞춰 커밋을 하는 연습은 무엇보다 좋은 경험이였습니다.
두 번째: 테스트 코드 작성의 중요성을 경험!!
물론 3주간 프리코스에서 테스트 코드를 작성해 보라는 요구사항은 없었습니다. 그러나 README에 기능 구현 목록을 작성하고 구현을 하기 전에 먼저 기능별로 테스트 코드를 작성한 후 기능 구현하는 방식이 좀 더 코드에 확신을 줄 수 있었고 코드 리펙토링 과정에서도 빠르게 코드를 변경할 수 있음을 경험 하였습니다.
세 번째: 코드 컨벤션은 기본 easy~
제가 3주간 미션을 수행하면서 가장 신경 쓴 부분이 기능 단위 커밋과 코드 컨벤션을 준수하는 것 이였습니다. 사소하게 넘어갈 수 있는 “for while if문의 사이의 space도 convention 이다.” 라는 피드백을 통해 네이밍 뿐만 아니라 코드 컨벤션을 신경 쓰며 미션에 임했습니다.
네 번째: 메서드와 클래스의 단일 책임 원칙을 준수하다
3주간 프리코스를 되돌아 보면 우테코 프리코스의 핵심 목표는 함수와 클래스의 단일 책임 원칙을 준수하고 이를 통해 하나의 프로그램을 만들어보는 것 이였습니다. 이를 통해 매주 미션마다 클래스의 역할과 범위를 어디까지 가져야 할지에 대한 고민을 최대한 녹여내려는 노력을 했었습니다.
다섯 번째: Java API의 활용
저는 주어진 미션 요구사항보다 스스로 좀 더 극단적인 상황으로 (ex: indent 1 까지 허용) 제한하여 미션 수행해보려고 노력했었습니다. 이렇게 스스로 제한하니까 좀 더 개선된 코드에 대해서 고민하였고 이를 위해 스스로 Java API(stream 등)에 대해 공부하는 제 자신을 볼 수 있었습니다. 또한, 학습한 내용을 코드에 적용하여 깔끔한 코드를 작성할 수 있었습니다.
마지막으로
3주간 프리코스는 정말 짧게 느껴졌습니다. 그러나 되돌아 보니 정말 미션에 몰입했음을 느꼈고 분명히 한 단계 성장했음을 느낄 수 있었습니다.
프리코스는 주도적인 노력 없이는 배움을 얻어갈 수 없다고 느꼈습니다. 미션을 수행하면서 고민했던 점, 시행착오를 겪은 부분이 피드백을 통해 큰 깨달음과 배움을 얻어갈 수 있으리라 생각합니다. 반대로 이러한 노력이 없다면 어떠한 피드백을 받더라도 공감이 가지 않을거라고 생각합니다.
프리코스 취지는 본 과정을 맛(?) 보는 과정이라는 점에서 본 과정은 프리코스 보다 지속가능한 열정과 노력이 더욱 필요함을 느꼈습니다.
프리코스 참여하면서 아쉬움도 있습니다!!
매주 주어지는 공통 피드백으론 배움에 대한 갈증을 해소시켜주지 못해 아쉬움이 남았습니다. 물론 100명이 넘는 사람들의 코드를 짧은 기간동안 전부 리뷰하기엔 한계가 존재하기 때문에 어쩔수 없음을 느꼈죠… 그래서 그런지 이전 보다 더 많이 배움에 목이 마르는 느낌이 들었습니다..(기생충 인가..)
그래도 한편으론 우테코 본 과정은 열정가득한 환경속에서 얼마나 많은 배움을 얻어갈 수 있을지 기대가 됐습니다.