본문 바로가기
FrameWork & Runtime/Spring

<코드 프레소 웹 개발 트랙> Spring Boot 웹 개발 초급 [1]

by jaeaemin 2022. 2. 22.

 

 

 

 

Spring boot와 Mybatis 연동하기

 

 

Spring boot layer&nbsp;

 

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을 통해서 외부 라이브러리들을 가져오게 된다.

pom.xml로 Maven이 추가한 외부 라이브러리들

 

+ 활용하고자 할 라이브러리의 의존성 검색 ( dependcy 부분 확인 가능 ) 

https://mvnrepository.com/ 

 

 

 

 

 

 

 

 

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 작성

 

schema.sql

>> Spring 애플리케이션 재시작 후 H2 DB 콘솔 확인, Spring Boot 애플리케이션 시작 지점 schema.sql의 SQL문이 자동 실행되어 테이블이 생성됨

 

 

  • 데이터의 초기화
    • Spring 프로젝트의 resources 디렉토리 하위에 data.sql 파일 생성 후 SQL 작성

data.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/ 

반응형