우아한테크캠프 PRO/우아한테크캠프 회고록

[우아한테크캠프 Pro] 2주차 미션 후기 (QnA - JPA)

PI.314 2022. 12. 31. 19:36

우아한테크캠프 Pro 2주차 JPA 미션을 진행한 내용과 후기를 정리해보았습니다.

 

미션 저장소

https://github.com/Gyeom/jwp-qna

 

GitHub - Gyeom/jwp-qna: QnA 서비스

QnA 서비스. Contribute to Gyeom/jwp-qna development by creating an account on GitHub.

github.com

학습 내용

  • QnA 서비스를 만들어가면서 JPA로 실제 도메인 모델을 어떻게 구성하고 객체와 테이블을 어떻게 매핑해야 하는지 알아본다.

요구 사항

  •  DDL(Data Definition Language)을 보고 유추하여 엔티티 클래스와 리포지토리 클래스를 작성해 본다.
  • @DataJpaTest를 사용하여 학습 테스트를 해 본다.
  • 객체의 참조와 테이블의 외래 키를 매핑해서 객체에서는 참조를 사용하고 테이블에서는 외래 키를 사용할 수 있도록 한다.
  • 객체지향 생활 체조 원칙을 준수하여 서비스 레이어 리팩터링 한다.

단계별 PR 리뷰 내용

1단계 미션

https://github.com/next-step/jwp-qna/pull/581

 

[김대겸] Step1 PR by Gyeom · Pull Request #581 · next-step/jwp-qna

안녕하세요 리뷰어님, 1단계 엔티티 매핑 PR입니다. 잘 부탁드립니다 :)

github.com

  • 공통 Entity를 활용하자.

2단계 미션

https://github.com/next-step/jwp-qna/pull/615

 

[김대겸] Step2 PR by Gyeom · Pull Request #615 · next-step/jwp-qna

안녕하세요 리뷰어님, 2단계 연관 관계 매핑 PR입니다. 잘 부탁드립니다 :)

github.com

  • 데이터 중심의 관점에서 벗어나자. 연관관계를 활용해 객체중심의 설계를 연습하자.

3단계 미션

https://github.com/next-step/jwp-qna/pull/647

 

[김대겸] Step3 PR by Gyeom · Pull Request #647 · next-step/jwp-qna

안녕하세요 리뷰어님, 3단계 질문 삭제하기 리팩터링 PR입니다. 이번에도 잘 부탁드립니다 :)

github.com

  • equals 를 활용하여 객체를 비교하자.

  • boolean type으로 soft delete 활용하자.

  • 일급컬렉션을 활용하자.

미션 회고

이번 미션을 진행하면서 JPA의 기본동작 원리에 대해 이해할 수 있었다. 초반에는 JPA의 영속성으로 인해 예측하지 못한 동작들이 발생해서 당황스러운 적이 종종 있었는데, 현상들에 대해 하나씩 공부해나가면서 영속성으로 인한 매직효과들이 이제는 조금 익숙해졌다. 그리고 코드를 작성할 때, 데이터 중심의 관점에서 벗어나 연관관계를 활용하여 객체중심으로 설계 및 구현할 수 있도록 노력했다. 앞으로도 JPA를 보다 더 효과적으로 사용하는 방법에 대해 고민하면서 코드를 작성해야겠다.