코딩하는 문과생

[Spring] Spring 프레임워크(6) - 데이터 접근 기술 본문

웹 프로그래밍/Spring

[Spring] Spring 프레임워크(6) - 데이터 접근 기술

코딩하는 문과생 2020. 3. 9. 15:12

[Spring-Data Access]

- DAO 디자인 패턴

 

-데이터 액세스 기술

<수동 맵핑>

  • JDBC: 자바에서의 관계형 데이터 베이스 접속 기술

  • Spring  JDBC: 스프링 자체적으로 지원하는 JDBC Wrapper, 커넥션 풀 제공, Result Mapper추상화 사용

  • MyBatis: Third-party 자바 - 관계형 DB 매핑 라이브러리, 자바 객체와 SQL문을 자동으로 매핑(SQL Mapper), XML로 SQL를 별도로 분리, 내부적으로 Spring JDBC를 사용, mybatis-spring 라이브러리 필요

 

<자동 맵핑>

JPA: Java ORM 표준 인터페이스

Hibernate: 자바 ORM 구현체

 

[DataSource]

Connection 확보(DB연결), Connection을 가져오기 위한 기술

DataSource를 빈으로 관리한다.

  1. 커넥션 풀을 사용하는 방법(일반적): 데이터 베이스 커넥션을 미리 여러개를 확보해두고, 클라이언트의 요청에 따라 제공하고 반납받는 시스템

  2. Drivermanager를 사용하는 방법: DriverManagerDataSource 클래스를 사용

DB정보는 프로퍼티 파일로 분리해서 관리한 후, 실제 환경설정 파일에서 프로퍼티 치환자( ${... } )를 사용하는 게 좋다.

 

 

ex. 데이터베이스 연동

- pom.xml에 의존성 추가, 참고로 mysql 의존성도 추가해야 한다.

	<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>4.3.9.RELEASE</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>8.0.19</version>
	</dependency>

- servlet-context.xml

	<!-- /src/main/resources폴더가 classpath다.-->
	<context:property-placeholder location="classpath:config/database.properties"/>
	
	<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<property name="driverClass" value="${db.driverClass}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.username}" />
		<property name="password" value="${db.password}" />
	</bean>

-database.properties

db.driverClass = com.mysql.cj.jdbc.Driver
db.url = jdbc:mysql://localhost:3306/spring?serverTimezone=UTC
db.username = spring
db.password = spring

//db.url뒤에 serverTimezone을 추가해야 Test시 에러가 발생하지 않는다.
//MySQL 버전이 과거에 비해 업그레이드 되면서 고려해야할 사항