IssueDive는 협업 툴의 핵심 기능(이슈 관리, 라벨 관리, 댓글 관리, 사용자 인증)을 구현한 백엔드 프로젝트입니다. JWT 기반 인증, AWS 배포, 로깅 및 모니터링까지 포함하여 실제 서비스 운영과 유사한 환경을 경험할 수 있도록 설계되었습니다.
-
Auth & User
- 회원가입, 로그인, JWT 발급/재발급, 사용자 조회, 로그아웃
-
Issue
- 이슈 생성, 필터링/검색, 상세 조회, 수정, 상태 변경, 삭제
-
Label
- 라벨 생성/조회/수정/삭제, 이슈-라벨 매핑
-
Comment
- 댓글 작성/조회/수정/삭제, 대댓글 트리 구조
-
공통
- 공통 응답 포맷(
ApiCommonResponse) - 전역 예외 처리(
GlobalExceptionHandler) - Swagger API 문서
Backend
- 공통 응답 포맷(
-
Java 17
-
Spring Boot 3.5
-
Spring Security, JWT
-
JPA/Hibernate, QueryDSL
-
JUnit5
Database
- MySQL 8.0.x
- H2 (테스트)
- Redis (JWT Blacklist, 캐싱)
Frontend
- Vue.js
DevOps & Infra
- Docker, AWS (EC2, RDS, S3)
- GitHub Actions (CI/CD)
- Flyway (DB Migration)
- K6 (성능 테스트)
- owasp-java-html-sanitizer
Monitoring
- Spring Boot Actuator
- Prometheus
- Grafana
Tools
- IntelliJ, VSCode
- MySQL Workbench, Postman, Swagger
- Notion, Mermaid, DBdiagram
- ChatGPT, Gemini, Claude
src
├─ main/java/com/issueDive
│ ├─ IssueDiveApplication.java
│ ├─ config/ # QueryDSL, Security, Swagger 설정
│ ├─ controller/ # Auth, Issue, Label, Comment 컨트롤러
│ ├─ dto/ # 요청/응답 DTO
│ ├─ entity/ # JPA 엔티티 (User, Issue, Label, Comment 등)
│ ├─ exception/ # 예외 정의 및 전역 핸들러
│ ├─ repository/ # JPA 레포지토리
│ ├─ security/ # JWT 유틸, 인증 필터, UserDetailsService
│ ├─ service/ # 비즈니스 로직 서비스
│ └─ util/ # JwtUtil 등 유틸리티
│
├─ main/resources
│ └─ db/migration/ # Flyway 마이그레이션 스크립트
│
└─ test/java/com/issueDive
├─ controller/ # 각 API 단위 테스트
├─ service/ # 서비스 계층 단위 테스트
├─ security/ # JWT/시큐리티 테스트
└─ exception/ # 예외 처리 테스트
# 프로젝트 클론
git clone https://github.com/IssueDiver/IssueDive.git
cd IssueDive
# 빌드 및 실행
./gradlew build
./gradlew bootRundocker-compose up --build| 이름 | 설명 | 예시 |
|---|---|---|
| DB_HOST | RDS 엔드포인트 | issuedive-mysql.cro4kgswk31z.ap-northeast-2.rds.amazonaws.com |
| DB_PORT | DB 포트 | 3306 |
| DB_NAME | DB 이름 | issue_dive |
| DB_USER | DB 사용자 | issue |
| DB_PASSWORD | DB 비밀번호 | **** |
- 로컬 실행 시: [Swagger UI] http://localhost:8080/swagger-ui/index.html
- 배포 서버 실행 시:http://ec2-13-124-124-121.ap-northeast-2.compute.amazonaws.com:8080/swagger-ui/index.html