Skip to content

Commit 373484f

Browse files
authored
Create DEV_GUIDE.md (#158)
1 parent 5b14c64 commit 373484f

File tree

1 file changed

+203
-0
lines changed

1 file changed

+203
-0
lines changed

DEV_GUIDE.md

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
# ZoopZoop 백엔드 개발 컨벤션
2+
3+
---
4+
5+
## 1. 기본 규칙
6+
7+
- **언어** : Java
8+
- **변수명 규칙** : camelCase
9+
- **Merge 방식** : Squash & Merge
10+
11+
---
12+
13+
## 2. 이슈 템플릿
14+
15+
### 분류
16+
17+
- `design` : UI 관련 (프론트엔드)
18+
- `fix` : 버그 수정
19+
- `feat` : 기능 추가
20+
- `refactor` : 리팩토링
21+
- `chore` : 문서, 환경 설정 등
22+
23+
### 이슈 네이밍 규칙
24+
25+
- `[분류] 작업 제목`
26+
- EX: `[feat] 로그인 쿠키 설정`
27+
28+
---
29+
30+
## 3. 지라 티켓
31+
32+
- 레이블은 기존과 동일하게 사용
33+
- 티켓 네이밍 규칙: `[BE] 분류 : 작업 제목`
34+
- EX: `[BE] feat : 로그인 쿠키 설정`
35+
36+
---
37+
38+
## 4. 브랜치 전략
39+
40+
### 네이밍 규칙
41+
42+
- 형식: `{분류}#{이슈 번호}`
43+
- EX: `feat#19` (19번 이슈에서 파생된 브랜치)
44+
45+
### 전략
46+
47+
- **main** : 메인 서버 자동 배포, 고정 브랜치
48+
- **develop** : 내부 테스트 서버 자동 배포, 고정 브랜치
49+
- **feature** : 각 기능 개발마다 생성/삭제
50+
- **hotfix** : 긴급 수정 시 생성/삭제
51+
52+
### 지라 연동
53+
54+
- 형식: `분류/지라 디폴트 생성 브랜치명`
55+
- EX: `feat/OPS-87-FE-필터링`
56+
57+
---
58+
59+
## 5. 커밋 메시지 규칙
60+
61+
- 분류
62+
- `design` : UI
63+
- `fix` : 버그 수정
64+
- `feat` : 기능 추가
65+
- `refactor` : 리팩토링
66+
- `chore` : 문서, 환경 설정
67+
- `docs` : 주석, 문서화 처리
68+
- `new` : 새로운 파일 생성
69+
70+
- 복수 성격인 경우 핵심 키워드 하나만 사용
71+
- 지라 연동: `분류/지라 티켓 키 : 내용`
72+
- EX: `feat/PROJ-123 : implement login service`
73+
74+
---
75+
76+
## 6. PR 템플릿
77+
78+
### 네이밍
79+
80+
- PR 이름: 이슈 이름
81+
- EX: `[feat] 로그인 쿠키 설정`
82+
83+
### 코드 리뷰
84+
85+
- **develop**: 페어 개발자 검토 (부재 시 팀장 대행), 자동 CI
86+
- **main**: 팀장 주도 확인, 자동 CI/CD
87+
- 지라 연동: `[분류/지라 티켓 키] 이슈 이름`
88+
예: `[feat/PROJ-123] 로그인 쿠키 설정`
89+
90+
---
91+
92+
## 7. 티켓 상태 관리
93+
94+
- `Backlog` : 시작 전
95+
- `Ready` : 작업자 지정, 시작 가능
96+
- `In progress` : 개발 중
97+
- `In review` : PR 작성 및 검토 중
98+
- `Done` : 완료
99+
100+
### 작업 순서
101+
102+
1. Issue 생성 → 상태: `Backlog`, Labels/Projects 설정
103+
2. Assignee 지정 → 상태 변경: `Ready`
104+
3. 개발 시작 → 상태: `In progress`, 브랜치 생성
105+
4. 브랜치에서 작업 진행
106+
5. PR 생성 → 상태: `In review`
107+
6. PR 머지 후 → Issue & PR `Done`, 브랜치 삭제
108+
109+
---
110+
111+
## 8. 폴더 구조 규칙
112+
113+
```text
114+
com
115+
└── back
116+
├── domain
117+
│ ├── member
118+
│ └── team
119+
│ ├── repository
120+
│ ├── service
121+
│ ├── controller
122+
│ ├── entity
123+
│ └── dto
124+
└── global
125+
```
126+
- domain 하위 depth는 1 유지 (필요 시 리팩토링)
127+
128+
---
129+
130+
## 9. DTO 규칙
131+
### 규칙
132+
- Controller 단에서 request/response body와 매칭되는 경우 DTO 사용
133+
- Response body는 최소 정보 전달 (id 등 내부 키값은 숨김)
134+
- Service 단에서는 DTO 재활용 지양
135+
- Controller DTO와 별도 정의
136+
- 필요한 경우 주석 충실히 작성
137+
138+
### 네이밍
139+
- reqBodyFor~ : Request Body DTO
140+
- resBodyFor~ : Response Body DTO
141+
142+
---
143+
144+
## 10. 테스트 코드 컨벤션
145+
146+
- 형식: given-when-then
147+
148+
- Controller 단에서 단위 테스트 작성
149+
- Service 핵심 메서드 단위 테스트 작성
150+
- 예외 케이스, 엣지 케이스 포함
151+
152+
---
153+
154+
## 11. 예외 처리 방식
155+
156+
- 에러 코드: 개발 진행 중 판단
157+
158+
- 핵심 에러는 global 핸들러 사용
159+
160+
---
161+
162+
## 12. 보안 처리
163+
164+
- Spring Security 사용
165+
166+
- Secrets 값 관리
167+
168+
- 개발 환경: application-secret.yml (gitignore)
169+
170+
- 운영 환경: Github Secrets, CI/CD에서 컨테이너 환경 변수로 입력
171+
172+
---
173+
174+
## 13. 문서화 컨벤션
175+
176+
- OpenAPI: Swagger 사용
177+
178+
- Controller, DTO, Entity에 API 어노테이션 충실
179+
180+
- 주석 처리: Javadoc 스타일
181+
182+
```java
183+
/**
184+
* @param aa
185+
* @param bb
186+
* @param cc
187+
*/
188+
```
189+
190+
---
191+
192+
## 14. HTTP 응답 양식
193+
```json
194+
{
195+
"status": 200,
196+
"msg": "사용자 정보를 조회했습니다.",
197+
"data": {
198+
"name": "$name",
199+
"profileUrl": "$profileUrl"
200+
}
201+
}
202+
```
203+
- 성공/실패 관계 없이 RsData 형태로 반환

0 commit comments

Comments
 (0)