SPRING

Spring JPA

silver-w 2025. 2. 13. 12:25

용어 정리


  • DBMS :  다수의 사용자가 DB에 접근 할 수 있도록 해주는 소프트웨어 도구 
                  - MySQL, ORACLE, Postgres, NoSQL
  • JDBC : JAVA에서 DB에 접속하기 위한 DBMS 인터페이스
  • ORM(Object Relational Mapping) : 객체 지향 프로그래밍의 객체(클래스)관계형 데이터베이스의 데이터(테이블)를 자동으로 매핑 Java에서는 Hibernate, JPA가 있다.
    ※ DB와 매핑된 Entity에 접근하므로 테이블 정규화가 잘 되어 있어야 한다  
  • JPA : 자바 ORM 기술에 대한 명세 
    ( 특정 기능을 하는 라이브러리가 아닌, ORM을 어떻게 사용해야 하는지 정의하는 한 방법)
  • Hibernate : JPA를 구현한 대표적인 프레임워크
    기본적으로 Spring Data JPA는 디폴트로 Hibernate를 JPA 구현체로 사용한다.
    - JPA는 기술 스택이고, Hibernate는 이를 구현한 소프트웨어, JPA Provider 역할을 한다.

Spring-JPA  API


- JPA를 편리하게 이용하기 위해 Spring 에서 JPA를 래핑한 모듈

- JPA를 사용할 때 필수적으로 생성해야하나, 예상가능 하고 반복적인 코드들을 대신 작성해주는 역할

 

이를 이용하면 DB의 테이블과 동기화될 수 있는 인스턴스를 생성하고, 직접 DB에 접근하지 않고 매핑된 Object(Entity)에 접근하여 DB의 값을 조회하거나 변경한다

 

ORM 방식 vs JDBC 방식

Hibernate(ORM 방식) Spring Data JPA + Hibernate로 동작
MyBatis(JDBC 방식) Spring Boot에서 공식적으 지원. Spring Data JPA 없이, 직접 MyBatis를 활용


"Spring Boot provides a starter for MyBatis that makes it easy to configure and use MyBatis with Spring Boot."

 

JPA


구체적인 ORM를 매핑한 것, orm을 래핑한 스프링에서 제공하는 추가 library ( ORM 프레임 워크가 아니라 ORM을 래핑한 라이브러리 

 

 

  • Entity가 바뀌면 orm 프레임 워크에서 자동으로 쿼리를 수정시킨다,
    만약 DB에 없는 테이블을 Entity에서 생성하면 DB에 해당 테이블이 생성된다.(DDL)
  •  HSQL : orm 와 entity로만으로는 제공이 안되는 복잡한 쿼리에 사용(조인, 통계 등등)
                   customizing된 자기만의 쿼리를 제공한다

 

 

※ 커스텀 구현체 생성 

  - naming pattern 이 있으므로 주의

   : 같은 패키지 내 생성

   :  (예전방식) 구현체는 Repository이름+Impl(implementation을 접미사로 하는 등 Single Custom 방식을 사용

   :  (현재) 인테페이스를 쪼개어 세그멘트 방식 사용

※ 네이밍 패턴 부분은 후속적으로 봐야할 필요 있을 듯

class CustomizedUserRepositoryImpl implements CustomizedUserRepository {

  @Override
  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}

 

 

각 메서드 기능은 레퍼런스 참고

https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html

https://docs.spring.io/spring-data/jpa/reference/jpa/specifications.html#page-title (Specifications)

https://docs.spring.io/spring-data/jpa/reference/repositories/custom-implementations.html#page-title (커스텀 구현체)

 

 

 

DTO · VO  · ENTITY


  • DTO : 레이어간 데이터 타입을 이동하기 위해서 사용 
  • VO : 출력하기 위해서 만드는 객체 ( "출력"하는 값이므로 불변 )
  • ENTITY : DB와 완벽하게 일치
                   ( "DB"의 컬럼과 완벽하게 필드가 일치하며, Entity가 바뀐다는 건 DB의 데이터가 바뀌는 것과 같다 

★ Entity ↔ DTO 관련하여 정리중인 포스팅

 : https://silver-w.tistory.com/103

 


출처 : https://doing7.tistory.com/105

 

[Spring] Spring Data JPA 이해하기 (feat ORM, JPA)

🌱 ORM 이란? ORM 이란 Object-Relational Mapping 의 약자로, 이름 그대로 객체(Object)와 관계형 데이터(Relational data) 를 매핑하기 위한 기술이다. 이러한 매핑이 필요한 이유는 객체 지향 언어과 관계형 데

doing7.tistory.com