Skip to content

JaehyeokLim/spring-mvc-board

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spring-MVC-Board

개요

Spring Boot 기반으로 개발한 MVC 게시판 애플리케이션이다.
회원가입, 로그인, 게시글 작성, 댓글 관리, 프로필 수정, 계정 삭제 등
웹 애플리케이션의 전형적인 기능을 모두 포함하고 있으며,
Spring MVC의 주요 구성 요소(Controller, Service, Repository, Interceptor, Validator, ArgumentResolver, ExceptionHandler)를 직접 구현해 구조적 학습에 중점을 두었다.

핵심 특징

  • Thymeleaf 기반 SSR (서버 사이드 렌더링)
  • 세션 기반 로그인 (HttpSession)
  • 논리 삭제(Soft Delete) 방식 적용
  • 국제화(i18n) 지원 (messages, errors)
  • Validator / Interceptor / ArgumentResolver 직접 구현
  • 전역 예외 처리 및 로그인 사용자 자동 주입
  • 대댓글 구현 보류

목표

  • Spring MVC 요청-응답 전체 흐름 완전 이해
  • Controller-Service-Repository 계층 분리
  • Interceptor, ArgumentResolver, Validator, ExceptionHandler 실전 적용
  • 세션 기반 인증/인가 및 로그인 사용자 관리
  • 다국어(i18n) 및 메시지 국제화 시스템 구성
  • 논리 삭제를 통한 안전한 데이터 관리 설계

마일스톤

  • 회원가입 / 로그인 / 로그아웃 구현
  • 게시글 CRUD
  • 댓글 CRUD
  • 세션 기반 인증 및 인가 처리
  • @Login 애노테이션 기반 로그인 사용자 주입
  • ControllerAdvice 전역 로그인 유저 등록
  • Interceptor 체인 구성 (Log, LoginCheck, AlreadyLogin)
  • Validator 기반 입력 검증
  • 전역 예외 처리(GlobalExceptionHandler)
  • 국제화(i18n) 메시지 프로퍼티 구성
  • 테스트 데이터 자동 초기화(TestDataInit)
  • 대댓글 기능 (미구현, 설계 완료)

사용 기술

  • Java 17
  • Spring Boot 3.5.4
  • Spring MVC
  • Thymeleaf
  • Jakarta Validation
  • Lombok
  • Gradle

전체 프로젝트 구조

spring-mvc-board/
├── build.gradle
├── settings.gradle
├── gradlew
├── gradlew.bat
└── src/
    ├── main/
    │   ├── java/com/jaehyeoklim/spring/mvc/board/
    │   │   ├── admin/controller/
    │   │   │   └── AdminController.java
    │   │   ├── auth/
    │   │   │   ├── controller/
    │   │   │   │   ├── LoginController.java
    │   │   │   │   └── LogoutController.java
    │   │   │   ├── dto/
    │   │   │   │   ├── LoginRequest.java
    │   │   │   │   └── SessionDto.java
    │   │   │   ├── interceptor/
    │   │   │   │   ├── AlreadyLoginInterceptor.java
    │   │   │   │   └── LoginCheckInterceptor.java
    │   │   │   ├── resolver/
    │   │   │   │   ├── Login.java
    │   │   │   │   └── LoginUserArgumentResolver.java
    │   │   │   └── service/
    │   │   │       └── LoginService.java
    │   │   ├── comment/
    │   │   │   ├── controller/CommentController.java
    │   │   │   ├── domain/Comment.java
    │   │   │   ├── dto/
    │   │   │   │   ├── CommentCreateRequest.java
    │   │   │   │   ├── CommentDto.java
    │   │   │   │   ├── CommentFormRequest.java
    │   │   │   │   └── CommentUpdateRequest.java
    │   │   │   ├── repository/CommentRepository.java
    │   │   │   └── service/CommentService.java
    │   │   ├── common/
    │   │   │   ├── advice/
    │   │   │   │   ├── GlobalExceptionHandler.java
    │   │   │   │   ├── LoginUserAdvice.java
    │   │   │   │   └── UseLoginUser.java
    │   │   │   ├── config/
    │   │   │   │   ├── TestDataInit.java
    │   │   │   │   └── WebConfig.java
    │   │   │   ├── controller/HomeController.java
    │   │   │   ├── exception/UnauthorizedActionException.java
    │   │   │   └── interceptor/LogInterceptor.java
    │   │   ├── post/
    │   │   │   ├── controller/PostController.java
    │   │   │   ├── domain/Post.java
    │   │   │   ├── dto/
    │   │   │   │   ├── PostCreateRequest.java
    │   │   │   │   ├── PostDto.java
    │   │   │   │   ├── PostFormRequest.java
    │   │   │   │   └── PostUpdateRequest.java
    │   │   │   ├── repository/PostRepository.java
    │   │   │   └── service/PostService.java
    │   │   └── user/
    │   │       ├── controller/
    │   │       │   ├── AccountController.java
    │   │       │   ├── ProfileController.java
    │   │       │   └── SignupController.java
    │   │       ├── domain/
    │   │       │   ├── Role.java
    │   │       │   └── User.java
    │   │       ├── dto/
    │   │       │   ├── AccountDeleteRequest.java
    │   │       │   ├── EmailUpdateRequest.java
    │   │       │   ├── NameUpdateRequest.java
    │   │       │   ├── PasswordUpdateRequest.java
    │   │       │   ├── UserDto.java
    │   │       │   └── UserSignupRequest.java
    │   │       ├── exception/PasswordUpdateException.java
    │   │       ├── repository/UserRepository.java
    │   │       ├── service/UserService.java
    │   │       └── validator/
    │   │           ├── EmailUpdateRequestValidator.java
    │   │           └── UserSignupRequestValidator.java
    │   └── resources/
    │       ├── static/css/bootstrap.min.css
    │       ├── templates/
    │       │   ├── admin/admin-home.html
    │       │   ├── comment/comment-delete.html
    │       │   ├── error/
    │       │   │   ├── 403.html
    │       │   │   ├── 404.html
    │       │   │   ├── 4xx.html
    │       │   │   ├── 500.html
    │       │   │   └── 5xx.html
    │       │   ├── fragments/
    │       │   │   ├── header.html
    │       │   │   └── footer.html
    │       │   ├── login/login.html
    │       │   ├── post/
    │       │   │   ├── post-delete.html
    │       │   │   ├── post-form.html
    │       │   │   └── post-view.html
    │       │   ├── settings/
    │       │   │   ├── account-delete.html
    │       │   │   ├── account-edit.html
    │       │   │   └── profile-edit.html
    │       │   ├── signup/signup.html
    │       │   └── index.html
    │       ├── application.properties
    │       └── messages/
    │           ├── messages.properties
    │           ├── messages_en.properties
    │           ├── errors.properties
    │           └── errors_en.properties
    └── test/java/com/jaehyeoklim/spring/mvc/board/
        └── SpringMvcBoardApplicationTests.java

동작화면

실행 후 추가 예정
(로그인 / 회원가입 / 게시글 작성 / 댓글 / 프로필 수정 / 에러 페이지 등)

About

Spring MVC와 Thymeleaf를 활용하여 회원 관리와 게시판 CRUD 기능을 구현한 학습 프로젝트입니다. Controller–Service–Repository 계층을 분리하고, 직관적인 URL 설계를 적용하여 스프링 MVC의 핵심 구조와 흐름을 실습할 수 있습니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors