우아한 테크 캠프 PRO 2기 - 2주차 JPA 후기

2021. 6. 1. 12:29우아한테크캠프PRO

2주차 JPA 후기

2주차 git 저장소: https://github.com/ybh89/jwp-qna.git

2주차 미션을 완료했다.

2주차 미션을 간단 요약을 하면 아래와 같다.

  • 엔티티 매핑
  • 연관관계 매핑
  • 레거시 코드 TDD로 리팩토링하기

나는 JPA에 대해서는 이미 학습되어 있고 경험도 있었기 때문에 쉽게 넘어갈 수 있었다. 나에게 핵심은 레거시 코드를 TDD로 리팩토링하는 것이었다. QnA 서비스가 이미 레거시 코드로 작성되어 있었고 질문과 답변을 삭제하는 기능을 TDD로 리팩토링하는 것이다.

기능 요구 사항은 아래와 같다.

  • 질문 데이터를 완전히 삭제하는 것이 아니라 데이터의 상태를 삭제 상태(deleted - boolean type)로 변경한다.
  • 로그인 사용자와 질문한 사람이 같은 경우 삭제할 수 있다.
  • 답변이 없는 경우 삭제가 가능하다.
  • 질문자와 답변 글의 모든 답변자 같은 경우 삭제가 가능하다.
  • 질문을 삭제할 때 답변 또한 삭제해야 하며, 답변의 삭제 또한 삭제 상태(deleted)를 변경한다.
  • 질문자와 답변자가 다른 경우 답변을 삭제할 수 없다.
  • 질문과 답변 삭제 이력에 대한 정보를 DeleteHistory를 활용해 남긴다.

이렇게 기능 요구사항이 정리가 잘 되어있으니 TDD가 정말 쉬웠다. 그냥 하나 하나 미션을 클리어해가면 완성되었다. 그래서 TDD에서 정말 중요한게 기능 요구사항을 잘 정리하는 거라는 생각이 들었다.

또, 이 미션의 핵심은 서비스에 구현되어 있는 비즈니스 로직을(트랜잭션 스크립트 패턴) 도메인쪽으로 옮기는 것이다.(도메인 모델 패턴)

이 또한 이미 도메인 모델 패턴으로 개발하는 것이 1주차에서 학습되어 있어 쉽게 개념을 잡고 진행할 수 있었다. 그래서 1주차보다 쉬웠고 피드백 또한 많이 받지 않았다.

뭔가 도메인 모델 패턴으로 설계할 수 있는 능력이 생긴것 같아 성장한 기분이 들었다.