일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- CRUD
- delete
- Connection pool
- update
- service
- Oracle 연결
- log4j
- 게시판
- MVC CRUD
- 게시판 List
- spring
- 서비스계층
- mybatis
- Controller
- 환경설정
- jdbc
- hikaricp
- MVC
- MVC설정
- 게시판만들기
- log4jdbc
- MVC 게시판
- Oracle
- Today
- Total
yahayaha
5-1. MyBatis 스프링 연동 (1) 본문
스프링 프레임워크와 MyBatis를 연동하고 좀 더 빠르게 SQL을 처리할 수 있는 구조를 만들려함.
지난 포스팅과 마찬가지로 테스트를 최 우선적으로 진행해서 확인함.
MyBatis를 이야기할떄 나오는게 몇가지 있는데 바로 JPA라고 생각함.
두 차이점을 간단하게 공부를 한 결과
MyBatis | JPA | |
장점 | 1. 접근이 쉽고 코드가 간결함(JPA보다 배우기 쉬움) 2. SQL문과 프로그래밍 코드가 분리되어 있어서 SQL문에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일 하지 않아도 됨. 3. 다양한 언어로 구현이 가능 (이식성 좋음) 4.동적 쿼리 사용시 간편하게 구현이 가능. |
1. 특정 DB에 종속되지 않음. MyBatis와 다르게 DB가 바뀐다해도 설정 파일에 어떤 데이터베이스를 사용하는지 알려주면 얼마든지 변경 가능함. 2. 객체지향적임 JPA를 사용하면 데이터베이스 설계 중심에서 객체지향적으로 설계가 가능함. 이를 통해서 좀 더 직관적인 비즈니스 로직에 집중이 가능함. 3. 생산성이 좋아짐. JPA에서는 테이블과 매핑된 클래스에 필드만 추가하면 쉽게 관리 가능. 또한 SQL문을 직접 장성하지 않고 객체를 사용해서 동작하기에 유지보수도 좋고 재사용성도 증가함. |
단점 | 1. DB설정 변경 시 수정할 부분이 많음. 2. Mapper 작성부터, 인터페이스, 모델 설계까지 많은 설계와 파일 로직이 필요함. 3. DB에 종속적임. DB가 바뀌면 DB 문법에 맞게 mapper를 전부 수정해야함. 4. 쿼리에 로직을 녹여야하는데 유지보수 하기 힘들고 테스트가 까다로움. |
1. 쿼리가 복잡함. ( 자료 보강중 ) 2. 성능 저하가 될 수 있음. 객체 간의 매핑 설계를 잘못했을 때 성능 저하가 방생할 수 있음. 자동으로 생성되는 쿼리가 많기에 개발자가 의도하지 않는 쿼리로 인해 성능이 저하되기도 함 3. 학습시간이 오래걸림 MyBatis와 다르게 학습시간이 오래걸림. |
대충 이정도로 적었지만 많은 장단점이 있었고 커뮤니티나 오픈카톡방에 무족건 이것만 써야한다 ! 라는건 없었다.
프로젝트마다 유연하게 사용하면 된다는데 실무를 뛰어봤어야 알지...
아무튼 이번 프로젝트에서는 MyBatis를 사용하고 JPA는 다음 토이 프로젝트떄 사용하는걸 목표로 잡았다.
일단 MyBatis를 연동해보자.
1. MyBatis 라이브러리 추가하기
먼저 pom.xml 파일에 추가적인 라이브러리를 설정 해야함.

<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- MyBatis -->
spring-jdbc/spring-tx - 스프링 데이터베이스 처리와 트랜잭션 처리 ( 없으면 에러 발생함.)
2. SQLSessionFactory
MaBatis에서 가장 핵심 객체는 SQLSession이랑 SQLSessionFactory임.
내부적으로 SQLSession이라는 것을 만들어 내는데, SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받는 구조로 작성됨.
그리고 root-context.xml에서 추가를 할게있음.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
3. Mapper 작성
Mapper를 작성하는 작업은 XML을 이용할 수도 있지만, 최소한의 코드를 작성하는 Mapper 인터페이스를 사용하기로함.
우선 패키지를 만들고 인터페이스를 추가.

Mapper를 작성하고 MyBatis가 동작할 때 Mapper를 인식할 수 있도록 root-context에 추가 설정을 해야함.
먼저 root-context.xml에서 아래쪽 Namespaces 항목에서 mybatis-spring 탭 클릭

rmflrh <mybayis:scan>태그를 추가함.

<mybatis-spring:scan> 태그의 base-package 속성은 지정된 패키지의 모든 MyBatis 관련 어노테이션을 찾아서 처리함.
Mapper를 설정하는 작업은 각각 XML이나 Mapper 인터페이스를 설정할 수 있지만, 매번 너무 번잡하고 생산성이 떨어지기에 이런 방식을 선택함.
4. Mapper 테스트
MaBatis-Spring은 Mapper 인터페이스를 이용해서 실제 SQL 처리가 되는 클래스를 자동으로 생성해줌.
개발자들은 인터페이스와 SQL만 작성하는 방식으로도 모든 JDBC 처리를 끝낼 수 있음.
작성한 TimeMapper를 테스트코드로 돌려봐야함.

TimeMapper가 정상적으로 사용이 가능한지를 알아보기 위한 테스트 코드임.
정상적으로 동작하면 스프링 내부에는 TimeMapper 타입으로 만들어진 스프링 객체가 존재한다는 뜻.
코드에서 timeMapper.getClass().getName()은 실제 동작하는 클래스의 이름을 확인해줌.
실행 결과를 보면 개발 시 인터페이스만 만들었는데. 내부적으로 적당한 클래스가 만들어진 것을 확인 가능함.
( 보충 설명은 AOP를 공부하고 추가하겠음. )
아무튼 테스트를 돌려보면.

스프링이 인터페이스를 이용해서 객체를 생성한다는 사실을 알게됨.
근대 테스트는 성공인데 찜찜하게 빨간줄이 나옴 이걸 해결해봅시다.
" 뭔가 해결할때 에러를 검색해라 "
그리고 검색해보니 버전이 문제였던걸 알게됨.
우리가 사용하는 MyBatis는 3.4.6버전인데 이걸 3.5.2버전으로 업그레이드 해줌.
그리고 다시 테스트를 돌려보면.

빨간줄이 없어진걸 확인가능함.
글이 길어지니 다음 포스팅으로 넘기겠음.
'spring > 환경설정' 카테고리의 다른 글
5-2. MyBatis 스프링 연동 (2) (2) | 2024.01.14 |
---|---|
4. 커넥션 풀 설정하기(HikariCP) (0) | 2024.01.14 |
3. JDBC 연결하기. (0) | 2024.01.13 |
2. Oracle Database 연동 하기 (2) | 2024.01.13 |
1. Setter 메서드 사용해서 의존성 주입 해보기 (0) | 2024.01.11 |