이번에 우테코 프리코스를 경험해 볼 기회가 생겼다.
프리코스를 즐겨보았고, 각 주차에 대한 회고와 배운 점을 남겨보려고 한다.
1주차 ⚾
- Git - 숫자야구
- 진행 과정
- 1주차 과제 때는 정말 기능구현에 대해서 완성시키는 것이 목적이었다.
- 그렇기 평소에 코딩을 하던 것 처럼 코드를 작성했고 기능을 완성하게 되었다.
- 간단한 기능이기도 하였지만 108줄의 코드와 3개의 커밋으로 과제를 제출하였다.
- 코드 리뷰
- 거의 사용해본 적 없었던 Pull Request와 처음으로 경험해보는 코드 리뷰를 하게되었다.
- 나의 코드가 리뷰되는 것은 물론이고 상대방의 코드도 리뷰해주어야하는 상황에서 처음에는 어떻게 해야할지 감을 잡지 못하였다.
- 다른 분들의 코드 리뷰를 정말 많이 읽어보고, 자연스럽게 코드도 많이 읽어보는 시간을 가질 수 있었다.
- 그 과정에서 부족했던 점을 많이 발견할 수 있었고, 배울 수 있었던 것 같다.
- 개인적으로 정리한 코드 리뷰를 하는 방법은 아래를 참고하면 더 좋을 것 같다.
- 회고와 배운 점
- 1주차에는 제약사항도 없었고, 기능 요구사항이 복잡하지도 않았다.
- 그렇기에 간단하게 생각했던 부분들에서도 피드백을 받을 수 있었다.
- 1주차에서 배운 점은 아래와 같다,
- 하드코딩 처리
- 메서드 분리
- 의미있는 커밋메시지 작성
- 코드리뷰 방법
- 코드리뷰를 해보면서도 많이 배울 수 있다는 점은 정말 좋았다.
2주차 🚗
- Git - 자동차 경주
- 진행과정
- 2주차 과제에는 1주차와는 다르게 제약사항이 추가되었다.
- Indent의 깊이가 3을 넘지 않도록 한다.
- 3항 연산자를 쓰지 않는다.
- 메서드가 한 가지의 일만 하도록 한다.
- 테스트를 작성한다.
- 이 요구사항에 최대한 맞춰서 코드를 작동하도록 작성하는 것이 목표이다.
- 추가된 요구사항과 1주차 때의 배운 점들을 최대한 반영하여 기능을 완성하였다.
- 2주차도 기능이 어렵지는 않았기에 250줄의 코드와 19개의 커밋으로 과제를 제출하였다.
- 2주차 과제에는 1주차와는 다르게 제약사항이 추가되었다.
- 중점적으로 고려한 사항
- 2주차 때에는 1주차에서 배운 점을 활용하기 위해 여러가지 사항을 신경썼다.
- 기능 사항을 정리하고 기능구현을 시도하였다.
- 읽기 쉬운 코드를 고려하여 메서드 분리와 삼항연산자 사용을 하지 않았다.
- Indent의 깊이가 3을 넘지 않도록 주의하며 코드를 작성하였다.
- 하드코딩을 방지하기 위해 클래스를 분리하여 상수를 사용하였다.
- 의미있는 커밋 메시지 작성과 커밋을 기능 단위로 분리하였다.
- 특히 메서드 분리에 집중하였고, 커밋 작성과 기능 단위 분리에 힘썼다.
- 2주차 때에는 1주차에서 배운 점을 활용하기 위해 여러가지 사항을 신경썼다.
- 코드 리뷰
- 이번 코드 리뷰에서 가장 중점적으로 다룬 점은 메서드 분리였다.
- 내 코드에서 집중한 부분이기도 하였고 다른 분들의 코드에서는 어떻게 작성되었는지 궁금했다.
- 물론 부족한 지식으로 읽는 코드만큼 피드백 줄 요소보다는 배울 부분이 더 많았기에 그만큼 더 꼼꼼히 보려고 노력하게 되었다.
- 회고와 배운 점
- 2주차에서 피드백과 개인적으로 배운 점은 아래와 같다.
- 상수 대신 Enum 사용
- 클래스 분리
- if - else 구문에서 else 사용 지양
- 매직 넘버 사용 지양
- 의미있는 메서드 명 사용
- 적절한 접근제어자 사용
- 테스트 코드 작성
- 기능 요구사항 구체적으로 정리
- Collection, stream과 같은 Java의 기능 적극 활용
- 부족한 부분이 주차를 거듭할 수록 보여서 즐겁고 코드 리뷰하는 시간이 즐거웠다.
- 2주차에서 피드백과 개인적으로 배운 점은 아래와 같다.
3주차 🎱
- Git - 로또
- 진행과정
- 3주차 부터는 기능 요구사항이 복잡해지기 시작했다.
- 추가적인 제약사항이 점점 추가되며 고려해야할 사항도 점점 늘어났다.
- 메서드의 길이가 15줄을 넘어가지 않도록 한다. (메서드 분리 지향)
- else 예약어를 쓰지 않는다.
- Enum을 사용하여 구현한다.
- 또한, 메서드 분리에 더 힘쓰기 위해서 MVC 패턴을 적용해보기로 마음먹었기 때문에 시간 소요가 급격히 늘어났다.
- 기능 구현에 시간이 꽤 소요되었고, MVC 패턴에 대해 공부해보고 제대로 적용해보는 주차 였기에 생각보다 기간이 짧게 느껴졌다.
- 3주차에는 884줄의 코드와 31개의 커밋을 작성하여 코드를 제출하게되었다.
- 중점적으로 고려한 사항
- 3주차 때도 마찬가지로 이전에 배운 점들과 추가적인 요구사항들을 지키기 위해 노력했다.
- 기능 요구사항을 좀 더 세부적으로 정리하였다.
- MVC 패턴을 적용하여 패키지, 클래스, 메서드 분리를 쉽게 할 수 있도록 하였다.
- Enum 을 적극 사용하여 하드코딩 된 부분이 없도록 하였다.
- else 예약어 사용을 지양하여 코드를 작성하였다.
- 의미있는 메서드 명 사용과 커밋 메시지를 작성하도록 노력하였다.
- 3주차 때도 마찬가지로 이전에 배운 점들과 추가적인 요구사항들을 지키기 위해 노력했다.
- 코드리뷰
- 이번 코드리뷰에서는 MVC 패턴과 같은 구조적인 부분과 메서드 분리에 대해서 집중하였다.
- MVC 패턴을 적용하는 것이 많이 어색했기 때문에 그 과정에 많은 공부를 하게되었다.
- 주차를 거듭할 수록 많은 코드를 읽어보게 되면서 코드리뷰 하는 법을 조금 알게 된 것 같아서 3주차에는 코드 리뷰가 정말 잘되었다.
- 그래서 3주차의 코드리뷰가 가장 자연스럽게 잘된 것 같고 재미있었던 것 같다.
- 회고와 배운 점
- 3주차 미션은 오래걸리고 힘들었지만 그만큼 가장 많이 배우고, 의미가 있었던 주차가 아닌가 싶다.
- 3주차에서 배운 점은 아래와 같다.
- MVC 구조
- Validate 를 도메인 로직에서 진행
- record의 사용
- 문서 작성을 좀 더 보기 쉽게 꼼꼼하게 하고 문서를 통해 점검하기
- 테스트 코드 꼼꼼히 작성하기
- 클래스, 메서드, 변수 명 작성 시 불필요한 부분 제거
- else-if 사용이 더 좋아 보인다는 피드백
- else-if 부분은 실제로 그래보였고 3주차가 끝나고 나서는 단순히 수용하게 되었다.
- 이런 생각이 4주차에서 잘못된 코드로 이어졌기에 이후 깨달은 내용은 4주차 배운 점에서 정리하겠다.
4주차 🎄
- Git - 크리스마스 프로모션
- 진행과정
- 마지막 4주차 과제는 기존과는 다른 방식으로 진행되었다.
- 기본 템플릿을 가져와 나의 repository 안에 main 브랜치에서 작업을 하게 되었고, 이로인해 커밋이 무지막지하게 늘어나는 일이 있었다.
- 다른 이들의 코드를 참고하지 못하게 하기위한 방안이었다는 걸 알게되었고, 그에 걸맞게 미션의 난이도도 많이 어려웠다.
- 추가적인 요구사항으로는 Input, Output을 따로 작성하도록 하였고, 이는 마치 MVC를 권장하는 것 처럼 보여 MVC를 좀 더 잘 구현할 수 있도록 하였다.
- 또한, 그동안의 다른 분들의 화려한 문서정리에 자극을 받아 문서 정리에도 힘써보았다.
- 그래서 그런지 1,403줄의 코드와 22개의 커밋으로 미션을 제출하게 되었다.
- 중점적으로 고려한 사항
- 3주차에 이어 이번에도 이전에 배운 점을 최대한 활용하도록 노력했다.
- 문서에 구체적인 기능 요구사항을 정리하면서 기능을 충분히 이해하였다.
- Validate를 도메인 로직에서 구현하여 View의 책임을 덜어주었다.
- record를 적극 사용하여 반복되는 코드를 줄였다.
- 도메인 로직에 대해 테스트 코드 작성하여 기능 작동 유무를 확인하였다.
- Enum 을 적극 사용하여 하드코딩 된 부분이 없도록 하였다.
- 클래스, 메서드, 변수 명에 대해 크게 고려하며 작성하였다.
- 3주차에 이어 이번에도 이전에 배운 점을 최대한 활용하도록 노력했다.
- 코드리뷰
- 4주차에도 물론 코드 리뷰에 많은 시간을 쏟았다.
- 많은 분들이 4주 동안 많은 성장을 겪으셔서 그런지 정말 코드가 다양했고 읽는 재미가 가득했다.
- 그래서 나도 많은 피드백을 받을 수 있었던 것에 비해 피드백 해드릴 내용이 많이 보이질 않아 죄송한 마음도 들었다.
- 그래도 3주차의 느낌을 살려 최대한 코드리뷰를 해보며 많은 시간을 쏟았던 것 같다.
- 회고와 배운 점
- 4주차에 배운게 된 점은 아래와 같다.
- 구조적인 관계에서 나온 의존관계 설정 클래스 분리
- 이는 MVC 패턴을 사용하면서 나온 문제였다.
- 프로그램을 MVC로 나누더라도 실행하는 부분에서는 큰 의존관계를 가질 수 밖에 없었고 이를 하나의 클래스에서 관리하도록 하였었다.
- 하지만 이 부분에서 실수한 점은 관리하는 부분과 실행하는 부분을 분리하지 않은 점이 문제가 되었었다.
- Config 파일과 같이 의존관계를 설정해주는 클래스와 실행 클래스를 따로 두어 너무 많은 의존성을 하나의 클래스가 책임지게 하는 상황이 되는 걸 막아야겠다.
- Enum에서 사용하는 하드코딩 또한 상수로 정의
- if-else 구문에서의 else 예약어 지양을 해야하는 이유
- 테스트 코드와 문서 작성의 중요성
- 4주차 미션에서는 요구사항이 어려웠던 것도 있어 기능구현에 정신이 팔렸었다.
- 이와 동시에 작성한 문서에 대한 기능 구현 사항이나 도메인 로직에 대한 테스트에 매몰되어 다른 예외나 세부적인 부분에 대해 챙기지 못했던 것 같다.
- 여러 가능성을 열어두고 도메인 로직에 대해 여러 테스트를 작성하는 것이 중요하다고 생각하게 되었다.
- 구조적인 관계에서 나온 의존관계 설정 클래스 분리
- 4주차는 그야말로 너무 아쉽다고 밖에 표현할 수가 없다.
- 그만큼 요구 사항이 어렵게 다가왔고, 개선해야 할 점이 너무 많았기 때문이다.
- 4주차에 배운게 된 점은 아래와 같다.
총 회고
- 총 회고
- 프리코스를 즐겨보면서 정말 여러가지를 짧은 시간 내에 겪게 되었다.
- 평소에는 이렇게 코딩을 할 수 있는 기회도 없을 뿐더러 코드 리뷰를 겪을 수 있다는 건 정말 귀중한 경험이라고 생각된다.
- 이번 6기에서는 경력이 있는 분들도 신청할 수 있었기에 더 질 높은 코드들을 볼 수 있었던 것 같았다.
- 여러 미션에 대한 기능을 구현해보는 것도 힘들지만 재밌었고, 코드리뷰는 그야말로 배움의 장이었기에 성장하는 재미를 느껴볼 수 있다.
- 이 글을 보고있는 누군가가 혹여나 지원을 고민한다면, 고민말고 지원해보았으면 좋겠다는 생각이 들 정도이기 때문이다.
- 아쉬웠던 점
- 프리코스가 마무리 되고도 아쉬운 점이라면 4주차 동안 미션을 진행하고 나서도 부족하다고 생각되는 부분들이다.
- 기능 요구사항에 대한 꼼꼼한 문서 작성
- 예외가 발생할 수 있는 테스트 코드 작성
- 프로그램의 올바른 구조를 고민하고 코드 작성(앞으로도 많은 고민이 필요할 것 같다)
- 프리코스가 마무리 되고도 아쉬운 점이라면 4주차 동안 미션을 진행하고 나서도 부족하다고 생각되는 부분들이다.
- 마무리하며
- 물론 아쉬웠던 점도 있지만, 좋은 점이 훨씬 많았다.
- 이런 좋은 경험을 통해 올바른 코딩 습관을 알 수 있게 되었고, 자연스럽게 공부하는 것이 몸에 익숙해지게 되었다.
- 이 글을 3시간 넘게 작성하고 있는 나도 잘 그렇지 못하고 있지만, 좀 더 적극적으로 활동하고 노력하는 게 좋은 기회를 만들 수 있다고 생각이 들게 되었다.
- 그러니 우리 모두 주저하지 말고 노력하는 사람이 되도록 하자.
'회고' 카테고리의 다른 글
인프런 워밍업 클럽 2기 - 백엔드 프로젝트(Kotlin, Spring) / 후기 (3) | 2024.10.28 |
---|---|
[23년 4월 ~ 24년 7월] 잔디 1주년을 기념하며 남기는 회고록 (3) | 2024.07.07 |