본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.
또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
JPA(Java Persistence API)는, Java 애플리케이션에서 데이터베이스 작업을 간소화하기 위해 제공되는 ORM(Object-Relational Mapping) 기술 표준입니다. JPA를 활용하면 객체 지향 프로그래밍 방식으로 데이터베이스를 다룰 수 있어 개발 생산성과 코드의 가독성이 크게 향상됩니다.
ORM(Object-Relational Mapping)
- 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리
- SQL을 직접 작성하지 않고도 객체를 사용해 데이터베이스 작업 가능
JPA(Java Persistence API)
- JPA는 인터페이스 기반의 표준 사양으로, Hibernate 같은 구현체를 사용해 동작
- 데이터베이스와의 연결, CRUD 작업, 쿼리 작성 등을 간편하게 처리
JPA(Java Persistence API)는, Java 애플리케이션에서 데이터베이스 작업을 간소화하기 위해 제공되는 ORM(Object-Relational Mapping) 기술 표준입니다. JPA를 활용하면 객체 지향 프로그래밍 방식으로 데이터베이스를 다룰 수 있어 개발 생산성과 코드의 가독성이 크게 향상됩니다.
Spring Framework
에서 흔히 사용하는Spring Data JPA
는Spring Framework
와JPA
를 통합하여 데이터베이스 작업을 더 간단하게 처리할 수 있도록 도와주는 라이브러리 모듈입니다.
Spring Framework
에서 흔히 사용하는Spring Data JPA
는Spring Framework
와JPA
를 통합하여 데이터베이스 작업을 더 간단하게 처리할 수 있도록 도와주는 라이브러리 모듈입니다.
인터페이스만 정의하면 기본적인 CRUD 기능이 자동으로 구현되며,
@Query
를 사용해 복잡한JPQL
이나Native Query
도 지원합니다.JPA
의 강력한 기능을Spring
환경에서 쉽게 활용할 수 있으며, 생산성을 크게 향상시킵니다.
Spring Data JPA
의 메서드 호출은 상황에 따라JPQL
을 생성합니다.
이후, 다시Native SQL
로 변환되어 데이터베이스에서 실행됩니다.
Spring Data JPA 동작 과정
- 메서드 호출
JPQL
생성
JPQL
생성이 필요한 경우
findByName(String name)
같은 쿼리 메서드는JPA
가 내부적으로JPQL
생성JPQL
생성이 필요하지 않은 경우
find()
,save()
,delete()
같은 기본 메서드는 바로Native SQL
생성JPQL
을 명시적으로 작성한 경우JPA
가 이를 직접Native SQL
로 변환JPQL
을Native SQL
로 변환Native SQL
데이터베이스에 전달 및 실행SQL
실행 결과를 다시JPA
엔티티 객체로 매핑하여 반환
JPA
는 기본적으로Native SQL
을 실행하기 위한 도구입니다.
JPQL
은Native SQL
을 생성하기 위한 중간 단계로 사용됩니다.그러나,
JPA
의 메서드 호출이 항상JPQL
을 생성하는 것은 아닙니다.
상황에 따라 바로Native SQL
로 변환하거나 생성하기도 합니다.
Spring Data JPA
에서 일반적인 메서드를 호출하는 경우JPQL
이 생성될 수 있습니다.
그러나,JPA
의 기본 메서드find()
,save()
,delete()
등을 호출하는 경우JPQL
생성 없이 바로Native SQL
을 생성하거나, 명시적인JPQL
을 작성하는 경우 바로Native SQL
로 변환되어 데이터베이스에서 실행됩니다.
Spring Data JPA
의 전체 과정은 아래와 같이 요약할 수 있습니다정리하면,
JPA
는 메서드를 호출하면 필요에 따라 내부적으로JPQL
로 변환한 뒤,
이를 다시Native SQL
로 변환해서 데이터베이스에서 실행합니다.메서드 호출 → (필요 시) JPQL 생성 → Native SQL 변환 → SQL 실행 → 결과를 객체로 매핑
JPA 장점
- 생산성향상: SQL 작성 부담을 줄이고, 객체 중심의 개발 가능
- 유지보수성: 데이터베이스 변경 시, 객체 중심의 수정으로 유지보수 용이
- 성능최적화: 지연 로딩, 캐싱, 배치 처리 등 성능 최적화 지원
- DB 독립성: 데이터베이스에 종속되지 않는 애플리케이션 개발 가능
JPA 단점
- 학습 곡선: 객체와 데이터베이스 간 매핑 개념 이해 필요
- 처리 한계: 복잡한 SQL이 필요한 경우
JPQL
,Native Query
사용- 초기 설정: 초기 설정 방법이 다소 복잡
- ex) persistence.xml, Spring Data JPA 설정 등
JPA
는 객체 지향과 데이터베이스의 간극을 메우는 강력한 기술입니다.Java
개발자에게JPA
는 생산성과 객체 지향 설계의 조화를 제공하는 강력한 도구입니다. 특히,Spring Boot
,Spring Data JPA
를 통해CRUD 작업
,Repository 패턴
쉽게 구현할 수 있습니다.처음에는 조금 복잡하게 느껴질 수 있지만,
프로젝트 규모가 커질수록 그 가치를 실감할 수 있습니다.
Java
로 데이터베이스 작업을 한다면,JPA
는 선택이 아닌 필수라고 할 수 있습니다.
반복적인
CRUD SQL 작성
과객체를 SQL에 Mapping
하는데 시간을 보내기에는, 개발자의 시간이 너무 아깝습니다. 이미 많은Java
개발자들이 오랫동안 비슷한 고민을 해왔으며, 이 문제를 해결하기 위해 많은 노력을 기울여왔습니다. 그리고 그 노력의 결정체가 바로JPA
입니다.
JPA
는 표준 명세만 570 페이지에 달하며,JPA
를 구현한Hibernate
는 10년 이상 지속적으로 개발되고 있고, 핵심 모듈의 코드가 이미 10만 줄을 넘어섰습니다. 귀찮은 문제들은 이제JPA
에게 맡기고, 더 좋은 객체 모델링과 더 많은 테스트를 작성하는데 개발자의 시간을 보내세요.개발자는
SQL Mapper
가 아닙니다.- 출처: 자바 ORM 표준 JPA 프로그래밍 / 저자: 김영한 -
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.
또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.