|
| 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 | + |
| 111 | + |
| 112 | + |
| 113 | + |
| 114 | + |
| 115 | + |
| 116 | + |
| 117 | +### Database |
| 118 | + |
| 119 | + |
| 120 | + |
| 121 | +### Infrastructure |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | +### DevOps |
| 126 | + |
| 127 | + |
| 128 | +### External API |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | + |
| 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