Skip to content

Commit e6bbbea

Browse files
authored
Merge pull request #325 from prgrms-web-devcourse-final-project/docs/readme-update
[DOCS] 프로젝트 README 문서 추가
2 parents 90dd79a + 714a457 commit e6bbbea

1 file changed

Lines changed: 276 additions & 0 deletions

File tree

README.md

Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
# 🎵 내 콘서트를 부탁해 (NCB) - Backend
2+
3+
> 예매부터 뒤풀이까지, 공연 관람의 하루를 관리하는 올인원 플랫폼
4+
5+
<img width="1920" height="1080" alt="4-기획 의도" src="https://github.com/user-attachments/assets/92b94aa5-6ca3-4be5-acdd-509b6c7c8116" />
6+
7+
---
8+
9+
# 📌 Project Overview
10+
11+
<img width="1920" height="1080" alt="5-프로젝트 개요" src="https://github.com/user-attachments/assets/94c2d2ab-a6fd-465c-a728-d001ed5a8e79" />
12+
13+
14+
# 🚀 Main Features
15+
16+
### 공연 탐색
17+
18+
- Kopis API 기반 공연 데이터 조회
19+
- 공연 일자 / 조회수 기준 정렬
20+
- 무한 스크롤 기반 공연 목록 제공
21+
- 공연 검색 기능
22+
23+
### 검색 자동완성
24+
25+
- Redis 기반 자동완성 검색
26+
- 공연 제목 역인덱스 구조 활용
27+
- 조회수 기반 검색 결과 노출
28+
29+
### 아티스트 정보 제공
30+
31+
외부 API를 활용하여 아티스트 정보를 수집하고 제공합니다.
32+
33+
사용 API
34+
35+
- Spotify API
36+
- Wikidata API
37+
- MusicBrainz API
38+
39+
제공 정보
40+
41+
- 아티스트 소개
42+
- 인기 트랙
43+
- 인기 앨범
44+
- 팔로워 수 / 인기도
45+
- 유사 아티스트
46+
47+
Spotify와 연동되어 **앨범 클릭 시 Spotify 스트리밍 페이지로 이동**합니다.
48+
49+
### 실시간 채팅
50+
51+
WebSocket + STOMP 기반 채팅 기능
52+
53+
- 실시간 채팅 메시지 송수신
54+
- 채팅 메시지 저장 및 조회
55+
- 채팅방 접속자 수 관리
56+
- 채팅방 참여자 관리
57+
58+
Redis를 활용하여
59+
60+
- Redis Stream → 메시지 저장
61+
- Redis Set → 접속자 관리
62+
63+
### 공연 일정 플래너
64+
65+
공연 당일 일정을 관리하고 공유할 수 있는 기능
66+
67+
- 공연 일정 생성 및 관리
68+
- 장소 기반 일정 계획
69+
- 공유 링크 생성
70+
- UUID 기반 공유 토큰
71+
- 1일 후 자동 만료
72+
73+
### 권한 관리
74+
75+
플래너 참여자 권한 관리
76+
77+
권한 유형
78+
79+
- OWNER
80+
- EDITOR
81+
- VIEWER
82+
83+
각 권한에 따라 조회 / 수정 / 삭제 권한이 다르게 적용됩니다.
84+
85+
### 지도 기반 장소 탐색
86+
87+
외부 지도 API 활용
88+
89+
사용 API
90+
91+
- Kakao Map API
92+
- Kakao Mobility API
93+
- TMAP API
94+
95+
제공 기능
96+
97+
- 공연장 주변 카페 / 맛집 검색
98+
- 대중교통 길찾기
99+
- 도보 / 차량 이동 시간 계산
100+
101+
---
102+
103+
# 🏗 System Architecture
104+
<img width="1920" height="1080" alt="투표 _ 박상아 _ 변수연 _ 최병준 _ 김민석 _ 이혜지 _ 김윤수 Codecrete" src="https://github.com/user-attachments/assets/a7513e8e-dfe1-4a9d-a506-58761133fe73" />
105+
106+
107+
# 🛠 Tech Stack
108+
109+
### Backend
110+
![Java](https://img.shields.io/badge/Java-17-007396?style=for-the-badge&logo=java&logoColor=white)
111+
![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.0-6DB33F?style=for-the-badge&logo=springboot&logoColor=white)
112+
![Spring Data JPA](https://img.shields.io/badge/Spring_Data_JPA-6DB33F?style=for-the-badge)
113+
![Hibernate](https://img.shields.io/badge/Hibernate-59666C?style=for-the-badge&logo=hibernate&logoColor=white)
114+
![JWT](https://img.shields.io/badge/JWT-Authentication-000000?style=for-the-badge&logo=jsonwebtokens&logoColor=white)
115+
![WebSocket](https://img.shields.io/badge/WebSocket-STOMP-010101?style=for-the-badge)
116+
117+
### Database
118+
![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white)
119+
![Redis](https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white)
120+
121+
### Infrastructure
122+
![AWS EC2](https://img.shields.io/badge/AWS_EC2-FF9900?style=for-the-badge&logo=amazon-ec2&logoColor=white)
123+
![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white)
124+
125+
### DevOps
126+
![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white)
127+
128+
### External API
129+
![Kopis API](https://img.shields.io/badge/Kopis_API-000000?style=for-the-badge)
130+
![Spotify API](https://img.shields.io/badge/Spotify_API-1DB954?style=for-the-badge&logo=spotify&logoColor=white)
131+
![Kakao Map](https://img.shields.io/badge/Kakao_Map_API-FFCD00?style=for-the-badge)
132+
![TMAP API](https://img.shields.io/badge/TMAP_API-FF4F00?style=for-the-badge)
133+
134+
---
135+
136+
## 📂 Project Structure
137+
138+
```text
139+
src
140+
├─ main
141+
│ ├─ java
142+
│ │ └─ com.back.web7_9_codecrete_be
143+
│ │ ├─ domain # 도메인별 비즈니스 로직
144+
│ │ │ ├─ auth
145+
│ │ │ ├─ users
146+
│ │ │ ├─ concerts
147+
│ │ │ ├─ artists
148+
│ │ │ ├─ community
149+
│ │ │ ├─ chats
150+
│ │ │ ├─ plans
151+
│ │ │ └─ location
152+
│ │ ├─ global # 공통 설정 및 인프라
153+
│ │ │ ├─ config
154+
│ │ │ ├─ security
155+
│ │ │ ├─ error
156+
│ │ │ ├─ redis
157+
│ │ │ ├─ scheduler
158+
│ │ │ └─ websocket
159+
│ │ └─ Web79CodecreteBeApplication
160+
│ └─ resources
161+
│ └─ application.yml
162+
163+
```
164+
---
165+
166+
# 👥 Backend Team
167+
<img width="855" height="484" alt="screencapture-miricanvas-v2-ko-design2-139b13ea-a2b5-4b45-a015-0ad51e6e0d34-2026-03-17-17_36_17" src="https://github.com/user-attachments/assets/db33fbb4-8823-4c77-830d-cb7fc1e871cb" />
168+
169+
---
170+
## 🐳 Docker 실행 방법
171+
172+
이 프로젝트는 **MySQL 8.0****Redis 7.2**를 Docker Compose로 실행합니다.
173+
로컬 개발 환경에서 데이터베이스와 캐시 서버를 쉽게 구성할 수 있습니다.
174+
175+
---
176+
177+
## 1️⃣ 환경 변수 설정
178+
179+
프로젝트 루트에 `.env` 파일을 생성하고 아래 내용을 작성합니다.
180+
181+
```env
182+
MYSQL_PORT=3306
183+
MYSQL_ROOT_PASSWORD=root
184+
MYSQL_DATABASE=concert
185+
MYSQL_USER=user
186+
MYSQL_PASSWORD=password
187+
188+
REDIS_PORT=6379
189+
```
190+
191+
`.env` 파일은 `docker-compose.yml`에서 사용하는 환경 변수입니다.
192+
193+
---
194+
195+
## 2️⃣ Docker 컨테이너 실행
196+
197+
아래 명령어로 MySQL과 Redis 컨테이너를 실행합니다.
198+
199+
```bash
200+
docker compose up -d
201+
```
202+
203+
옵션 설명
204+
205+
| 옵션 | 설명 |
206+
|---|---|
207+
| up | 컨테이너 실행 |
208+
| -d | 백그라운드 실행 |
209+
210+
---
211+
212+
## 3️⃣ 실행 상태 확인
213+
214+
```bash
215+
docker ps
216+
```
217+
218+
정상적으로 실행되면 다음과 같은 컨테이너가 실행됩니다.
219+
220+
| Container | Service |
221+
|---|---|
222+
| concert-mysql | MySQL 8.0 |
223+
| concert-redis | Redis 7.2 |
224+
225+
---
226+
227+
## 4️⃣ 로그 확인
228+
229+
문제가 발생했을 경우 로그를 확인할 수 있습니다.
230+
231+
```bash
232+
docker compose logs
233+
```
234+
235+
특정 서비스 로그 확인
236+
237+
```bash
238+
docker compose logs mysql
239+
docker compose logs redis
240+
```
241+
242+
---
243+
244+
## 5️⃣ 컨테이너 종료
245+
246+
```bash
247+
docker compose down
248+
```
249+
250+
---
251+
252+
## 6️⃣ 데이터 유지 (Volume)
253+
254+
MySQL과 Redis 데이터는 Docker Volume에 저장됩니다.
255+
256+
| Volume | 설명 |
257+
|---|---|
258+
| mysql-data | MySQL 데이터 저장 |
259+
| redis-data | Redis 데이터 저장 |
260+
261+
컨테이너를 삭제해도 데이터는 유지됩니다.
262+
263+
---
264+
265+
## 7️⃣ 포트 정보
266+
267+
| Service | Port |
268+
|---|---|
269+
| MySQL | `${MYSQL_PORT}:3306` |
270+
| Redis | `${REDIS_PORT}:6379` |
271+
272+
---
273+
274+
💡 **Tip**
275+
276+
처음 실행할 때는 Docker 이미지 다운로드로 인해 시간이 조금 걸릴 수 있습니다.

0 commit comments

Comments
 (0)