본문 바로가기
5. 활동/우아한테크코스

[우아한테크코스 5기 지원] 프리코스 4주 과정 회고록

by 로기(dev-loggi) 2022. 12. 20.

 

목차

     

    우아한테크코스 5기 모집 일정

    • 서류지원: 22.10.17 ~ 22.10.24
    • 프리코스: 22.10.26 ~ 22.11.22 (4주)
      (지원자 7인 코드 리뷰 스터디: 22.10.26 ~ 22.12.16 - 7주)
    • 1차 합격자 발표: 22.12.14
    • 최종 코딩 테스트: 22.12.17
    • 최종 합격자 발표: 22.12.28
    • 교육기간: 23.02.07 ~ 22.11

    2023.02 부터 약 10개월간 진행되는 우아한테크코스 5기 교육생 모집 과정이 진행되었습니다.

     

    여기서 우아한테크코스만의 큰 특징은 모집 과정 중에 4주 동안 매주 1회씩 제공되는 미션을 수행하게 되는 프리코스 과정이 있었습니다.

    4기 때와는 다르게 이번 5기 모집에서는 서류 지원자 전원 모두가 프리코스 과정을 경험해 볼 수 있었습니다.

     

    지난 모집때 지원자들의 프리코스에 대한 반응이 매우 좋았고, 꼭 최종 합격에 선발되지 못하더라도 4주 동안 미션을 수행하는 과정 속에서도 많은 것을 배우고 성장할 수 있었다고 하여 우테코 측에서도 더 많은 개발자 지망생들에게 좋은 경험을 배풀고자 오픈하게 된 과정이라고 합니다.

     

    지원 동기

    저는 취업 준비를 하며 우테코의 테코톡 유튜브 채널 영상들과 우테코 캡틴 박재성님의 교육관과 철학이 정말 멋있다는 생각이 들어 "나도 저렇게 열정과 깊이가 있는 사람들과 함께 배우고 성장해보고 싶다"는 생각이 들었었습니다.

     

    그러나 지원하기까지 많은 고민이 있었습니다.

    저는 컴퓨터 학사를 졸업한 이후 공백기가 길었고, 취업 준비를 시작한지도 어언 1년이 되었기 때문에 "내가 과연 이시점에서 기초부터 10개월이라는 과정을 하는게 맞는걸까?"라는 생각이 들었습니다.

     

    우아한테크코스는 단순히 개발 지식만을 전달하는 교육기관이 아닌 개발자가 실제 현업에서 겪게 되는 모든 문제, 그리고 그걸 해결해나갈 수 있는 역량들을 기르는 곳이라는 생각이 들었습니다.

     

    저에게 지금 필요한 것은 소프트 스킬과 협업 경험이었고, 우테코 혹은 프리코스만이라도 경험해보면서 여러 개발자들과 공동의 목표를 향해 나아가는 과정만으로도 큰 도움이 될 것 같아 지원하게 되었습니다.

     

    프리코스 과정

    10월 26일부터 11월 22일까지 총 4주간 진행되어 매주 1회씩 미션이 제공되었습니다.

    주차별 미션이 우테코 깃헙 레포에 업데이트되면 해당 미션을 각자 본인의 레포에 Fork하여 미션에 대한 코드를 작성 및 커밋한 후 PR을 날리는 방식으로 진행되었습니다.

     

    우아한테크코스는 자기주도학습을 중요시하며 코치진은 올바른 방향으로 갈 수 있게 방향성을 제시해줍니다.

    프리코스에서 지원자들에게 제시했던 방향성은 다음과 같습니다.

     

    • 객체 지향 프로그래밍
    • 기능 문서화
    • TDD
    • 클린 코드
    • Git 활용 및 기능 단위 커밋
    • 리펙토링

     

    위와 같은 카테고리를 통해 스스로 학습하고 터득해야하며, 미션에 대한 코드 작성시 다음과 같은 프로세스로 개발을 해야 했습니다.

     

    1. 주어진 문제에 맞게 기능 목록 문서를 작성한다
    2. 작은 기능 단위부터 개발하되 테스트 코드를 기반으로 작성한다
    3. 기능 별로 커밋한다
    4. 더 나은 코드를 위해 객체 지향 원칙을 잘 준수해가며 리펙토링한다

     

    1주차 미션 - 온보딩

    7개의 간단한 알고리즘 문제를 푸는 미션으로 가볍게 프리코스 환경을 적응하는 단계였습니다.

     

    특별한 요구사항은 없었기 때문에 저 또한 가볍게 문제를 모두 풀고나서 Kotlin Coding Convention을 잘 숙지해가며 코드를 간결하게 수정해나가는 시도들을 했습니다.

     

    그리고 이 기간에 슬랙을 통해 안드로이드 지원자들끼리 스터디원을 구하여 남은 기간동안 스터디를 진행하게 되었습니다.

     

    2주차 미션 - 숫자 야구 게임

    1주차 미션에 대한 공통 피드백(텍스트 파일)과 함께 2주차 미션이 시작됩니다.

    본격적인 프리코스 미션의 시작되는 주차입니다.

    이 때부터 프로그래밍 제약 사항(depth of indent 등)이 생기기 시작했고, 단위 테스트를 작성해야 하며, 클래스와 함수 기능에 대한 책임의 관점에서 생각해야 했습니다.

     

    저는 우선 테스트 코드에 대한 경험이 전무하여 JUnit5와 AssertJ 활용 방법에 대해 공부를 많이 하게 되었습니다.

    그리고 지속적인 리팩토링을 통해 클래스와 함수를 책임의 관점에서 분리하기 시작했고, 이때 저는 디자인 패턴을 공부하며 자주 사용되는 생성 패턴 중 하나인 Builder 패턴을 적용해 보았습니다.

     

    [패키지 구조]

    (baseball)
    ├── (game)
    │   ├── BaseballGame.kt
    │   ├── ExceptionHandler.kt
    │   ├── Message.kt
    │   └── Provider.kt
    └── Application.kt

     

    3주차 미션 - 로또

    역시 2주차 미션 공통 피드백과 함께 시작됩니다.

    구현 난이도는 2주차와 비슷했습니다.

    대신 함수 당 라인수 제약 사항 등의 프로그래밍 요구 사항이 몇 가지 더 추가되었습니다.

     

    이번 주차는 공통 피드백과 요구 사항, 스터디원들의 2주차 미션 코드 리뷰에서 받았던 의견을 최대한 반영하여 더 완벽한 코드를 만들기 위해 시간을 많이 투자했습니다.

     

    [패키지 구조]

    (lotto)
    ├── (data)
    │   ├── Lotto.kt
    │   ├── LottoRank.kt
    │   ├── WinningLotto.kt
    │   └── WinningTable.kt
    ├── (domain)
    │   ├── LottoGame.kt
    │   ├── LottoGenerator.kt
    │   └── LottoShop.kt
    ├── (error)
    │   └── ErrorMessages.kt
    ├── (ui)
    │   └── Console.kt
    ├── (util)
    │   ├── ConsoleKtx.kt
    │   └── MathKtx.kt
    └── Application.kt

     

    4주차 미션 - 다리 건너기

    3주차 미션 공통 피드백이 도착했습니다.

    4주차 미션의 구현 난이도는 살짝 올라갔습니다.

    또한, 마지막 주차 미션 답게 요구 사항이 많이 늘어났고, 이번에는 약간의 베이스 코드까지 등장했습니다.

     

    주차가 거듭될수록 지속적으로 추가된 프로그래밍 요구 사항과 공통 피드백을 모두 준수해가며 도메인 설계, 기능 목록 문서 정리, TDD, 구현, 리펙토링까지 절차적인 개발을 하느라 시간이 굉장히 많이 걸렸습니다.

     

    [패키지 구조]

    (bridge)
    ├── (common)
    │   └── ErrorMessage.kt
    ├── (domain)
    │   ├── (engine)
    │   │   └── BridgeGameEngine.kt
    │   └── (game)
    │       ├── Bridge.kt
    │       ├── BridgeCrossingMap.kt
    │       ├── BridgeGame.kt
    │       └── BridgeGameResult.kt
    ├── (util)
    │   ├── ConsoleExt.kt
    │   └── StringExt.kt
    ├── (view)
    │   ├── (strings)
    │   │   ├── Command.kt
    │   │   └── Message.kt
    │   ├── InputView.kt
    │   ├── OutputView.kt
    │   └── View.kt
    ├── Application.kt
    ├── BridgeMaker.kt
    ├── BridgeNumberGenerator.kt
    └── BridgeRandomNumberGenerator.kt

     

    코드 리뷰 스터디

    기간: 22.10.26 ~ 22.12.16

    인원: 7명

    리뷰 날짜: 매주 수요일 오후 8시 ~ 10시

    리뷰 방법: 디스코드 음성 회의 및 화면 공유

     

    프리코스 과정의 또 다른 특징 중 하나는 Slack과 Github Discussion을 통해 지원자들과 소통할 수 있는 공간을 마련해주어 활용할 수 있다는 것이었습니다. 지원자가 많았던 만큼 커뮤니티 채널도 굉장히 활발했는데 저희 코드 리뷰 스터디 또한 Slack 채널에서 구하게 되었습니다.

     

    저희 스터디 팀장인 상현님을 필두로 총 7인으로 시작을 하였고, 매주 미션이 끝나는 날 저녁 8시에 모여 디스코드 화상 회의를 통해 각자 15분씩 코드 설명과 리뷰를 받는 식으로 총 2시간 정도 진행하였습니다.

     

    프리코스 미션 코드 리뷰 (4주)

    저는 다른 스터디원들에 비해 Kotlin 개발 경험이 상대적으로 많았고, 고계 함수 등의 고급 문법들을 활용하여 좀 더 테크니컬하고 코틀린스럽게(?) 코딩하는 것을 즐겨했던 것이 잘 반영되어 코드 리뷰시에 멤버들에게 호평을 받아 뿌듯했습니다.

     

    그래도 저 또한 아직 미흡한 실력이었고, 미션을 진행하며 계속해서 생겨났던 의문점들을 스터디원들과 함께 코드 리뷰 및 토론을 통해 정말 많은 것을 배우고 성장할 수 있었습니다.

     

    주로 나왔던 논점들을 정리하면 아래와 같습니다.

     

    • 클래스 및 함수 분리
    • Enum 활용
    • 에러 메시지 하드 코딩
    • 예외 처리 로직
    • InputView와 OutputView
    • private 함수 테스트

     

    최종 테스트 대비 코드 리뷰 (3주)

    프리코스 미션은 모두 완료했지만 최종 테스트까지 3주 정도의 긴 대기 시간이 있었고, 본 미션 진행하는 동안 아쉬웠던 부분을 계속 보완하여 좀 더 완벽한 최종 테스트 대비를 위해 이전 기수 미션으로 우리만의 스터디 미션을 총 3회 진행하였습니다.

    (이전 기수에는 kotlin 버전 미션이 없었기 때문에 상현님과 함께 kotlin 버전으로 repo를 따로 만들어서 스터디원들에게 공유하여 진행했습니다)

    스터디 5주차 미션 - 자동차 경주 게임

    스터디 6주차 미션 - 자판기

    스터디 7주차 미션 - 페어매칭관리 애플리케이션

    프리코스 본 미션때 지원자들끼리 MVC 패턴에 대한 논의가 있었고, MVC로 구현한 사람들이 많았는데 저는 콘솔 프로그램과 MVC 패턴은 잘 맞지 않는다고 생각해서 사용하지 않았었습니다.

    그런데 워낙 많은 사람들이 MVC 패턴을 지지하고 있었고 심지어 어느 우테코 현 4기 크루님의 미션 해설 영상에서도 MVC로 설명하는 것을 보고 5주차 미션은 MVC로 구현해보았습니다.

    그러나 사용자의 Input을 View 에서 받을 수 밖에 없는 한계를 극복하지 못했고, 이에 따라 파생되는 View와 Controller의 의존 관계를 해결하기가 어려웠습니다.

    결국 6주차부터는 안드로이드에서 많이 사용되는 mvvm으로 구현하여 여러가지 문제들을 해결할 수 있었습니다.

     

    [패키지 구조 - 7주차 페어매칭관리 애플리케이션]

    (pairmatching)
    ├── (app)
    │   └── PairMatchingApplication.kt
    ├── (model)
    │   ├── (data)
    │   │   ├── (crew)
    │   │   │   ├── Crew.kt
    │   │   │   ├── CrewMap.kt
    │   │   │   ├── CrewPair.kt
    │   │   │   ├── CrewPairList.kt
    │   │   │   └── CrewPairMatchingMap.kt
    │   │   ├── (mission)
    │   │   │   ├── Course.kt
    │   │   │   ├── Level.kt
    │   │   │   └── Mission.kt
    │   │   └── (result)
    │   │       └── Result.kt
    │   ├── (repository)
    │   │   ├── PairMatchingRepository.kt
    │   │   └── PairMatchingRepositoryImpl.kt
    │   ├── (resources)
    │   │   ├── Resource.kt
    │   │   └── ResourceManager.kt
    │   └── (shuffler)
    │       ├── CrewShuffler.kt
    │       ├── ICrewShuffler.kt
    │       └── RandomCrewShuffler.kt
    ├── (util)
    │   └── ValueEnum.kt
    ├── (view)
    │   ├── (io)
    │   │   ├── (data)
    │   │   │   ├── Commands.kt
    │   │   │   └── MissionDashboard.kt
    │   │   ├── (validator)
    │   │   │   └── InputValidator.kt
    │   │   ├── InputView.kt
    │   │   └── OutputView.kt
    │   ├── (strings)
    │   │   ├── ErrorMessage.kt
    │   │   └── Message.kt
    │   └── (views)
    │       ├── ConsoleView.kt
    │       └── PairMatchingView.kt
    ├── (viewmodel)
    │   └── PairMatchingViewModel.kt
    └── Application.kt

     

     

    소감

    프리코스와 코드 리뷰 스터디까지 총 7주라는 짧은 기간 동안 정말 많은 것을 보고 배우며 앞으로 더 열심히 해야겠다는 동기 부여가 되는 소중한 경험이었습니다.

     

    간단한 프로그램이었지만 기능 목록 문서부터 테스트 코드, 깃, 객체 지향 설계 등의 체계적인 개발 프로세스를 조금이나마 경험해 볼 수 있었습니다.

    또한, 개인 프로젝트였지만 동일한 문제를 보고 여러 개발자들의 다양한 의견을 갖을 수 있다는 점도 매우 흥미로웠습니다.

     

    그리고 마지막으로 소중한 코드 리뷰 스터디를 만들어주신 상현님과 나머지 스터디원분들도 모두 너무 고생하셨고 최종 결과를 떠나 각자 하는 일 모두 잘 되시길 바래요! 화이팅👍👍

    댓글