늦은 프로그래밍 이야기

230201 TIL (JPA 심화) 본문

내일배움캠프/TIL, WIL

230201 TIL (JPA 심화)

한정규 2023. 2. 1. 23:55

JPA 심화

JPA 심화 강의로 ORM의 탄생 배경 (ORM 이전의 JDBC, Query Mapper), ORM의 성장 과정 (ORM의 문제점과 해결책), SpringData JPA 이전의 Raw JPA에 대해서 알게 되었다. 이번 강의에서 데이터베이스로는 Docker로 PostgreSQL을 사용해 보았다.

Docker, PostgreSQL

application.yml

spring:
  datasource: # 여기에 정보만 입력하면 HibernateJpaAutoConfiguration 가 연결 설정해줌
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/데이터베이스명
    username: 유저
    password: 비밀번호

다음의 명령어로 Docker 컨테이너를 생성한다.

docker run -p 5432:5432 -e POSTGRES_PASSWORD=비밀번호 -e POSTRES_USER=유저 -e POSTGRES_DB=데이터베이스명 --name postgres_boot -d postgres

컨테이너가 실행 되었으면 다음의 명령어로 PostgreSQL이 정상 동작하는지 확인 및 root로 진입한다.

docker exec -i -t postgres_boot bash

기본 사용자 postgres로 컨테이너 내부로 진입한다.

su - postgres

다음 명령어로 연결 설정한 유저이름으로 해당 데이터베이스에 진입한다.

psql --username 유저 --dbname 데이터베이스명

데이터베이스 목록을 확인한다.

\l 또는 \list

데이터베이스 내의 테이블 목록을 조회한다.

\dt

ORM의 탄생배경

DB → JDBC → JDBC Template(QueryMapper) → MyBatis(QueryMapper) → ORM

JDBC

DB가 탄생하고 Java와의 연동을 위하여 JDBC가 나오게 되었다. JDBC는 Java Database Connectivity의 줄임말로 Java와 DB를 연결 시켜주기 위해 만들어진 기술이다. JPA 또한 JDBC를 사용하여 구현되어 있다.

  • JDBC Driver Manager

Connection(연결)을 생성 → Statement(상태)를 생성 → ResultSet(결과셋)을 생성 → 사용 후 각각의 자원을 close()를 호출하여 자원 해제를 하여야 한다.

강의에서 JDBC 실습을 통해 직접 구현해 보았는데, 한번 직접 구현한 것으로 족하고 JDBC를 사용할 기회는 없을 것 같아서 어떻게 흘러 가는지만 이해하고 넘어가기로 했다.

  • JDBC의 문제점

SQL 쿼리 요청시 중복 코드 발생, 예외에 대한 구분 없이 SQLException 처리, 자원(Connection 등) 관리

JDBC Template

JDBC의 문제점을 해결하기 위해서 Persistance Framwork가 등장하게 되었는데 그 중 하나는 SQL Mapper(QueryMapper)이다.(Persistance Framework의 다른 하나는 ORM) SQL Mapper는 SQL문과 객체의 필드를 맵핑하여 데이터를 객체화 한다.(ORM이 아닌 OSM?) SQL Mapper 중 JDBC Template이 먼저 나오고 그 뒤로 MyBatis가 나오게 되었다.

JDBC Template은 쿼리 수행 결과와 객체 필드를 매핑, RowMapper 에서 응답필드(ResultSet) 매핑코드 재사용, 자원 관리를 대신 해주지만, JDBC에서 반복되는 작업을 재사용하는 것 밖에 개선된 것이 없어 보였고, 여전히 많은 코드가 필요했다.

MyBatis

SQL Mapper 중 두번째로 등장한 MyBatis는 Configuration을 주입하므로 인해 반복적인 JDBC 프로그래밍을 단순화 하였고, SQL 쿼리들을 XML 파일에 작성하여 코드와 분리할 수 있는 방법과, 어노테이션을 사용하여 쿼리를 작성하는 방법 두가지가 있는 것 같다. 두가지 방법 중 어노테이션으로 쿼리를 직접 작성하는 방법은 @Query 어노테이션을 사용하여 직접 작성하는 방법과 동일한 것 같았다.

이전보다는 확실히 편리해진 것은 맞지만, 쿼리를 직접 작성한다는 단점과 쿼리를 직접 작성하기 때문에 테이블마다 비슷한 쿼리를 반복하여 작성해야 하고, DB의 타입과 테이블에 종속적인 단점이 있다.


'내일배움캠프 > TIL, WIL' 카테고리의 다른 글

230203 TIL (알고리즘)  (0) 2023.02.04
230202 TIL (JPA 심화)  (0) 2023.02.03
230131 TIL (알고리즘, JPA 심화)  (0) 2023.01.31
13주차 WIL  (0) 2023.01.29
230127 TIL (알고리즘, 리팩토링)  (0) 2023.01.28
Comments