Skip to content

Commit 41920e9

Browse files
authored
Merge pull request #170 from SEMOSAN/refactor/#169-readme
[Refactor] README 전면 개편 및 스크린샷 추가
2 parents 17b5afd + 695e8d9 commit 41920e9

9 files changed

Lines changed: 211 additions & 46 deletions

File tree

README.md

Lines changed: 211 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,229 @@
1-
# SEMOSAN_BE
1+
# SEMOSAN - 세모산 Backend
22

3-
세모산 백엔드 레포지토리입니다.
3+
<img src="assets/screenshots/semosan.png" alt="세모산 앱 소개" width="100%" />
4+
5+
<br />
6+
7+
> 등산이 처음이어도 괜찮아요.
8+
> 내 체력과 취향에 맞는 코스를 찾고, 실시간 안내와 기록, 후기까지
9+
> 더 가볍고 안전한 등산을 세모산과 함께 시작하세요.
10+
11+
<br />
12+
13+
## Architecture
14+
15+
```mermaid
16+
flowchart LR
17+
APP[React Native App] --> API[Spring Boot API]
18+
19+
API --> DB[(PostgreSQL + PostGIS)]
20+
API --> REDIS[(Redis Stream)]
21+
API --> MINIO[(MinIO)]
22+
23+
API --> KAKAO[Kakao OAuth]
24+
API --> FCM[Firebase FCM]
25+
26+
PROM[Prometheus] -->|Scrape /actuator/prometheus| API
27+
```
28+
29+
<br />
30+
31+
## API Docs
32+
33+
| 구분 | URL |
34+
|------|-----|
35+
| Swagger UI | `http://localhost:8080/swagger-ui.html` |
36+
| Health Check | `http://localhost:9090/actuator/health` |
37+
| Prometheus | `http://localhost:9090/actuator/prometheus` |
38+
39+
<br />
40+
41+
## 주요 기능
42+
43+
<table>
44+
<tr>
45+
<td align="center" width="33%">
46+
<img src="assets/screenshots/home-feed.png" alt="정복 지도" width="220" />
47+
<br /><br />
48+
<b>정복 지도</b>
49+
<br />
50+
<sub>사용자의 등산 기록과 정복한 산 데이터 제공</sub>
51+
</td>
52+
<td align="center" width="33%">
53+
<img src="assets/screenshots/semofeed.png" alt="세모피드" width="220" />
54+
<br /><br />
55+
<b>세모피드</b>
56+
<br />
57+
<sub>등산 후기 피드, 이모지 반응, 알림 API 제공</sub>
58+
</td>
59+
<td align="center" width="33%">
60+
<img src="assets/screenshots/mountains.png" alt="산 탐색" width="220" />
61+
<br /><br />
62+
<b>산 목록</b>
63+
<br />
64+
<sub>산/코스 조회, 거리, 고도, 소요 시간 데이터 제공</sub>
65+
</td>
66+
</tr>
67+
<tr>
68+
<td align="center" width="33%">
69+
<img src="assets/screenshots/tracking.png" alt="GPS 트래킹" width="220" />
70+
<br /><br />
71+
<b>실시간 GPS 트래킹</b>
72+
<br />
73+
<sub>WebSocket 기반 위치 수집 및 트래킹 세션 관리</sub>
74+
</td>
75+
<td align="center" width="33%">
76+
<img src="assets/screenshots/community.png" alt="커뮤니티" width="220" />
77+
<br /><br />
78+
<b>커뮤니티</b>
79+
<br />
80+
<sub>게시글, 댓글, 좋아요, 신고, 차단 기능 제공</sub>
81+
</td>
82+
<td align="center" width="33%">
83+
<img src="assets/screenshots/mypage.png" alt="내 기록" width="220" />
84+
<br /><br />
85+
<b>마이페이지</b>
86+
<br />
87+
<sub>회원 정보, 등산 이력, 난이도 피드백 관리</sub>
88+
</td>
89+
</tr>
90+
</table>
91+
92+
<br />
493

594
## 기술 스택
695

96+
### Backend
97+
- **Java 21**
98+
- **Spring Boot 3.5.13**
99+
- **Spring Web MVC** - REST API
100+
- **Spring Security** - 인증/인가
101+
- **Spring Data JPA** - ORM
102+
- **Spring Validation** - 요청 검증
103+
104+
### Database & Storage
105+
- **PostgreSQL**
106+
- **PostGIS** - 위치/공간 데이터 처리
107+
- **Flyway** - DB 마이그레이션
108+
- **Redis** - 캐시 및 트래킹 스트림
109+
- **MinIO** - 이미지 객체 스토리지
110+
111+
### 인증 & 외부 연동
112+
- **Kakao OAuth**
113+
- **JWT** (`jjwt`)
114+
- **Firebase Admin SDK** - FCM 푸시 알림
115+
- **Spring WebFlux WebClient** - 외부 API 호출
116+
117+
### 실시간 & 모니터링
118+
- **Spring WebSocket** + **STOMP** - 실시간 GPS 데이터 수신
119+
- **Spring Boot Actuator**
120+
- **Prometheus**
121+
- **Logstash Logback Encoder** - Loki 연동용 JSON 로그
122+
123+
### API 문서
124+
- **Springdoc OpenAPI / Swagger UI**
125+
126+
<br />
127+
128+
## 프로젝트 구조
129+
130+
```text
131+
src/main/java/com/semosan/api/
132+
ApiApplication.java
133+
common/ # 공통 설정, 응답, 예외, JWT, FCM
134+
domain/
135+
appversion/ # 앱 버전 관리
136+
auth/ # 인증, 회원 탈퇴 정리
137+
oauth/ # 카카오 OAuth 연동
138+
user/ # 회원, 온보딩, 차단
139+
mountain/ # 산/코스 조회, 코스 좋아요
140+
tracking/ # GPS 트래킹, WebSocket, 스케줄러
141+
hiking/ # 등산 기록, 난이도 피드백
142+
semofeed/ # 세모피드, 이모지, 알림
143+
community/ # 게시글, 댓글, 좋아요, 신고, 알림
144+
notification/ # 앱 알림
145+
image/ # 이미지 업로드
146+
review/ # 리뷰 도메인
147+
148+
src/main/resources/
149+
application.yaml # 공통 설정
150+
application-local.yaml # 로컬 프로필 설정
151+
application-prod.yaml # 운영 프로필 설정
152+
db/migration/ # Flyway 마이그레이션
153+
firebase/ # Firebase 서비스 계정 파일
154+
155+
k8s/ # Kubernetes 배포 리소스
156+
.github/workflows/ # GitHub Actions
157+
```
158+
159+
<br />
160+
161+
## 시작하기
162+
163+
### 요구사항
164+
7165
- Java 21
8-
- Spring Boot 3.5.13
9166
- PostgreSQL + PostGIS
10167
- Redis
168+
- MinIO
169+
- Gradle Wrapper 사용 권장
11170

