[스프링 인 액션] 3. 데이터로 작업하기

윤짱·2025년 12월 21일

Spring

목록 보기
7/18
post-thumbnail

스프링 데이터 JPA를 사용해서 데이터 저장하고 사용하기

스프링 데이터 프로젝트들의 예시

  • JPA : 관계형 데이터베이스
  • MongoDB : 몽고 문서형 데이터베이스
  • Neo4 : 그래프 데이터베이스
  • Redis : 레디스 키-값 스토어
  • Cassandra : 카산드라 데이터베이스

JPA 추가를 위한 의존성 : spring-boot-starter-data-jpa

JPA 객체를 선언하려면 반드시 @Entity 어노테이션을 추가해야 한다. 또한 ID 속성에는 @Id 어노테이션을 지정하여 이 속성이 객체를 고유 식별함을 나타내야 한다.

또한 Id 속성에는 데이터베이스가 자동으로 생성해 주는 Id값이 사용된다. 이때 @GeneratedValue 어노테이션을 사용하면 데이터베이스에 새로운 데이터를 넣을 때마다 아이디를 어떻게 설정할지 고민하지 않아도 된다.


@GeneratedValue 기본키 생성 전략

전략동작 방식사용 DB 예시장점단점실무 사용
IDENTITYDB가 PK를 직접 생성 (AUTO_INCREMENT)MySQL, MariaDB설정 단순, 직관적배치 INSERT 비효율, INSERT 시점에 PK 확정많이 사용
SEQUENCEDB 시퀀스에서 PK 조회PostgreSQL, Oracle성능 우수, 배치 처리 유리시퀀스 관리 필요권장
TABLE별도 테이블로 PK 관리모든 DBDB 독립성성능 저하, 락 경합거의 미사용
AUTODB 방언에 따라 자동 선택모든 DB빠른 초기 설정DB 변경 시 동작 달라짐초기 단계

보조 설정 (@SequenceGenerator)

옵션설명주의 사항
nameJPA 내부에서 참조하는 시퀀스 이름@GeneratedValue의 generator와 일치
sequenceName실제 DB 시퀀스 이름DB에 존재해야 함
allocationSize한 번에 가져올 ID 개수DB 시퀀스 increment와 정합성 필요

JPA에서는 객체가 인자가 없는 생성자를 가져야 하므로 @NoArgsConstructor 어노테이션을 지정한다. 만약 인자가 있는 생성자도 함께 가지고 싶다면 @RequiredArgsConstructor 를 추가하면 된다. 또한 @NoArgsConstructor 에서는 access 속성을 설정하여 외부의 사용을 막을 수도 있다.

JPA 레포지토리 선언하기

JDBC 버전의 레포지토리에서는 레포지토리가 제공하는 메서드를 명시적으로 선언하였지만, 스프링 데이터에서는 JpaRepository 인터페이스를 확장하여 사용할 수 있다.

아래의 예시와 같이 선언하면 된다.

package com.example.domain.ex.repository;

import com.example.domain.ex.entity.ex;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ExRepository extends JpaRepository<Ex, Long> {
}

인터페이스를 선언했기 때문에 메서드와 인터페이스 모두를 구현해야 한다고 생각할 수 있지만 JPA는 애플리케이션이 시작될 때 각 인터페이스의 구현 클래스 등을 자동으로 생성해 준다.

profile
바르게 살자...

0개의 댓글