멀티캠퍼스

[2026.06.23] - TIL 57일차(Spring MVC03 게시판 프로젝트 완성)

buckwheat 2026. 6. 25. 02:52
목차
1 Spring MVC 프로젝트 구조
2 MyBatis를 활용한 게시판 구현
3 View(JSP) 작성
4 Spring 설정 파일
5 프로젝트 실행 흐름
6 오류 해결 과정

1 Spring MVC 프로젝트 구조

1) Spring MVC 패턴 이해

Spring MVC는 프로젝트를 역할별로 분리하여 개발하는 구조이다.

사용자의 요청을 Controller가 받고, 실제 업무는 Biz(Service)에서 처리하며, 데이터베이스 작업은 DAO가 담당한다.

데이터는 DTO를 이용하여 전달하고, 화면은 JSP가 담당한다.

즉 하나의 요청이 아래와 같은 순서로 진행된다.

사용자 → Controller Biz(Service) DAO MyBatis Oracle Database DAO Biz Controller JSP

 

MVC 구조를 사용하는 이유는 각각의 역할을 분리하여 유지보수와 확장이 쉬워지기 때문이다.

2) 프로젝트 전체 구조

프로젝트에서 사용한 주요 패키지는 다음과 같다.

com.mvc.upgrade

  • HomeController

com.mvc.upgrade.model.biz

  • BoardBiz
  • BoardBizImpl

com.mvc.upgrade.model.dao

  • BoardDao
  • BoardDaoImpl

com.mvc.upgrade.model.dto

  • BoardDto

resources

  • board-mapper.xml

WEB-INF/views

  • mvclist.jsp
  • mvcdetail.jsp
  • mvcinsert.jsp
  • mvcupdate.jsp

2 MyBatis를 활용한 게시판 구현

1) DTO

DTO(Data Transfer Object)는 데이터만 저장하는 객체이다.

게시글 번호, 작성자, 제목, 내용, 작성일을 하나의 객체로 관리한다.

BoardDto에는

  • myno
  • myname
  • mytitle
  • mycontent
  • mydate

필드가 존재하며 getter/setter를 이용하여 값을 저장하고 가져온다.

2) DAO

DAO(Data Access Object)는 데이터베이스와 직접 통신하는 객체이다.

이번 프로젝트에서는 SqlSessionTemplate을 이용하여 MyBatis의 SQL을 실행하였다.

대표적인 메서드는 다음과 같다.

  • selectList()
  • selectOne()
  • insert()
  • update()
  • delete()

DAO는 SQL을 직접 작성하지 않고 Mapper의 SQL을 호출하는 역할만 담당한다.

3) Biz(Service)

Biz 계층은 Controller와 DAO 사이에서 동작한다.

Controller가 DAO를 직접 호출하지 않고 Biz를 거쳐서 데이터를 처리하도록 만든다.

이 구조를 사용하는 이유는

  • 업무 로직 분리
  • 유지보수 향상
  • 기능 추가 시 수정 범위 최소화

때문이다.

현재 프로젝트에서는 DAO 메서드를 그대로 호출하는 형태로 구현하였다.

4) Controller

Controller는 사용자의 요청을 가장 먼저 받는 객체이다.

예를 들어

list.do

요청이 들어오면

BoardBiz의 selectList()

메서드를 호출하여 게시글 목록을 가져온다.

가져온 데이터를 Model에 저장한 후

mvclist.jsp

화면으로 전달한다.

 

사용자 요청 Controller Biz DAO Database JSP

순서로 실행된다.


5) Mapper(XML)

MyBatis에서는 SQL을 XML 파일에 작성한다.

board-mapper.xml 안에는

select

insert

update

delete

SQL이 모두 작성되어 있다.

DAO에서는

myboard.selectList

처럼 namespace와 id만 호출하면 된다.

SQL과 Java 코드가 분리되어 유지보수가 쉬워진다.


3 View(JSP) 작성

1) 목록 화면

mvclist.jsp

게시글 목록을 출력하는 화면이다.

JSTL의

forEach

를 이용하여 게시글을 반복 출력하였다.

또한

  • 상세보기
  • 글쓰기

