[Spring DB] JDBC 이해

DaeHoon·2022년 7월 13일
0
post-thumbnail
post-custom-banner

1-1. 프로젝트 설정

  • 프로젝트 선택
    Project: Gradle
    Project Language: Kotlin
    Spring Boot: 2.6.x
  • Project Metadata
    Group: hello
    Artifact: jdbc
    Name: jdbc
    Package name: hello.jdbc
    Packaging: Jar
    Java: 11

  • Dependencies
    JDBC API, H2 Database, Lombok

1-2. H2 설정

  • 이전 글 참고 (벨로그에 있음. 이관 후 링크)

1-3. JDBC의 이해

배경

  • 서버는 DB를 사용할 때, 위 그림과 같은 과정을 통한다.
  1. 커넥션 연결: 주로 TCP/IP를 사용해서 커넥션 연결
  2. SQL 전달: 서버는 SQL을 연결된 커넥션을 통해 DB에 전달
  3. DB는 SQL을 수행하고 그 결과를 응답한다.

문제점

  • 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 그리고 결과를 응답 받는 방법이 모두 다르다는 점이다. 그래서 사용자는 아래와 같은 2가지 문제에 직면하게 된다.
    • 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버에 개발된 데이터베이스 사용, 코드도 함께 변경해야 한다.
    • 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습해야 한다.

해결

  • 이런 문제를 해결하기 위해 JDBC라는 자바 표준이 등장한다.

JDBC

  • JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. - 위키백과
  • 대표적으로 다음 3가지 기능을 표준 인터페이스로 정의해서 제공한다.
    • java.sql.Connection - 연결
    • java.sql.Statement - SQL을 담은 내용
    • java.sql.ResultSet - SQL 요청 응답
  • 개발자는 이 표준 인터페이스만 사용해서 개발하면 되지만, 인터페이스만으로는 기능이 동작하지 않는다. 이 JDBC 인터페이스를 각각의 DB 벤더(Oracle, Maria 등 회사들)에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공하는데, 이것을 JDBC 드라이버라고 한다.
  • 예를 들어서 MySQL DB에 접근할 수 있는 것은 MySQL JDBC 드라이버라 하고, Oracle DB에 접근할 수 있는 것은 Oracle JDBC 드라이버라 한다.

정리

  1. 데이터베이스를 다른 종류의 데이터베이스로 변경하면 애플리케이션 서버의 데이터베이스 사용 코드도 함께 변경해야하는 문제
    • 애플리케이션 로직은 이제 JDBC 표준 인터페이스에만 의존한다. 따라서 데이터베이스를 다른 종류의 데이터베이스로 변경하고 싶으면 JDBC 구현 라이브러리만 변경하면 된다. 따라서 다른 종류의 데이터베이스로 변경해도 애플리케이션 서버의 사용 코드를 그대로 유지할 수 있다.
  2. 개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 그리고 그 결과를 응답 받는 방법을 새로 학습해야하는 문제
    • 개발자는 JDBC 표준 인터페이스 사용법만 학습하면 된다. 한번 배워두면 수십개의 데이터베이스에 모두 동일하게 적용할 수 있다.

단 여전히 SQL을 해당 데이터베이스에 맞도록 변경해야한다. 이를 해결하기 위 JPA(Java Persistance API)를 사용

1-4. JDBC와 최신 데이터 접근 기술

JDBC 직접 사용

SQL Mapper

  • 장점
    • SQL 응답 결과를 객체로 편리하게 변환해준다.
    • JDBC의 반복코드를 제거해준다.
  • 단점
    • 개발자가 SQL을 직접 작성해야한다.
  • 대표 기술
    스프링 jdbcTemplate, MyBatis

ORM

  • ORM은 객체를 관계형 데이터베이스 테이블과 매핑해주는 기술이다. 이 기술 덕분에 개발자는 반복적인 SQL을 직접 작성하지 않고, ORM 기술이 개발자 대신에 SQL을 동적으로 만들어 실행해준다. 추가로 각각의 데이터베이스마다 다른 SQL을 사용하는 문제도 중간에서 해결해준다.
  • 대표 기술: JPA, 하이버네이트, 이클립스링크
  • JPA는 자바 진영의 ORM 표준 인터페이스이고, 이것을 구현한 것으로 하이버네이트와 이클립스 링크 등의 구현 기술이 있다.

SQL Mapper Vs. ORM.

  • SQL Mapper는 SQL만 직접 작성하면 나머지 일은 SQL Mapper가 대신 해결하여 SQL만 다룰 줄 알면 금방 배워서 사용할 수 있으나, 생산성이 떨어진다.
  • ORM은 SQL을 작성하지 않아도 되 개발 생산성이 높아지나, 실무엥서 사용하려면 깊이 있게 학습해야 한다.
  • 둘다 내부에는 JDBC를 사용한다. 따라서 JDBC를 직접 사용하지는 않더라도, JDBC가 어떻게 동작하는지 기본 원리를 알아두어야 한다.
profile
평범한 백엔드 개발자
post-custom-banner

0개의 댓글