회고

우테코 프리코스 회고록

ppusda 2023. 12. 4. 01:38

 

이번에 우테코 프리코스를 경험해 볼 기회가 생겼다.

프리코스를 즐겨보았고, 각 주차에 대한 회고와 배운 점을 남겨보려고 한다.


1주차 ⚾

  • Git - 숫자야구
  • 진행 과정
    • 1주차 과제 때는 정말 기능구현에 대해서 완성시키는 것이 목적이었다.
    • 그렇기 평소에 코딩을 하던 것 처럼 코드를 작성했고 기능을 완성하게 되었다.
    • 간단한 기능이기도 하였지만 108줄의 코드와 3개의 커밋으로 과제를 제출하였다.
  • 코드 리뷰
    • 거의 사용해본 적 없었던 Pull Request와 처음으로 경험해보는 코드 리뷰를 하게되었다.
    • 나의 코드가 리뷰되는 것은 물론이고 상대방의 코드도 리뷰해주어야하는 상황에서 처음에는 어떻게 해야할지 감을 잡지 못하였다.
    • 다른 분들의 코드 리뷰를 정말 많이 읽어보고, 자연스럽게 코드도 많이 읽어보는 시간을 가질 수 있었다.
    • 그 과정에서 부족했던 점을 많이 발견할 수 있었고, 배울 수 있었던 것 같다.
    • 개인적으로 정리한 코드 리뷰를 하는 방법은 아래를 참고하면 더 좋을 것 같다.
  • 회고와 배운 점
    • 1주차에는 제약사항도 없었고, 기능 요구사항이 복잡하지도 않았다.
    • 그렇기에 간단하게 생각했던 부분들에서도 피드백을 받을 수 있었다.
    • 1주차에서 배운 점은 아래와 같다,
      • 하드코딩 처리
      • 메서드 분리
      • 의미있는 커밋메시지 작성
      • 코드리뷰 방법
    • 코드리뷰를 해보면서도 많이 배울 수 있다는 점은 정말 좋았다.

2주차 🚗

  • Git - 자동차 경주
  • 진행과정
    • 2주차 과제에는 1주차와는 다르게 제약사항이 추가되었다.
      • Indent의 깊이가 3을 넘지 않도록 한다.
      • 3항 연산자를 쓰지 않는다.
      • 메서드가 한 가지의 일만 하도록 한다.
      • 테스트를 작성한다.
    • 이 요구사항에 최대한 맞춰서 코드를 작동하도록 작성하는 것이 목표이다.
    • 추가된 요구사항과 1주차 때의 배운 점들을 최대한 반영하여 기능을 완성하였다.
    • 2주차도 기능이 어렵지는 않았기에 250줄의 코드와 19개의 커밋으로 과제를 제출하였다.
  • 중점적으로 고려한 사항
    • 2주차 때에는 1주차에서 배운 점을 활용하기 위해 여러가지 사항을 신경썼다.
      • 기능 사항을 정리하고 기능구현을 시도하였다.
      • 읽기 쉬운 코드를 고려하여 메서드 분리와 삼항연산자 사용을 하지 않았다.
      • Indent의 깊이가 3을 넘지 않도록 주의하며 코드를 작성하였다.
      • 하드코딩을 방지하기 위해 클래스를 분리하여 상수를 사용하였다.
      • 의미있는 커밋 메시지 작성과 커밋을 기능 단위로 분리하였다.
    • 특히 메서드 분리에 집중하였고, 커밋 작성과 기능 단위 분리에 힘썼다.
  • 코드 리뷰
    • 이번 코드 리뷰에서 가장 중점적으로 다룬 점은 메서드 분리였다.
    • 내 코드에서 집중한 부분이기도 하였고 다른 분들의 코드에서는 어떻게 작성되었는지 궁금했다.
    • 물론 부족한 지식으로 읽는 코드만큼 피드백 줄 요소보다는 배울 부분이 더 많았기에 그만큼 더 꼼꼼히 보려고 노력하게 되었다.
  • 회고와 배운 점
    • 2주차에서 피드백과 개인적으로 배운 점은 아래와 같다.
      • 상수 대신 Enum 사용
      • 클래스 분리
      • if - else 구문에서 else 사용 지양
      • 매직 넘버 사용 지양
      • 의미있는 메서드 명 사용
      • 적절한 접근제어자 사용
      • 테스트 코드 작성
      • 기능 요구사항 구체적으로 정리
      • Collection, stream과 같은 Java의 기능 적극 활용
    • 부족한 부분이 주차를 거듭할 수록 보여서 즐겁고 코드 리뷰하는 시간이 즐거웠다.

