Engineering
6. 스프링 DB 접근 기술 정리
6. 스프링 DB 접근 기술 정리 학습 내용을 정리한 백필 노트입니다.
이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.
1. H2 데이터베이스 설치
-
H2 DB 특징: 개발 및 테스트 용도로 가볍고 편리한 데이터베이스. 웹 UI 제공.
-
버전 호환성
- Spring Boot 2.x → H2 1.4.200
- Spring Boot 3.x → H2 2.1.214 이상
-
실행 방법
- macOS/Linux:
chmod 755 h2.sh→./h2.sh - Windows:
h2.bat
- macOS/Linux:
-
DB 파일 생성
- 최초 실행:
jdbc:h2:~/test→~/test.mv.db생성 - 이후 실행:
jdbc:h2:tcp://localhost/~/test
- 최초 실행:
-
DDL 파일 (sql/ddl.sql) 예시
drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, name varchar(255), primary key (id) ); -
오류 발생 시 해결 방법
- H2 종료 후 재시작
- 주소창 IP를
localhost로 변경 - DB 파일 다시 생성 (
jdbc:h2:~/test)
2. 순수 JDBC 방식
📍 환경 설정
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
application.properties
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
⚠️ Spring Boot 2.4 이상에서는 spring.datasource.username=sa 반드시 추가.
📍 JdbcMemberRepository 구현
직접 JDBC API를 사용해 DB 접근 로직 구현:
- CRUD 메서드:
save(),findById(),findAll(),findByName() - Connection 관리:
DataSourceUtils사용 - 리소스 정리:
close()로 Connection/Statement/ResultSet 반환 - 코드 특징: 반복적이고 복잡 — “옛날 방식”으로 간주됨
📍 스프링 설정 (SpringConfig)
@Bean
public MemberRepository memberRepository() {
return new JdbcMemberRepository(dataSource);
}
-
DI를 통한 구현체 교체 가능
→ 개방-폐쇄 원칙(OCP): 확장에는 열려 있고 변경에는 닫혀 있음.
3. 스프링 통합 테스트
스프링 컨테이너 및 DB를 포함한 통합 테스트 예제.
@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {
@Test
public void 회원가입() { ... }
@Test
public void 중복_회원_예외() { ... }
}
@SpringBootTest: 스프링 컨텍스트 로드@Transactional: 테스트 후 자동 롤백 (DB 초기화 보장)
4. 스프링 JdbcTemplate
📍 특징
- JDBC 반복 코드 제거
- SQL은 직접 작성해야 함
- MyBatis와 유사한 역할
📍 JdbcTemplateMemberRepository
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
SimpleJdbcInsert로 insert 간소화RowMapper로 ResultSet → 객체 매핑
📍 설정 변경
@Bean
public MemberRepository memberRepository() {
return new JdbcTemplateMemberRepository(dataSource);
}
5. JPA (Java Persistence API)
📍 개요
- SQL을 직접 작성하지 않아도 됨
- 객체 중심 설계 가능
- 생산성 향상
📍 build.gradle
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
📍 application.properties
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
📍 엔티티 매핑
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
📍 JpaMemberRepository
EntityManager사용em.persist(),em.find(),em.createQuery()활용
📍 트랜잭션 설정
@Transactional
public class MemberService { }
📍 스프링 설정
@Bean
public MemberRepository memberRepository() {
return new JpaMemberRepository(em);
}
⚠️ JPA의 모든 데이터 변경은 트랜잭션 내에서 수행되어야 함.
6. 스프링 데이터 JPA
📍 핵심 개념
- JPA + 스프링 통합으로 리포지토리 구현 없이 개발 가능
- 기본 CRUD 자동 생성
findByName(),findByEmail()등 메서드 이름 기반 쿼리 제공- 페이징 기능 자동 지원
📍 예제
public interface SpringDataJpaMemberRepository
extends JpaRepository<Member, Long>, MemberRepository {
Optional<Member> findByName(String name);
}
📍 스프링 설정
@Configuration
public class SpringConfig {
private final MemberRepository memberRepository;
@Bean
public MemberService memberService() {
return new MemberService(memberRepository);
}
}
- 스프링이 자동으로
SpringDataJpaMemberRepository를 빈으로 등록.
📍 참고 자료
- JPA 기본편 강의: 인프런 - 자바 ORM 표준 JPA 프로그래밍
- 스프링 데이터 JPA 실전: 인프런 - 실전! 스프링 데이터 JPA
- 추천 도서: 『자바 ORM 표준 JPA 프로그래밍』 (YES24)
요약 비교
| 기술 | 주요 특징 | 코드량 | 장점 | | --- | --- | --- | --- | | 순수 JDBC | 직접 SQL 작성, 반복 많음 | 많음 | 기본 구조 이해 | | JdbcTemplate | 반복 제거, SQL 작성 필요 | 중간 | 생산성 향상 | | JPA | SQL 자동 생성 | 적음 | 객체 중심 개발 | | Spring Data JPA | 리포지토리 구현 불필요 | 최소 | CRUD 자동화, 실무 필수 |