[TIL #40] 자바에서 데이터베이스 접근하기

2025. 1. 14. 22:08·개발/내일배움캠프 TIL

그동안 캠프를 진행하면서 여러 과제와 프로젝트를 쉬지 않고 진행하는 바람에 캠프 진행도에선 Spring 에 대한 공부과정은 끝났는데 정작 Spring 에 대해서 정말 제대로 이해하고 사용하고 있는 것일까? 란 질문을 스스로 던져보면 '아니요' 라는 답이 나온다.

그래서 다시 돌아온 학습주차때 스프링에 대해 다시 심도있게 공부하는 시간을 가지기로 하였다.

 

자바에서 데이터베이스와 상호작용하는 법

서버와 데이터베이스의 기본적인 통신 방법

  1. TCP / IP 를 사용해 커넥션을 연결
  2. 연결이 완료되면 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 전달
  3. DB를 받은 SQL을 실행하고 결과를 응답

여기서 중요한 것은 2. DB가 이해할 수 있는 SQL을 연결된 커넥션이다.

관계형 데이터베이스는 종류가 많아 커넥션을 연결하는 방법, SQL을 전달하는 방법등이 전부 달라 데이터베이스가 변경된다면 서버에서 그 방식에 맞춰 코드도 전부 변경해야된다는 것이다.

 

그럼 데이터베이스를 안 바꾸면 되는 거 아니야? 라고 생각할 수 있지만 혼자 운영하는 애플리케이션이라면 상관없지만 기업, 팀 단위로 여러사람이 모여 개발하는 애플리케이션이라면 아닐 것이다.

 

그래서 생긴 것이 JDBC 라는 자바에서 제공하는 표준 인터페이스이다.

이 JDBC는 Connection(연결), Statement(SQL 내용), ResultSet(응답) 이라는 3가지 기능을 표준 인터페이스로 정의하여 제공하는데 DB회사에서 자신의 DB에 맞도록 이 인터페이스를 이용해 구현체를 만들어 라이브러리로 제공하는데 이것이 JDBC드라이버이다.
(마치 회사들이 여러 OS환경(윈도우, 맥)에 맞게 어플을 개발하여 각각 제공하는 것과 비슷하다.)

 

그리하여 우리는 이 JDBC 표준 인터페이스에 의존하여 로직을 구현하면 어떤 데이터베이스를 사용하든간에 코드를 그대로 유지할 수 있게 된다.

 

그럼 여기서 커넥션은 무엇일까?

 

커넥션

위에서 설명했듯 서버와 데이터베이스를 연결할때 커넥션이라는 것이 필요한데 이것은 데이터를 상호작용하기 위한 통로와 같다.

근데 이 통로를 만들기 위해선 다음과 같은 과정이 필요하다.

  1. 서버가 데이터베이스에 TCP/IP 연결을 위해 커넥션을 요청한다.
  2. 연결을 위해 ID, PW와 같은 필수 정보를 DB에 전달한다.
  3. DB은 정보를 통해 인증을 완료하여 내부에 DB 세션을 생성하고 연결이 완료되었다는 응답을 보낸다.

이렇듯 데이터를 한번 주고받을 때마다 이렇게 커넥션을 생성하는 것은 과정이 너무 복잡하고 시간도 많이 소요된다.

그래서 생긴 것이 커넥션 풀이다.

 

커넥션 풀은 이러한 커넥션을 필요한 만큼 미리 생성해두어 풀에 보관한다. 그래서 보관된 만큼 필요할 때 쓰고 다시 반환하는 보관함이라고 생각하면 될 것 같다. 이러한 커넥션 풀로 여러 오픈소스가 있는데 현재는 대부분이 hikariCP 를 이용한다.

 

근데 어찌됐든 이 커넥션을 획득하는 방법도 여러가지가 있는데 위와 같이 방법을 바꿀 때마다 로직 또한 같이 변경해줘야하는 번거로움이 있다. 근데 또 자바에서 이런 문제를 해결하기 위해 DataSource 라는 인터페이스를 제공한다. (자바는 정말 여러 기술들을 하나의 로직으로 쓸 수 있게끔 하는.. 이런 인터페이스를 정말 좋아하는 것 같다.)

 

아무튼 이런 자바에서 제공하는 여러 기술들을 이용해서 데이터베이스와 상호작용하는 방식을 좀 더 자세하게 알아보는 시간을 가졌다.

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

[최종프로젝트] 채팅 서비스 개발3 - 채팅 기록 저장  (0) 2025.02.25
[TIL #42] [최종프로젝트] 채팅 서비스 개발2 - 채팅방 설계  (0) 2025.02.19
[TIL #39] 탈퇴한 회원 관리 테이블 분리 VS 필드 트러블 슈팅  (0) 2025.01.12
[TIL #38] Spring 심화 주차 과제 Lv 6 기능 개선하기  (0) 2025.01.06
Spring 뉴스피드 프로젝트 미니 발제 KPT 회고  (0) 2024.12.27
'개발/내일배움캠프 TIL' 카테고리의 다른 글
  • [최종프로젝트] 채팅 서비스 개발3 - 채팅 기록 저장
  • [TIL #42] [최종프로젝트] 채팅 서비스 개발2 - 채팅방 설계
  • [TIL #39] 탈퇴한 회원 관리 테이블 분리 VS 필드 트러블 슈팅
  • [TIL #38] Spring 심화 주차 과제 Lv 6 기능 개선하기
BigChoi93
BigChoi93
이곳은 저의 성장과정과 개인적인 생각을 담기 위한 공간입니다.
  • BigChoi93
    Donologue
    BigChoi93
  • 전체
    오늘
    어제
    • 분류 전체보기 (61)
      • 개발 (53)
        • Javascript (2)
        • 내일배움캠프 TIL (41)
        • 개발일기 (4)
        • Java (2)
        • Spring (1)
        • Sql (1)
      • 일상 (0)
      • 사진 (1)
        • 포토샵 (1)
  • hELLO· Designed By정상우.v4.10.1
BigChoi93
[TIL #40] 자바에서 데이터베이스 접근하기
상단으로

티스토리툴바