[SpringBoot] 2024 게시판 만들기 Q&A ⑤ - Spring Data JPA

SihoonCho·2024년 11월 24일
0
post-thumbnail

※ 읽기에 앞서


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.


📌 JPA


JPA(Java Persistence API)는, Java 애플리케이션에서 데이터베이스 작업을 간소화하기 위해 제공되는 ORM(Object-Relational Mapping) 기술 표준입니다. JPA를 활용하면 객체 지향 프로그래밍 방식으로 데이터베이스를 다룰 수 있어 개발 생산성과 코드의 가독성이 크게 향상됩니다.


📖 JPA 개념


ORM(Object-Relational Mapping)

  • 객체와 데이터베이스 테이블 간의 매핑을 자동으로 처리
  • SQL을 직접 작성하지 않고도 객체를 사용해 데이터베이스 작업 가능

JPA(Java Persistence API)

  • JPA는 인터페이스 기반의 표준 사양으로, Hibernate 같은 구현체를 사용해 동작
  • 데이터베이스와의 연결, CRUD 작업, 쿼리 작성 등을 간편하게 처리

📌 Spring Data JPA


JPA(Java Persistence API)는, Java 애플리케이션에서 데이터베이스 작업을 간소화하기 위해 제공되는 ORM(Object-Relational Mapping) 기술 표준입니다. JPA를 활용하면 객체 지향 프로그래밍 방식으로 데이터베이스를 다룰 수 있어 개발 생산성과 코드의 가독성이 크게 향상됩니다.

Spring Framework에서 흔히 사용하는 Spring Data JPASpring FrameworkJPA를 통합하여 데이터베이스 작업을 더 간단하게 처리할 수 있도록 도와주는 라이브러리 모듈입니다.


📖 Spring Data JPA 개념


Spring Framework에서 흔히 사용하는 Spring Data JPASpring FrameworkJPA를 통합하여 데이터베이스 작업을 더 간단하게 처리할 수 있도록 도와주는 라이브러리 모듈입니다.

인터페이스만 정의하면 기본적인 CRUD 기능이 자동으로 구현되며, @Query를 사용해 복잡한 JPQL이나 Native Query도 지원합니다. JPA의 강력한 기능을 Spring 환경에서 쉽게 활용할 수 있으며, 생산성을 크게 향상시킵니다.


📖 Spring Data JPA 동작 원리


Spring Data JPA의 메서드 호출은 상황에 따라 JPQL을 생성합니다.
이후, 다시 Native SQL로 변환되어 데이터베이스에서 실행됩니다.

Spring Data JPA 동작 과정

  1. 메서드 호출
  2. JPQL 생성
    • JPQL 생성이 필요한 경우
      • findByName(String name) 같은 쿼리 메서드는 JPA가 내부적으로 JPQL 생성
    • JPQL 생성이 필요하지 않은 경우
      • find(), save(), delete() 같은 기본 메서드는 바로 Native SQL 생성
      • JPQL을 명시적으로 작성한 경우 JPA가 이를 직접 Native SQL로 변환
  3. JPQLNative SQL로 변환
  4. Native SQL 데이터베이스에 전달 및 실행
  5. SQL 실행 결과를 다시 JPA 엔티티 객체로 매핑하여 반환

📌 결론


JPA는 기본적으로 Native SQL을 실행하기 위한 도구입니다.
JPQLNative 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 장단점


JPA 장점

  • 생산성향상: SQL 작성 부담을 줄이고, 객체 중심의 개발 가능
  • 유지보수성: 데이터베이스 변경 시, 객체 중심의 수정으로 유지보수 용이
  • 성능최적화: 지연 로딩, 캐싱, 배치 처리 등 성능 최적화 지원
  • DB 독립성: 데이터베이스에 종속되지 않는 애플리케이션 개발 가능

JPA 단점

  • 학습 곡선: 객체와 데이터베이스 간 매핑 개념 이해 필요
  • 처리 한계: 복잡한 SQL이 필요한 경우 JPQL, Native Query 사용
  • 초기 설정: 초기 설정 방법이 다소 복잡
    • ex) persistence.xml, Spring Data JPA 설정 등

📖 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와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글