본문 바로가기

Archived(Programming)/Spring #2(기초)

Spring Data Access 기술과 DataSource

d# DAO 디자인 패턴

비즈니스 Layer(서비스)와 Low 레벨의 데이터 엑세스 작업을 분리

DAO Layer는 DB와 비즈니스 Layer 가운데 위치하여 CRUD 작업을 수행한다

 

# 데이터 액세스 기술

1) JDBC: 자바에서의 관계형 DB 접속 기술, JDK 레벨에서 지원하며 다른 고수준 기술의 기반

2) Spring JDBC: Spring 자체적으로 지원하는 JDBC Wrapper

3) Mybatis: 3rd party 자바 관계형 DB 매핑 Library, 자바 오브젝트와 SQL문을 자동으로 맵핑(SQL Mapper)

4) JPA: Java ORM 표준 인터페이스(자료형을 맵핑 시켜주는 기술), 과거에는 자료형과 컬럼을 수동으로 맵핑

5) HIbernate: Java ORM 구현체

 

# Spring-JDBC

  • 스프링 프레임워크에 포함된 스프링 공식 DB 연동 Library
  • 유연한 Transaction 처리를 위해 Connection 단의 높은 추상화를 제공함
  • Connection-pool을 지원하고, Result Mapper의 추상화를 사용해 쿼리를 편리하게 수행할 수 있음
  • Mybatis, Hibernate 등이 Spring-JDBC를 사용함

# Mybatis

  • XML을 별도 파일로 분리하고 자바 객체와 SQL 매핑을 지원하는 프레임워크
  • 별도의 라이브러리로 존재하고 스프링과 연동모듈을 지원한다(Mybatis-spring 라이브러리 필요, 스칼라 Mybatis, .NET MyBatis 등이 있음)

# DataSource

  • Connecton 확보 - DB에 연결
  • 데이터소스는 Connection을 가져오기 위한 기술
  • 스프링은 DataSource를 통해 Connection을 제공

 

설정방법

1) DriverManager를 사용하는 방법

  • DriverManagerDataSource 클래스 사용
  • Connection Pool이나 JNDI를 사용할 수 없는 경우 사용

2) Connection Pool을 사용하는 방법

  • DB 커넥션을 미리 여러 개 확보해두고 클라이언트의 요청에 다라 제공하고 반납받는 시스템
  • 매번 물리적으로 커넥션을 생성하지 않아 성능이 좋음(일반적으로 많이 사용함)

# 프로퍼티(Property) 파일을 이용한 MySQL 설정 예

  • 프로퍼티 파일로 분리한 정보는 ${}(프로퍼티 치환자)를 이용하여 설정함
  • ${} 값을 지원해주는 기능은 <context:property-plcaeholder> 태그에 의해 자동으로 등록되는 PropertyPlaceHolderConfigurerBean이 담당함

 

# 실습 MySQL 연동

 

mvnrepository Spring JDBC

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>3.2.18.RELEASE</version>
</dependency>

servlet-context.xml 추가- hello-web/src/main/webapp/WEB-INF/spring/appServlet

<context:property-placeholder location="classpath:config/database.properties"/>
	
	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<beans:property name="driverClass" value="com.sql.jdbc.Driver" />
		<beans:property name="url" value="jdbc:mysql://localhost:3306/spring" />
		<beans:property name="username" value="spring" />
		<beans:property name="password" value="spring" />
	</beans:bean>

database.properties 파일 생성 - hello-web/src/main/resources/config

설정파일은 따로 구성해두는 것이 중요

db.driverClass=com.sql.jdbc.Driver
db.url=jdbc::mysql//localhost:3306/spring
db.username=spring
db.password=spring

servlet-context.xml 수정- hello-web/src/main/webapp/WEB-INF/spring/appServlet

<context:property-placeholder location="classpath:config/database.properties"/>
	
	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<beans:property name="driverClass" value="${db.driverClass}" />
		<beans:property name="url" value="${db.url}" />
		<beans:property name="username" value="${db.username}" />
		<beans:property name="password" value="${db.password}" />
	</beans:bean>

 

'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글

Spring Mybatis  (0) 2020.03.15
Context 분리와 전략  (0) 2020.03.13
JUnit4 & Spring Test  (0) 2020.03.13
Static file 처리와 FileUpload  (0) 2020.03.12
Restful API  (0) 2020.03.12