본문 바로가기
CodeStatesBootCamp/Review

Section 3 - Unit 4 : [Spring MVC] JDBC 기반 데이터 액세스 계층 Review

by JKROH 2023. 4. 18.
반응형
Review 에서는 학습한 내용을 다시금 기록합니다.
Unit Review는 학습한 내용 중 기존에 알고 있었지만 정확하게 이해하지 못하던 정보와 새롭게 알게된 정보를 기록합니다. 추가적인 설명을 요하는 부분은 댓글로 남겨주세요.
Section Review는 전반적인 Section을 되돌아보고 학습했던 시간과 과정, 내용을 총괄하여 기록합니다.

Spring Data JDBC

* JDBC란?

  • 쉽게 말해서, JAVA 코드로 DB에 접근해 데이터를 CRUD 할 수 있게 해주는 API다. 즉, 하나의 데이터 엔티티를 JAVA와 DB에서 모두 사용할 수 있게 바꿔주는 역할을 한다.
  • 순수 JDBC API로 프로그래밍하는 것은 20년 전에나 있던 일이다. 그러나, JDBC가 어떻게 돌아가는 건지 정도는 알아두는 것이 좋다.

- JDBC의 동작 흐름

  • Java 애플리케이션은 JDBC API를 호출해서 DB랑 연결 좀 시켜달라고 부탁한다.
  • JDBC API라고 무작정 DB에 접근할 수 있는 것은 아니다. DB 드라이버(JDBC 드라이버)를 로딩해 DB와 연결한 뒤 여러 작업을 수행한다.
    • JDBC 드라이버 : 각 DBMS에 맞는 드라이버다. DB마다 사용하는 문법이 다르고 규정이 다르다. 이를 JDBC가 적절히 해석해서 자신과 통신할 수 있게 만들어놓은 인터페이스를 JDBC 드라이버라고 한다.

- JDBC API 사용 흐름

  • DriverManager를 통해 JDBC 드라이버를 로딩한다.
  • JDBC 드라이버의 로딩이 완료되면, DriverManager를 통해 DB와 연결되는 세션인 Connection 객체를 생성한다.
  • SQL 쿼리문을 실행하기 위한 Statement객체를 생성한다.
  • Statement 객체를 이용해 쿼리문을 실행한다.
  • 쿼리문의 결과로 반환되는 ResultSet 객체에서 데이터들을 뽑아온다.
  • 순서대로 자원들을 닫아준다.

- Connection Pool 이란?

  • JDBC API가 DB를 사용하는 과정 중에 가장 많은 비용을 차지하는 것이 Connection 객체를 만드는 것이다.
  • 따라서, 프로그램이 최초 로딩될 때 미리 커넥션 객체를 여러 개 만들어두어, 성능적인 측면에서 이점을 얻을 수 있다.
  • 이렇게 미리 만들어놓은 Connection 객체를 관리하는 것을 Connection Pool 이라고 한다.
    • 물론, 무작정 Connection 객체를 많이 만드는 것은 좋지 않다. 당연히 로딩이 오래 걸리고, 전체 서버 용량 중 지나치게 많은 부분을 차지할 수 있다.
    • 그렇다고 너무 적게 만들면, 사용자가 몰렸을 때 늦게 온 사용자는 Connection 객체가 부족해 앞선 사람이 사용하던 Connection 객체가 반환되기를 기다려야 한다. 데드락 상태에 빠질 수도 있다.
    • 결국 적절한 Connection 객체의 수를 설정하는 것이 중요하다.
  • Spring Boot 2.0부터는 HikariCP가 기본 DBCP로 채택되었다. 
    • 당연히 성능적인 측면에서 이점이 있으니까 채택된 것이다.
    • 왜 성능적인 측면에서 이점이 있는지는 링크에서 확인할 수 있다.

* Spring Data JDBC란?

- SQL 중심 기술 vs 객체 중심 기술 

  • SQL 중심 기술
    • SQL 중심 기술은 SQL 쿼리문을 애플리케이션 내부에 직접 작성해 DB에 접근하고 CRUD를 처리한다.
    • 데이터를 처리하는 방식을 SQL 위주로 처리한다.
    • myBatis나 Spring JDBC가 대표적이다.
  • 객체 중심 기술
    • 객체 중심 기술은 DB에 접근하기 위해 SQL 쿼리문을 직접 작성하기보다는 객체를 이용한다. 애플리케이션 내부적으로 객체를 SQL 쿼리문으로 자동으로 변환한 뒤 DB에 접근하고 CRUD를 처리한다.
    • 데이터를 처리하기 위해 Java 객체(Object)를 이용한다. 따라서 객체 중심의 데이터 액세스 기술을 ORM(Object-Relational Mapping)이라고 한다.
    • Spring Data JDBC, JPA, Spring Data JPA가 대표적이다.
반응형

댓글