1. ORM 개념 이해
JDBC에서 ResultSet과 POJO class를 매핑하는 코드를 매번 짜는 것이 불편해서 만들어진 기술(Library)을 ORM(Object-Relational Mapping)이라고 한다. 객체와 Relational Model(관계형 데이터베이스 모델)을 매핑할 수 있는 기능을 갖고 있다. 하나의 테이블이 하나의 Java Class에 해당하고, FK와 같은 부가적인 기능은 함수로 제공한다.
Hibernate로 대표되는 현대 ORM은 단순히 데이터 매핑 뿐만 아니라 데이터의 캐시, 세션, 라이프사이클 관리 기능까지 더해져서 그 기능이 방대하다.
2. JPA
ORM의 유용성이 입증되고 나니 Hibernate, MyBatis, TopLink, CoCobase 등 ORM을 구현하는 라이브러리 또는 프레임워크가 많아졌다. 이 ORM 기술에 대한 표준화를 시도한 것이 JPA이다.
DB에 query를 날릴 때 각 DB 제품별 전용 함수를 사용하는 것이 아니라 JDBC를 사용했던 것과 마찬가지로, ORM과 관련해서 각 구현체의 함수를 따로 사용하는 것이 아니라 JPA의 인터페이스를 통해서 작성하면, ORM 구현체를 무엇을 사용하던지, 코드를 변경할 일이 없게 된다.
3. JDBC를 배워야 되는 이유
RDBMS에서 데이털르 읽고 쓰는 일이 많다면, 개발 생산성 측면에서 JPA를 쓰는게 우월전략이다. 하지만, JPA는 필수가 아니다. Java에서 RDBMS를 사용하는 데 필수인 기술은 JDBC이다. JPA도 내부적으로는 JDBC를 통해 RDBMS와 상호작용한다. 가장 말단의 구현체의 원리를 알면, 그것을 추상화하거나 감싼 라이브러리나 기술을 이해하는 깊이가 깊어지기 때문에 배워둬야 한다.
또한, 데이터 엔지니어로 일하게 되면 RDBMS보다 OLAP 서비스를 제공할 때, JDBC 인터페이스에 맞는 기능을 제공해야할 경우가 생긴다. Java와 JDBC가 오래된 기술이라 이미 그것을 이용해서 만들어진 도구들이 많은데, 대용량 분석도구는 생긴지 얼마 안되어서 대용량 분석도구에 맞는 쿼리나 접근방식을 일일히 구현하기 어렵기 때문이다. 이때 JDBC를 한 번이라도 JPA등을 통하지 않고 직접 써본 경험이 있다면 큰 도움이 된다.
4. 추천 JPA
빠른 개발을 위해 SpringBoot의 spring-data-jpa가 data object와 repository interface만 선언하고 바로 사용할 수 있으므로 좋다.
다만, Spring Framework가 필요없다면, Hibernate jpa를 이용해서 구현하는 것을 추천한다. spring-data-jpa를 쓰기 위해서는 jpa를 위한 기능 뿐만 아니라 spring framework를 위해 다양한 의존성이 생기고, 런타임 동작이 생기는데 이것 때문에 어플리케이션이 불필요하게 리소스를 많이 사용하거나 라이브러리 의존성 해결에 너무 많은 시간을 쏟게 되기 때문이다.
'Computer Science > Database' 카테고리의 다른 글
[NoSQL] NoSQL의 개념과 특징, 사례 (RDBMS와 비교) (0) | 2023.02.06 |
---|---|
[Database] JDBC - Prepared Statement, CallableStatement (0) | 2023.01.19 |
[Database] JDBC - Statement, ResultSet (0) | 2023.01.17 |
[Database] JDBC - DriverManager, Connection (MySQL 접속) (0) | 2023.01.13 |
[JDBC] JDBC (Java Database Connectivity) (0) | 2023.01.12 |