Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Board Service - Spring Boot 회원 + 게시판 서비스

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

설치 및 실행 방법

1. 사전 요구사항

  • Java 17 이상
  • MySQL 8.0 이상
  • Maven 3.6 이상

2. 데이터베이스 설정

MySQL에 접속하여 데이터베이스를 생성하고 초기 데이터를 삽입합니다:

mysql -u root -p < database.sql

3. 환경 변수 설정

application.yml 파일에서 다음 환경변수를 설정하거나, 시스템 환경변수로 설정합니다:

export DB_USERNAME=your_db_username
export DB_PASSWORD=your_db_password
export JWT_SECRET=your_jwt_secret_key_at_least_32_characters

4. 애플리케이션 실행

Maven을 사용한 실행

mvn spring-boot:run

JAR 파일 빌드 후 실행

mvn clean package
java -jar target/board-service-1.0.0.jar

5. IntelliJ IDEA에서 실행

  1. IntelliJ IDEA에서 프로젝트 열기
  2. Maven 의존성 자동 다운로드 대기
  3. BoardServiceApplication.java 파일에서 Run 버튼 클릭
  4. 또는 Run/Debug Configurations에서 Spring Boot 설정 추가

API 엔드포인트

인증 API

Method Endpoint Description Auth Required
POST /api/auth/join 회원가입
POST /api/auth/login 로그인
GET /api/auth/validate 토큰 검증

회원 API

Method Endpoint Description Auth Required
GET /api/members/me 내 정보 조회
PUT /api/members/me 내 정보 수정
DELETE /api/members/me 회원 탈퇴
GET /api/members/{id} 특정 회원 정보 조회

게시판 API

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 내 게시글 목록

API 사용 예시

1. 회원가입

curl -X POST http://localhost:8080/api/auth/join \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "password": "password123",
    "email": "test@example.com",
    "name": "테스트사용자"
  }'

2. 로그인

curl -X POST http://localhost:8080/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "password": "password123"
  }'

3. 게시글 작성 (토큰 필요)

curl -X POST http://localhost:8080/api/boards/create \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -d '{
    "title": "게시글 제목",
    "content": "게시글 내용입니다."
  }'

4. 게시글 목록 조회

curl -X GET "http://localhost:8080/api/boards/list?page=0&size=10"

보안 설정

  • JWT 토큰 기반 인증
  • BCrypt 패스워드 암호화
  • CORS 설정 지원
  • 세션 사용 안함 (Stateless)

🗄️ 데이터베이스 스키마

Members 테이블

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
);

Boards 테이블

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

문제 해결

1. 데이터베이스 연결 오류

  • MySQL 서버가 실행 중인지 확인
  • application.yml의 데이터베이스 설정 확인
  • 환경변수 DB_USERNAME, DB_PASSWORD 설정 확인

2. JWT 토큰 오류

  • 환경변수 JWT_SECRET 설정 확인 (최소 32자 이상)
  • 토큰 만료 시간 확인 (기본 24시간)

3. 포트 충돌

  • 기본 포트 8080이 사용 중인 경우 application.yml에서 server.port 변경

추가 기능 구현 가능 사항

  • 댓글 기능
  • 파일 업로드
  • 게시글 검색
  • 좋아요/북마크 기능
  • 관리자 페이지
  • 이메일 인증
  • 소셜 로그인

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages