본문으로 바로가기

2주 차 미션 : JPA

 

저장소 : https://github.com/prodo-developer/jwp-qna

 

느낀점

  • JPA의 대한 깊은 이해
  • 객체의 참조와 테이블의 외래 키를 매핑해서 객체에서는 참조를 사용하고 테이블에서는 외래 키를 사용하기
  • 객체는 연관된 객체를 찾을 때 참조를 사용할때는 영속성 전이를 시도
  • 결합도에 대한 이해

이번 과정의 목표 경험

  • 점진적으로 리팩토링하는 경험
  • JPA 엔티티 매핑
  • JPA 연관관계 매핑 (일대다)
  • 동기들과 페어 프로그래밍 진행

내 코드 피드백

일대다 관계, 다대일 관계 (영속성 전이) 에 대한 이해가 부족했었다.  가급적이면 양방향을 사용하지 않고

일대다 방식을 권장한다. 

다시 한번 김영한의 JPA강의를 보면서 이해 할 필요가 있다.

 

Junit에 static을 선언하고 Test를 돌리다보면 찾기 힘든 에러들을 발견하는 경우들을 볼 수 있다.

 

테스트 작성 시 다른 테스트에 영향을 받지 않도록 구성해야 합니다.
static 변수를 만들고 여기저기서 사용하고 있어서 테스트 간 격리가 제대로 이루어지지 않고 테스트간 서로 영향을 받게 되겠네요.

 

가장 먼저 매핑 관계에 Cascade(영속성 전이)가 일어나면 저장에 실패할 수가 있으므로 주의!

 

메서드의 이름을 확실하게 정의 할 필요가 있다.

이번 미션역시 get, set을 강조하는것 보다, 동사 형태로 짓는걸 권장한다.

또한, 이 역할을 그 기능을 확실하게 분리 할 필요가 있다.

 

 

결합도에 대한 이해가 부족하여, 기존에 오브젝트책을 참고하고, 모각코를 하는과정에 팀원들과 이야기를 나누며

이해를 조금씩 했었다.

 

결국 한곳에서 모든 역할을 결합하게되면 한곳에서 수정이 모두 일어나기 때문에 결합도가 떨어질 수 있습니다. 

 

도메인에 있던 delete기능들을 QnaService로 분리하였다.

 

후기

이번 JPA 수업은 그 동안 사이드 프로젝트, 김영한의 인프런 인강을 보고 만만하게 봤다가 크게 다쳤다.

이번 우아한 테크캠프가 끝나면 아래의 책을 다시한번 실습 해 보면서 깊숙하게 이해 해야겠다.

인프런 인강역시 야생형으로 한 사이클로 봤다면 학자형으로 완전히 내것이 될 때까지 봐야겠다.

코드로 배우는 스프링 부트 웹 프로젝트