[Spring] Spring DB 접근 기초

신명철·2022년 6월 21일
0

Spring

목록 보기
2/3

JDBC의 필요성

  • TCP/IP를 사용해 DB와 커넥션을 연결한다.
  • Server는 DB로 SQL을 전달하는데, DB마다 커넥션 연결/ SQL 통신 방법이 모두 다르다는데 문제가 있다.

JDBC

JDBC(Java Database Connectivity)는 자바에서 DB에 접속할 수 있도록 하는 자바 API이다.

  • JDBC는 여러 개의 DB Driver를 추상화한 Layer를 제공하는 방법으로 위와 같은 문제를 해결한다.
  • 좀 더 자세히 들어가면 이 사이에는 DriverManager가 존재한다. 아래를 보자

커넥션 풀

  • 지금까지의 내용만 본다면, DB에 접근하기 위해서는 위 그림과 같이 커넥션을 매번 획득해야 한다는 문제가 존재한다. 게다가 커넥션을 획득하는 과정은 다음과 같이 복잡한 과정을 거쳐야만 한다. 그렇기 때문에 성능상으로도 많은 문제가 존재한다.
      1. 어플리케이션 로직이 DB 드라이버를 통해 커넥션을 조회한다.
      1. DB 드라이버는 DB와 TCP/IP 연결을 맺는다
      1. TCP/IP 연결이 맺어지면 DB 드라이버가 DB로 ID/PW와 같은 부가정보를 DB에 전달한다.
      1. 인증이 완료되면 DB는 내부에 세션을 생성한다.
      1. DB는 커넥션 생성이 완료되었다는 응답을 보내고 DB 드라이버는 커넥션 객체를 생성해서 이를 클라이언트에게 반환해준다.
  • 커넥션 풀은 위와 같은 단점을 해결하기 위해 여러 개의 커넥션을 미리 받아두는 작업을 한다.
  • 스프링 부트에서는 기본 커넥션 풀로 hikariCP를 제공하고 실무에서도 대부분 hikariCP를 사용한다.

DataSource

  • 지금까지의 내용으로 따지면 DB 커넥션을 획득하는 방법은 위와 같이 다양하다. 만약, hikariCP를 사용하다가 DBCP2로 변경해야 하는 상황이 발생하면 모든 의존관계와 코드의 많은 부분도 수정을 해야할 것이다.
  • DataSource는 커넥션을 획득하는 방법을 추상화한 Layer를 제공한다.

출처: 스프링 DB 1편 - 데이터 접근 핵심 원리

profile
내 머릿속 지우개

0개의 댓글