Spring Boot + MyBatis + MySQL 기반의 회원 관리 및 게시판 기능을 제공하는 RESTful API 백엔드 서버입니다.
- 회원가입 (사용자명, 이메일 중복 체크)
- 로그인 (JWT 토큰 기반 인증)
- 회원 정보 조회 및 수정
- 회원 탈퇴 (소프트 삭제)
- 게시글 작성 (로그인 사용자만 가능)
- 게시글 목록 조회 (최신순 + 10개 단위 페이징)
- 게시글 상세 조회 (조회수 자동 증가)
- 게시글 수정/삭제 (작성자 본인만 가능)
- 내가 작성한 게시글 목록 조회
- Framework: Spring Boot 3.2.1
- Java: 17
- Database: MySQL 8.0
- ORM: MyBatis 3.0.3
- Security: Spring Security + JWT
- Build Tool: Maven
- Validation: Jakarta Validation
src/
├── main/
│ ├── java/com/example/boardservice/
│ │ ├── config/ # 설정 클래스
│ │ │ ├── SecurityConfig.java
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── controller/ # REST API 컨트롤러
│ │ │ ├── AuthController.java
│ │ │ ├── MemberController.java
│ │ │ └── BoardController.java
│ │ ├── domain/ # 엔티티 클래스
│ │ │ ├── Member.java
│ │ │ └── Board.java
│ │ ├── dto/ # 데이터 전송 객체
│ │ ├── mapper/ # MyBatis 매퍼 인터페이스
│ │ │ ├── MemberMapper.java
│ │ │ └── BoardMapper.java
│ │ ├── security/ # JWT 보안 관련
│ │ │ ├── JwtTokenProvider.java
│ │ │ └── JwtAuthenticationFilter.java
│ │ ├── service/ # 비즈니스 로직
│ │ │ ├── MemberService.java
│ │ │ └── BoardService.java
│ │ └── BoardServiceApplication.java
│ └── resources/
│ ├── application.yml # 애플리케이션 설정
│ └── mybatis/mapper/ # MyBatis XML 매퍼
├── test/ # 테스트 코드
├── database.sql # 데이터베이스 스키마
├── pom.xml # Maven 의존성 설정
└── README.md
- Java 17 이상
- MySQL 8.0 이상
- Maven 3.6 이상
MySQL에 접속하여 데이터베이스를 생성하고 초기 데이터를 삽입합니다:
mysql -u root -p < database.sqlapplication.yml 파일에서 다음 환경변수를 설정하거나, 시스템 환경변수로 설정합니다:
export DB_USERNAME=your_db_username
export DB_PASSWORD=your_db_password
export JWT_SECRET=your_jwt_secret_key_at_least_32_charactersmvn spring-boot:runmvn clean package
java -jar target/board-service-1.0.0.jar- IntelliJ IDEA에서 프로젝트 열기
- Maven 의존성 자동 다운로드 대기
BoardServiceApplication.java파일에서 Run 버튼 클릭- 또는
Run/Debug Configurations에서 Spring Boot 설정 추가
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /api/auth/join |
회원가입 | ❌ |
| POST | /api/auth/login |
로그인 | ❌ |
| GET | /api/auth/validate |
토큰 검증 | ✅ |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /api/members/me |
내 정보 조회 | ✅ |
| PUT | /api/members/me |
내 정보 수정 | ✅ |
| DELETE | /api/members/me |
회원 탈퇴 | ✅ |
| GET | /api/members/{id} |
특정 회원 정보 조회 | ✅ |
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| POST | /api/boards/create |
게시글 작성 | ✅ |
| GET | /api/boards/list |
게시글 목록 조회 | ❌ |
| GET | /api/boards/{id} |
게시글 상세 조회 | ❌ |
| PUT | /api/boards/update/{id} |
게시글 수정 | ✅ |
| DELETE | /api/boards/delete/{id} |
게시글 삭제 | ✅ |
| GET | /api/boards/my |
내 게시글 목록 | ✅ |
curl -X POST http://localhost:8080/api/auth/join \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "password123",
"email": "test@example.com",
"name": "테스트사용자"
}'curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "password123"
}'curl -X POST http://localhost:8080/api/boards/create \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"title": "게시글 제목",
"content": "게시글 내용입니다."
}'curl -X GET "http://localhost:8080/api/boards/list?page=0&size=10"- JWT 토큰 기반 인증
- BCrypt 패스워드 암호화
- CORS 설정 지원
- 세션 사용 안함 (Stateless)
CREATE TABLE members (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
name VARCHAR(50) NOT NULL,
role VARCHAR(20) NOT NULL DEFAULT 'USER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);CREATE TABLE boards (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
author_id BIGINT NOT NULL,
view_count INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted BOOLEAN DEFAULT FALSE,
FOREIGN KEY (author_id) REFERENCES members(id)
);애플리케이션 실행 시 다음 테스트 계정이 자동으로 생성됩니다:
- 관리자:
admin/admin123 - 사용자1:
user1/user123 - 사용자2:
user2/user123
- MySQL 서버가 실행 중인지 확인
application.yml의 데이터베이스 설정 확인- 환경변수
DB_USERNAME,DB_PASSWORD설정 확인
- 환경변수
JWT_SECRET설정 확인 (최소 32자 이상) - 토큰 만료 시간 확인 (기본 24시간)
- 기본 포트 8080이 사용 중인 경우
application.yml에서server.port변경
- 댓글 기능
- 파일 업로드
- 게시글 검색
- 좋아요/북마크 기능
- 관리자 페이지
- 이메일 인증
- 소셜 로그인