Java Application에서 Database Layer에 접근하는 방법

namkun·2023년 6월 18일
0

T-I-L

목록 보기
17/20

JDBC

썬 마이크로 시스템즈에서 지원하는 자바 표준 API
JDBC 구현체는 다양한 JDBC Driver 구현체를 통해 동일한 인터페이스로 구현한다.

단점

  • Connection과 Statement를 가져오는 등, 반복적인 코드가 많아지고 복잡해진다. (그렇기에 Spring에서는 JDBCTemplate 를 제공한다.)
  • 소스코드상에 쿼리가 직접적으로 들어간다.

JDBC Template

  • JDBC Template는 자바에서 제공하는 것이 아닌 Spring에서 제공하는 것이다.
  • 반복적인 잡업을 대신처리한다.
  • Bean으로써 컨테이너에서 관리한다.
  • 이를 사용함으로 Connection을 맺는 과정, 예외처리하는 과정등 반복적으로 사용되는 코드를 줄일 수 있고 바로 쿼리를 보낼 수 있다.
  • 그러나 반복적인 부분만 대체해주지, Transaction에 대해서는 관리해주지 않는다. 즉 관련해서는 직접 구현해야한다.

QueryMapper

JdbcTemplate를 사용해도, 커넥션만 맺어줄 뿐 결국에는 자바 코드상에 쿼리를 직접 작성해야한다.
이는 쿼리를 변경 및 추가를 하기 위해서는 소스코드를 변경시켜야 한다는 이야기이기에 결국 의존성이 생긴다는 걸 말한다.
이는 소스코드 및 쿼리의 유지보수에 어려움을 준다.

그렇기에 QueryMapper 라는 것이 등장하였고, 대표적인 것이 바로 MyBatis이다.
이는 자바 표준이 아니기에, 다른 언어에서도 지원가능하다.

QueryMapper 의 가장 큰 목적은 소스코드로 부터 쿼리를 분리시키는 것이다.

MyBatis는 Spring 과 전혀 관계가 없고 Data Access Layer에 속하는 프레임워크라고 할 수 있다. (application framework는 아니다.)

그러나 spring에서 제공되는 연동 모듈이 있어서 spring boot에서는 컨테이너가 로드되며,
AutoConfiguration에 의해서 굳이 Bean 파일을 작성하지 않아도 알아서 의존관계가 작성된다.

따라서 MyBatis를 사용함으로써 쿼리 추가 / 삭제 시에 Application 코드를 새로 컴파일 할 필요가 없게 된다.
(유지보수성이 좋아진다.)

그러나 쿼리 결과를 객체지향적으로 사용할 수 없다.

JPA (Java Persistence API)

자바 ORM 기술에 대한 표준 명세이고, Java Application에서 RDB를 사용하는 방식을 정의한 인터페이스이다.

ORM의 한 종류이기에 자바 클래스와 DB 테이블을 매핑한다.

ORM?

  • Object-Relation Mapping 의 줄임말로 객체-관계를 매핑하는 것을 말한다.
  • Object <- mapping -> DB data
  • 객체를 디비에 자동으로 매핑해준다.
  • 객체를 통해 간접적으로 데이터를 다룬다.

JPA는 말 그대로 인터페이스라서 구현체가 아니다.
(이는 JPA의 패키지인 javax.presistence 아래를 보면 알 수 있다. 대부분이 interface, enum, exception, annotation으로 이루어짐)

JPA가 인터페이스인 이유는 POJO(특정 프레임워크를 의존하지 않는 순수한 자바객체)를 지향하기 위함이다.

즉, 특정 기술에 종속적이지 않게 ORM을 제공하기 위해 자바는 표준 API인 JPA 라는 인터페이스를 두어서 보다 순수한 자바 객체를 설계하도록 하는 것이다.

JPA 의 구현체를 ORM Framework라고 하는데, 이중 가장 대표적인건 hibernate라고 할 수 있다.

JPA는 RDB의 테이블을 자바의 객체를 다루듯이 연산하는 것이 가장 핵심이라고 할 수 있다.

JPA를 사용함으로써 앞선 JDBC, QueryMapper에서 할 수 없었던 객체 중심의 개발이 가능해진다.

profile
개발하는 중국학과 사람

0개의 댓글