Spring JDBC(1) JDBC란

오잉·2023년 4월 13일
0

SPRING

목록 보기
4/15

JDBC (Java Database Connectivity)

JDBC 등장 배경

애플리케이션서버에서 DB서버에 연결하기 위해서는 하단의 작업들을 실행한다.

  1. 커넥션 연결 : TCP/IP를 사용해 애플리케이션서버와 DB서버 연결
  2. SQL 전달 : 애플리케이션서버는 연결된 커넥션을 통해 DB서버에 SQL을 전달
  3. 결과 응답 : DB서버는 전달받은 SQL을 수행하고 그 결과를 응답. 애플리케이션서버는 응답 결과를 활용

이때 DB서버를 교체한다면 어떻게 될까?

DB서버마다(ex. MySQL, Oracle) 커넥션 연결 방법, SQL 전달 방법, 결과 응답 방법이 모두 다르다
-> 2가지 문제가 발생한다.
문제1. DB 교체시 애플리케이션서버에서 개발한 DB관련 코드를 싹 다 변경해야 한다.
문제2. 개발자가 각 DB마다의 사용법을 전부 학습해야 한다.

=> 이러한 문제를 해결하기 위해 JDBC라는 자바 표준이 등장했다.

JDBC란

  • 자바 프로그램이 DB와 연결되어 데이터를 주고 받을 수 있게 해주는 인터페이스
  • 응용프로그램과 DB간의 통신을 중간에서 번역해주는 역할

JDBC 기능

JDBC는 대표적으로 다음 3가지 기능을 표준 인터페이스로 정의해서 제공한다.
1) Connection : 연결 (특정 DB와의 연결정보를 가지는 interface)
2) Statement : SQL을 담은 내용 (SQL query문을 DB에 전송하는 방법을 정의한 interface)
3) ResultSet : SQL 요청 응답 (SELECT 구문 실행 결과를 조회할 수 있는 방법을 정의한 interface)

자바는 이렇게 표준 인터페이스를 정의해두었다. 이제부터 개발자는 이 표준 인터페이스만 사용해서 개발하면 된다. 그런데 인터페이스만 있다고해서 기능이 동작하지는 않는다.
-> 이 JDBC 인터페이스를 각각의 DB 벤더(회사)에서 자신의 DB에 맞도록 구현해서 라이브러리로 제공하는데, 이것을 JDBC 드라이버라 한다.
(ex. MySQL DB에 접근할 수 있는 것 - MySQL JDBC 드라이버 / Oracle DB에 접근할 수 있는 것 - Oracle JDBC 드라이버)

JDBC 개발 단계

1) JDBC Driver Loading

  • DB 벤더에 맞는 Driver 호출
  • DB와의 연결을 위해 Driver 로딩

2) Connection

  • DB연결정보(URL과 계정정보) 필요
  • DriverManager.getConnection(url, id, pwd);

3) Statement (PreparedStatement)

  • SQL query 정의
  • 변경 될 값은 치환문자 이용
  • query 전송 전 값 세팅

4) executeUpdate() or executeQuery()

executeUpdate()

  • INSERT, UPDATE, UPDATE의 경우에 사용
  • 반환값은 int (DB에서 영향받은 row 수)

executeQuery()

  • SELECT의 경우에 사용
  • 반환값은 ResultSet

5) ResultSet (SELECT의 경우)

  • DB조회 결과집합에 대한 표준
  • next()를 통해 DB 테이블 안의 하나의 row를 불러온다
  • getString(), getInt()등을 통해 한 row의 특정 column 값을 가져온다

6) close

  • Connection, Statement, ResultSet에 대한 close

JDBC와 최신 데이터 접근 기술

JDBC는 오래된 기술이다. 그래서 최근에는 JDBC를 직접 사용하기 보다는 JDBC를 편리하게 사용하기 위한 다양한 기술이 존재한다.

0) JDBC 직접 사용

1) SQL Mapper

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

2) ORM 기술

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

SQL Mapper vs ORM

SQL Mapper와 ORM 기술 둘다 각각 장단점이 있다.

  • SQL Mapper
    • SQL만 직접 작성하면 나머지 번거로운 일은 SQL Mapper가 대신 해결해준다.
    • SQL만 작성할 줄 알면 금방 배워서 사용할 수 있다.
  • ORM
    • SQL 자체를 작성하지 않아도 되어서 개발 생산성이 매우 높아진다.
    • 편리한 반면에 쉬운 기술은 아니므로 실무에서 사용하려면 깊이있게 학습해야 한다.

이 글은 인프런 김영한님의 스프링 DB 1편의 [섹션1. JDBC 이해]를 기반으로 정리한 글입니다.

profile
오잉이라네 오잉이라네 오잉이라네 ~

0개의 댓글