Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- REACT
- java
- upgrade
- current_date
- update
- Chunk
- regex
- Regular expression
- log4j2
- npm
- spring cloud
- mysql 5.5
- REACTJS
- nodejs
- JavaScript
- Effective Java 3/e
- Node
- migration
- Express
- log_bin
- eslint
- Spring Batch
- spring
- Effective Java
- MySQL
- 정규표현식
- expire_logs_days
- 퀵소트
- git
- Webpack
Archives
- Today
- Total
내 세상
[Spring] Spring ORM 본문
728x90
https://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html
JPA(Java Persistent API)
- Java ORM 기술에 대한 API 표준 명세
- ORM을 사용하기 위한 Interface를 모아둔 것.
- To use JPA → Hibernate, EclipseLink, DataNucleus 같은 ORM FWK를 사용해야 함.
ORM(Object Relational Mapping)
- Object와 DB Table이 Mapping을 이루는 것. → Object가 Table이 되도록.
- Query문이 아닌 직관적인 코드(Method)로 데이터를 조작할 수 있음.
- → query 작성 시간 ↓ → 생산성 ↑
- But, 복잡한 query는 ORM으로 표현하는 데 한계가 있음.
- 성능이 raw query에 비해 느림.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ JPA 탄생 배경 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
- MyBatis(JDBC를 직접 사용)의 경우 DAO 개발이 매우 반복되는 작업. 또한, column 추가 시, 모든 sql문을 수정해야 함. → DAO와 table은 강한 의존성(dependency)
- → 큰 문제점 : [비중] 데이터 중심 모델링(table 설계) > 객체 모델링, 객체 지향의 장점(추상화, 캡슐화, 정보은닉, 상속, 다형성)을 사용하지 않고 객체를 단순히 데이터 전달 목적(VO, DTO)에만 사용함.
- Book, Album Table을 상속받는 Item Table 객체 지향 모델링.
- ERD에서 사용하는 데이터 모델링과 달리 상속 개념이 있음.
- 모델링을 위와 같이 객체 지향적으로 했을 경우 → SQL을 작성해야 하는 JDBC로 사용하기 위해서는 ERD로 바꾸어 줘야함....... 그런데, ERD는 상속 관계를 표현하기 쉽지 않음..
- JDBC API를 사용했을 때 문제 : 유사한 CRUD SQL 반복 작업, 객체를 단순 데이터 전달 목적, 객체 지향적이지 못함(패러다임 불일치)
Hibernate의 특징
- 장점
- SQL 직접 사용 X → Only Method Call로 query 수행. → SQL 반복 작업 X → 생산성 ↑
- 테이블 칼럼 변경 시, [Before] DAO 파라미터, 결과, SQL 모두 수정 → [After] JPA가 해당 부분을 처리해줌 → 유지보수 ↑
- DB 벤더에 따라 query가 조금씩 다름. → But, JPA는 추상화된 데이터 접근 계층을 제공하여 벤더 종속성 X → 설정 파일에서 어떤 DB를 사용하는 지 설정만 하면 됨 → 특정 벤더 종속 X
- 단점
- Query 수행 누락 및 성능 문제 → 최근은 계속 발전 중 → 성능 ↓
- 복잡한 Query의 경우 Method로 해결 어려움 → 세밀함 ↓ → But, SQL과 유사한 JPQL을 지원함.
- 잘 사용하기 위해 공부해야할 것이 많음 → 러닝 커브 ↑
Summary
- 현재 우리나라의 경우 대부분이 SI, 금융 시장이라 비즈니스가 매우 복잡하고, 안정성을 중요시하여 JPA보다 MyBatis를 사용하고 있음. 아직까지 Hibernate가 뜨지 못하고 있음
- JPA는 통계 쿼리처럼 복잡한 SQL을 수행하기 힘듬 → 비즈니스에 따라 MyBatis, Hibernate를 선택해야 함.
- Hibernate 메서드 내부에 JDBC API 동작. 단지, 개발자가 직접 SQL을 작성하지 않을 뿐임.
728x90
'Technical > Spring' 카테고리의 다른 글
[Spring] Spring in Action, Chapter 5. 스프링 웹 애플리케이션 만들기 (0) | 2019.07.30 |
---|---|
[Spring] Spring in Action, Chapter 4. 애스펙트 지향 스프링 (0) | 2019.07.30 |
[Spring] Spring in Action, Chapter 2. 빈 와이어링(묶기) (0) | 2019.07.30 |
[Spring] Spring in Action, Chapter 1. 스프링 속으로 (0) | 2019.07.30 |
[Spring] Spring Core (0) | 2019.07.30 |