본문 바로가기

Room 102. Back-end/Spring

[실전 개발자를 위한 Spring Framework ] 강의 - Data Access

13강 Spring Data Access 기술과 DataSource

  • 목차
    • 내용
      • Spring-Data Access 기술 이해
      • DataSource 이해와 설정
    • 학습 목표
      • 스프링에서 사용 가능한 데이터 접근 기술에 대해 이해합니다.
      • DataSource 개념을 이해하고 설정합니다.
  • DAO 디자인 패턴
    • 비즈니스 서비스와 로우 레벨의 데이터 액세스 작업을 분리해 놓았습니다.
    • 고로 DAO가 DB에게 데이터 액세스를 하기 위한 작업이 필요합니다.
  • 데이터 액세스 기술
    • JDBC
      • 자바에서의 관계형 데이터 베이스 접속 기술
      • JDK 레벨에서 지원하며, 다른 고수준 기술의 기반이 됩니다.
    • Spring JDBC 
      • 스프링 자체적으로 지원하는 JDBC Wrapper
    • MyBatis
      • Third-party 자바 관계형 DB 매핑 라이브러리입니다.
      • 자바 오브젝트와 SQL문을 자동으로 맵핑합니다. - SQL Mapper.
    • JPA
      • Java ORM 표준 인터페이스
      • Java 객체 내 데이터를 Delete하면, DB 내에서 데이터가 Delete 가 삭제되는 것처럼
        Java 객체를 DB 처럼 사용하는 것입니다.
    • Hibernate
      • 자바 ORM 구현체 (Object Relation Management)
      • 자바 객체를 갖고 CRUD 쿼리를 실행하는 작업함!!
      • ORM 기술이란?
        • 애초에 자바와 DB의 Relation 은 맞지 않기 때문에
          컬럼과 수동으로 맞춰주는 작업이 필요한데,
          이것을 자동으로 맞춰주는 기술이 바로 ORM 기술입니다.
  • Spring-JDBC
    • 스프링 프레임워크에 포함된 스프링 공식 데이터베이스 연동 라이브러리
    • 유연한 Transaction 처리를 위해 Connection 단의 높은 추상화를 제공
    • Connection-Pool을 지원하고, Result Mapper의 추상화를 사용해 쿼리를 편리하게 수행할 수 있음
    • MyBatis, Hibernate 도 내부적으로 Spring-JDBC를 사용함
  • MyBatis
    • XML을 별도 파일로 분리하고 자바 객체와 SQL 매핑을 지원하는 프레임워크
      • 초기에 자바가 JDBC 를 연동하는것도 부담되는 일이었음.
        SQL 문이 JAVA 에 내장되어있는 것이 굉장히 부담 되어있었음.
        SQL 문도 하나의 프로그래밍 언어인데, 자바를 SQL 문으로 변환하고, 테스트는 등
        굉장히 불편한 작업이었지만 MyBatis 가 해소해주었음.
    • 별도의 라이브러리로 존재하고 스프링과 연동모듈을 지원합니다.
      • mybatis-spring 라이브러리 필요
      • 스칼라 MyBatis, .NET MyBatis 등이 있음
  • DataSource
    • 어떤 DB를 연동하든, 어떤 DB 연동기술을 쓰든 반드시 필요한 기술.
    • DB 연동시 가장 로우레벨에서 필요한 객체가 Connection 객체이며 
    • DataSource 는 Connection 가져오기 위한 기술입니다.
    • Connection 확보 되었다 == DB 에 연결 되었다.
    • DataSource 는 Bean 으로 만들어 처리됩니다.
    • Spring 은 DataSource를 통해 Connection 을 제공합니다.
    • DataSource 설정 방법
      • DriverManager 사용 방법
        • DriverManagerDataSource 클래스를 사용
        • Connection Pool이나 JNDI 를 사용할 수 없는 경우 사용
      • Connection Pool 을 사용하는 방법 
        • 데이터베이스 커넥션을 미리 여러 개를 확보해두고 
          클라이언트의 요청에 따라 미리 생성된 커넥션을 제공하여
          커넥션 하도록 해주고 다시 반납 받는 시스템!
        • 매번 물리적으로 커넥션을 생성하지 않아 성능이 좋아짐
  • DataSource 실제 적용 예
    • 클래스 명에 따라 커넥션 풀을 사용할 것인지 설정할 수 있음.
    • property 파일을 이용한 설정
      • 애플리케이션이 동작하는 환경(개발/테스트/스테이징/운영)에 따라서 자주 바뀔수 있음
      • 환경에 따라 자주 변경될 수 있는 내용은 properties 파일로 분리하는 것이
        가장 깔끔하며 XML 처럼 복잡한 구성이 필요 없고
        키와 값의 쌍(key=value)으로 구성하면 됨.