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
실행 후 추가 예정
(로그인 / 회원가입 / 게시글 작성 / 댓글 / 프로필 수정 / 에러 페이지 등)