버튼을 추가하여 페이지 이동이 가능하도록 구현하였다.

2) 상세보기 화면

mvcdetail.jsp

선택한 게시글 하나를 출력한다.

작성자

제목

내용

을 보여주며

수정

삭제

목록

버튼을 통해 다음 작업을 수행할 수 있도록 구성하였다.

3) 글 작성 화면

mvcinsert.jsp

새로운 게시글을 입력하는 화면이다.

사용자가 입력한 데이터를 Controller로 전송하여

insert()

메서드를 실행한다.

저장이 완료되면

list.do

로 이동하여 전체 게시글을 다시 조회한다.

4) 글 수정 화면

mvcupdate.jsp

기존 게시글의 정보를 화면에 출력한 후 수정할 수 있도록 구현하였다.

게시글 번호는 hidden으로 전달하고

작성자

제목

내용

만 수정 가능하도록 구성하였다.


4 Spring 설정 파일

1) applicationContext.xml

Spring에서 공통으로 사용하는 Bean을 등록하는 파일이다.

여기서는

  • DataSource
  • SqlSessionFactory
  • SqlSessionTemplate

을 등록하였다.

MyBatis와 Oracle을 연결하는 가장 중요한 설정 파일이다.

2) servlet-context.xml

Spring MVC 관련 설정을 담당한다.

대표적으로

  • Controller 검색
  • ViewResolver
  • Component Scan

등을 설정하였다.

Controller를 자동으로 찾아 Bean으로 등록하도록 설정하였다.

3) web.xml

웹 프로젝트의 시작점이다.

여기서는

DispatcherServlet

CharacterEncodingFilter

를 등록하였다.

CharacterEncodingFilter를 이용하여 UTF-8 인코딩이 적용되도록 설정하였다.

4) MyBatis config.xml

MyBatis의 전체 설정 파일이다.

여기서

typeAlias

mapper

를 등록하였다.

Mapper XML을 MyBatis가 읽을 수 있도록 연결하는 역할을 수행한다.


5 프로젝트 실행 흐름

브라우저에서 list.do 요청 HomeController BoardBiz BoardDao SqlSessionTemplate board-mapper.xml Oracle Database 조회 결과 반환 Model 저장 mvclist.jsp 게시글 목록 출력

Spring MVC에서는 사용자의 요청이 이러한 흐름으로 처리된다.


6 오류 해결 과정

프로젝트를 완성하면서 여러 가지 오류를 해결하였다.

① HTTP 404 오류

프로젝트가 Tomcat에 정상적으로 배포되지 않아 발생하였다.

프로젝트를 Maven Project로 설정하고 Server에 다시 등록하여 해결하였다.


② CharacterEncodingFilter 오류

encoding 값에

true

가 들어가 있어

UTF-8

로 수정하였다.


③ SqlSessionTemplate Bean 오류

No qualifying bean of type SqlSessionTemplate

오류가 발생하였다.

원인은 applicationContext.xml에서 Bean 이름과 참조 이름이 일치하지 않았기 때문이다.

SqlSessionFactory와 SqlSessionTemplate 설정을 수정하여 해결하였다.


④ Spring 버전 충돌

Spring 5 프로젝트에서

spring-orm 7.x

를 사용하고 있어 Bean 생성 오류가 발생하였다.

Spring Framework 버전을 모두 5.3.x로 통일하여 해결하였다.


오늘 배운 내용

이번 프로젝트에서는 Spring MVC와 MyBatis를 이용하여 게시판 CRUD 프로젝트를 완성하였다.

MVC 구조에서 Controller, Biz, DAO, DTO의 역할을 이해하였고, MyBatis Mapper를 이용하여 SQL을 분리하는 방법을 학습하였다.

또한 JSP 화면 작성부터 Spring 설정 파일, Oracle 연동, 오류 해결까지 하나의 프로젝트를 완성하는 전체 흐름을 경험할 수 있었다.

이번 프로젝트를 통해 Spring MVC 프로젝트가 실제로 어떻게 동작하는지 전체 구조를 이해할 수 있었으며, 앞으로 REST API나 Spring Boot를 학습하기 위한 기초를 다질 수 있었다.