내 세상

[Spring] Spring ORM 본문

Technical/Spring

[Spring] Spring ORM

sga8 2019. 7. 30. 14:38
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
반응형