{"id":27944592,"url":"https://github.com/toolatebro/takenseat","last_synced_at":"2025-07-23T08:05:51.988Z","repository":{"id":286584297,"uuid":"961811320","full_name":"toolatebro/TakenSeat","owner":"toolatebro","description":"toolatebro🫵🏿","archived":false,"fork":false,"pushed_at":"2025-05-09T03:17:03.000Z","size":2015,"stargazers_count":1,"open_issues_count":9,"forks_count":3,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-07-23T08:05:06.987Z","etag":null,"topics":["feign-client","grafana","kafka","msa","prometheus","redis","springboot","swagger","zipkin"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/toolatebro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-07T07:48:27.000Z","updated_at":"2025-07-15T14:44:07.000Z","dependencies_parsed_at":"2025-07-23T08:05:09.350Z","dependency_job_id":null,"html_url":"https://github.com/toolatebro/TakenSeat","commit_stats":null,"previous_names":["toolatebro/takenseat"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/toolatebro/TakenSeat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toolatebro%2FTakenSeat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toolatebro%2FTakenSeat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toolatebro%2FTakenSeat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toolatebro%2FTakenSeat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/toolatebro","download_url":"https://codeload.github.com/toolatebro/TakenSeat/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toolatebro%2FTakenSeat/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266640830,"owners_count":23960809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feign-client","grafana","kafka","msa","prometheus","redis","springboot","swagger","zipkin"],"created_at":"2025-05-07T12:53:11.124Z","updated_at":"2025-07-23T08:05:51.959Z","avatar_url":"https://github.com/toolatebro.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🎟️ 뮤지컬 \u0026 콘서트 대규모 티켓팅 서비스 프로젝트\n\u003cdiv\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/ef04522a-c191-478f-815b-f0340923c6c1\" style=\"width: 100%; height: 450px;\"\u003e\n\u003c/div\u003e\n\n## 🗣️ 프로젝트 소개\n\n- 실시간 대규모 트래픽에도 끊김 없는 예매 경험을 제공하는 고성능 공연 티켓팅 플랫폼\n- 콘서트, 연극, 뮤지컬 등 다양한 공연에 대해 유저가 실시간으로 예매할 수 있는 티켓팅 시스템 구축\n\u003cbr\u003e\u003cbr\u003e\n\n## 🥅 프로젝트 목표\n\n- **폭발적인 동시 접속(▶ 수만 RPS)** 에도 예매/결제가 중단되지 않는 인프라 설계\n- **Redis 대기열 + 분산 락** 으로 공정한 좌석 선점 보장\n- **Kafka + Saga 패턴** 으로 서비스 간 데이터 일관성 유지\n- **Prometheus + Grafana + Loki** 로 실시간 모니터링 \u0026 알림\n\n\u003cbr\u003e\u003cbr\u003e\n## 🛠️ 기술 스택\n\n이 프로젝트는 마이크로서비스 아키텍처 기반의 고성능 웹 애플리케이션으로, 최신 Java 및 Spring 기술을 활용해 구축되었습니다.\n\n**주요 언어**: Java 17  \n**빌드 도구**: Gradle 8.10.2\n\n\u003ctable\u003e\n  \u003ctr style=\"background-color: #f0f9ff;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eDatabase / Caching\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eMySQL\u003c/strong\u003e 8.0: 관계형 데이터베이스\u003cbr\u003e\n      - \u003cstrong\u003eRedis\u003c/strong\u003e 7.2: 고속 캐싱 및 세션 관리\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1603423163/noticon/az0cvs28lm7gxoowlsva.png\" width=\"50\"/\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/2a90d034-1542-47e0-a524-b4febc5f170e\" width=\"50\"/\u003e\n    \u003c/td\u003e\n\n  \u003c/tr\u003e\n\n  \u003ctr style=\"background-color: #f0fff4;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eLibrary / Framework\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eSpring Boot\u003c/strong\u003e 3.3.2: Java 웹 애플리케이션 프레임워크\u003cbr\u003e\n      - \u003cstrong\u003eSpring Cloud Eureka\u003c/strong\u003e: 서비스 디스커버리\u003cbr\u003e\n      - \u003cstrong\u003eSpring Cloud Gateway\u003c/strong\u003e: API 게이트웨이\u003cbr\u003e\n      - \u003cstrong\u003eSpring Cloud OpenFeign\u003c/strong\u003e: 선언적 HTTP 클라이언트\u003cbr\u003e\n      - \u003cstrong\u003eRedisson\u003c/strong\u003e: Redis 클라이언트\u003cbr\u003e\n      - \u003cstrong\u003eSwagger\u003c/strong\u003e: API 문서화\u003cbr\u003e\n      - \u003cstrong\u003eQueryDSL\u003c/strong\u003e 5.0.0: 타입 안전 쿼리 빌더\u003cbr\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://spring.io/img/projects/spring-boot.svg\" width=\"50\" /\u003e\n      \u003cimg src=\"https://docs.spring.io/spring-cloud-gateway/docs/2.2.10.BUILD-SNAPSHOT/reference/htmlsingle/favicon.ico\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/26200555-375a-45d7-afd0-bc0fb0f00877\" width=\"50\"/\u003e\u003cbr\u003e\n      \u003cimg src=\"https://static1.smartbear.co/swagger/media/assets/swagger_fav.png\" width=\"50\" /\u003e\n      \u003cimg src=\"https://raw.githubusercontent.com/querydsl/querydsl.github.io/refs/heads/master/ico/favicon.ico\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr style=\"background-color: #fefce8;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eCloud / DevOps\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eAWS EC2\u003c/strong\u003e: 클라우드 컴퓨팅\u003cbr\u003e\n      - \u003cstrong\u003eDocker \u0026 Docker-Compose\u003c/strong\u003e: 컨테이너화\u003cbr\u003e\n      - \u003cstrong\u003eGitHub Actions\u003c/strong\u003e: CI/CD 파이프라인\u003cbr\u003e\n      - \u003cstrong\u003eGitHub Container Registry\u003c/strong\u003e: 컨테이너 이미지 저장\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/6e4ecc9f-2f9e-44cb-8088-8f780665c693\" width=\"50\"/\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/ecc34476-f5be-4275-bd97-fa247dbc6fa2\" width=\"50\" /\u003e\u003cbr\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/2f9ab1ca-6a02-4dcb-b15a-e4dec9f803c7\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/eafae5bf-27b5-4f2c-b96d-502dbba5b25d\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr style=\"background-color: #f3e8ff;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eMonitoring / Observability\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003ePrometheus\u003c/strong\u003e: 메트릭 수집\u003cbr\u003e\n      - \u003cstrong\u003eGrafana\u003c/strong\u003e 11.0: 시각화 대시보드\u003cbr\u003e\n      - \u003cstrong\u003eZipkin\u003c/strong\u003e: 분산 추적\u003cbr\u003e\n      - \u003cstrong\u003eLoki\u003c/strong\u003e: 로그 집계\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/ea790f84-26fa-47fa-8692-336fe1cb215c\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/ca6ca0bf-dbd0-4259-969c-12fc4c3ba110\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/98dfbfd6-1735-4f9a-a2d0-263939832c14\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/b6ba9cf6-17ee-453e-a289-fc4e4afbdc98\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr style=\"background-color: #ffe5e5;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eCollaboration / Tools\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eGitHub\u003c/strong\u003e: 코드 호스팅 및 협업\u003cbr\u003e\n      - \u003cstrong\u003eNotion\u003c/strong\u003e: 프로젝트 관리\u003cbr\u003e\n      - \u003cstrong\u003ePostman\u003c/strong\u003e: API 테스트\u003cbr\u003e\n      - \u003cstrong\u003eDiscord\u003c/strong\u003e: 팀 커뮤니케이션\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1567128822/noticon/osiivsvhnu4nt8doquo0.png\" width=\"50\" /\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1570106347/noticon/hx52ypkqqdzjdvd8iaid.svg\" width=\"50\"/\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1566914838/noticon/qlfe77nbcvdscm762prm.png\" width=\"50\" /\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1640152045/noticon/albswwsjaaxvxbyhmwig.png\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr style=\"background-color: #e0f2fe;\"\u003e\n    \u003cth\u003e\u003cstrong\u003eMessaging\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eApache Kafka\u003c/strong\u003e 3.7.0: 이벤트 스트리밍\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/992489bb-4764-40d4-a582-ed4103b59987\" width=\"50\" /\u003e\n      \u003cimg src=\"https://github.com/user-attachments/assets/80ca122c-e8f6-45f0-86aa-56f30eaf8a81\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr style=\"background-color: #ecfccb;\"\u003e\n    \u003cth\u003e\u003cstrong\u003ePerformance Testing\u003c/strong\u003e\u003c/th\u003e\n    \u003cth align=\"center\"\u003e기술\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      - \u003cstrong\u003eJMeter\u003c/strong\u003e 5.6.3: 부하 테스트\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n      \u003cimg src=\"https://noticon-static.tammolo.com/dgggcrkxq/image/upload/v1666058624/noticon/zppnxgsegyfrhrl42q2p.png\" width=\"50\" /\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003cbr\u003e\n\n## 🗂️ 프로젝트 구조\n```\nTakenSeat                                                  # 루트 프로젝트\n├──com.taken_seat.eureka-service                           # 서비스 디스커버리 (port : 19090)\n│  ├──src/main/java/com/taken_seat/eureka_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.gateway-service                          # API 게이트 웨이 (port : 19091)\n│  ├──src/main/java/com/taken_seat/gateway_service\n│  │       ├──config/\n│  │       ├──exception/\n│  │       ├──filter/\n│  │       ├──util/\n│  ├──Dockerfile\n│\n├──com.taken_seat.auth-service                             # 유저 서비스 (port : 19092)\n│  ├──src/main/java/com/taken_seat/auth_service\n│  │   ├──application/\n│  │   ├──domain/\n│  │   ├──infrastructure/\n│  │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/auth_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.coupon-service                           # 쿠폰 서비스 (port : 19093)\n│  ├──src/main/java/com/taken_seat/coupon_service\n│  │   ├──application/\n│  │   ├──domain/\n│  │   ├──infrastructure/\n│  │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/coupon_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.queue-service                            # 대기열 서비스 (port : 19094)\n│  ├──src/main/java/com/taken_seat/queue_service\n│  │   ├──application/\n│  │   ├──infrastructure/\n│  │   ├──presentation/    \n│  ├──test/java/com/taken_seat/queue_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.booking-service                          # 예매 서비스 (port : 19095)\n│  ├──src/main/java/com/taken_seat/booking_service\n│  │   ├──booking/\n│  │   │   ├──application/\n│  │   │   ├──domain/\n│  │   │   ├──infrastructure/\n│  │   │   ├──presentation/\n│  │   ├──ticket/\n│  │   │   ├──application/\n│  │   │   ├──domain/\n│  │   │   ├──infrastructure/\n│  │   │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/booking_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.performance-service                      # 공연 서비스 (port : 19096)\n│  ├──src/main/java/com/taken_seat/performance_service\n│  │   ├──performance/\n│  │   │   ├──application/\n│  │   │   ├──domain/\n│  │   │   ├──infrastructure/\n│  │   │   ├──presentation/\n│  │   ├──performancehall/\n│  │   │   ├──application/\n│  │   │   ├──domain/\n│  │   │   ├──infrastructure/\n│  │   │   ├──presentation/\n│  │   ├──performanceticket/\n│  │   │   ├──application/\n│  │   │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/performance_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.payment-service                          # 결제 서비스 (port : 19097)\n│  ├──src/main/java/com/taken_seat/payment_service\n│  │   ├──application/\n│  │   ├──domain/\n│  │   ├──infrastructure/\n│  │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/payment_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.review-service                           # 리뷰 서비스 (port : 19098)\n│  ├──src/main/java/com/taken_seat/review_service\n│  │   ├──application/\n│  │   ├──domain/\n│  │   ├──infrastructure/\n│  │   ├──presentation/\n│  │   ├──common/\n│  ├──test/java/com/taken_seat/review_service\n│  ├──Dockerfile\n│\n├──com.taken_seat.common-service                           # 공통 모듈\n│  ├──prometheus/\n│  ├──docker-compose.common.yml\n│  ├──Dockerfile\n│  ├──src/main/java/com/taken_seat/review_service\n│      ├──aop/\n│      ├──component/\n│      ├──config/\n│      ├──dto/\n│      ├──entity/\n│      ├──exception/\n│      ├──message/\n│\n├──loki-config.yml                                          # loki 설정\n```\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 📖 서비스 아키텍처\n\u003cimg src=\"https://github.com/user-attachments/assets/870923ff-9446-4dfb-a2ed-026761128858\" \u003e\n\n\n\n\u003cbr\u003e\u003cbr\u003e\n\n## ✏️ 이벤트 흐름\n* 사용자 플로우 ⇒ 회원가입/로그인 → 공연 탐색 → 회차·좌석 선택 → 대기열 → 예매 정보 입력 → 결제 → 예매 내역 확인/취소 → 리뷰 작성\n\u003cimg src=\"https://github.com/user-attachments/assets/13ec85de-610b-4886-9109-4558e304f71e\"\u003e\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 🚩 로컬 실행 방법\n```\n# 1) 저장소 클론\n$ git clone https://github.com/your-org/TakenSeat.git\n$ cd TakenSeat\n\n# 2) 빌드\n$ ./gradlew clean build -x test  # 테스트 생략 빌드\n\n# 3) 공통 인프라 + 서비스 기동\n$ docker compose -f docker-compose.common.yml up -d   # MySQL · Redis · Kafka · Prometheus 등\n$ ./scripts/start-services.sh                         # 각 서비스 도커 빌드 \u0026 기동 스크립트\n\n# 4) 확인\nhttp://localhost:19091  (Gateway)\nhttp://localhost:3000   (Grafana) – admin / admin\n\n```\n\u003e 주의 : 환경 변수는 .env.sample 참고 후 .env 로 복사해 값 채우기\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 📋 API 문서\n- Swagger UI URL ⇒ `http://localhost:19091/docs`\n- 서비스별 Swagger UI ⇒ `http://localhost:{PORT}/swagger-ui.html`\n- RestDocs HTML ⇒ `build/generated-snippets/index.html`\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 🖥️ 모니터링 \u0026 관측\n\n- **Prometheus** : `/actuator/prometheus` 메트릭 스크랩\n- **Grafana** : Dashboard ID 12345 – Seat TPS, Queue Depth, Payment Latency\n- **Loki** : `{service=\"booking-service\"}` 쿼리로 예매 로그 검색\n- **Zipkin** : TraceID 로 예매‑공연 호출 흐름 추적\n\n\u003cbr\u003e\u003cbr\u003e\n\n## ⚙️ CI/CD 파이프라인\n\n1. **GitHub Actions** – PR 검증 (Test · Lint · Build) \u0026 Docker 이미지 Push\n2. **Argo CD** – EKS 배포 자동 Sync (Helm Chart)\n3. **Slack 알림** – 배포 성공/실패 통지\n\n\u003cbr\u003e\u003cbr\u003e\n\n## 🛎️ 기술적 의사 결정\n\n\u003e ⏱️ [Queue 방식 비교 및 선택 기준](https://github.com/toolatebro/TakenSeat/wiki/%5BTechnical-Decision%5D-%EB%8C%80%EA%B8%B0%EC%97%B4-%EA%B5%AC%ED%98%84-%EB%B0%A9%EC%8B%9D-%EA%B2%B0%EC%A0%95)  \n\u003e 대기열 처리 방식의 장단점 비교 및 도입 이유\n\n\u003e 📊 [ELK vs Grafana + Prometheus + Loki](https://github.com/toolatebro/TakenSeat/wiki/%5BTechnical-Decision%5D-ELK-vs-Grafana---Prometheus---Loki)  \n\u003e 로그 및 모니터링 스택 비교 분석\n\n\u003e 🔍 [Micrometer Tracing VS OpenTelemetry](https://github.com/toolatebro/TakenSeat/wiki/%5BTechnical-Decision%5D-Micrometer-Tracing-VS-OpenTelemetry)  \n\u003e 분산 트레이싱 도구의 기능과 차이\n\n\u003e 🗃️ [PostgreSQL VS MySQL](https://github.com/toolatebro/TakenSeat/wiki/%5BTechnical-Decision%5D-PostgreSQL-VS-MySQL)  \n\u003e 데이터베이스 성능 및 호환성 비교\n\n\u003e 📨 [RabbitMQ VS Kafka](https://github.com/toolatebro/TakenSeat/wiki/%5BTechnical-Decision%5D-RabbitMQ-VS-Kafka)  \n\u003e 메시징 시스템의 처리량 및 구조적 차이\n\n\u003cbr\u003e\u003cbr\u003e\n\n## ⁉️ 트러블 슈팅\n\u003e ❗️ [정다예 - Grafana에서 Prometheus 메트릭이 404 뜨던 문제 해결](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EB%8B%A4%EC%98%88%5D-Grafana%EC%97%90%EC%84%9C-Prometheus-%EB%A9%94%ED%8A%B8%EB%A6%AD%EC%9D%B4-404-%EB%9C%A8%EB%8D%98-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0)  \n\u003e Grafana에서 Prometheus 메트릭 연결 시 404 오류 발생 원인 및 해결 과정\n\n\u003e ❗️ [정다예 - Windows 환경에서 JVM CPU 메트릭 수집 불가 이슈](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EB%8B%A4%EC%98%88%5D-Windows-%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-JVM-CPU-%EB%A9%94%ED%8A%B8%EB%A6%AD-%EC%88%98%EC%A7%91-%EB%B6%88%EA%B0%80-%EC%9D%B4%EC%8A%88)  \n\u003e Windows에서 JVM CPU 사용률 메트릭이 수집되지 않던 문제 원인 분석\n\n\u003e ❗️ [전승현 - Spring Redis hashOps.keys()로 패턴 조회 안 되는 이유와 SCAN을 사용한 해결법](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%ED%98%84%5D--Spring-Redis-hashOps.keys()%EB%A1%9C-%ED%8C%A8%ED%84%B4-%EC%A1%B0%ED%9A%8C-%EC%95%88-%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EC%99%80-SCAN%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%ED%95%B4%EA%B2%B0%EB%B2%95)  \n\u003e Redis에서 hashOps.keys()가 동작하지 않는 이유와 SCAN 명령어를 활용한 대체 방법\n\n\u003e ❗️ [전승현 - 결제 도메인에서 마일리지 쿠폰 차감 책임을 분리한 이유](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%ED%98%84%5D-%EA%B2%B0%EC%A0%9C-%EB%8F%84%EB%A9%94%EC%9D%B8%EC%97%90%EC%84%9C-%EB%A7%88%EC%9D%BC%EB%A6%AC%EC%A7%80-%EC%BF%A0%ED%8F%B0-%EC%B0%A8%EA%B0%90-%EC%B1%85%EC%9E%84%EC%9D%84-%EB%B6%84%EB%A6%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0)  \n\u003e 결제와 할인 책임 분리를 통해 도메인 역할 명확화\n\n\u003e ❗️ [백승규 - access_token을 BlackList로 관리하면서 만료시간을 설정하는 과정에서 깨달음](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%EA%B7%9C%5D-access_token%EC%9D%84-BlackList%EB%A1%9C-%EA%B4%80%EB%A6%AC%ED%95%98%EB%A9%B4%EC%84%9C-%EB%A7%8C%EB%A3%8C%EC%8B%9C%EA%B0%84%EC%9D%84-%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94-%EA%B3%BC%EC%A0%95%EC%97%90%EC%84%9C-%EA%B9%A8%EB%8B%AC%EC%9D%8C)  \n\u003e 토큰 블랙리스트 처리 시 만료 시간 설정 방식에 대한 인사이트\n\n\u003e ❗️ [백승규 - 공통적으로 반복되는 부가적인 기능(권한 체크)에 커스텀 어노테이션과 AOP 활용](https://github.com/toolatebro/TakenSeat/wiki/%5BTrouble-Shooting%5D-%5B%EC%8A%B9%EA%B7%9C%5D-%EA%B3%B5%ED%86%B5%EC%A0%81%EC%9C%BC%EB%A1%9C-%EB%B0%98%EB%B3%B5%EB%90%98%EB%8A%94-%EB%B6%80%EA%B0%80%EC%A0%81%EC%9D%B8%EA%B8%B0%EB%8A%A5(%EA%B6%8C%ED%95%9C-%EC%B2%98%ED%81%AC)%EC%97%90-%EC%BB%A4%EC%8A%A4%ED%85%80-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EA%B3%BC-AOP-%ED%99%9C%EC%9A%A9)  \n\u003e 권한 검증과 같은 반복 로직에 커스텀 어노테이션과 AOP 도입\n\n\u003cbr\u003e\n\n## 📌 팀원 역할분담\n| 🫅 Leader | 👷 Sub-Leader | 👷 Member | 👷 Member | 👷 Member |   \n| :---: | :---: | :---: | :---: | :---: |\n| \u003cimg src=\"https://avatars.githubusercontent.com/u/128787964?v=4\" width=\"120px;\" alt=\"\"/\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/81623522?v=4\" width=\"120px;\" alt=\"\"/\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/140582940?v=4\" width=\"120px;\" alt=\"\"/\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/155501200?v=4\" width=\"120px;\" alt=\"\"/\u003e | \u003cimg src=\"https://avatars.githubusercontent.com/u/100333239?v=4\" width=\"120px;\" alt=\"\"/\u003e |\n| [전승현](https://github.com/jjsh0208) | [이채연](https://github.com/dkki4887) | [백승규](https://github.com/seungg8361) | [정다예](https://github.com/Jungdaye89) | [강성준](https://github.com/Goldbar97)\n| Payment / Review / DevOps | Queue | Auth / Coupon / Mileage | Performance / Mornitoring | Booking / Ticket |\n\n\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoolatebro%2Ftakenseat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoolatebro%2Ftakenseat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoolatebro%2Ftakenseat/lists"}