From 11dd6707ed7a38dc30693ecf8b426099ea679902 Mon Sep 17 00:00:00 2001 From: Park Sehyeon <115609394+tpgus1221@users.noreply.github.com> Date: Thu, 11 Sep 2025 11:58:51 +0900 Subject: [PATCH 1/6] Create README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기본적인 README 작성 --- README.md | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0836a9a --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +## IssueDive + +## 프로젝트 개요 +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 + │ ├─ application-prod.yml + │ └─ db/migration/ # Flyway 마이그레이션 스크립트 + │ + └─ test/java/com/issueDive + ├─ controller/ # 각 API 단위 테스트 + ├─ service/ # 서비스 계층 단위 테스트 + ├─ security/ # JWT/시큐리티 테스트 + └─ exception/ # 예외 처리 테스트 + +## 설치 및 실행 +### 로컬 실행 +```bash +# 프로젝트 클론 +git clone https://github.com/IssueDiver/IssueDive.git +cd IssueDive + +# 빌드 및 실행 +./gradlew build +./gradlew bootRun +``` + +### Docker 실행 +```bash +docker-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 비밀번호 | **** | + +## API 문서 +- 로컬 실행 시: [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 From 9f2555041f8a7edfbf95444d9ffc0c0d9c74657a Mon Sep 17 00:00:00 2001 From: Park Sehyeon <115609394+tpgus1221@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:03:06 +0900 Subject: [PATCH 2/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트 구조 문제 수정 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0836a9a..b7554e3 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ JWT 기반 인증, AWS 배포, 로깅 및 모니터링까지 포함하여 실제 - ChatGPT, Gemini, Claude ## 프로젝트 구조 +```plaintext src ├─ main/java/com/issueDive │ ├─ IssueDiveApplication.java @@ -75,6 +76,7 @@ src ├─ service/ # 서비스 계층 단위 테스트 ├─ security/ # JWT/시큐리티 테스트 └─ exception/ # 예외 처리 테스트 +``` ## 설치 및 실행 ### 로컬 실행 From 0f11d1f548ffb88077979c2a43c775d31b478888 Mon Sep 17 00:00:00 2001 From: Park Sehyeon <115609394+tpgus1221@users.noreply.github.com> Date: Thu, 11 Sep 2025 12:05:43 +0900 Subject: [PATCH 3/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 프로젝트 구조 오류 수정 --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index b7554e3..fba6cea 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,6 @@ src │ └─ util/ # JwtUtil 등 유틸리티 │ ├─ main/resources - │ ├─ application-prod.yml │ └─ db/migration/ # Flyway 마이그레이션 스크립트 │ └─ test/java/com/issueDive From 1396f653a2fda236b9213bcf5dcaf50a4a83d1ee Mon Sep 17 00:00:00 2001 From: Park Sehyeon <115609394+tpgus1221@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:35:55 +0900 Subject: [PATCH 4/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 환경 변수 수정 From fb2d44a2ef72115a22939ac6ccdc8d32ffb9d96a Mon Sep 17 00:00:00 2001 From: Park Sehyeon <115609394+tpgus1221@users.noreply.github.com> Date: Thu, 11 Sep 2025 13:37:16 +0900 Subject: [PATCH 5/6] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 환경 변수 수정 --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index fba6cea..94c8419 100644 --- a/README.md +++ b/README.md @@ -95,11 +95,13 @@ docker-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 비밀번호 | **** | +| 이름 | 설명 | 예시 | +|-------------|---------------|---------------------------------------------| +| 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 비밀번호 | **** | ## API 문서 - 로컬 실행 시: [Swagger UI] http://localhost:8080/swagger-ui/index.html From ed7f65ac3ee92d5160887b60ec91219701d54630 Mon Sep 17 00:00:00 2001 From: meraki6512 Date: Thu, 11 Sep 2025 19:16:53 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[#133]=20chore:=20application-test.properti?= =?UTF-8?q?es=20CORS=20=ED=99=98=EA=B2=BD=20=EB=B3=80=EC=88=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/resources/application-test.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties index 5f3f23c..9549e82 100644 --- a/src/test/resources/application-test.properties +++ b/src/test/resources/application-test.properties @@ -1,3 +1,5 @@ +cors.allowed-origins=http://localhost:5173, http://localhost:5174 + # ================================================================= # H2 ??????? MySQL ?? ??? ???? ?? DB? ???? ????? ?? # ? ?? ??? V1__init.sql? AUTO_INCREMENT ??? ?? ?? ?????.