JPA
-
Spring Data JPA 페이징 방식 : Page vs Slice (vs List)카테고리 없음 2022. 8. 10. 00:20
@Repository public interface PostRepository extends JpaRepository { Slice findSliceBy(Pageable pageable); Page findPostsByMemberOrderByCreatedAtDesc(Pageable pageable, Member member); } 사용된 코드 0. intro 우리 코드는 원래 Slice를 이용해 페이징 했다. 그런데 이번에 "내가 쓴 글 조회" API는 총 페이지 수도 필요로 했다. 찾아보니 Page를 통해 기존 Slice 기능과 더불어, 총 페이지 수 도 알 수 있었다. 다만 Page 는 생성 비용이 Slice 보다 많이 드므로 총 페이지 수 를 알 필요 없다면 Slice를 쓰면 될 것 같다. 1. P..
-
우당탕탕 테스트 격리 트러블 슈팅기카테고리 없음 2022. 8. 1. 13:14
0. 문제 상황 HashtagServiceTest(서비스의 테스트) 코드를 짜던 도중이었습니다. 전체 테스트들을 실행할 시, HashtagServiceTest가 랜덤 확률로 통과하거나 실패하는 상황이 반복되었습니다. 대략 5번 테스트를 실행할 시 1번 꼴로 테스트가 실패했습니다. 막상 HashtagServiceTest만 돌렸을 땐 테스트가 문제없이 통과했습니다. 1. 문제 해결 랜덤한 확률로 테스트가 실패할 때 고려해야 할 부분은 다음과 같습니다. 테스트 메소드의 로직이 잘못되어 순서에 따라 다른 테스트 코드가 영향을 받고 있을 수 있다 테스트 환경이 잘못되어 온전한 초기화가 이뤄지지 않고 있다 둘다 결국 테스트 격리의 문제입니다. 이중 저는 2번, 테스트 환경의 문제라고 판단했습니다. 먼저 실행되는 인..
-
JPA에서 엔티티 저장 시간을 자동 생성하는 방법카테고리 없음 2022. 7. 10. 15:17
속닥속닥 서비스의 게시물 등록 기능 개발 중, 게시물 등록 시간을 저장해야 하는 요구 사항이 있었습니다. 팀원들과 이런 저런 방법을 적용해보고 최종으로 결정한 방법에 대해 소개해보겠습니다. 핵심만 알고 싶으신 분은, 아래의 동작하는 코드와 글의 최하단에 요약만 보셔도 이해를 하실 수 있습니다. 먼저 동작하는 코드입니다. @Entity @Getter EntityListeners(AuditingEntityListener.class) // 3, 4 public class Post { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "post_id") private Long id; @CreatedDate // 1 private Loc..