우아한 테크캠프 PRO 3기 - JPA

최대 1 분 소요


2주차 미션은 JPA 였습니다. JPA에 대해서는 실무에서 다뤄본 경험은 없지만, 인프런 김영한님 강의를 통해 개념을 익히고 토이프로젝트를 통해 경험한 바는 있었습니다.

1단계 - 엔티티 매핑

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

1) @EnableJpaAuditing의 사용

image

엔티티를 새로 생성하거나 변경이 되었을 때 이를 감지하여 필드에 자동으로 주입
생성일자, 수정일자와 같이 공통적으로 많은 엔티티 필드에 적용됨으로, 추상클래스에 선언하여 (@MappedSuperclass) 상속받아 사용하고는 함

https://leo0842.github.io/spring/date-auto-create/

2) @DirtiesContext의 사용

image

스프링부트 테스트 환경에서 Bean을 관리하는 Application Context는 한번 구동되면 테스트가 종료될 때까지 전체 테스트에서 재사용하게 된다.
하지만, 테스트를 하다보면 테스트 메서드마다 Application Context를 초기화할 필요가 생긴다. 이럴 때 사용하는게 @DirtiesContext 다.

이 어노테이션을 사용하면 클래스/메서드 단위로 테스트마다 Application Context를 초기화 할 수 있다.

3) setup의 사용

beforeEach(setup) 등을 사용할 때의 문제점

https://jojoldu.tistory.com/611

해당 파일 (클래스) 안에서 테스트가 결합되어 버린다. setup 내부의 코드를 수정하면 모든 테스트 코드에 영향을 미친다.
테스트 코드를 확인하기 위해서는 setup 내부를 확인해야 한다. 테스트 메서드는 그 하나로 완전한 프로그램이 되어야 한다.

2단계 - 연관관계 매핑

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

1) 엔티티간 참조 방향에 대한 설정

image

Question에서 Answers를 참조할 일이 많다. Answers에서는 Question을 참조할 일이 거의 없다. 불필요한 참조 관계는 설정하지 않는다.

3단계 - 질문삭제하기 리팩터링

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

1) JPA 에서는 @Entity에 @Where 를 통해 조건을 명시할 수 있다.

image

2) 필드를 랩핑해서 사용하면, 해당 값만 사용하는 의미있는 메서드를 생성할 수 있다. (ex, PhoneNumber)

image

댓글남기기