Search for a command to run...
애플리케이션의 핵심은 데이터입니다. 이번 챕터에서는 Spring Data JPA를 사용하여 데이터베이스와 연동하고, Kotlin의 장점을 살려 Entity를 설계하는 방법에 대해 깊이 있게 다룹니다. H2 인메모리 데이터베이스를 사용해 빠르게 개발 환경을 구축해 보겠습니다.
application.yml 설정 추가하기먼저, src/main/resources/application.yml 파일에 데이터베이스 연결 정보를 추가해야 합니다. (기존의 application.properties 파일이 있다면 삭제하고 yml 형식으로 작성하는 것을 추천합니다.)
spring:
datasource:
url: jdbc:h2:mem:testdb # 인메모리 H2 데이터베이스 사용
driver-class-name: org.h2.Driver
username: sa
password:
jpa:
hibernate:
ddl-auto: create-drop # 애플리케이션 실행 시 스키마 생성, 종료 시 삭제
properties:
hibernate:
format_sql: true # SQL 쿼리를 예쁘게 포맷팅
show_sql: true # 실행되는 SQL 쿼리를 로그로 출력
h2:
console:
enabled: true # H2 웹 콘솔 사용
path: /h2-console
위 설정으로 애플리케이션 실행 후 http://localhost:8080/h2-console에 접속하여 데이터베이스 상태를 직접 확인할 수 있습니다.
JPA Entity를 Kotlin의 data class로 만들면 equals(), hashCode(), toString() 등을 자동으로 생성해주어 매우 편리합니다. 하지만 몇 가지 주의사항이 있습니다.
kotlin-jpa 플러그인을 사용하면 컴파일 시점에 자동으로 생성해 줄 수 있습니다.val과 var: ID 같이 변경 불가능한 필드는 val로, 변경이 필요한 필드는 var로 선언합니다.Post.kt라는 이름으로 Entity를 정의해 봅시다.
import jakarta.persistence.*
@Entity
class Post(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0,
@Column(nullable = false)
var title: String,
@Lob // Text 타입으로 매핑
@Column(nullable = false)
var content: String,
) {
// 비즈니스 로직을 위한 메서드 추가 가능
fun update(title: String, content: String) {
this.title = title
this.content = content
}
}
Spring Data JPA의 마법을 경험할 차례입니다. JpaRepository를 상속하는 인터페이스를 만들기만 하면 기본적인 CRUD 메서드가 자동으로 구현됩니다.
import org.springframework.data.jpa.repository.JpaRepository
interface PostRepository : JpaRepository<Post, Long> {
// 쿼리 메서드 예시: 제목으로 게시글 찾기
fun findByTitle(title: String): Post?
}
이제 이 PostRepository를 서비스 레이어에 주입받아 사용하면 됩니다. 데이터베이스와의 상호작용이 이렇게나 간단해졌습니다! 다음 챕터에서는 오늘 만든 코드를 기반으로 테스트 코드를 작성하는 방법을 알아보겠습니다.