Spring Boot(4) - RESTful API를 사용하는 백엔드(2)
1. JPA
1-1. 정의
- RDBMS와 객체 간 매핑을 제공하는 표준 API
- JAVA 객체를 DB 테이블에 매핑
- JAVA 객체와 DB 간 데이터 전송을 관리
1-2. 장점
- SQL 코드 길이를 줄일 수 있음
- SQL 코드를 객체지향적으로 관리
- Entity로 DTO를 대체
1-3. 사용법
- @Entity 어노테이션으로 엔티티를 정의
- @Table 어노테이션으로 테이블명 정의
- @Id로 PK를 정의
- @GenerateValue 형태로 자동으로 값 갱신하는 규칙을 설정할 수 있음
- @CreationTimestamp 어노테이션으로 생성 시간을 정의할 수 있음
- @UpdateTimestamp로 시간 자동 갱신 가능
- @DynamicUpdate로 변경된 필드만 업데이트할 수 있음
- 불필요한 값을 방지하기위해서는 updatable=false 옵션을 사용한다
2. Repository
2-1. 정의
- 쿼리를 실행하는 코드를 저장하는 계층
- JPQL 언어를 사용
- CRUDRepository를 상속받고, @Query 어노테이션으로 쿼리를 작성할 수 있음
2-2. 상속 관계
- JpaRepository가 최상위 클래스
- PagingAndSortingRepository가 JpaRepository를 상속
- CrudRepository는 PagingAndSortingRepository를 상속
- Repository는 CrudRepository를 상속
3. 서비스
- Entity 타입을 사용하는 서비스 인터페이스를 작성할 수 있음
- JPA를 사용한 Repository를 Autowire해서 사용
- JPA를 도입하면 쿼리 작성이 불필요하며, 메서드 오버로딩으로 기능 확장이 가능
- 메서드명이 복잡하거나, 쿼리 메서드를 사용하기 어렵다면 @Query로 직접 쿼리를 작성할 수 있음