3주차 🎱

  • Git - 로또
  • 진행과정
    • 3주차 부터는 기능 요구사항이 복잡해지기 시작했다.
    • 추가적인 제약사항이 점점 추가되며 고려해야할 사항도 점점 늘어났다.
      • 메서드의 길이가 15줄을 넘어가지 않도록 한다. (메서드 분리 지향)
      • else 예약어를 쓰지 않는다.
      • Enum을 사용하여 구현한다.
    • 또한, 메서드 분리에 더 힘쓰기 위해서 MVC 패턴을 적용해보기로 마음먹었기 때문에 시간 소요가 급격히 늘어났다.
    • 기능 구현에 시간이 꽤 소요되었고, MVC 패턴에 대해 공부해보고 제대로 적용해보는 주차 였기에 생각보다 기간이 짧게 느껴졌다.
    • 3주차에는 884줄의 코드와 31개의 커밋을 작성하여 코드를 제출하게되었다.
  • 중점적으로 고려한 사항
    • 3주차 때도 마찬가지로 이전에 배운 점들과 추가적인 요구사항들을 지키기 위해 노력했다.
      • 기능 요구사항을 좀 더 세부적으로 정리하였다.
      • MVC 패턴을 적용하여 패키지, 클래스, 메서드 분리를 쉽게 할 수 있도록 하였다.
      • Enum 을 적극 사용하여 하드코딩 된 부분이 없도록 하였다.
      • else 예약어 사용을 지양하여 코드를 작성하였다.
      • 의미있는 메서드 명 사용과 커밋 메시지를 작성하도록 노력하였다.
  • 코드리뷰
    • 이번 코드리뷰에서는 MVC 패턴과 같은 구조적인 부분과 메서드 분리에 대해서 집중하였다.
    • MVC 패턴을 적용하는 것이 많이 어색했기 때문에 그 과정에 많은 공부를 하게되었다.
    • 주차를 거듭할 수록 많은 코드를 읽어보게 되면서 코드리뷰 하는 법을 조금 알게 된 것 같아서 3주차에는 코드 리뷰가 정말 잘되었다.
    • 그래서 3주차의 코드리뷰가 가장 자연스럽게 잘된 것 같고 재미있었던 것 같다.
  • 회고와 배운 점

