목차
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를 학습하기 위한 기초를 다질 수 있었다.
'멀티캠퍼스' 카테고리의 다른 글
| [2026.06.25 ~ 2026.06.26] - TIL 59~60일차 MSA 특강 정리 (0) | 2026.06.30 |
|---|---|
| [2026.06.24] - TIL 58일차 개발자를 위한 UI/UX 특강 정리 (0) | 2026.06.25 |
| [2026.06.22] - TIL 56일차 Spring MVC 기본 구조 정리 (1) | 2026.06.25 |
| [2026.06.19] - TIL 55일차 Spring AOP 실습 정리 (0) | 2026.06.25 |
| [2026.06.18] - TIL 54일차 Spring Annotation 기반 DI와 AOP 개념 정리 (0) | 2026.06.18 |