[1편] 블로그 글 [2편] 블로그 글 [3편] 블로그 글
Java로 구현한 커스텀 웹 애플리케이션 서버(WAS) 기반의 RESTful 게시판 애플리케이션이다.
HTTP 요청을 처리하는 커스텀 WAS 위에서 사용자 관리(회원가입, 로그인, 계정 관리)와 게시물 CRUD 기능을 제공한다.
애노테이션 기반 라우팅, 세션 관리, 파일 기반 데이터 저장을 통해 간단한 웹 서버 구조를 구현한다.
- Java 네트워크 통신과 HTTP 프로토콜 처리 학습
- 멀티스레드 기반 클라이언트 요청 처리
- 애노테이션과 리플렉션 기반 RESTful API 설계
- 세션 관리와 사용자 인증/인가 구현
- 파일 기반 데이터 저장소 설계
- 안정적인 서버 운영과 에러 처리
- 커스텀 WAS 구현 및 HTTP 요청/응답 처리
- 사용자 등록, 로그인, 로그아웃, 계정 관리
- 게시물 생성, 조회, 수정, 삭제
-
@Mapping애노테이션 기반 라우팅 - 세션 관리 및 BCrypt 기반 비밀번호 암호화
- 로그 출력과 자원 관리 유틸리티
- 클라이언트 HTTP 요청 처리
- 사용자: 회원가입, 로그인, 로그아웃, 계정 수정/삭제
- 게시물: 생성, 조회, 수정, 삭제
- 세션: 쿠키 기반 세션 관리
- 에러: 404, 500 응답 처리
@Mapping애노테이션으로 경로와 HTTP 메서드 매핑ConcurrentHashMap기반 세션 관리JBCrypt기반 비밀번호 암호화- 파일 기반 데이터 저장(
users.dat,posts.dat) - 멀티스레드 요청 처리(
ExecutorService)
- Java 24
- Socket / ServerSocket API
- ExecutorService / Thread 기반 멀티스레딩
- 애노테이션 + 리플렉션
- JBCrypt 비밀번호 암호화
- 파일 I/O 기반 데이터 저장
| 클래스 | 설명 |
|---|---|
HttpServer |
포트 54321에서 클라이언트 연결 수용, 스레드 풀(10개)로 처리 |
HttpRequest |
HTTP 요청 파싱(메서드, 경로, 쿼리, 헤더, 쿠키) |
HttpResponse |
HTTP 응답 작성(상태 코드, 본문, 쿠키) |
HttpRequestHandler |
클라이언트 소켓별 요청 처리 및 서블릿 실행 |
HttpMethod |
GET, POST, PUT, DELETE 정의 |
HttpStatus |
HTTP 상태 코드(200, 404 등) 정의 |
PageNotFoundException |
404 오류 처리 |
| 클래스 | 설명 |
|---|---|
ServletManager |
경로별 서블릿 매핑 및 실행 |
HttpServlet |
서블릿 인터페이스 |
AnnotationServlet |
@Mapping 기반 컨트롤러 메서드 디스패처 |
Mapping |
경로와 HTTP 메서드 매핑 애노테이션 |
MappingKey |
경로와 메서드 조합 키 |
DefaultServlet |
기본 서블릿(빈 구현) |
DiscardServlet |
요청 무시 |
InternalErrorServlet |
500 오류 페이지 |
NotFoundServlet |
404 오류 페이지 |
| 클래스 | 설명 |
|---|---|
User |
사용자 데이터(UUID, loginId, password, name) |
UserRepository |
파일(users.dat) 기반 사용자 CRUD |
UserController |
로그인, 로그아웃, 회원가입, 계정 관리 API |
| 클래스 | 설명 |
|---|---|
Post |
게시물 데이터(UUID, owner, createdAt, title, content) |
PostRepository |
파일(posts.dat) 기반 게시물 CRUD |
PostController |
게시물 생성, 조회, 수정, 삭제 API |
| 클래스 | 설명 |
|---|---|
Logger |
시간과 스레드명 포함 로그 출력 |
UUIDGenerator |
UUID 생성 |
PasswordEncoder |
BCrypt 기반 비밀번호 해시/검증 |
AuthenticationHelper |
세션 기반 인증 |
SessionManager |
ConcurrentHashMap 기반 세션 관리 |
| 클래스 | 설명 |
|---|---|
WasMain |
서버 실행 및 컨트롤러 초기화 |
WasMainController |
루트 경로(/)의 로그인/메인 페이지 |
was-rest-board/
├── main/
│ └── com.jaehyeoklim.wasrestboard.main
│ ├── WasMain.java
│ └── WasMainController.java
├── board/
│ └── com.jaehyeoklim.wasrestboard.board
│ ├── controller/
│ │ └── PostController.java
│ ├── domain/
│ │ └── Post.java
│ └── repository/
│ └── PostRepository.java
├── user/
│ └── com.jaehyeoklim.wasrestboard.user
│ ├── controller/
│ │ └── UserController.java
│ ├── domain/
│ │ └── User.java
│ └── repository/
│ └── UserRepository.java
├── httpserver/
│ └── com.jaehyeoklim.wasrestboard.httpserver
│ ├── HttpServer.java
│ ├── HttpRequest.java
│ ├── HttpResponse.java
│ ├── HttpRequestHandler.java
│ ├── enums/
│ │ ├── HttpMethod.java
│ │ └── HttpStatus.java
│ ├── exception/
│ │ └── PageNotFoundException.java
│ ├── servlet/
│ │ ├── annotation/
│ │ │ ├── AnnotationServlet.java
│ │ │ ├── Mapping.java
│ │ │ └── MappingKey.java
│ │ ├── base/
│ │ │ └── HttpServlet.java
│ │ └── system/
│ │ ├── DefaultServlet.java
│ │ ├── DiscardServlet.java
│ │ ├── InternalErrorServlet.java
│ │ └── NotFoundServlet.java
│ └── ServletManager.java
├── session/
│ └── com.jaehyeoklim.wasrestboard.session
│ └── SessionManager.java
├── util/
│ └── com.jaehyeoklim.wasrestboard.util
│ ├── AuthenticationHelper.java
│ ├── Logger.java
│ ├── PasswordEncoder.java
│ └── UUIDGenerator.java
├── pom.xml
├── .gitignore
├── README.md
브라우저 기반 웹 UI
(동작 화면은 실제 실행 후
http://localhost:54321에서 확인 가능)![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()












