ORM

Sonar0·2022년 12월 30일
0

ORM (Object-Relational Mapping)

ResultSet과 POJO class를 매핑하는 코드를 매번 짜는 것이 불편해서 ORM (Object-Relational Mapping) Library가 만들어졌다.
ORM은 객체와 Realational Model(관계형 데이터베이스 모델)을 매핑할 수 있는 기능을 가지고 있다.
하나의 테이블이 하나의 Java Class에 해당하고, FK와 같은 부가적인 기능(JOIN과 같은 참조기능)은 함수로 제공한다.
Hibernate가 ORM의 표준을 주도해왔으며 ORM은 단순히 데이터 매핑 뿐만 아니라 데이터의 캐시, 세션, 라이프사이클 관리 기능까지 그 기능이 방대하다.

JPA

ORM의 유용성이 입증되고 ORM을 구현하는 라이브러리와 프레임워크가 많아졌다.(Hibernate, MyBatis, TopLink, CoCobase ...) 이 ORM 기술에 대한 표준화를 시도한 것이 JPA이다.
ORM과 관련해서 각 구현체의 함수를 따로 사용하는 것이 아니라 JPA의 인터페이스를 통해서 작성하면 ORM 구현체를 무엇을 사용하던지 코드를 변경할 일이 없게된다. (JDBC 표준 인터페이스와 동일한 기능)

왜 JPA보다 JDBC를 먼저 공부했는가?

개발 생산성 측면에서는 JPA를 쓸 수 밖에 없다. 하지만 RDBMS를 사용하는데 필수인 기술은 JDBC이며, JPA도 내부적으로는 JDBC를 통해 RDBMS와 상호작용한다. 가장 말단의 구현체의 원리를 알면, 그것을 추상화하거나 감싼 라이브러리나 기술(ex. Hibernate ...)을 이해하는 깊이가 깊어진다.
뿐만 아니라 데이터 엔지니어로 일하면서 RDBMS가 아니라 OLAP (대용량 조회를 위한 빅데이터 시스템) 서비스를 직접 구축해서 제공할 때 JDBC 인터페이스에 맞는 기능을 제공해야 할 경우가 생긴다. JDBC가 오래된 기술이라 이미 그것을 이용해서 만들어진 도구들이 많은데(Tableau), 대용량 분석도구는 생긴지 얼마 안돼서 대용량 분석도구에 맞는 쿼리나 접근방식을 일일히 구현하기 어렵다. 이 때 JDBC 드라이버로 활용을 하는 경우가 많고 JPA등을 통하지 않고 JDBC를 사용해본 경험이 있다면 도움이 될 것이다.

SpringBoot와 Hibernate

SpringBoot : spring-data-jpa는 data object와 repository interface만 선언하고 바로 사용할 수 있으므로 빠른 개발에 특화
spring-data-jpa를 쓰기 위해서는 jpa를 위한 기능 뿐만 아니라 spring framework를 위한 다양한 의존성이 생기고, 런타임 동작이 생기는데 이것 때문에 어플리케이션이 불필요하게 리소스를 많이 사용하거나, 라이브러리 의존성 해결에 많은 시간이 걸린다.

Hibernate : 기능상으로 일치하면서 가벼움. Spring Framework가 필요 없다면 사용 추천.

profile
초보 개발자

0개의 댓글