TIL

250122 수 TIL

파란배개 2025. 1. 22. 17:57

영속성 컨텍스트와 JPA 기본 개념

영속성 컨텍스트

  • 영속성 컨텍스트에 저장된 객체를 영속 객체라 하며, 저장되지 않은 객체는 비영속 객체로 불림.
  • JPA는 영속성 컨텍스트를 통해 DB와 동기화하며, 이를 기반으로 데이터 변경을 관리.

스냅샷

  • 영속성 컨텍스트에서 객체 원본 상태를 유지하기 위한 복사본.
  • 변경 감지(Dirty Checking)와 데이터 동기화를 위해 사용.

orphanRemovalcascade

orphanRemoval의 동작

  • 한 트랜잭션 내에서 자식 객체 제거 시 DELETE 쿼리를 발생시킴.
  • 부모 객체와 연관이 끊긴 자식 객체를 DB에서 삭제.
  • 주의: 부모-자식 관계가 강하게 연관된 경우에만 사용하는 것이 적합.

cascade와의 차이점

  • CascadeType.REMOVE: 부모 객체가 삭제될 때 연관된 모든 자식 객체를 삭제.
  • orphanRemoval: 부모 객체와 관계가 끊긴 특정 자식 객체만 삭제.

올바른 사용 예제

@OneToMany(mappedBy = "post", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Comment> comments;

public void addComment(Comment comment) {
    comments.add(comment);
    comment.setPost(this);
}

cascade 옵션

  • persist: 새로운 엔티티를 영속화할 때 연관된 자식 엔티티도 함께 저장.
    • 예: 객체 A 저장 시 객체 B도 저장.
  • merge: 준영속 상태 또는 비영속 상태의 엔티티를 영속 상태로 변경.
  • remove: 부모 엔티티 삭제 시 자식 엔티티도 삭제.
  • refresh: DB의 데이터를 기준으로 엔티티 상태를 갱신.
  • detach: 영속성 컨텍스트에서 엔티티를 분리, 준영속 상태로 전환.

참고 사항

  • cascade는 반드시 필요한 경우에만 사용해야 함.
  • 방향: 부모(One) → 자식(Many).

스프링에서 테스트 DB 설정

다중 프로파일 사용

  1. application-test.yml 작성:
    • 기존 application.yml과 다른 설정을 추가.
    spring:
      datasource:
        url: jdbc:h2:./db_test;MODE=MySQL
    profiles:
      active: test
  2. 프로파일 활성화 방법:
    • application.yml에서 활성화:
    • profiles: active: test
    • 테스트 클래스에서 활성화:
    • @SpringBootTest @ActiveProfiles("test") public class PostServiceTest { @Test public void testDBProfile() { System.out.println("Test DB Profile Active"); } }
  3. .gitignore 설정:
    • 테스트 DB 관련 파일 제외.
    db_test.mv.db
    db_test.trace.db

자동 쿼리 메서드

정의

  • JPA 리포지토리는 메서드 이름만으로 SQL을 자동 생성.
  • 기본적으로 JpaRepository를 상속받아 사용.

페이징 처리 예제

int itemsPerPage = 2; // 한 페이지에 보여줄 아이템 수
int pageNumber = 1; // 현재 페이지 (0부터 시작)
Pageable pageable = PageRequest.of(pageNumber, itemsPerPage, Sort.by(Sort.Direction.DESC, "id"));
Page<Post> postPage = postService.findAll(pageable);
List<Post> posts = postPage.getContent();
  • Pageable: 페이징 및 정렬을 위한 객체.

'TIL' 카테고리의 다른 글

250124 금 TIL  (0) 2025.01.24
250123 목 TIL  (0) 2025.01.23
250121 화 TIL  (1) 2025.01.21
250120 월 TIL  (0) 2025.01.20
250116 목 TIL  (1) 2025.01.16