도당탕탕

JDBC Template에 대해서 본문

Spring

JDBC Template에 대해서

backlo 2020. 1. 16. 00:31

INTRO

  1. Template 패턴에 대해 알기
  2. JDBC Template에 대해서 알기
  3. Spring Jdbc에 대해 알기

Template 패턴 이란?

  • 어떤 소스 코드상의 알고리즘에서 특정 환경 또는 상황에 맞게 확장 또는 변경을 해야 할 경우 매우 유용하게 사용하는 패턴
  • Template 패턴의 장점
    • 코드 중복 감소
    • 자식 클래스의 역할을 감소시키면서 핵심로직 관리 용이
    • 객체 추가 및 확장을 쉽게 가능
    • 재사용성 증가
  • Template 패턴의 단점
    • 추상 메소드가 너무 많으면 복잡성 증가
    • 추상 클래스와 구현 클래스간의 관계 복잡도가 증가

JDBC Template?

  • 스프링의 가장 기본적인 Data Access 템플릿으로 쿼리 기반으로 데이터 베이스의 접근 가능
  • 모든 영속성 프래임워크는 내부적으로 JDBC API를 이용
  • DAO 계층에서 Jdbc Template API를 사용
  • Data Source
    • DB Server와 연결 시키는 연결 팩토리
    • JDBC의 일부분
    • Connection 의 정보를 가지고 있고 Bean 으로 등록하여 인자를 넘겨준다.
    • DB Connection Pooling 기능을 가지고 있음
    • 기본적으로 BasicDataSource를 사용
  • JDBC Template 같은경우 제네릭을 사용해 어떠한 값이 오든 그대로 반환
  • 번외 (영속성 프레임워크 종류)
    • SQL Mapper : Mybatis, Ibatis, JDBC Template
    • ORM : JPA, Hibernate

DATA-Access_Layer

Spring JDBC

  • Spring JDBC가 하는 일
    • Connection 및 Statement 열기와 닫기 기능 실행
    • Statement 실행
    • ResultSet 처리
    • Exception 처리
    • Transaction 처
  • 개발자가 Spring JDBC에서 하는일
    • DataSource를 설정
    • JDBCTemplate에서 dataSource를 주입
    • 메소드에 SQL 문 작성
    • JDBC Template 메소드를 활용해 쿼리문 처리
  • JDBC Driver : DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터
  • DBCP(DB Connection Pool) : DB와 커넥션을 맺고 있는 객체를 관리하는 역할
    • 하는 이유 : DB 연결시 마다 Driver를 로드하고 커넥션 객체를 반복적으로 작업하는 것을 Connection Pool을 만들어 반복하지 않게 만듬
    • WAS를 실행 시키면 미리서 DB Connection 객체를 생성하고 Pool이라는 공간에 저장했다가 요청이 오면 저장소에서 가져다 쓰고 반환 시킴
    • 이로 인해 시간및 자원 절약
  • Spring에서 필요한 라이브러리
    • jdbc class: Spring-jdbc
    • data source: commons-dbcp
    • jdbc driver: mysql-connector-java (h2 connector 사용가능 즉 맞는 db driver 사용)

JDBC Template 만들어 보기

  • Gradle
    • apach-commons-dbcp를 Gradle에 추가

  • ConnectionManager
    • DB_DRIVER, DB_URL, DB_USERNAME, DB_PASSWORD 설정한다. (h2 내부 driver 사용)
    • BasicDataSource에 정보들 Set 한다.
    • JdbcTemplate에 의존성 주입하고 connection 할 getConnection 메소드 구현한다.

  • JDBCTemplate
    • Parameter에 쿼리문이랑 statement에 set해줄 데이터를 넣는 update 메소드를 만든다.
    • 가변인자로 받아온 value값들을 넣어줄 createPreparedStatementSetter 메소드를 만들어 statement를 set해준다. 이때 실질 적으로 set을 한게 아니라 추상화를 통해 만들어 놓고 밑에서 실질적으로 set하겠금 해준다.

  • PreparedStatementSetter
    • 실제로 statement를 업데이트 하는 update 메소드를 만든다.
    • 이때 인자는 쿼리문과 statement를 추상화 시킨 PreparedStatementSetter를 받아온다.
    • try-with-resources(괄호 안에 있는 요소들이 try 구문이 끝나면 닫아주는 기능) 로 Connection, Statement 연결한다.
    • 위에 썼던 setPreparedStatement로 statmenet에 쿼리문에 있는 물음표 순서대로 setObject 해준다.
    • 마지막으로 statement를 실행 시켜준다.

  • DAO
    • JDBCTemplate를 만들었으니 쿼리문을 만든다.
    • 내가 만든 템플릿 안에 있는 update메소드를 활용해 쿼리문과 setObject 해줄 데이터들을 넣어준다.

'Spring' 카테고리의 다른 글

MVC와 MVC FrameWork  (0) 2020.01.16
Comments