티스토리 뷰
목차
Spring MVC - Controller + Service
[Spring]Spring MVC - Controller 클래스 구조 생성 및 설계
[Spring]Spring MVC - Controller 클래스에 핸들러 메서드(Handler Method) 구현
[Spring]Spring MVC - Controller 클래스에 ResponseEntity 적용
[Spring]Spring MVC - Controller 클래스에 DTO 적용
[Spring]Spring MVC - DTO 유효성 검증(Validation)
[Spring]Spring MVC - DI를 통한 API 계층 ↔ 서비스 계층 연동
[Spring]Spring MVC - 매퍼(Mapper)를 이용한 DTO 클래스 ↔ 엔티티(Entity) 클래스 매핑
[Spring]Spring MVC - @ExceptionHandler를 이용한 예외처리
[Spring]Spring MVC - @RestControllerAdvice를 이용한 예외처리
Spring Data JDBC
[Spring]JDBC(Java DataBase Connectivity)
[Spring]Spring Data JDBC, Spring Data JDBC 사용법
[Spring]Spring Data JDBC - 도메인 엔티티&테이블 설계
Spring Data JPA
[Spring]JPA(Java Persistence API)
[Spring]JPA - Entity ↔ DB Table Mapping
[Spring]JPA - Entity ↔ Entity Mapping
[Spring]Spring Data JPA - 데이터 액세스 계층 구현
ORM(Object Relational Mapping)
ORM은 SQL Mapper와 함께 영속성 프레임워크에 속한 테크닉이다.
기존의 JDBC는 DB 연결과 SQL 사용, 결괏값 매핑 등
모든 과정을 개발자가 직접, 반복해서 입력해주어야 했기 때문에 생산성이 떨어졌는데,
객체와 DB Table을 손쉽게 매핑시켜주며 등장한 것이 ORM과 SQL Mapper라고 할 수 있다.
JDBC의 번거로움을 해결해주기 위해 등장한 두 기술은 시간순으로 보면 아래와 같이 발전했다.
객체와 SQL 필드를 매핑해 데이터를 객체화, SQL과 DB에 의존적이고 패러다임 불일치가 일어나는 SQL Mapper를 대신해
ORM은 이름 그대로 객체(Object)와 DB Table을 자동으로 매핑해 데이터를 객체화하는 손쉬운 방법을 택했다.
영속성 프레임워크, 패러다임 불일치 및 SQL Mapper와 ORM에 대한 자세한 비교는 아래 글을 확인하자.
2022.08.26 - [개발/Spring] - [Spring]JDBC(Java DataBase Connectivity)
2022.08.26 - [개발/Spring] - [Spring]SQL Mapper vs. ORM
Hibernate, JPA
이렇게 등장한 기술인 ORM을 지원하는 프레임워크는 여러개가 존재한다.
유명한 것들로만 추려보면 대략 위 그림과 같은데,
가볍고 빠른 성능 덕분에 압도적인 비율로 Hibernate를 사용하고 있다고 한다.
JPA(Java Persistent API)
JPA는 한 마디로 말하면 자바 ORM에 대한 API(Application Programming Interface) 명세이다.
이름과 명세라는 명칭에서 확인할 수 있듯이 인터페이스의 모음이며, 실제로 동작하는 코드가 아닌 가이드라인에 가깝다.
구체적으로 JPA는 위와 같은 세 개의 영역으로 구성되며, 각 영역의 설명은 대략 아래와 같다.
- API - JPA를 이루고 있는 API 그 자체. Java9 이후로는 jakarta.persistence로 바뀌었다.
- JPQL - 플랫폼에 독립적인 객체지향 쿼리 언어
- O/R Metadata - Java 클래스를 DB 스키마에 매핑해주는 xml파일
JPA는 추상적인 인터페이스의 집합이기 때문에, 실제로 사용하기 위해선 구현을 해주어야 한다.
이때 JPA를 구현한 구현체 중 하나가 위에서 알아본 Hibernate가 된다.
즉, Hibernate는 JPA를 구현한 ORM 프레임워크이며, 그중 가장 많이 사용된다.
Hibernate를 조금 뜯어보면 구현관계를 더 정확하게 볼 수 있는데,
JPA의 핵심적인 인터페이스를 상속받아 구현하고 있는 것을 쉽게 확인할 수 있다.
Spring Data JPA
위 트윗처럼, 자바는 추상화의 반복이다.
JPA의 구현이 Hibernate라는 건, 뒤집어 말하면 Hibernate의 추상화가 JPA라는 얘기도 된다.
Spring Data JPA는 여기에서 한 걸음 더 나간다.
바로 JPA를 추상화 하는 것이다.
Spring Data JPA란 한 마디로 하자면 JPA를 사용하기 편하게 추상화시킨 모듈이다.
동시에 스프링을 기반으로 한 데이터 액세스 프로젝트 Spring Data의 구성원이기도 하다.
추상화 했다는 건 예를 들어 Spring Data JPA의 SimpleJpaRepository 클래스를 열어보면 알 수 있는데,
내부적으로 JPA의 핵심인 EntityManager를 사용하고 있다.
package org.springframework.data.jpa.repository.support;
...
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
private final EntityManager em;
...
}
따라서 실제로 애플리케이션이 DB에 접근하는 순서는 아래와 같이 된다.
Spring Data JPA에서 제공하는 Repository 인터페이스를 사용하면 CRUD, Paging, Sorting과 더불어
SQL 쿼리 메서드를 작성하지 않고도 원하는 값을 편하게 조회할 수 있게 된다.
요약
- ORM - 객체(Object)와 DB Table을 자동으로 매핑해 데이터를 객체화
- JPA - 자바 ORM에 대한 API, 사용설명서
- Hibernate - JPA를 구현한 ORM 프레임워크
- Spring Data JPA - JPA를 쓰기 편하도록 추상화시킨 모듈
'Java+Spring > Spring' 카테고리의 다른 글
[Spring]단위 테스트(Unit Test) (1) | 2022.09.07 |
---|---|
[Spring]트랜잭션(Transaction) - @Transactional (0) | 2022.09.06 |
[Spring]트랜잭션(Transaction) (0) | 2022.09.05 |
[Spring]Spring Data JPA - 데이터 액세스 계층 구현 (0) | 2022.09.02 |
[Spring]JPA - Entity ↔ Entity Mapping (2) | 2022.09.01 |
[Spring]JPA - Entity ↔ DB Table Mapping (2) | 2022.08.31 |
- Total
- Today
- Yesterday
- 세모
- 세계여행
- 스프링
- 남미
- 맛집
- 기술면접
- RX100M5
- java
- 스트림
- 면접 준비
- 중남미
- Backjoon
- Algorithm
- 여행
- 자바
- 백준
- 세계일주
- 파이썬
- a6000
- 지지
- 유럽여행
- 알고리즘
- 야경
- 칼이사
- 유럽
- 동적계획법
- BOJ
- Python
- 리스트
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |