Skip to content

Commit 6998b3c

Browse files
committed
Merge branch 'develop' into release-server
2 parents c3ba04a + f2c32aa commit 6998b3c

45 files changed

Lines changed: 1152 additions & 180 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/CLAUDE.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 모노레포 가이드라인 (루트)
2+
3+
## 구성
4+
5+
이 저장소는 "길벗" 서비스의 `android/`(Kotlin/Compose 앱)와 `backend/`(Spring Boot API)를
6+
함께 담은 모노레포다. 각 모듈은 자체 `.claude/CLAUDE.md`를 갖고 있어(`android/.claude/CLAUDE.md`,
7+
`backend/.claude/CLAUDE.md`) 해당 디렉터리 아래에서 작업할 때 자동으로 함께 적용된다.
8+
9+
## Claude Code 세션 실행 관행
10+
11+
Claude Code 세션은 **항상 저장소 루트**(`2026-capstone-26/`)에서 실행한다. Claude Code가
12+
`backend/.claude/`, `android/.claude/`를 하위 디렉터리 스코프로 자동 인식하므로, 모듈별로
13+
세션을 나눌 필요가 없다 — `backend/` 파일을 다룰 때는 `backend/.claude/CLAUDE.md`
14+
`backend/.claude/rules/`, `backend/.claude/skills/`가, `android/` 파일을 다룰 때는
15+
`android/.claude/CLAUDE.md`가 자동으로 함께 적용된다. 두 모듈을 넘나드는 작업(예: API 스펙
16+
변경이 앱에 미치는 영향 확인)도 한 세션에서 처리할 수 있다.
17+
18+
## 커밋 정책 (필수)
19+
20+
**사용자가 명시적으로 커밋하라고 지시하기 전까지는 절대 `git commit`(및 `git push`)을 실행하지
21+
않는다.** 코드/문서/설정 변경을 완료했더라도, 그 자체가 커밋 승인을 의미하지 않는다. Plan
22+
Mode에서 계획에 커밋 단계가 포함되어 사용자가 그 계획을 승인한 경우는 예외적으로 해당
23+
커밋들에 한해 명시적 지시로 간주하되, 그 외의 모든 상황에서는 변경 후 반드시 커밋 여부를
24+
먼저 물어보거나 사용자의 명령을 기다린다. `android/`, `backend/` 모두 동일하게 적용된다.
25+
26+
## 공용 Git & GitHub 규칙
27+
28+
`android/`, `backend/` 모두에 적용되는 공용 규칙은 이 디렉터리(`.claude/rules/`)에 둔다.
29+
모듈 전용 규칙(예: backend의 RDS 접속 절차)은 각 모듈의 `.claude/rules/`에 남아 있다.
30+
31+
- 커밋 메시지 형식·브랜치 명명: [git-commit.md](rules/git-commit.md)
32+
- 이슈 작성 구조: [github-issue.md](rules/github-issue.md)
33+
- PR 작성 구조: [github-pr.md](rules/github-pr.md)
34+
35+
### 모듈별 라벨
36+
37+
이슈/PR을 만들 때 작업 대상 모듈에 따라 라벨을 다르게 붙인다.
38+
39+
| 작업 대상 | 라벨 |
40+
|------------|---------|
41+
| `backend/` | `💻BE` |
42+
| `android/` | `📱AND` |
43+
44+
## GitHub 템플릿
45+
46+
`.github/ISSUE_TEMPLATE/이슈-템플릿.md`, `.github/pull_request_template.md`
47+
`android/`, `backend/` 공용 템플릿이다. GitHub은 저장소 루트의 `.github/`만 인식하므로,
48+
모듈별로 별도 템플릿을 두지 않는다.
49+
50+
## 포트폴리오 관점 제안
51+
52+
- 이 저장소는 개발자 취업을 위한 포트폴리오로 사용됩니다.
53+
- 작업 중 단순 구현을 넘어 포트폴리오에서 어필 가능한 개선점(테스트/CI 강화, 코드 품질 자동화, 아키텍처 개선, 성능 개선 사항, 트러플 슈팅, 기술적 의사결정 포인트 등)
54+
을 발견하면 코드를 임의로 고치지 말고 최종 응답에서 제안합니다.
Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
## 커밋 메시지 형식
2727

2828
```
29-
<type> #<이슈번호>: <한국어 설명>
29+
<type> : <한국어 설명>
3030
```
3131

3232
작업이 특정 이슈에 연결되지 않는 경우에만 이슈 번호를 생략한다.
@@ -40,18 +40,23 @@
4040
추가한다. [중요]대부분의 커밋은 제목 한 줄로 끝난다.
4141
- 이슈/커밋 관련 CLAUDE.md 공통 규칙(예외 메시지·로그·테스트 메서드명은 한국어)도 함께 지킨다.
4242

43-
## 브랜치 명명
43+
## 프로세스
4444

45-
```
46-
<type>/#<이슈번호>-<slug>
47-
```
45+
1. 스테이지된 파일 확인, 스테이지된 파일이 있으면 해당 파일만 커밋
46+
2. 여러 논리적 변경사항에 대한 diff 분석
47+
3. 필요시 분할 제안
4848

49-
이슈 번호가 없는 작업(문서 정리, 잡일성 chore 등)은 이슈 번호를 생략한다.
49+
## 브랜치 명명
5050

5151
```
5252
<type>/<slug>
5353
```
5454

55-
예시: `feat/#38-weekly`, `fix/#4-place-search`, `docs/readme`, `chore/gitignore`.
56-
55+
예시: `docs/readme`, `chore/gitignore`.
5756
`slug`는 영어 kebab-case로, 무엇을 하는 브랜치인지 간단히 드러나게 짓는다.
57+
58+
## 참고사항
59+
60+
- 스테이지된 파일이 있으면 해당 파일만 커밋
61+
- 분할 제안을 위한 diff 분석
62+
- **커밋에 Claude 서명 절대 추가하지 않음**
Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
# 이슈 작성 규칙
22

33
이 저장소(모노레포 루트 `2026-capstone-26`)의 `.github/ISSUE_TEMPLATE/이슈-템플릿.md`
4-
실제 이슈 템플릿이다. `backend/`는 이 루트 저장소의 하위 디렉터리이므로 GitHub이 이 템플릿을
5-
그대로 적용한다. `.github/ISSUE_TEMPLATE/config.yml`에서 `blank_issues_enabled: false`
6-
설정되어 있어, 템플릿 없이 빈 이슈를 만드는 것 자체가 막혀 있다.
4+
`backend/`, `android/` 작업 공용 이슈 템플릿이다. GitHub은 저장소 루트의 `.github/`
5+
인식하므로, `backend/``android/` 어느 쪽에서 작업하든 이 루트 템플릿이 그대로 적용된다.
6+
`.github/ISSUE_TEMPLATE/config.yml`에서 `blank_issues_enabled: false`로 설정되어 있어,
7+
템플릿 없이 빈 이슈를 만드는 것 자체가 막혀 있다.
78

89
## 제목 형식
910

@@ -20,8 +21,13 @@
2021

2122
## 라벨
2223

23-
`backend/` 작업으로 만드는 이슈에는 항상 `💻BE` 라벨을 붙인다. 템플릿의 `labels: ''`
24-
기본값이 없다는 뜻이므로, `gh issue create --label "💻BE"`처럼 직접 지정해야 한다.
24+
작업 대상 모듈에 따라 라벨을 다르게 붙인다.
25+
26+
- `backend/` 아래 작업으로 만드는 이슈 → 항상 `💻BE` 라벨
27+
- `android/` 아래 작업으로 만드는 이슈 → 항상 `📱AND` 라벨
28+
29+
템플릿의 `labels: ''`는 기본값이 없다는 뜻이므로, `gh issue create --label "💻BE"` /
30+
`gh issue create --label "📱AND"`처럼 직접 지정해야 한다.
2531

2632
## 본문 구조 (실제 템플릿)
2733

@@ -48,3 +54,15 @@
4854
이슈를 새로 만들면 GitHub이 부여한 번호를 이후 커밋/브랜치/PR에서 일관되게 사용한다.
4955
자세한 커밋·브랜치 형식은 [git-commit.md](git-commit.md), PR에서 이슈를 닫는 방법은
5056
[github-pr.md](github-pr.md) 참고.
57+
58+
## 초안 작성 워크플로우
59+
60+
사용자가 이슈 작성을 요청하면:
61+
62+
- 이슈 본문 마크다운 전체를 대화창에 그대로 출력하지 않는다. 스크래치패드(세션의 임시 파일
63+
디렉터리)에 `.md` 파일로 작성하고, 그 파일 경로만 짧게 안내한다.
64+
- 사용자가 그 파일을 직접 열어 수정할 수 있다는 전제로 대기한다.
65+
- "올려줘"/"게시해줘"처럼 명시적으로 게시를 지시받으면, 그 시점에 파일을 다시 읽어(사용자가
66+
수정했을 수 있으므로 항상 최신 내용을 반영) `gh issue create --body-file <경로>`로 그대로
67+
게시한다. 이미 알고 있는 이전 버전 내용을 임의로 다시 쓰지 않는다.
68+
- 명시적 게시 지시 전까지는 `gh issue create`를 절대 실행하지 않는다.

.claude/rules/github-pr.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# PR 작성 규칙
2+
3+
이 저장소(모노레포 루트 `2026-capstone-26`)의 `.github/pull_request_template.md`
4+
`backend/`, `android/` 작업 공용 PR 템플릿이다. GitHub은 저장소 루트의 `.github/`
5+
인식하므로, `backend/``android/` 어느 쪽에서 작업하든 이 루트 템플릿이 자동으로 채워진다.
6+
7+
## 병합 방식
8+
9+
기존 관례(일반 merge, squash 아님)를 유지한다. 커밋 이력을 보존하는 방식이므로,
10+
PR에 올라가는 개별 커밋 메시지도 [git-commit.md](git-commit.md) 형식을 지켜야
11+
merge 후 로그가 지저분해지지 않는다.
12+
13+
## 라벨
14+
15+
작업 대상 모듈에 따라 라벨을 다르게 붙인다.
16+
17+
- `backend/` 아래 작업으로 만드는 PR → 항상 `💻BE` 라벨
18+
- `android/` 아래 작업으로 만드는 PR → 항상 `📱AND` 라벨
19+
20+
PR 템플릿은 프론트매터가 없어 라벨을 지정할 방법이 없으므로, `gh pr create --label "💻BE"` /
21+
`gh pr create --label "📱AND"`처럼 직접 지정해야 한다.
22+
23+
## 제목 형식
24+
25+
```
26+
<type> : <한국어 요약>
27+
```
28+
29+
## 본문 구조 (실제 템플릿)
30+
31+
```markdown
32+
## 🛰️ Issue Number
33+
34+
## 🪐 작업 내용
35+
36+
## 📚 추가 리팩토링 가능성
37+
```
38+
39+
- **Issue Number**: 관련 이슈 번호(`#<번호>`)를 적는다. 템플릿 자체는 GitHub의 자동 종료
40+
키워드를 쓰지 않으므로, PR 병합과 동시에 이슈를 자동으로 닫고 싶으면 `closes #<번호>`처럼
41+
종료 키워드를 명시적으로 함께 적어야 한다. 이슈와 무관한 PR(잡일성 chore 등)이면 비워둔다.
42+
- **작업 내용**: 무엇을 왜 바꿨는지, 리뷰어가 알아야 할 설계/구현 포인트를 bullet로 정리한다.
43+
- **추가 리팩토링 가능성**: 이번 PR 범위 밖이지만 발견한 개선점을 남긴다. `backend/`
44+
작업이라면 `backend/.claude/CLAUDE.md`의 "포트폴리오 관점 제안" 규칙과 같은 맥락 —
45+
임의로 고치지 말고 여기에 적어 다음 작업으로 넘긴다.
46+
47+
## 작성 톤 & 가독성
48+
49+
- "작업 내용"이 길어지면 한 덩어리로 쓰지 말고 `###` 하위 섹션(예: `### 배경`, `### 변경 사항`,
50+
`### 테스트`)이나 `-` bullet으로 쪼갠다. 리뷰어가 스크롤 없이 훑을 수 있는 길이를 기준으로
51+
삼는다.
52+
53+
## 초안 작성 워크플로우
54+
55+
사용자가 pr 작성을 요청하면:
56+
57+
- PR 본문 마크다운 전체를 대화창에 그대로 출력하지 않는다. 스크래치패드(세션의 임시 파일
58+
디렉터리)에 `.md` 파일로 작성하고, 그 파일 경로만 짧게 안내한다.
59+
- 사용자가 그 파일을 직접 열어 수정할 수 있다는 전제로 대기한다.
60+
- "올려줘"/"게시해줘"처럼 명시적으로 게시를 지시받으면, 그 시점에 파일을 다시 읽어(사용자가
61+
수정했을 수 있으므로 항상 최신 내용을 반영) `gh pr create --body-file <경로>`로 그대로
62+
게시한다. 이미 알고 있는 이전 버전 내용을 임의로 다시 쓰지 않는다.
63+
- 명시적 게시 지시 전까지는 `gh pr create`를 절대 실행하지 않는다.
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
{
2+
"$schema": "https://json.schemastore.org/claude-code-settings.json",
23
"plansDirectory": "./.claude/plans/",
34
"outputStyle": "Explanatory",
45
"permissions": {
56
"defaultMode": "plan",
6-
"additionalDirectories": [
7-
"../"
8-
],
97
"deny": [
10-
"Read(./.env.local)"
8+
"Read(./backend/.env.local)"
119
]
1210
}
13-
}
11+
}

.gitignore

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ AGENTS.md
2424
agents.md
2525
.codex/
2626

27+
# Claude
28+
.claude/settings.local.json
29+
.claude/plans
30+
31+
/reference
32+
2733
# =========================
2834
# Android module (root-level safety)
2935
# =========================
@@ -54,21 +60,23 @@ android/**/*.dex
5460
# =========================
5561

5662
backend/.env.local
63+
backend/local.properties
5764
backend/build/
5865
backend/out/
5966
backend/target/
6067
backend/node_modules/
6168
backend/AGENTS.md
62-
backend/.claude/plans
6369
backend/.claude/rules/*.local.md
64-
backend/.claude/settings.local.json
70+
backend/.claude/plans/
6571
backend/.gradle
6672
backend/build
6773
backend/out
6874
backend/gilbut-firebase-adminsdk.json
75+
backend/docs/resume
76+
backend/.claude/skills/resume-bullet
77+
backend/.claude/skills/portfolio-ppt
6978
# test data
7079
/backend/src/test/resources/test-data
80+
/backend/portfolio
7181
# Keep placeholder
72-
!backend/.gitkeep
73-
74-
/reference
82+
!backend/.gitkeep

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767

6868
<div align="center">
6969

70-
![img.png](docs/images/img_6.png)
70+
![img.png](docs/images/서비스 아키텍처.png)
7171
</div>
7272

7373
<br>

android/.claude/CLAUDE.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# 저장소 가이드라인
2+
3+
## 목적
4+
5+
이 파일은 `android/`에서 작업하는 기여자와 코딩 에이전트를 위한 로컬 작업 규칙을 정의합니다.
6+
7+
## 프로젝트 개요
8+
9+
"길벗"은 위치 데이터를 수집해 사용자에게는 기억 보조를, 보호자에게는 안심 확인을 제공하는 서비스입니다.
10+
이동 경로 기록/조회, 15분 이상 체류한 장소 자동 저장, 외출·귀가 시각 기록, 개인 메모, 보호자의 실시간 위치 확인과 요약 통계 조회가 핵심 기능입니다.
11+
이 앱(API 24+)은 `backend/`의 Spring Boot 백엔드와 통신하며 Kakao/Google 지도 API를 연동합니다.
12+
13+
## 기술 스택
14+
15+
- Kotlin + Jetpack Compose(`kotlin.compose` 플러그인), KSP
16+
- minSdk 24 / compileSdk·targetSdk 36, JVM 17
17+
- Kakao OAuth(`kakao.nativeAppKey`) 로그인, Google Maps API 연동
18+
- 시크릿(`kakao.nativeAppKey`, `app.baseUrl`, `google.mapsApiKey`)은 `local.properties`로 관리(커밋 금지)
19+
20+
## 코드/UI 규칙
21+
22+
상세 네이밍(Route/Screen/ViewModel/UiState/Effect), 문자열 규칙(하드코딩 금지, `stringResource`,
23+
UI 카피 한국어 우선), UI State 패턴(`AsyncUiState<T>`), 기능 폴더 구조는
24+
[DEVELOPMENT_GUIDELINES.md](../DEVELOPMENT_GUIDELINES.md)를 참고합니다.
25+
26+
라우트/장소/카메라/권한/daynote 저장 정책 등 앱 사이드 정책의 단일 소스는
27+
[docs/global-policy.md](../docs/global-policy.md)입니다.
28+
29+
## Git & GitHub Workflow
30+
31+
`backend/`와 공용으로 쓰는 규칙이라 저장소 루트 `.claude/rules/`에 있습니다.
32+
33+
- 커밋 메시지 형식과 브랜치 명명 규칙: [../../.claude/rules/git-commit.md](../../.claude/rules/git-commit.md) 참고.
34+
- 이슈 작성 구조: [../../.claude/rules/github-issue.md](../../.claude/rules/github-issue.md) 참고.
35+
- PR 작성 구조: [../../.claude/rules/github-pr.md](../../.claude/rules/github-pr.md) 참고. android 작업 이슈/PR 라벨은 `📱AND`.
36+
37+
## 작업 스타일
38+
39+
- 편집하기 전에 관련 코드와 컨텍스트를 조사합니다.
40+
- 새로운 추상화를 도입하기 전에 기존 패턴(Route/Screen/ViewModel/UiState)을 재사용합니다.
41+
- 커밋 정책(사용자가 명시적으로 지시하기 전까지 절대 커밋/푸시하지 않음)은
42+
[../../.claude/CLAUDE.md](../../.claude/CLAUDE.md)의 "커밋 정책" 참고.

android/.github/ISSUE_TEMPLATE/이슈-템플릿.md

Lines changed: 0 additions & 14 deletions
This file was deleted.

android/.github/pull_request_template.md

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)