12-
---
171+
### 설치
13172

14-
## 브랜치 전략
173+
```bash
174+
git clone https://github.com/SEMOSAN/SEMOSAN_BE.git
175+
cd SEMOSAN_BE
176+
```
177+
178+
### 로컬 실행
179+
180+
로컬 프로필은 기본값으로 활성화됩니다.
181+
182+
```bash
183+
./gradlew bootRun
184+
```
185+
186+
### 테스트
187+
188+
```bash
189+
./gradlew test
190+
```
191+
192+
특정 테스트만 실행할 때는 다음 형식을 사용합니다.
15193

194+
```bash
195+
./gradlew test --tests com.semosan.api.domain.mountain.service.MountainServiceTest
16196
```
197+
198+
<br />
199+
200+
## 개발 규칙
201+
202+
- Java 21, Spring Boot 3.5.x 기준으로 개발합니다.
203+
- 기능은 기존 `domain/*` 패키지 구조를 따릅니다.
204+
- 공통 응답, 예외, 상태 코드는 `common/`의 기존 규칙을 우선 사용합니다.
205+
- DB 스키마 변경은 `src/main/resources/db/migration/`에 Flyway 마이그레이션으로 추가합니다.
206+
- 비즈니스 규칙, payload 생성, 검증 로직을 중복 작성하지 않습니다.
207+
- 좁은 변경은 관련 테스트를 먼저 실행하고, 필요 시 전체 테스트를 실행합니다.
208+
- 민감한 값은 커밋하지 않고 환경 변수 또는 배포 Secret으로 관리합니다.
209+
210+
<br />
211+
212+
## 브랜치 전략
213+
214+
```text
17215
feat/#이슈번호-기능명
18216
fix/#이슈번호-버그명
19217
```
20218

21-
**예시**
22-
```
219+
예시:
220+
221+
```text
23222
feat/#12-mountain-search
24223
fix/#34-trail-query-bug
25224
```
26225

27-
---
226+
<br />
28227

29228
## 커밋 컨벤션
30229

@@ -37,50 +236,16 @@ fix/#34-trail-query-bug
37236
| `test` | 테스트 코드 |
38237
| `chore` | 빌드, 설정 변경 |
39238

40-
**예시**
41-
```
239+
예시:
240+
241+
```text
42242
feat: 산 검색 API 추가
43243
fix: 등산로 조회 쿼리 오류 수정
44244
```
45245

46-
---
246+
<br />
47247

48248
## PR 규칙
49249

50250
- 리뷰어: 본인 제외 **2명 전원 승인** 후 머지
51251
- 셀프 머지 금지
52-
53-
---
54-
55-
## Claude Code 사용 가이드
56-
57-
### 팀 공유 스킬 위치
58-
59-
팀에서 공유하는 커스텀 명령어(스킬)는 `.claude/commands/` 폴더에서 관리합니다.
60-
61-
```
62-
.claude/
63-
└── commands/
64-
└── {스킬명}.md
65-
```
66-
67-
### 스킬 추가하는 법
68-
69-
1. `.claude/commands/` 폴더에 `스킬명.md` 파일 생성
70-
2. 파일 안에 프롬프트 작성
71-
3. git에 커밋 후 push → 팀원들이 pull하면 자동으로 공유됨
72-
73-
**예시** `.claude/commands/review.md`
74-
```markdown
75-
이 PR의 코드를 리뷰해줘.
76-
- 보안 취약점 확인
77-
- 네이밍 컨벤션 확인
78-
- 불필요한 코드 확인
79-
```
80-
81-
터미널에서 `/review` 로 호출 가능.
82-
83-
### CLAUDE.md 관리
84-
85-
프로젝트 루트의 `CLAUDE.md`는 Claude Code가 자동으로 읽는 팀 공통 가이드입니다.
86-
기술 스택, 컨벤션, 주의사항 등 Claude에게 알려줄 내용을 여기에 작성합니다.

assets/screenshots/community.png

1.25 MB
Loading

assets/screenshots/home-feed.png

226 KB
Loading
320 KB
Loading

assets/screenshots/mountains.png

929 KB
Loading

assets/screenshots/mypage.png

450 KB
Loading

assets/screenshots/semofeed.png

320 KB
Loading

assets/screenshots/semosan.png

350 KB
Loading

assets/screenshots/tracking.png

280 KB
Loading

0 commit comments

Comments
 (0)