오늘의 키워드
- JPA Repository
- ORM (Object-Relational Mapping)
- 영속성 (Persistence)
오늘의 내용
- JPA Repository 쿼리 코드 작성
- JPA Repository를 사용하면 데이터베이스와 상호작용하는 코드를 간단하게 작성할 수 있다. Spring Data JPA에서는 다양한 방법으로 쿼리를 정의할 수 있다
- 파생된 쿼리 메서드 (Derived Query Methods)
- 메서드 이름을 기반으로 쿼리를 생성한다
public interface TutorialRepository extends JpaRepository<Tutorial, Long> {
List<Tutorial> findByPublished(boolean isPublished);
List<Tutorial> findByTitleContaining(String title);
}
- @Query 어노테이션을 사용한 쿼리
-
- JPQL 또는 Native SQL 쿼리를 직접 정의할 수 있다
-
public interface TutorialRepository extends JpaRepository<Tutorial, Long> {
@Query("SELECT t FROM Tutorial t WHERE t.published = :published")
List<Tutorial> findByPublished(@Param("published") boolean published);
}
- Modifying 어노테이션
- 데이터 수정 쿼리에 사용된다
@Modifying @Query("UPDATE Tutorial t SET t.title = :title WHERE t.id = :id")
int updateTitle(@Param("id") Long id, @Param("title") String title);
- ORM의 등장과 그 배경
- ORM(Object-Relational Mapping)은 DB 의존성과 중복 쿼리 문제를 해결하기 위해 등장했다. ORM은 데이터베이스 테이블을 객체로 매핑하여 객체 지향적으로 데이터베이스를 조작할 수 있게 한다
- 상속 문제: 객체 간의 상속 관계를 데이터베이스 테이블에 매핑한다
- JPA 어노테이션: @Inheritance, @DiscriminatorColumn
- 관계 문제: 객체 간의 참조 관계를 데이터베이스의 외래키로 매핑한다
- JPA 어노테이션: @OneToMany, @ManyToOne, @JoinColumn
- 탐색 문제: 객체 간의 탐색을 효율적으로 처리한다
- JPA 어노테이션: @FetchType, fetchJoin()
- 밀도 문제: 큰 객체를 분리하여 테이블로 매핑한다
- JPA 어노테이션: @Embedded
- 식별성 문제: 객체를 고유하게 식별한다
- JPA 어노테이션: @Id, @GeneratedValue
- 영속성 컨텍스트와 쓰기 지연
- 영속성 컨텍스트는 엔티티를 관리하는 캐시 역할을 한다. 엔티티 매니저를 통해 엔티티의 상태를 전환하며, 1차 캐시를 통해 쓰기 지연을 최적화한다
- 엔티티 상태 전환:
- 비영속(new/transient): 영속성 컨텍스트와 무관한 상태
- 영속(managed): 영속성 컨텍스트에 저장된 상태
- 준영속(detached): 영속성 컨텍스트에서 분리된 상태
- 삭제(removed): 영속성 컨텍스트와 DB에서 삭제될 상태
- 쓰기 지연 효과:
- 여러 쿼리를 모아서 한번에 전송
- 트랜잭션 종료 시점에 최적화된 쿼리 전송
오늘의 회고
QueryDSL테스트를 하다가 계속 모킹이 안 됐다는 오류가 떠서 테스트코드 작성을 완성하지 못했다. 반복되는 오류로 거의 밤을 새웠는데 해결도 못하고~ 지각도 하고~ 최악의 하루였다.....
'TIL' 카테고리의 다른 글
TIL내일배움캠프 13주차 JPA심화 JPA 자동 쿼리 생성 (0) | 2024.07.10 |
---|---|
TIL내일배움캠프 13주차 JPA심화 JPA 테이블 매핑 (1) | 2024.07.08 |
TIL내일배움캠프 12주차 JPA심화 MyBatis (0) | 2024.07.05 |
TIL내일배움캠프 12주차 JPA심화 JDBC (0) | 2024.07.03 |
TIL내일배움캠프 12주차 JPA심화 DB Driver (0) | 2024.07.01 |