Skip to content

tech diary 2022.07.05

Philz edited this page Jul 21, 2022 · 1 revision

Annotation

  • @Entity - 맨 위 (가장 특징적)
    • 바로 다음에 @Table(name = “”)
  • Lombok 생성자 - NoArgs만 사용
    • Entity객체는 Protected 설정 추가해주기 @NoArgsConstructor(acess = AccessLevel.PROTECTED)
  • @Transactional class 선언부에서 readOnly = true 옵션 주기

Test

  • controller test에서 mocking시 argument를 any로 줘도 될까?
    • 단순히 “게시글 생성” 기능의 요청, 응답을 올바르게 주고받을 수 있는지 검증하는 case에서는 Dto의 내용이 중요하지 않음. any도 괜찮다.
  • 처음 작성한 Controller Test는 사실 성공이 아니었따?!
    • controller의 parameter 선언부에 @RequestBody가 빠져있었음

윤선용이 미래다

윤선용…당신 정체가 뭐야

assertThat(savedDiscussion).usingRecursiveComparison()
        .ignoringFields("id")
        .isEqualTo(new Discussion(title, "내용"));

  • usingRecursiveComparison(): 객체의 field를 모두 순회하며 조건 비교
  • ignoringFields(String... fieldNamesToIgnore): 특정 field들만 제외

예외처리

  • domain 내부에서 VO를 통해 VS 요청 validation, DB column(인프라)을 통해
    • 비즈니스 로직 상 개발자가 직접 입력한 값으로 Domain을 생성할 일이 없다면 인프라에게 맡겨도 되지 않을까?
      • 반대측: 사람을 믿어? 코드를 믿어..! (생성자 호출할려면 얼마든지 할 수 있다)
    • 검증 level에 따라 VO를 만들고 안만들고 할건지?
      • 포키 뇌피셜: 인프라에게 맡기기로 한거라면 그 검증은 그대로 두고, 새롭게 필요해진 검증만 VO에서 담당하게 해주면 되지 않을까?

BaseTimeEntity

  • preUpdate method 작성 시 views와 같은 column도 변경감지되어 updatedAt이 수정되는 문제
    • preUpdate로 설정하지 말고 그냥 method로 만들어서 수동으로 해주자
Clone this wiki locally