build.gradle 파일에 추가합니다.Spring Data JPA (spring-boot-starter-data-jpa):
JDBC 드라이버 (JDBC Driver):
mysql-connector-j (MySQL용), mariadb-java-client (MariaDB용), h2database (H2 인메모리 DB용)application.yml)src/main/resources/application.yml 파일에 작성합니다.spring:
# --- 데이터베이스 연결 설정 ---
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver # 사용할 JDBC 드라이버 클래스
url: jdbc:mysql://localhost:3306/my_db?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8 # DB 서버 주소
username: my_user # DB 접속 계정
password: my_password # DB 접속 비밀번호
# --- JPA 및 Hibernate 설정 ---
jpa:
hibernate:
ddl-auto: update # 애플리케이션 실행 시, 엔티티와 DB 테이블을 비교하여 자동으로 스키마 변경
properties:
hibernate:
show_sql: true # JPA가 실행하는 SQL을 콘솔에 출력
format_sql: true # SQL을 보기 좋게 포맷팅
default_batch_fetch_size: 100 # N+1 문제 완화를 위한 배치 사이즈 설정
open-in-view: false # OSIV 설정 (성능 이슈로 false 권장)
spring.jpa.hibernate.ddl-auto 옵션 (중요):create: 애플리케이션 실행 시마다 기존 테이블을 삭제하고 새로 생성. (테스트용)create-drop: create와 같지만, 종료 시 테이블 삭제. (테스트용)update: 엔티티의 변경 사항을 감지하여, 기존 테이블에 변경된 부분만 반영. (개발 초기 단계에서 편리)validate: 엔티티와 테이블이 일치하는지만 검사하고, 다르면 오류 발생.none: 아무것도 하지 않음. (운영 환경에서는 none 또는 validate 사용 권장. 스키마 변경은 Flyway와 같은 마이그레이션 도구로 관리)엔티티란 데이터베이스의 테이블과 직접적으로 매핑되는 Java 객체입니다.
주요 어노테이션:
@Entity: 이 클래스가 JPA가 관리하는 엔티티임을 선언.@Id: 테이블의 기본 키(PK)에 해당하는 필드.@GeneratedValue(strategy = GenerationType.IDENTITY): 기본 키 값을 데이터베이스(e.g., MySQL의 AUTO_INCREMENT)가 자동으로 생성하도록 위임.@Column: 필드와 매핑될 컬럼의 세부 속성(이름, nullable, unique 등)을 지정.@CreationTimestamp / @UpdateTimestamp: 데이터가 생성되거나 수정될 때, 해당 시간을 자동으로 기록.package com.example.myproject.domain;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDateTime;
@Entity
@Getter
@NoArgsConstructor // JPA는 기본 생성자를 필요로 함
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 100)
private String title;
@Column(nullable = false, columnDefinition = "TEXT")
private String content;
@CreationTimestamp // 엔티티가 생성될 때의 시간 자동 저장
private LocalDateTime createdAt;
// 생성자
public Post(String title, String content) {
this.title = title;
this.content = content;
}
}```
---
### ✅ 4. 리포지토리(Repository) 인터페이스 작성
* **리포지토리**는 엔티티에 대한 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 담당하는 인터페이스입니다.
* **`JpaRepository`**:
* Spring Data JPA가 제공하는 인터페이스로, 이를 상속받는 것만으로 기본적인 CRUD 메서드를 자동으로 사용할 수 있습니다.
* **사용법**: `public interface MyRepository extends JpaRepository<엔티티_타입, ID_타입> { ... }`
```java
package com.example.myproject.repository;
import com.example.myproject.domain.Post;
import org.springframework.data.jpa.repository.JpaRepository;
// Post 엔티티를 다루고, ID의 타입은 Long
public interface PostRepository extends JpaRepository<Post, Long> {
// 이 인터페이스를 정의하는 것만으로 save(), findById(), findAll() 등 사용 가능
}
PostRepository를 주입받아, postRepository.save(newPost)나 postRepository.findById(1L)과 같은 메서드를 호출하여 데이터베이스와 상호작용할 수 있습니다.spring-boot-starter-data-jpa와 JDBC 드라이버 의존성이 필요합니다.application.yml에 datasource와 jpa 관련 설정을 통해 DB 연결 정보와 JPA 동작 방식을 정의합니다.@Entity 어노테이션이 붙은 클래스는 DB 테이블과 매핑되며, JPA를 통해 관리됩니다.JpaRepository 인터페이스를 상속받으면, 별도의 구현 없이도 기본적인 CRUD 기능을 자동으로 사용할 수 있어 데이터 접근 계층의 개발이 매우 간편해집니다.