본문 바로가기

컴퓨터/Spring Boot

STS (Spring Boot) 게시판 CRUD_2. MVC 패턴의 이해와 MyBatis를 이용한 DB 연동

◎ MVC 패턴이란 모델-뷰-컨트롤러(Model-View-Controller)의 약자로 소프트웨어 공학에서 사용되는 디자인 패턴 중 하나이다.

 

디자인 패턴이란 "소프트웨어 개발 시 공통적으로 발생하는 문제를 해결하기 위한 해결책"으로 문제 상황에 맞게 쓰이는 템플릿이다. MVC 패턴은 이 중 하나로 응용 프로그램을 세 가지의 요소로 나누어 개발하는 방법론이다.

 

비즈니스 처리 로직과 사용자 인터페이스를 분리하여 개발하기 때문에 서로 간에 영향을 최소화하여 개발하기 편리하다는 장점이 있기 때문에, 이번 프로젝트에서 MVC 패턴을 사용하였다.

 

그렇다면, 모델, 뷰, 컨트롤러 각 요소는 어떤 역할을 하는지 살펴보자.

 

◈ Model

    - 백그라운드에서 이루어지는 내부 비즈니스 로직을 처리하기 위한 부분으로 어플리케이션이 해야 할 일을 정의한다. 데이터베이스의 대응하며, 데이터 객체나 파라미터로 사용된다.

◈ View

    - 사용자가 보게 되는 출력 화면이다. (html/css/javascript)

◈ Controller

    - 접근 URL에 따라 사용자의 요청사항을 파악하고, Model에 데이터를 요청한 뒤 이를 반영하여 View 페이지로 보여준다. 즉, 사용자의 요청사항(입력 처리)과 흐름을 제어하는 역할을 한다.

 

간략하게 정리하자면, 사용자가 Controller를 조작하면 Controller는 Model을 거쳐 데이터를 가져와 이를 반영하여 View를 제어하여 사용자에게 전달하게 되는 것이다.

 

MVC 패턴에서 하나의 Controller는 다수의 View를 가질 수 있고, 여러개의 View 또한 Controller를 통해 여러개의 Model과 연결될 수 있다. 이런 상황에서는 뷰와 모델이 복잡하게 얽혀 서로 의존성을 띄게 되기 때문에 코드 수정과 테스트가 힘들어진다. 이것이 MVC 패턴의 한계이다.

 

 


이제 본격적인 프로젝트 개발을 위해 MyBatis를 이용하여 데이터베이스를 연동해볼 것이다.

 

MyBatis란?

  자바에서 제공하는 JDBC를 편리하게 사용할 수 있게 도와주는 프레임워크이다. JDBC만 사용할 경우 소스를 관리하는데 어려움이 있지만 MyBatis를 사용하면 SQL문을 XML 형식의 파일로 분리시켜 관리할 수 있기 때문에 편리하다.

(프로젝트 초기 설정 시 MyBatis 설정을 해 준 이유이다.)

 

데이터 베이스 연동 순서는 다음과 같다.

 

1. pom.xml에 DB연동을 하기 위한 의존성들을 추가한다. (Maven의 경우)

<!-- MyBatis -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.2.0</version>
</dependency>
<!-- MySql -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>
<!-- Spring-boot-test -->        
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

 

2. application.properties에 DB정보를 등록한다. (MySQL 사용)

#MYSQL
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1[또는localhost]:3306/[DB이름]?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=[user]
spring.datasource.password=[password]

 

3. mybatis-config.xml 생성

 mybatis에 필요한 설정 파일이다. (여기서는 alias 설정을 위해 사용하였다.)

생성 전 프로젝트의 Application의 SqlSessionFactoryBean에 mybatis-config.xml를 맵핑해준다.

 

처음에는 XML과 DTD 선언을 한다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-config.dtd">

다음에는 mybatis설정의 루트 엘리먼트인 <configuration>을 작성한다.

루트 엘리먼트 안에 들어가는 자식 요소들은 여러개가 있는데 settings와 typeAliases를 사용하였다.

* 나머지 요소들은 공식 홈페이지를 참고 :  http://www.mybatis.org/mybatis-3/ko/configuration.html

 

settings : 프레임워크 실행 환경을 설정한다.
 -> callSettersOnNulls :  query 결과가 NULL일경우 공백을 ""이 아닌 NULL로 받게 하기 위한 설정이다.
typeAliases : 자바 클래스 이름의 alias를 설정한다. mapper 파일 작성 시 긴 이름 대신 짧은 이름을 사용할 수 있기 때문에 매우 편리하다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
	<settings>
		<setting name="callSettersOnNulls" value="true"/>
	</settings>
	
	<typeAliases>
		<typeAlias alias="dMap" type="board.common.DataMap" />
		<typeAlias alias="cMap" type="board.common.CamelMap" />
	</typeAliases>
	
	<typeHandlers>
	</typeHandlers>
</configuration>

 

 

4. Controller/Mapper/Service 생성 

 - 이 부분은 CRUD를 진행하며 다룰 예정이다.

 

 

728x90