4주차 🎄

  • Git - 크리스마스 프로모션
  • 진행과정
    • 마지막 4주차 과제는 기존과는 다른 방식으로 진행되었다.
    • 기본 템플릿을 가져와 나의 repository 안에 main 브랜치에서 작업을 하게 되었고, 이로인해 커밋이 무지막지하게 늘어나는 일이 있었다.
    • 다른 이들의 코드를 참고하지 못하게 하기위한 방안이었다는 걸 알게되었고, 그에 걸맞게 미션의 난이도도 많이 어려웠다.
    • 추가적인 요구사항으로는 Input, Output을 따로 작성하도록 하였고, 이는 마치 MVC를 권장하는 것 처럼 보여 MVC를 좀 더 잘 구현할 수 있도록 하였다.
    • 또한, 그동안의 다른 분들의 화려한 문서정리에 자극을 받아 문서 정리에도 힘써보았다.
    • 그래서 그런지 1,403줄의 코드와 22개의 커밋으로 미션을 제출하게 되었다.
  • 중점적으로 고려한 사항
    • 3주차에 이어 이번에도 이전에 배운 점을 최대한 활용하도록 노력했다.
      • 문서에 구체적인 기능 요구사항을 정리하면서 기능을 충분히 이해하였다.
      • Validate를 도메인 로직에서 구현하여 View의 책임을 덜어주었다.
      • record를 적극 사용하여 반복되는 코드를 줄였다.
      • 도메인 로직에 대해 테스트 코드 작성하여 기능 작동 유무를 확인하였다.
      • Enum 을 적극 사용하여 하드코딩 된 부분이 없도록 하였다.
      • 클래스, 메서드, 변수 명에 대해 크게 고려하며 작성하였다.
  • 코드리뷰
    • 4주차에도 물론 코드 리뷰에 많은 시간을 쏟았다.
    • 많은 분들이 4주 동안 많은 성장을 겪으셔서 그런지 정말 코드가 다양했고 읽는 재미가 가득했다.
    • 그래서 나도 많은 피드백을 받을 수 있었던 것에 비해 피드백 해드릴 내용이 많이 보이질 않아 죄송한 마음도 들었다.
    • 그래도 3주차의 느낌을 살려 최대한 코드리뷰를 해보며 많은 시간을 쏟았던 것 같다.
  • 회고와 배운 점
    • 4주차에 배운게 된 점은 아래와 같다.
      • 구조적인 관계에서 나온 의존관계 설정 클래스 분리
        • 이는 MVC 패턴을 사용하면서 나온 문제였다.
        • 프로그램을 MVC로 나누더라도 실행하는 부분에서는 큰 의존관계를 가질 수 밖에 없었고 이를 하나의 클래스에서 관리하도록 하였었다.
        • 하지만 이 부분에서 실수한 점은 관리하는 부분과 실행하는 부분을 분리하지 않은 점이 문제가 되었었다.
        • Config 파일과 같이 의존관계를 설정해주는 클래스와 실행 클래스를 따로 두어 너무 많은 의존성을 하나의 클래스가 책임지게 하는 상황이 되는 걸 막아야겠다.
      • Enum에서 사용하는 하드코딩 또한 상수로 정의
      • if-else 구문에서의 else 예약어 지양을 해야하는 이유
      • 테스트 코드와 문서 작성의 중요성
        • 4주차 미션에서는 요구사항이 어려웠던 것도 있어 기능구현에 정신이 팔렸었다.
        • 이와 동시에 작성한 문서에 대한 기능 구현 사항이나 도메인 로직에 대한 테스트에 매몰되어 다른 예외나 세부적인 부분에 대해 챙기지 못했던 것 같다.
        • 여러 가능성을 열어두고 도메인 로직에 대해 여러 테스트를 작성하는 것이 중요하다고 생각하게 되었다.
    • 4주차는 그야말로 너무 아쉽다고 밖에 표현할 수가 없다.
    • 그만큼 요구 사항이 어렵게 다가왔고, 개선해야 할 점이 너무 많았기 때문이다.

총 회고

  • 총 회고
    • 프리코스를 즐겨보면서 정말 여러가지를 짧은 시간 내에 겪게 되었다.
    • 평소에는 이렇게 코딩을 할 수 있는 기회도 없을 뿐더러 코드 리뷰를 겪을 수 있다는 건 정말 귀중한 경험이라고 생각된다.
    • 이번 6기에서는 경력이 있는 분들도 신청할 수 있었기에 더 질 높은 코드들을 볼 수 있었던 것 같았다.
    • 여러 미션에 대한 기능을 구현해보는 것도 힘들지만 재밌었고, 코드리뷰는 그야말로 배움의 장이었기에 성장하는 재미를 느껴볼 수 있다.
    • 이 글을 보고있는 누군가가 혹여나 지원을 고민한다면, 고민말고 지원해보았으면 좋겠다는 생각이 들 정도이기 때문이다.
  • 아쉬웠던 점
    • 프리코스가 마무리 되고도 아쉬운 점이라면 4주차 동안 미션을 진행하고 나서도 부족하다고 생각되는 부분들이다.
      • 기능 요구사항에 대한 꼼꼼한 문서 작성
      • 예외가 발생할 수 있는 테스트 코드 작성
      • 프로그램의 올바른 구조를 고민하고 코드 작성(앞으로도 많은 고민이 필요할 것 같다)
  • 마무리하며
    • 물론 아쉬웠던 점도 있지만, 좋은 점이 훨씬 많았다.
    • 이런 좋은 경험을 통해 올바른 코딩 습관을 알 수 있게 되었고, 자연스럽게 공부하는 것이 몸에 익숙해지게 되었다.
    • 이 글을 3시간 넘게 작성하고 있는 나도 잘 그렇지 못하고 있지만, 좀 더 적극적으로 활동하고 노력하는 게 좋은 기회를 만들 수 있다고 생각이 들게 되었다.
    • 그러니 우리 모두 주저하지 말고 노력하는 사람이 되도록 하자.