어드민 프로젝트
프로젝트 하면서 찾아본 내용
꾸준2
2025. 5. 16. 10:50
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??