Post

로또-TDD 리뷰

부가 설명

entity에 ID가 있으면 persist가 아닌 merge 방식으로 작동한다.

repository는 DAO보다는 collection에 가까운 개념이다.

(why? collections에서 내부의 값을 꺼낸 다음에 변경하면 다시 add나 put을 하시나요?? -> No)

repository에서도 다시 add나 put하지 않기 때문에 collection에 더 가까운 개념

@JoinColumn@OneToMany에서 사용하면 관계테이블을 쓰지 않겠다고 알려줌

@OneToOne 또는 @ManyToOne처럼 뒤에 One이 나오는 경우 @JoinColumn은 컬럼이름 역할

뒤에 Many가 오는 경우 @JoinColumn이 일을 하기 시작함

보통 다대다 연관 관계는 일대다 관계와 다대일 관계로 풀어내는 연결테이블을 사용

1단계

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

리뷰사항

1.@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)를 사용하면 테스트 DB가 아닌 실제 DB 사용(@ActiveProfiles을 설정하여 테스트용 DB를 바라보게 설정 가능)

  1. @DisplayName 을 활용하여 설명을 추가

    2단계

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

    리뷰사항

  2. 요구사항에 맞게 @Lob 사용
  3. 항상 같이 조회하는 경우가 아니라면 지연로딩 속성 추가(@OneToMany는 LAZY가 디폴트이지만 @ManyToOne는 아니기 때문입니다.)
  4. toString()로 객체를 출력할때 양방향 연관관계일 경우 순환참조가 일어날 수 있기 때문에 주의 필요
  5. @Where를 활용하면 삭제되지 않은 것만 가지고 올 수 있다 (@Where(clause = "deleted = false"))
  6. Entity 클래스의 equals() 는 id 값으로 비교하는게 좋을 수 있다.
    1. 1차 캐시를 초기화한 후에 다시 데이터베이스에서 동일한 엔티티를 읽어오는 경우 새로운 객체가 생성 되어도 두 객체를 equals() 했을 때 같아야 같은 row의 데이터임을 확인 가능
    2. 하지만 일반적인 equals()와 다르게 id 값으로만 비교를 하고 아직 영속화되지 않은 Entity에 대해서도 고민 필요

      3단계

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

      리뷰사항

  7. 정적 팩토리 메소드를 만들어보면 인자수도 줄면서 코드의 가독성 높일 수 있다.
    1. 분리했을때 이점은 객체 내에서 스스로 상태와 관련된 검증이나 로직을 처리할 수 있다
  8. 순환참조를 예방하는 다양한 방법이 있지만 실무에서는 주로 DTO를 넘기도록 사용
  9. 리턴이 없는 메소드는 테스트 하기 힘들뿐더러 지금같은 경우 예외발생(일종의 리턴)에 대한 테스트를 하는 것이 더 좋다
    1. assertDoesNotThrow(() -> answer.validateOwner(UserTest.JAVAJIGI));
  10. 관련있는 엔티티끼리 패키지를 묶음

    정리

  11. jpa에 대해 모르는 것이 많아 어려웠다.
  12. 리뷰를 상세하게 해주셔서 많은 것을 알 수 있었다.

참고

This post is licensed under CC BY 4.0 by the author.