Skip to content

Commit bb7516d

Browse files
committed
Merge remote-tracking branch 'origin/main'
2 parents 3dc7f0d + ef2f621 commit bb7516d

6 files changed

Lines changed: 320 additions & 0 deletions

File tree

.github/ISSUE_TEMPLATE/bug.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
name: Bug
3+
about: 버그 리포트 템플릿
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
## 📝 무엇이 문제인가요?
11+
12+
- 버그를 간단히 설명해주세요
13+
14+
## 📍 재현 방법
15+
16+
1.
17+
2.
18+
3.
19+
20+
## 📌 To do
21+
22+
- [ ] 수정할 작업들 리스트업

.github/ISSUE_TEMPLATE/epic.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
name: Epic
3+
about: 에픽 이슈 생성 템플릿
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
## 🎯 목표
11+
12+
- <유저 관점에서 달성해야 할 결과 1>
13+
- <결과 2>
14+
- <결과 3>
15+
16+
## 📌 To do (각 항목 = 서브 이슈 1개)
17+
18+
> 각 To do 항목은 별도 PR로 분리하여 구현한다.
19+
20+
- [ ] [Feat] <작업 1>
21+
- [ ] [Feat] <작업 2>
22+
- [ ] [Feat] <작업 3>
23+
- [ ] [Feat] <작업 4>

.github/ISSUE_TEMPLATE/feature.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
name: Feature
3+
about: 기능 구현 이슈 생성 템플릿
4+
title: ''
5+
labels: ''
6+
assignees: ''
7+
8+
---
9+
10+
## 📝 무엇을 하나요?
11+
12+
- 할 일을 간단히 설명해주세요
13+
14+
## 📌 To do
15+
16+
- [ ] 할 작업들 리스트업

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## 🔎 What
2+
3+
- 한 작업을 간단히 설명해주세요
4+
5+
## 🔗 Issue
6+
7+
- Closes: #이슈번호
8+
9+
## ✅ 체크리스트
10+
11+
- [ ] 브랜치 base가 적절한가요?
12+
- [ ] 제목이 이슈 제목과 동일한가요?
13+
- [ ] 최소 1명의 리뷰를 받았나요?
14+

.github/workflows/gradle.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Knoc CI/CD Pipeline
2+
3+
# 1. 언제 이 스크립트를 실행할 것인가? (Triggers)
4+
on:
5+
push:
6+
branches: [ "main", "develop" ]
7+
pull_request:
8+
branches: [ "main", "develop" ]
9+
10+
# 2. 어떤 작업을 할 것인가? (Jobs)
11+
jobs:
12+
build:
13+
# 깃허브가 제공하는 최신 우분투(리눅스) 환경에서 실행
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
# Step 1: 깃허브 저장소에서 최신 코드를 내려받습니다.
18+
- name: 📥 코드 체크아웃 (Checkout Repository)
19+
uses: actions/checkout@v4
20+
21+
# Step 2: 자바 17 버전을 설치하고 세팅합니다.
22+
- name: ☕ JDK 17 세팅 (Set up JDK 17)
23+
uses: actions/setup-java@v4
24+
with:
25+
java-version: '17'
26+
distribution: 'corretto' # AWS에서 만든 안정적인 Java 배포판
27+
cache: 'gradle' # ⚡ 핵심: 매번 다운로드하지 않도록 라이브러리를 캐싱하여 속도를 높입니다.
28+
29+
# Step 3: 리눅스 환경에서 gradlew 실행 파일을 사용할 수 있도록 권한을 줍니다.
30+
- name: 🔑 gradlew 실행 권한 부여 (Grant execute permission)
31+
run: chmod +x ./gradlew
32+
33+
# Step 4: 대망의 빌드 및 테스트 실행!
34+
- name: 🛠️ 프로젝트 빌드 및 테스트 (Build with Gradle)
35+
run: ./gradlew build
36+
# application-test.properties를 사용하도록 강제 지정 (안전장치)
37+
env:
38+
SPRING_PROFILES_ACTIVE: test

