프로젝트 개요

DC Spring Legacy Migration Project

본 프로젝트는 JSP/Servlet Model 2 기반의 레거시(daechul-project)를 Spring Framework 환경으로 마이그레이션한 프로젝트입니다. IoC/DI 컨테이너와 AOP를 도입하여 객체 간 결합도를 낮추고, Spring Security를 통합하여 URL 레벨 제어 및 어노테이션 기반(@PreAuthorize)의 세밀한 권한 관리를 구현하였습니다.

현대화 (Modernization)

Spring 6 요구사항 충족을 위한 Java 21 및 Jakarta EE 최신 스펙 적용

보안 강화 (Security)

Spring Security 6 기반 인증/인가, CSRF 토큰, BCrypt 암호화

퍼시스턴스 최적화 (Data)

MyBatis 선언적 매핑, HikariCP 커넥션 풀, 트랜잭션 관리

마이그레이션 전후 비교

Legacy Servlet to Spring MVC

Legacy (Before)

  • 수동 ActionFactory 기반의 Command 패턴
  • JDBC 직접 호출 및 반복적인 자원 해제 코드
  • Servlet 내 강한 결합도(Hard Coupling)
  • 보안 및 트랜잭션의 수동 관리

Spring 6 (After)

  • DispatcherServlet 기반의 Front Controller 패턴(중앙화)
  • MyBatis(@Mapper)를 통한 선언적 SQL 매핑
  • DI(의존성 주입)를 통한 느슨한 결합도(Loose Coupling)
  • AOP 기반의 선언적 트랜잭션(@Transactional) 처리

프로젝트 구조 및 역할

Layered Architecture & Components

Controller

org.zerock.controller
요청 URL 매핑, Model 객체 관리, View 반환(JSP)

Service

org.zerock.service
핵심 비즈니스 로직 처리, 트랜잭션 단위의 기능 수행

Mapper

org.zerock.mapper
MyBatis SQL 인터페이스, DB CRUD 연동

DTO / Domain

org.zerock.dto / domain
계층 간 데이터 교환을 위한 객체 (Lombok @Data 사용)

Security

org.zerock.security
UserDetailsService 구현, 권한 관리 및 필터 보안

Resources

src/main/resources
log4j2.xml, MyBatis Config, Mapper XML

상호관계 지표화

Request Processing Flow & Dependency Injection

DispatcherServlet이 모든 HTTP 요청을 중앙에서 받아 적절한 Controller로 위임하며, Service와 Mapper를 거쳐 DB 결과가 DTO로 변환되어 반환됩니다.

Browser (JSP)
DispatcherServlet
Controller
Service
Mapper
MySQL DB
의존성 전파

상위 레이어는 하위 레이어의 인터페이스에만 의존하며, 구체적인 구현체는 스프링 컨테이너에 의해 주입됩니다.

데이터 흐름

클라이언트의 요청 데이터는 DTO에 담겨 전달되며, DB에서 조회된 결과 또한 DTO를 통해 화면까지 전달됩니다.

프로젝트 구현 기능

Core Features & Functionality

게시판 (Board)

CRUD 기능, 페이징 처리, 조회수 증가

댓글 (Reply)

Ajax 기반 실시간 댓글 등록/삭제, 게시글 연동 처리

회원 (Member)

회원가입, 중복 체크, 회원 정보 수정

인증 (Auth)

Spring Security Form Login, Remember-me, 로그아웃

권한 (Permission)

게시글 작성자 본인 확인(AOP)

프로젝트 회고 및 소개

Retrospective & Contact

"스프링의 핵심 원리를 관통하다"

단순한 코드 변환을 넘어, Servlet/JSP의 한계점을 스프링 프레임워크가 어떻게 해결하는지 체득했습니다. 의존성 주입(DI)과 관점 지향 프로그래밍(AOP)을 직접 구현하며 백엔드 아키텍처에 대한 깊이 있는 이해를 갖추게 되었습니다.

이름: 선하영 GitHub: /daechul-spring-legacy.git 프로젝트 기간: 2025.12.31 - 2026.01.07
게시판 서비스 둘러보기 →