jpa 사용 방법JPA findById 사용법JPA findOne 사용법spring boot jpa 사용법jpa save 사용법

[Spring Boot] JPA 설정 및 사용 방법

KUKJIN LEE
KUKJIN LEE
2024년 11월 25일
248

Spring Boot는 데이터베이스와의 상호작용을 간소화하고, 복잡한 설정 없이도 JPA(Java Persistence API)를 손쉽게 활용할 수 있도록 지원합니다.

 

객체와 관계형 데이터베이스 간의 매핑(ORM)을 통해, SQL 작성 없이도 데이터를 저장하고 조회할 수 있습니다.

 

Spring Boot에서 JPA 설정하기

Spring Boot는 JPA와 Hibernate를 기본적으로 지원하며, 간단한 설정으로 JPA를 활용할 수 있습니다.

 

필요한 Dependency 추가

Spring Boot 프로젝트에서 JPA를 사용하려면 spring-boot-starter-data-jpa 의존성을 추가해야 합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

 

application.properties 설정

JPA와 데이터베이스 연결을 위해 Spring Boot의 application.properties 또는 application.yml 파일에 설정을 추가해야 합니다.

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=admin
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

주요 설정 옵션

  • spring.datasource.url: 데이터베이스 연결 URL

  • spring.jpa.hibernate.ddl-auto: 데이터베이스 스키마 자동 생성(create, update, none 등)

  • spring.jpa.show-sql: 실행되는 SQL 로그를 출력 여부

  • spring.jpa.properties.hibernate.dialect: 사용하는 데이터베이스에 맞는 Hibernate 방언 설정

 

JPA 사용 예제

3.1 Entity 클래스 생성

데이터베이스 테이블과 매핑되는 Entity 클래스를 생성합니다.

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // Getter, Setter, toString 메서드
}

 

Repository 생성

데이터 조작을 위한 Repository 인터페이스를 생성합니다.

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 커스텀 메서드 예: 이름으로 사용자 찾기
    User findByName(String name);
}

 

Service 및 Controller 작성

Service 클래스

import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }
}

 

Controller 클래스

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getUsers() {
        return userService.getAllUsers();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
}

 

JPA 실행 확인

Spring Boot 애플리케이션을 실행하고, Postman이나 cURL로 REST API를 호출하여 JPA 작동 여부를 확인합니다.

  • GET 요청: /users → 저장된 사용자 리스트 반환

  • POST 요청: /users → 새 사용자 저장

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &amp;nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12