README.md

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
# 🚪 Knoc (노크)
2+
> **"완벽한 사수를 만나는 가장 가벼운 노크"**
3+
> 주니어와 시니어를 잇는 가장 가벼운 시작, 가장 깊은 코드 리뷰 플랫폼
4+
5+
---
6+
7+
## 📌 프로젝트 소개
8+
9+
Knoc은 사수 없는 주니어 개발자와 현직 시니어 개발자를 매칭하여, 단편적인 버그 픽스가 아닌 **실무 수준의 아키텍처 피드백과 코드 리뷰**를 제공하는 플랫폼입니다.
10+
11+
### 핵심 기능
12+
13+
| 기능 | 설명 |
14+
|------|------|
15+
| 💬 채팅 기반 매칭 | 1:1 채팅으로 리뷰 가능 여부를 자유롭게 사전 조율 |
16+
| 💳 에스크로 결제 | 안전한 대금 보관, 구매 확정 후 정산 |
17+
| 🔗 GitHub PR 연동 | PR 링크 제출 시 변경 사항 자동 파싱 + AI 요약 |
18+
| 🖥️ 2-Pane 워크스페이스 | PR 코드 / 리뷰 리포트 + 실시간 채팅을 한 화면에 |
19+
| 📋 구조화된 리뷰 리포트 | [현업 관점] · [엣지 케이스] · [확장성 대안] 템플릿 |
20+
| 🤖 AI 요약 | PR 변경사항 요약 + 멘토링 핵심 3줄 요약 |
21+
22+
### 서비스 플로우
23+
24+
```
25+
시니어 탐색 → 1:1 채팅 문의 → 에스크로 결제 → 리뷰 요청서 제출
26+
→ 2-Pane 워크스페이스 (코드 리뷰 + 실시간 채팅) → 구매 확정 & 정산
27+
```
28+
29+
---
30+
31+
## 🛠 기술 스택 (Tech Stack)
32+
33+
| 구분 | 기술 | 도입 배경 |
34+
| :--- | :--- | :--- |
35+
| **Backend** | **Java 17**, **Spring Boot 3.x** | 생산성과 안정성이 검증된 최신 스프링 생태계 활용 |
36+
| **Security** | **Spring Security**, **JWT** | 주니어/시니어 권한 분리 및 무상태(Stateless) 인증 체계 구축 |
37+
| **Database** | **MySQL 8.0**, **JPA**, **QueryDSL** | 객체 지향적 데이터 관리 및 복잡한 동적 쿼리(필터 검색) 최적화 |
38+
| **Real-time** | **WebSocket (STOMP)** | 2-Pane 워크스페이스 내 실시간 소통 및 시스템 알림 구현 |
39+
| **AI & API** | **OpenAI API**, **GitHub REST API** | 코드 자동 요약 기능 및 외부 PR 데이터 프록시 연동 |
40+
| **DevOps** | **Docker**, **GitHub Actions** | 개발 환경의 일관성 유지 및 CI/CD 파이프라인 자동화 |
41+
42+
---
43+
44+
## 🚀 로컬 환경 세팅
45+
46+
### 사전 요구사항
47+
48+
- Java 17+
49+
- Docker & Docker Compose
50+
- IntelliJ IDEA (권장)
51+
- Git
52+
53+
### 1. 저장소 클론
54+
55+
```bash
56+
git clone https://github.com/prgrms-aibe-devcourse/AIBE5_Project2_Team8.git
57+
cd AIBE5_Project2_Team8
58+
git checkout develop
59+
```
60+
61+
### 2. 환경변수 설정
62+
63+
```bash
64+
cp .env.example .env
65+
```
66+
67+
`.env` 파일을 열어 아래 값들을 채워주세요:
68+
69+
```
70+
DB_URL=jdbc:mysql://localhost:3306/knoc
71+
DB_USERNAME=root
72+
DB_PASSWORD=yourpassword
73+
JWT_SECRET=your-256-bit-secret-key-here
74+
```
75+
76+
### 3. 애플리케이션 실행
77+
78+
브라우저에서 `http://localhost:8080` 접속
79+
80+
### 4. (선택) IntelliJ 설정
81+
82+
- **Lombok 플러그인** 설치 확인
83+
- Settings → Build → Compiler → Annotation Processors → **Enable annotation processing** 체크
84+
- Gradle JVM → **Java 17** 선택
85+
86+
---
87+
88+
## 📂 프로젝트 구조
89+
90+
```
91+
src/main/java/com/knoc/
92+
├── KnocApplication.java
93+
├── global/ # 공통 인프라 (config, entity, exception, util)
94+
├── auth/ # 인증/인가 (JWT, 이메일 인증)
95+
├── member/ # 회원
96+
├── senior/ # 시니어 프로필, 검색 (QueryDSL)
97+
├── chat/ # 실시간 채팅 (WebSocket STOMP)
98+
├── event/ # 도메인 이벤트, 리스너
99+
├── order/ # 주문, 에스크로 결제
100+
├── review/ # 리뷰 요청/리포트, GitHub API, AI 연동
101+
├── settlement/ # 정산, 후기
102+
└── dashboard/ # 대시보드
103+
104+
src/main/resources/
105+
├── templates/
106+
│ ├── layout/fragments/ # 공통 레이아웃 (header, footer)
107+
│ ├── auth/ # 로그인, 회원가입
108+
│ ├── senior/ # 시니어 목록, 상세
109+
│ ├── chat/ # 채팅방
110+
│ ├── workspace/ # 2-Pane 워크스페이스
111+
│ ├── review/ # 리뷰 요청서, 리포트
112+
│ ├── dashboard/ # 주니어/시니어 대시보드
113+
│ └── error/ # 에러 페이지
114+
└── static/
115+
├── css/
116+
├── js/
117+
└── images/
118+
```
119+
120+
---
121+
122+
## 🤝 팀 협업 컨벤션 (Team Collaboration)
123+
124+
### 🌿 브랜치 전략 (Branch Strategy)
125+
**GitHub Flow**를 기반으로 운영하며, 모든 작업은 이슈 단위로 브랜치를 생성합니다.
126+
* `main` : 최종 배포 브랜치
127+
* `develop` : 개발 통합 브랜치 (기본 base 브랜치)
128+
* `feature/#이슈번호-기능명` : 신규 기능 개발
129+
* `fix/#이슈번호-버그명` : 버그 수정
130+
131+
### 📝 커밋 메시지 규칙 (Commit Message)
132+
포맷: `태그: 작업 내용 요약 (#이슈번호)`
133+
* `feat` : 새로운 기능 추가
134+
* `fix` : 버그 수정
135+
* `refactor` : 코드 리팩토링
136+
* `design` : CSS, Thymeleaf 등 UI 변경
137+
* `docs` : 문서 수정 (README 등)
138+
139+
### 🎫 이슈 및 PR 관리 (Issue & PR Management)
140+
모든 작업은 이슈 생성 후 진행하며, PR을 통해 최소 1명 이상의 코드 리뷰를 거친 뒤 `develop`에 머지합니다.
141+
142+
### Issue Templates
143+
144+
GitHub에서 "New Issue" 클릭 시 템플릿 선택 화면이 표시됩니다.
145+
146+
| 템플릿 | 용도 | 라벨 |
147+
| ----------- | --------------------------------- | ------------- |
148+
| **Epic** | 대규모 기능 단위 (여러 이슈 포함) | `epic` |
149+
| **Feature** | 단일 기능 구현 | `enhancement` |
150+
| **Bug** | 버그 리포트 | `bug` |
151+
152+
#### Epic 템플릿
153+
154+
```markdown
155+
## 🎯 목표
156+
157+
- <유저 관점에서 달성해야 할 결과>
158+
159+
## 📌 To do (각 항목 = 서브 이슈 1개)
160+
161+
> 각 To do 항목은 별도 PR로 분리하여 구현한다.
162+
163+
- [ ] [Feat] <작업 1>
164+
- [ ] [Feat] <작업 2>
165+
```
166+
167+
#### Feature / Bug 템플릿
168+
169+
```markdown
170+
## 📝 무엇을 하나요?
171+
172+
- 할 일을 간단히 설명해주세요
173+
174+
## 📌 To do
175+
176+
- [ ] 할 작업들 리스트업
177+
```
178+
179+
> 템플릿 파일: [.github/ISSUE_TEMPLATE/](.github/ISSUE_TEMPLATE/)
180+
181+
### PR Template
182+
183+
```markdown
184+
## 🔎 What
185+
186+
- 한 작업을 간단히 설명해주세요
187+
188+
## 🔗 Issue
189+
190+
- Closes: #이슈번호
191+
192+
## ✅ 체크리스트
193+
194+
- [ ] 브랜치 base가 적절한가요?
195+
- [ ] 제목이 이슈 제목과 동일한가요?
196+
- [ ] 최소 1명의 리뷰를 받았나요?
197+
```
198+
199+
> 템플릿 파일: [.github/PULL_REQUEST_TEMPLATE.md](.github/PULL_REQUEST_TEMPLATE.md)
200+
201+
202+
---
203+
204+
## ⚠️ 주의사항
205+
206+
- `.env` 파일은 절대 커밋하지 마세요 (`.gitignore`에 포함됨)
207+
- `main` 브랜치에 직접 push하지 마세요

0 commit comments

Comments
 (0)