Spring Data JPA vs JPA vs Hibernate

기술명 역할
JPA ORM을 위한 표준 인터페이스 (기능 정의)
Hibernate JPA를 구현한 실제 라이브러리 (실행 담당)
Spring Data JPA JPA 사용을 더 편하게 도와주는 Spring 모듈

 

// JPA (Hibernate)
public List<User> findByName(String name) {
    String jpql = "SELECT u FROM User u WHERE u.name = :name";
    return em.createQuery(jpql, User.class)
             .setParameter("name", name)
             .getResultList();
}

// Spring Data JPA
List<User> findByName(String name);

 

[ 코드 ]
     ↓
Spring Data JPA (자동으로 리포지토리 구현)
     ↓
     JPA (인터페이스)
     ↓
Hibernate (JPA 구현체)
     ↓
Database

 

 

테이블 자동 생성

단계 주체 설명
@Entity 해석 JPA + Hibernate 어노테이션 읽고 해석
DDL(SQL) 생성 Hibernate 엔티티 보고 CREATE TABLE 만들기
DDL 실행 Hibernate + JDBC DB에 SQL 날려서 실행
테이블 생성 DBMS (예: H2, MySQL) SQL 받아서 진짜 테이블 생성

 

 

컨트롤러, 서비스 네이밍 규칙??

 

  • Controller는 클라이언트 요청을 처리하니까
    → 사용자 입장에서 이해하기 쉬운 getMenuList()처럼 요청 관점 이름
  • Service는 비즈니스 로직을 처리하니까
    → 내부 동작을 드러내는 findMenuList()처럼 동작 관점 이름

 

MapStruct

@Mapping(source = "children", target = "children")
MenuResponse toDto(Menu menu);

 

  • source: 원본 객체(예: Menu)의 필드 이름
  • target: 대상 객체(예: MenuResponse)의 필드 이름

 

 

@Transactional(readOnly = true) ???

N+1??

'어드민 프로젝트' 카테고리의 다른 글

어드민 프로젝트 mapstruct 적용 - 1  (0) 2025.05.26

+ Recent posts