우아한테크코스/미션 기록

[레벨2] 웹 자동차 경주 미션

d02 2023. 4. 27. 22:00

기능 요구사항

- 레벨1 첫번째 미션으로 진행한 자동차 경주 콘솔 게임 코드를 가져와, 웹 상에서도 서비스 가능한 어플리케이션으로 변경한다.
- 콘솔 어플리케이션, 웹 어플리케이션 간의 중복 코드를 제거한다.
- 게임 플레이 이력 조회 API를 구현한다.

 

전체 회고

코드 리뷰 기간과 학습 기간을 분리할 필요가 없다

1년 전 Spring을 써보긴 했지만, 객체지향에 대해 모르고 Spring의 개념에 대해서도 깊이 알지 못하는 상태로 써본 것이었다. 기억이 잘 안나기도 하고, 이번 레벨에서는 스프링에 대한 기초를 다지는 데 시간을 많이 투자할 필요성이 느껴졌다.

 

처음에는 빨리 미션 끝내고 공부해야 할 것 같다는 불안감이 계속 들었다.

하지만 생각해보니 주어진 미션 자체가 Spring을 공부할 수 있는 플레이그라운드가 아닌가?

 

그래서 리뷰어 분께서 던져주신 여러 가지 질문, 학습 키워드를 기록하며 학습, 답변, 리팩터링을 동시에 진행해보고, Spring의 여러 기능들을 직접 사용해보는 시간을 가졌다.

나의 학습 상태에서는 Spring의 내부 코드를 까보고 동작 원리를 탐구하는 단계보다는 사용법 위주로 먼저 접근하는 것이 좋다고 생각했다.

학습 키워드는 프로젝트의 README.md에 리팩터링 시 함께 업데이트하며 살아있는 문서로 작성하려고 했다.

코드리뷰를 할 때, 또 끝난 미션을 다시 돌아볼 때 PR의 코멘트를 하나 하나 찾아가며 읽는 것이 불편했는데 위와 같이 코멘트 링크를 달아 정리하니 편하다. 미션 회고에서 더 정리할 필요도 없을 것 같다.

 

고민을 효율적으로 하는 법을 찾자

그렇지만 이번 미션에서 Spring 사용 연습보다 훨씬 시간을 많이 할애한 부분은 설계에 대한 고민이었다.

테이블 설계 시 데이터 무결성/성능 vs 객체지향 사이의 조율, 여러 Dao에 대한 추상화 계층을 둘 것인가 등 ..

고민을 하는 것은 좋지만, 마냥 하염없이 리뷰 코멘트와 코드를 쳐다보고만 있는 데 시간을 많이 썼다.

그리고 이로 인해 잘 정리된 강의, 공식문서 등을 통한 더 깊이 있는 학습의 시간을 아직 충분히 가지지 못한 것 같아 그 점이 아쉽다.

 

시간은 비싼 자원이므로 앞으로는 고민을 효율적으로 하는 법을 찾는 게 나만의 학습법에 대한 관건일 것 같다.

당장은 아래와 같은 액션을 취해볼 수 있겠다.

- 가장 먼저 무엇이 고민되는지 / 모르는지 작게 쪼개보기

- 혼자 하는 고민이 30분 이상으로 길어지면, 코치/리뷰어/크루에게 질문하기

- 공신력 있는 자료 + Phind 잘 활용하기

 

또, 고민을 오래 한 것에 비해 정리된 생각을 간결하게 답변으로 전달하지 못해 아쉬웠다. 이 부분은 아직 모르는 부분이 많아 생기는 문제인 것 같아서 오히려 학습을 위한 동기부여가 되었다.

 

미션 로그

  • @RequestBody 사용법
  • @Transactional 사용법
  • @Validate 사용법
  • @Repository, @Component, @Service 어노테이션을 사용하는 이유, Spring PSA란?
  • Layered Architecture
  • Dao 클래스 분리 기준
  • DB Join vs 비즈니스 로직에서의 조립
  • 객체지향 vs DB 정규화
  • DTO, Entity의 차이
  • 도메인 객체 - DTO - Entity를 언제 어디서 변환하고 사용할 것인가?
  • DB 액세스 시 Entity는 왜 사용하는가?
  • Spring ExceptionHandler, ControllerAdvice
  • @SpringBootTest 
  • 웹 환경과 DB 영속성 계층의 차이점

 

주요 기술 부채

  • Spring 핵심 가치 및 개념에 대한 이해
  • 테스트 DB를 두는 것 대신 다른 테스트 방식 공부하기 (Mock, Spy, ...)
  • @Transactional 구체적인 사용법, 동작 원리 
  • Spring data의 Repository가 왜 JdbcTemplate의 insert를 그대로 사용하지 않고 Entity save(Entity entity)로 메서드 시그니쳐를 바꾸었을까?
  • @WebMvcTest에서 jdbc, datasource를 mock bean으로 등록했을 때 정상 동작하지 않는 이유
  • Restful API
반응형