
안녕하세요, 자바 백엔드 개발자 여러분! 오늘은 Spring Boot와 **JPA(Java Persistence API)**를 사용하여 얼마나 쉽고 효율적으로 데이터베이스와 연동할 수 있는지 알아보겠습니다. 더 이상 반복적인 JDBC 코드나 복잡한 SQL 매퍼 설정에 시달리지 않아도 됩니다. Spring Data JPA가 제공하는 마법 같은 세계로 함께 떠나보시죠!
CRUD(Create, Read, Update, Delete)와 같은 기본적인 SQL을 직접 작성할 필요가 없습니다. Repository 인터페이스를 선언하는 것만으로도 대부분의 기능이 자동으로 구현됩니다.Entity) 중심으로 개발할 수 있습니다. 이를 통해 비즈니스 로직에 더 집중할 수 있게 됩니다.MySQL, PostgreSQL, Oracle 등 다른 데이터베이스로 전환할 수 있습니다.build.gradle.kts)먼저, Spring Boot 프로젝트에 필요한 의존성을 추가해야 합니다. Spring Web과 Spring Data JPA, 그리고 사용할 데이터베이스 드라이버(여기서는 H2 사용)를 추가합니다.
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("com.h2database:h2") // 인메모리 DB인 H2 사용
}
application.yml)src/main/resources/application.yml 파일에 데이터베이스 연결 정보를 작성합니다. H2 데이터베이스는 별다른 설정 없이도 간단하게 사용할 수 있습니다.
spring:
datasource:
url: jdbc:h2:mem:testdb # 인메모리 모드로 실행
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 쿼리를 로그로 보여줌
데이터베이스 테이블과 매핑될 자바 객체, 즉 엔티티를 만듭니다. @Entity 어노테이션을 사용하여 이 클래스가 JPA 엔티티임을 알려줍니다.
import jakarta.persistence.*;
@Entity
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Lob // 대용량 텍스트를 위한 어노테이션
@Column(nullable = false)
private String content;
private String author;
// Getters and Setters, Constructors ...
}
@Id: 이 필드가 테이블의 기본 키(Primary Key)임을 나타냅니다.@GeneratedValue: 기본 키 값을 자동으로 생성하는 방식을 지정합니다.@Column: 필드를 테이블의 컬럼과 매핑합니다. nullable, length 등 다양한 속성을 지정할 수 있습니다.@Lob: 대용량 데이터를 저장할 때 사용합니다.이제 Spring Data JPA의 마법이 시작됩니다. JpaRepository를 상속받는 인터페이스를 만들기만 하면 됩니다.
import org.springframework.data.jpa.repository.JpaRepository;
public interface ArticleRepository extends JpaRepository<Article, Long> {
// JpaRepository<엔티티 클래스, ID 타입>
}
이것으로 끝입니다! save(), findById(), findAll(), delete()와 같은 기본적인 데이터베이스 작업 메서드들이 자동으로 구현되었습니다. 심지어 다음과 같이 메서드 이름 규칙에 따라 쿼리를 자동으로 생성해 주기도 합니다.
// 예시: 작성자 이름으로 게시글 찾기
List<Article> findByAuthor(String author);
이제 만든 리포지토리를 서비스 계층에서 주입받아 비즈니스 로직을 처리할 수 있습니다.
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Service
public class ArticleService {
private final ArticleRepository articleRepository;
@Autowired
public ArticleService(ArticleRepository articleRepository) {
this.articleRepository = articleRepository;
}
public Article createArticle(Article article) {
return articleRepository.save(article);
}
public List<Article> getAllArticles() {
return articleRepository.findAll();
}
}
Spring Boot와 Spring Data JPA를 사용하면, 개발자는 지루하고 반복적인 데이터 접근 계층 코드 작성에서 해방되어 핵심 비즈니스 로직에 집중할 수 있습니다. 객체지향적인 설계를 유지하면서 데이터베이스와의 상호작용을 매우 우아하게 처리할 수 있게 됩니다.
아직 JPA가 낯설다면, 이번 기회에 작은 프로젝트부터 시작해 보세요. 놀라운 생산성 향상을 경험하게 될 것입니다! 다음 포스팅에서는 JPQL과 QueryDSL을 이용한 동적 쿼리 작성법에 대해 알아보겠습니다.
로그인 후 댓글을 작성할 수 있습니다.