Spring boot와 Mybatis 연동하기
Data Access Layer
- DB에 접근하여 데이터 저장, 조회 등을 수행하는 역할
- Service와 DB사이의 추상화된 계층
- Database 기술이 변경되면 Data Acess Layer의 코드는 변경되지만 Service 계층의 코드는 변경되지 않음
- DB가 sql에서 mongo로 변경되어서 Data Access Layer의 코드는 변경되도 Service 계층의 코드의 영향 X
데이터를 접근하기 위한 기술
- 종류별 -
JDBC ( java database connectivity ) | database에 접근하기 위한 java의 표준 API - 코드 양이 길어짐 ( 하드웨어 적 ) |
JDBC Template | JDBC를 효율적으로 사용하기 위한 SPRING API |
SQL Mapper | SQL과 Java 객체를 매핑하는 기술 SQL의 input 또는 output을 Java 객체와 매핑 -> java에서 SQL Mapper 적용 위해 MyBatis가 일반적으로 사용 된다. -> 국내에서 많은 기업의 대규모 프로젝트에서 활용되고 있음 |
ORM (object relational mapping) | RDBMS의 테이블과 Jaca 객체를 매핑하는 기술 ORM Framework이 객체와 테이블을 매핑하는 역할을 수행 ORM Framework이 SQL을 자동적으로 수행 - > Java, Sping에서 ORM적용을 위해 hibernate와 JPA가 주로 사용됨 - > 전 세게적으로는 SQL Mapper보다 사용률이 월등히 높음 |
MyBatis
: 자바의 관계형 데이터베이스 프로그래밍을 위한 개발 framework로, JDBC를 통해 DB를 엑세스하는 작업을 캡슐화한다.
SQL쿼리, 저장 프로시저 등 다양한 기능을 지원하여 JDBC 코드 및 매개 변수 중복성을 제거한다.
Mybatis를 통해서 프로그램에 위치한 코드와 SQL의 코드분리를 할 수 있다.
Java Project => Convert to Maven Project => Add Spring Project Nature |
Spring Boot에서 필요한 MyBatis 설정
[1] Maven의존성 설정
- MyBatis 및 H2 Database
[2] 스프링 에플리케이션 설정
- application.properties 설정
Maven
: 프로젝트 관리 도구로, 프로젝트의 전체 라이프 사이클을 관리한다.
또한 라이브러리를 특정 문서[pom.xml]에 정의해 두면 내가 사용할 라이브러리와 함께 해당 라이브러리가 필요로하는 다른 라이브러리들까지 관리하고 네트워크를 통해 자동 다운로드 받아준다.
[1] Java 프로젝트에서 사용되는 빌드 자동화 도구
- 소스코드를 실행 가능한 SW 산출물로 만드는 과정
[2] Maven의 2가지 주요 기능
- 프로젝트 구성 및 빌드 관리
- 라이브러리 의존성 관리
빌드 :
프로젝트를 위해 작성된 Code, xml. jar, properties등의 자원을 JVM이나 Tomcat의 WAS가 인식할 수 있도록 패키징하는 과정과 결과물이다.
[ 컴파일 + 테스팅 + 검사 + 배포 ] 일련의 작업을 통틀어 빌드라고 하기도 한다.
Maven 이전의 라이브러리 관리
Maven의 라이브러리 의존성 관리
(1) 사용할 외부 라이브러리 정보를 명시하면 자동 다운로드 후 사용
개발자가 필요한 라이브러리를 일일이 다운로드 받아 설정할 필요 없이 pom.xml 파일의 dependencies 영역에 사용할 라이브러리 정보를 설정하면 다운 후 사용 가능하게 된다.
(2) 사용할 라이브러리가 Maven Repository에 등록되어 있어야 한다.
Maven Central Repository : Maven에서 관리하는 중앙 Repository
(3) pom (Project Object Model)
Maven이 프로젝트를 빌드하기 위해서 필요한 정보를 기술하는 XML 파일 (pom.xml)
- 프로젝트 정보, 라이브러리 의존성 정보, 빌드 단계에 사용되는 정보.. 등을 담고 있다.
# 최소한의 pom.xml 지식 #
- project 태그로 시작 - groupId : 다양한 프로젝트 간 식별 가능한 고유 이름 ( 보통 회사 url 역순 ) - artifactId : 프로젝트 하위에 애플리케이션 이름, 빌드 후 생성되는 산출물 파일 명 - version : 현재 개발중인 application 버전 #의존성# - dependecies 태그 하위에 다수의 dependency로 라이브러리 명시 - dependency : 사용하고자 할 외부라이브러리의 groupid, artifactId, version 등을 명시 - 우리가 사용하고자 할 라이브러리 정보 ! 하나의 dependecny가 여러 개의 외부라이브러리를 가져올 수 있음 - 웹 어플리케이션을 만들 때 이러한 의존성을 일일히 다 쳐 주어야 할까 ? -> NO , Spring Initializr를 통해서 UI로 라이브러리 의존성들을 간편하게 설정하는 것이 가능 -> 그 후 추가적으로 필요한 라이브러리에 대해서 dependency를 추가해주면 된다 ! ( spring initalizr , MVNrepository.com 을 이용해서 복붙하여 사용 가능 ) |
## pom.xml 예시 ##
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.codepresso</groupId>
<artifactId>simple-blog</artifactId>
<version>0.0.1</version>
</project>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies>
이러한 pom.xml을 통해서 외부 라이브러리들을 가져오게 된다.
+ 활용하고자 할 라이브러리의 의존성 검색 ( dependcy 부분 확인 가능 )
H2 Database
- 경량 RDBMS
- 메모리에 데이터 저장 가능
- 별도의 설치 없이 Maven 의존성만으로 Spring Boot에서 활용 가능
- 개발 단게에서 테스트용으로 가볍게 활용 가능
Sping Application 설정
- Spring 애플리케이션이 어떻게 구성되어야 하는지에 대한 부가적인 정보
- Spring 애플리케이션이 시작하는 시점에 읽음
- application.properties 파일에 설정 정보 추가
- application.yaml 포맷을 사용하기도 함
- resources 디렉토리 하위에 위치
- key=value 형태로 설정 정보를 작성
- 설정 정보는 라이브러리 별 공식 문서를 참고하여 작성한다.
# spring 애플리케이션 설정 예시 ( application.properties )
- 스프링 부트가 시작하는 단계에서 설정 정보를 읽어 해석함
- Logging, database연결, 보안, 테스팅 등 설정이 가능하다.
- 필요한 설정들은 레퍼런스 문서를 참고하는게 필요하다.
- 레퍼런스 문서 : https://docs.spring.io/spring-boot/docs/current/reference/html/application/properties.html
server.port=8081 | 기본 포트가 8081로 변경되어 localhost:8081로 접속하게 됨. |
H2 Database 설정
h2 database의 접속 url 및 계정 정보 설정
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:todo
spring.datasource.username=codepresso
spirng.datasource.password=asdf1234
<코드 내용 분석>
spring.datasource.driver-class-name=org.h2.Driver
- DB 연결을 위해 org.h2.Driver를 사용
- com.mysql.cj.jdbc.Driver, oracle.jdbc.driver.OracleDriver등 사용 가능
spring.datasource.url=jdbc:h2:mem:todo
- DB 접속 URL, [protocol]:[host][prot, db/schema명 등]
- jdbc:mysql://localhost:3306/todo
spring.datasource.username=codepresso
- DB에 접속하기 위한 사용자 이름
spirng.datasource.password=asdf1234
- DB에 접속하기 위한 패스워드
h2 웹 Console 정보 설정
웹 콘솔을 통해서 h2 DB의 접근 조회 가능 !
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.enabled=true
- h2 웹 콘솔을 사용함
spring.h2.console.path=/h2-console
- 웹 콘솔의 uri path는 /h2-console로 적용함
DB Table 및 데이터의 초기화
Spring이 시작되는 시점에 실행 가능
- DB 테이블(Schema)의 초기화
- spring 프로젝트의 resource 디렉토리 하위에 schema.sql 파일 생성 후 SQL 작성
>> Spring 애플리케이션 재시작 후 H2 DB 콘솔 확인, Spring Boot 애플리케이션 시작 지점 schema.sql의 SQL문이 자동 실행되어 테이블이 생성됨
- 데이터의 초기화
- Spring 프로젝트의 resources 디렉토리 하위에 data.sql 파일 생성 후 SQL 작성
>> Spring Boot 애플리케이션 시작 시점에 data.sql의 SQL문이 자동으로 실행되어 데이터가 생성됨
MyBatis 설정
(1) application.properties에 설정 추가
- mybatis의 설정 파일의 위치를 설정시켜줘야 함
(2) resource 디렉토리 하위 mybatis 디렉토리 생성 [ classpath 위치 ]
(3) resource/mybatis 디렉터리 하위에 파일 생성
- mybatis-config.xml
(4) mybatis-config.mxl 파일 아래 코드를 작성한다.
- mapper 경로 설정 : db접근을 위한 xml파일 경로 설정등을 한다.
(5) todo-mapper.xml 파일 아래 코드를 작성한다.
설정파일 정리
application.properties | > sping framework가 읽고 해석하여 명시된 설정에 대한 작업 수행 > mybatis를 위한 설정 파일의 위치를 명시 |
mybatis-config.xml | > Mybatis framework가 읽음 > SQL이 작성된 Mapper 파일의 위치 정보를 포함해서 다양한 설정이 가능함 |
todo-mapper.xml | > todo 테이블에 대한 SQL문이 작성된 파일 |
MyBatis 설정
- com.codepresso.todo.mapper 패키지 생성
- com.codepresso.todo.mapper.TodoMapper 인터페이스 생성 후 코드 작성
코드 상 동작 과정은 아래와 같다.
Todo 코드 수정
- TodoService에서 Todomapper로의 의존성 주입 설정
- TodoService의 addTodo 메소드 수정
- 코드프레소 Java 웹 개발 체험단 활동 중
- 코드프레소 웹개발 트랙의 "Spring Boot 웹개발 입문" 내용입니다.
- 코드프레소 URL: https://www.codepresso.kr/
'FrameWork & Runtime > Spring' 카테고리의 다른 글
Spring의 Request & Response (0) | 2022.03.01 |
---|---|
Spring 서비스 계층 (0) | 2022.02.28 |
Spring Framework와 DI&IOC (1) | 2022.02.21 |
<코드 프레소 웹 개발 트랙> Spring Boot 웹 개발 입문 [2] (0) | 2022.02.07 |
<코드 프레소 웹 개발 트랙> Spring Boot 웹 개발 입문 [1] (0) | 2022.02.02 |