일반적인 계층형 아키텍처
Presentation Layer (프론트엔드, 사용자 인터페이스)
↓
Service Layer (비즈니스 로직)
↓
Persistence Layer (데이터 접근 및 저장)
↓
Database (영구 저장소)
Persistence Layer란?
Persistence Layer(영속성 계층)는 데이터를 영구적으로 저장하고 불러오는 역할을 담당하는 소프트웨어 아키텍처의 계층.
일반적으로 데이터베이스와의 상호작용을 추상화하고 비즈니스 로직으로부터 분리하여 관리.
Spring에서 Persistence Layer 구성 방식
1. JDBC (Java Database Connectivity)
- 자바 표준 DB 접근 API
- 커넥션, SQL 실행, ResultSet 파싱 등을 직접 처리
- 너무 로우레벨이라 실무에서는 거의 사용되지 않음
- 주로 단순 테스트나 아주 가벼운 코드에만 사용
2. Spring JDBC (JdbcTemplate)
- JDBC의 반복 코드 제거를 위한 추상화 도구
- 여전히 SQL은 개발자가 직접 작성
- 가벼운 프로젝트나 SQL 제어가 중요한 상황에 적합
3. MyBatis (SQL Mapper)
- SQL 중심의 ORM 대안
- SQL을 직접 작성하고, 결과 매핑은 자동으로 처리
- 복잡한 JOIN, 튜닝, 성능 최적화가 필요한 상황에 적합
- 쿼리 컨트롤이 중요한 실무에서 자주 사용
4. JPA + Hibernate (ORM)
- 객체 중심(Entity) ↔ 테이블 간 자동 매핑
- SQL을 직접 작성하지 않고도 CRUD 수행 가능
- 트랜잭션, 캐시 등 고급 기능 자동 처리
- 단점: 복잡한 쿼리 처리, N+1 문제 등 성능 튜닝 어려움
- Hibernate는 JPA의 가장 널리 쓰이는 구현체
5. Spring Data JPA
- JPA 위에 스프링이 만든 고수준 추상화 계층
- Repository 인터페이스만 정의하면 자동으로 쿼리 생성
- 생산성 최고, 단순 CRUD나 기본 조건 검색에 매우 강함
- 단점: 복잡하거나 동적인 쿼리는 어려움
6. QueryDSL (보조 도구)
- JPA 기반의 정적 타입 안전 쿼리 생성 도구
- QClass로 쿼리를 자바 코드처럼 작성
- 동적 검색, 조건 조합, 복잡한 조회에 매우 효과적
- 실무에서는 Spring Data JPA + QueryDSL 조합이 많이 쓰임