1- # 🎵 내 콘서트를 부탁해 (NCB) - Backend
1+ <p align =" center " >
2+ <img width =" 114 " height =" 71 " alt =" ncb " src =" https://github.com/user-attachments/assets/f6463190-fd04-4722-97fe-d0db4080927e " />
3+ </p >
24
3- > 예매부터 뒤풀이까지, 공연 관람의 하루를 관리하는 올인원 플랫폼
5+ < h1 align = " center " >🎵 내 콘서트를 부탁해 (NCB) - Backend</ h1 >
46
5- <img width =" 1920 " height =" 1080 " alt =" 4-기획 의도 " src =" https://github.com/user-attachments/assets/92b94aa5-6ca3-4be5-acdd-509b6c7c8116 " />
7+ <p align =" center " >
8+ 예매부터 뒤풀이까지, 공연 관람의 하루를 관리하는 올인원 플랫폼
9+ </p >
10+
11+ <p align =" center " >
12+ <b >프로젝트 기간</b > 2025.12.04 ~ 2026.01.13
13+ </p >
14+
15+ ---
16+
17+ # 📑 목차
18+
19+ - [ 기획 의도] ( #기획-의도 )
20+ - [ 프로젝트 개요] ( #프로젝트-개요 )
21+ - [ 주요 기능] ( #주요-기능 )
22+ - [ 시스템 아키텍처] ( #시스템-아키텍처 )
23+ - [ ERD] ( #erd-entity-relationship-diagram )
24+ - [ 기술 스택] ( #기술-스택 )
25+ - [ 프로젝트 구조] ( #프로젝트-구조 )
26+ - [ 백엔드 팀] ( #백엔드-팀 )
27+ - [ Docker 실행 방법] ( #docker-실행-방법 )
28+
29+ ---
30+
31+ # 💡 기획 의도
32+
33+ <img width =" 1920 " height =" 1080 " alt =" 기획 의도 " src =" https://github.com/user-attachments/assets/92b94aa5-6ca3-4be5-acdd-509b6c7c8116 " />
634
735---
836
9- # 📌 Project Overview
37+ # 📌 프로젝트 개요
1038
11- <img width =" 1920 " height =" 1080 " alt =" 5- 프로젝트 개요" src =" https://github.com/user-attachments/assets/94c2d2ab-a6fd-465c-a728-d001ed5a8e79 " />
39+ <img width =" 1920 " height =" 1080 " alt =" 프로젝트 개요 " src =" https://github.com/user-attachments/assets/94c2d2ab-a6fd-465c-a728-d001ed5a8e79 " />
1240
41+ ---
1342
14- # 🚀 Main Features
43+ # 🚀 주요 기능
1544
16- ### 공연 탐색
45+ ## 공연 탐색
1746
1847- Kopis API 기반 공연 데이터 조회
1948- 공연 일자 / 조회수 기준 정렬
2049- 무한 스크롤 기반 공연 목록 제공
2150- 공연 검색 기능
2251
23- ### 검색 자동완성
52+ ## 검색 자동완성
2453
2554- Redis 기반 자동완성 검색
2655- 공연 제목 역인덱스 구조 활용
2756- 조회수 기반 검색 결과 노출
2857
29- ### 아티스트 정보 제공
58+ ## 아티스트 정보 제공
3059
3160외부 API를 활용하여 아티스트 정보를 수집하고 제공합니다.
3261
4675
4776Spotify와 연동되어 ** 앨범 클릭 시 Spotify 스트리밍 페이지로 이동** 합니다.
4877
49- ### 실시간 채팅
78+ ## 실시간 채팅
5079
5180WebSocket + STOMP 기반 채팅 기능
5281
@@ -55,12 +84,12 @@ WebSocket + STOMP 기반 채팅 기능
5584- 채팅방 접속자 수 관리
5685- 채팅방 참여자 관리
5786
58- Redis를 활용하여
87+ Redis 활용
5988
6089- Redis Stream → 메시지 저장
6190- Redis Set → 접속자 관리
6291
63- ### 공연 일정 플래너
92+ ## 공연 일정 플래너
6493
6594공연 당일 일정을 관리하고 공유할 수 있는 기능
6695
@@ -70,7 +99,7 @@ Redis를 활용하여
7099- UUID 기반 공유 토큰
71100- 1일 후 자동 만료
72101
73- ### 권한 관리
102+ ## 권한 관리
74103
75104플래너 참여자 권한 관리
76105
@@ -82,7 +111,7 @@ Redis를 활용하여
82111
83112각 권한에 따라 조회 / 수정 / 삭제 권한이 다르게 적용됩니다.
84113
85- ### 지도 기반 장소 탐색
114+ ## 지도 기반 장소 탐색
86115
87116외부 지도 API 활용
88117
@@ -100,47 +129,86 @@ Redis를 활용하여
100129
101130---
102131
103- # 🏗 System Architecture
104- <img width =" 1920 " height =" 1080 " alt =" 투표 _ 박상아 _ 변수연 _ 최병준 _ 김민석 _ 이혜지 _ 김윤수 Codecrete " src =" https://github.com/user-attachments/assets/a7513e8e-dfe1-4a9d-a506-58761133fe73 " />
132+ # 🏗 시스템 아키텍처
133+
134+ <img width =" 1920 " height =" 1080 " alt =" Architecture " src =" https://github.com/user-attachments/assets/a7513e8e-dfe1-4a9d-a506-58761133fe73 " />
135+
136+ ---
137+
138+ # 🗄 ERD (Entity Relationship Diagram)
139+
140+ <p align =" center " >
141+ <img width =" 1920 " height =" 1080 " alt =" ERD " src =" https://github.com/user-attachments/assets/ae116025-2fc4-44e7-9f7b-14a27589dd48 " />
142+ </p >
143+
144+ 🔗 ** [ ERD 전체 보기 (ERDCloud)] ( https://www.erdcloud.com/d/XxaBXzaoBeJ3ptdef ) **
145+
146+ 본 프로젝트는 공연 정보 조회, 공연 일정 플래너, 커뮤니티, 채팅 기능을 중심으로 구성된 도메인 구조를 기반으로 데이터 모델을 설계하였습니다.
147+
148+ ### 주요 도메인
105149
150+ - ** Users** : 사용자 정보 및 인증 관리
151+ - ** Concerts** : 공연 정보 및 공연 조회 데이터
152+ - ** Artists** : 아티스트 정보 및 외부 API 연동 데이터
153+ - ** Plans** : 공연 일정 플래너 및 참여자 관리
154+ - ** Community** : 공연 관련 게시글 및 댓글
155+ - ** Chats** : 실시간 채팅 및 채팅 메시지 관리
156+ - ** Location** : 공연장 주변 장소 및 지도 정보
106157
107- # 🛠 Tech Stack
158+ ERD는 서비스의 핵심 도메인을 중심으로 관계형 데이터 구조를 설계하였으며
159+ 공연 일정 관리와 사용자 간 상호작용을 고려한 데이터 관계를 기반으로 구성되었습니다.
160+
161+ ---
162+
163+ # 🛠 기술 스택
164+
165+ ## Backend
108166
109- ### Backend
110167![ Java] ( https://img.shields.io/badge/Java-17-007396?style=for-the-badge&logo=java&logoColor=white )
111168![ Spring Boot] ( https://img.shields.io/badge/Spring_Boot-3.0-6DB33F?style=for-the-badge&logo=springboot&logoColor=white )
112169![ Spring Data JPA] ( https://img.shields.io/badge/Spring_Data_JPA-6DB33F?style=for-the-badge )
113170![ Hibernate] ( https://img.shields.io/badge/Hibernate-59666C?style=for-the-badge&logo=hibernate&logoColor=white )
114171![ JWT] ( https://img.shields.io/badge/JWT-Authentication-000000?style=for-the-badge&logo=jsonwebtokens&logoColor=white )
115172![ WebSocket] ( https://img.shields.io/badge/WebSocket-STOMP-010101?style=for-the-badge )
116173
117- ### Database
174+ ## Database
175+
118176![ MySQL] ( https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white )
119177![ Redis] ( https://img.shields.io/badge/Redis-DC382D?style=for-the-badge&logo=redis&logoColor=white )
120178
121- ### Infrastructure
179+ ## Infrastructure
180+
122181![ AWS EC2] ( https://img.shields.io/badge/AWS_EC2-FF9900?style=for-the-badge&logo=amazon-ec2&logoColor=white )
123182![ Docker] ( https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=docker&logoColor=white )
124183
125- ### DevOps
184+ ## DevOps
185+
126186![ GitHub Actions] ( https://img.shields.io/badge/GitHub_Actions-2088FF?style=for-the-badge&logo=githubactions&logoColor=white )
127187
128- ### External API
188+ ## Collaboration
189+
190+ ![ Slack] ( https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=slack&logoColor=white )
191+ ![ Notion] ( https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white )
192+ ![ Discord] ( https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white )
193+ ![ ZEP] ( https://img.shields.io/badge/ZEP-6F3AFF?style=for-the-badge )
194+
195+ ## External API
196+
129197![ Kopis API] ( https://img.shields.io/badge/Kopis_API-000000?style=for-the-badge )
130198![ Spotify API] ( https://img.shields.io/badge/Spotify_API-1DB954?style=for-the-badge&logo=spotify&logoColor=white )
131199![ Kakao Map] ( https://img.shields.io/badge/Kakao_Map_API-FFCD00?style=for-the-badge )
132200![ TMAP API] ( https://img.shields.io/badge/TMAP_API-FF4F00?style=for-the-badge )
133201
134202---
135203
136- ## 📂 Project Structure
204+ # 📂 프로젝트 구조
137205
138206``` text
139207src
140208├─ main
141209│ ├─ java
142210│ │ └─ com.back.web7_9_codecrete_be
143- │ │ ├─ domain # 도메인별 비즈니스 로직
211+ │ │ ├─ domain
144212│ │ │ ├─ auth
145213│ │ │ ├─ users
146214│ │ │ ├─ concerts
149217│ │ │ ├─ chats
150218│ │ │ ├─ plans
151219│ │ │ └─ location
152- │ │ ├─ global # 공통 설정 및 인프라
220+ │ │ ├─ global
153221│ │ │ ├─ config
154222│ │ │ ├─ security
155223│ │ │ ├─ error
@@ -159,26 +227,25 @@ src
159227│ │ └─ Web79CodecreteBeApplication
160228│ └─ resources
161229│ └─ application.yml
162-
163230```
231+
164232---
165233
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 " />
234+ # 👥 백엔드 팀
235+
236+ <img width =" 855 " height =" 484 " src =" https://github.com/user-attachments/assets/db33fbb4-8823-4c77-830d-cb7fc1e871cb " />
168237
169238---
170- ## 🐳 Docker 실행 방법
171239
172- 이 프로젝트는 ** MySQL 8.0** 과 ** Redis 7.2** 를 Docker Compose로 실행합니다.
173- 로컬 개발 환경에서 데이터베이스와 캐시 서버를 쉽게 구성할 수 있습니다.
240+ # 🐳 Docker 실행 방법
174241
175- ---
242+ 이 프로젝트는 ** MySQL 8.0 ** 과 ** Redis 7.2 ** 를 Docker Compose로 실행합니다.
176243
177244## 1️⃣ 환경 변수 설정
178245
179- 프로젝트 루트에 ` .env ` 파일을 생성하고 아래 내용을 작성합니다.
246+ ` .env ` 파일 생성
180247
181- ``` env
248+ ```
182249MYSQL_PORT=3306
183250MYSQL_ROOT_PASSWORD=root
184251MYSQL_DATABASE=concert
@@ -188,89 +255,25 @@ MYSQL_PASSWORD=password
188255REDIS_PORT=6379
189256```
190257
191- ` .env ` 파일은 ` docker-compose.yml ` 에서 사용하는 환경 변수입니다.
192-
193- ---
194-
195- ## 2️⃣ Docker 컨테이너 실행
258+ ## 2️⃣ Docker 실행
196259
197- 아래 명령어로 MySQL과 Redis 컨테이너를 실행합니다.
198-
199- ``` bash
260+ ```
200261docker compose up -d
201262```
202263
203- 옵션 설명
264+ ## 3️⃣ 컨테이너 확인
204265
205- | 옵션 | 설명 |
206- | ---| ---|
207- | up | 컨테이너 실행 |
208- | -d | 백그라운드 실행 |
209-
210- ---
211-
212- ## 3️⃣ 실행 상태 확인
213-
214- ``` bash
266+ ```
215267docker ps
216268```
217269
218- 정상적으로 실행되면 다음과 같은 컨테이너가 실행됩니다.
219-
220270| Container | Service |
221271| ---| ---|
222272| concert-mysql | MySQL 8.0 |
223273| concert-redis | Redis 7.2 |
224274
225- ---
226-
227- ## 4️⃣ 로그 확인
228-
229- 문제가 발생했을 경우 로그를 확인할 수 있습니다.
275+ ## 4️⃣ 종료
230276
231- ``` bash
232- docker compose logs
233277```
234-
235- 특정 서비스 로그 확인
236-
237- ``` bash
238- docker compose logs mysql
239- docker compose logs redis
240- ```
241-
242- ---
243-
244- ## 5️⃣ 컨테이너 종료
245-
246- ``` bash
247278docker compose down
248279```
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