나는 영속성 레이어를 구축하기 전까지 JPA를 이해하지 못했다
Source: Dev.to

Persistence Layer란? 🧠
Persistence Layer는 데이터베이스에서 데이터를 저장하고 조회하는 역할을 합니다. 이는 다음 사이의 다리 역할을 합니다:
- 여러분의 비즈니스 로직
- 실제 데이터베이스
클린한 Spring Boot 애플리케이션에서는:
- Controllers ❌ 데이터베이스와 직접 통신하지 않음
- Services ❌ SQL을 작성하지 않음
- Repositories ✅ 데이터 접근을 담당
이러한 분리로 애플리케이션이 깨끗하고 확장 가능하게 유지됩니다.
더 큰 그림: Spring Boot 아키텍처 🏗️
전형적인 Spring Boot 웹 프로젝트는 다음과 같습니다:
규칙: 영속성 계층만 데이터베이스와 통신합니다. 이를 엄격히 지키면 버그가 즉시 감소합니다.
Enter JPA (Java Persistence API) 📚
JPA는 Java 객체가 데이터베이스 테이블에 매핑되는 방식을 정의하는 사양입니다. SQL을 곳곳에 작성하는 대신, JPA를 사용하면:
- Java 객체로 작업할 수 있습니다
- 프레임워크가 테이블 매핑을 처리합니다
- 쿼리보다 비즈니스 로직에 집중할 수 있습니다
이 개념을 **ORM (Object‑Relational Mapping)**이라고 합니다.
Spring Boot이 학습을 위해 H2 데이터베이스를 사용하는 이유 🧪
Spring Boot은 메모리 내 데이터베이스인 H2를 매우 쉽게 사용할 수 있게 해줍니다.
H2가 초보자에게 완벽한 이유:
- 가볍다
- 빠르다
- 설치가 필요하지 않다
- 재시작 시 자동으로 초기화됩니다 (인‑메모리 모드)
개발, 테스트, 그리고 데이터베이스 개념을 안전하게 배우기에 이상적입니다.
@Entity: Java와 데이터베이스가 만나는 곳
@Entity 어노테이션은 클래스를 영속 엔티티로 표시합니다. 쉽게 말해, 각 @Entity 클래스는 데이터베이스의 테이블에 해당합니다.
핵심 포인트:
- 클래스 수준 어노테이션입니다.
- 모든 엔티티는 기본 키를 가져야 합니다.
- Spring이 클래스를 자동으로 테이블에 매핑합니다.
이를 이해하면 데이터베이스 테이블이 덜 신비롭게 느껴집니다.
리포지토리: 데이터 접근의 핵심 🔑
Spring Data JPA는 JpaRepository 인터페이스를 제공합니다. 이를 통해 다음을 얻을 수 있습니다:
- 즉시 사용할 수 있는 CRUD 작업
- 제네릭 타입 안전성
- 내장된 쿼리 메서드
- 사용자 정의 쿼리 지원
SQL도 없고, 보일러플레이트도 없습니다—그냥 깔끔한 메서드 호출만 있습니다.
왜 이 레이어가 이렇게 중요한가 📌
Persistence Layer를 이해하기 전에는:
- 데이터베이스 로직을 서비스와 섞어 사용함
- 지저분한 데이터 접근 코드를 작성함
- 디버깅이 매우 고통스러웠음
그 후에는:
- 코드가 모듈화됨
- 테스트가 쉬워짐
- 스케일링이 가능해 보임
Persistence Layer는 백엔드가 얼마나 건강해질지를 결정합니다.
최종 생각 🚀
제가 Persistence Layer + JPA를 진정으로 이해한 순간, Spring Boot가 의미 있게 다가오기 시작했습니다.
Spring Boot를 배우고 계시면서 다음과 같은 느낌이 든다면:
- 데이터베이스가 혼란스러울 때
- 레포지토리가 압도적으로 느껴질 때
- 로직이 어디에 들어가야 할지 모를 때
👉 여기서 시작하세요.
이 글은 Spring Boot와 백엔드 개발을 탐구하면서 진행 중인 제 학습‑공개 여정의 일부입니다.

