spring boot hibernatespring boot hibernate 설정spring jpa hibernate: ddl-autoHibernateJPA properties Hibernate

[Spring Boot] Hibernate ORM 가이드

KUKJIN LEE
KUKJIN LEE
2024년 11월 26일
242

Hibernate ORM(Object-Relational Mapping)은 Spring Boot에서 관계형 데이터베이스와 상호작용하는 데 널리 사용되는 프레임워크입니다.

 

객체 지향 프로그래밍 언어(Java)에서 관계형 데이터베이스를 사용할 수 있도록 지원하는 ORM 프레임워크입니다. SQL을 직접 작성하지 않고도 엔티티(Entity) 클래스를 통해 데이터베이스와 상호작용할 수 있습니다.

 

특징

  • 자동 매핑: Java 클래스와 데이터베이스 테이블을 매핑.

  • HQL: SQL과 유사한 Hibernate Query Language 제공.

  • 캐싱 지원: 1차 및 2차 캐싱을 통해 성능 최적화.

  • Lazy/Eager Loading: 데이터 로딩 방식을 제어 가능.

 

Spring Boot에서 Hibernate ORM 설정

Spring Boot는 Hibernate를 기본적으로 지원하며, 최소한의 설정으로 사용할 수 있습니다.

 

의존성 추가

spring-boot-starter-data-jpa는 Hibernate를 기본적으로 포함합니다. Maven에서 추가하려면 다음과 같이 설정합니다.

<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 설정

Spring Boot의 application.properties 또는 application.yml 파일에서 데이터베이스 및 Hibernate 관련 설정을 추가합니다.

# 데이터베이스 설정
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

# JPA 및 Hibernate 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

 

주요 설정 옵션

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

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

  • hibernate.dialect: 사용하는 데이터베이스에 맞는 방언(Dialect) 설정.

 

Hibernate ORM 주요 개념 및 사용법

엔티티(Entity) 클래스 정의

Hibernate는 Java 클래스와 데이터베이스 테이블을 매핑합니다.

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
}

Repository 인터페이스

Spring Data JPA는 기본적인 CRUD 메서드를 제공하는 Repository 인터페이스를 지원합니다.

(실제 코드 예제에서는 Hibernate를 명시적으로 사용하는 부분이 드러나지 않았습니다. 이는 Spring Data JPA가 Hibernate를 내부적으로 사용하기 때문입니다.)

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

public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}

 

Service와 Controller 연계

Service 계층에서 비즈니스 로직을 처리하고, Controller 계층에서 HTTP 요청을 처리합니다.

@Service
public class UserService {

    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public User saveUser(User user) {
        return userRepository.save(user);
    }
}
@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

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

관련 글

[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