MindScape는 사용자의 성향을 분석하여 영화, 음악, 책 등 맞춤형 콘텐츠를 추천하는 성향 기반 콘텐츠 추천 플랫폼입니다.
간단한 DISC 테스트를 통해 성향을 파악하고, 유형별로 최적화된 콘텐츠를 제공합니다.
제작 기간: 2025/07/16 ~ 2025/08/21
Backend GitHub: https://github.com/CLD-3rd/Final-Team1-Backend.git
Frontend GitHub: https://github.com/CLD-3rd/Final-Team1-Frontend.git
간단한 DISC 테스트를 통해 성향을 파악하고, 유형별로 최적화된 콘텐츠를 제공합니다.
제작 기간: 2025/07/16 ~ 2025/08/21
Backend GitHub: https://github.com/CLD-3rd/Final-Team1-Backend.git
Frontend GitHub: https://github.com/CLD-3rd/Final-Team1-Frontend.git
| 구분 | 기술 스택 |
|---|---|
| 운영 도구 | Termius, STS (Spring Tool Suite), Visual Studio Code, Intellij IDEA, Cursor |
| 백엔드 | Java 17, Spring Boot 3, Spring Data JPA, Maven |
| 인프라 | AWS, Terraform |
| 컨테이너 / 배포 | Docker, Kubernetes, Helm, ArgoCD |
| CI/CD & GitOps | GitHub Actions, ArgoCD |
| 모니터링 / 테스트 | Prometheus, Grafana, k6, Loki, Promtail, InfluxDB, Discord |
| 협업 툴 | Discord, Gather |
![]() 회원가입 |
![]() 로그인 |
- 회원가입시 중복 아이디 방지를 위한 중복 확인 기능 추가했습니다.
- 중복 확인 검사가 통과 되어야만 회원가입 버튼이 활성화 됩니다.
- Spring Security 기반 Stateless JWT 인증 시스템을 도입하고 구글 소셜 로그인 구현하였습니다.
![]() DISC 테스트 |
![]() 결과페이지 이동 |
- 사용자는 DISC 테스트 검사를 진행합니다.
- 답변 선택 시 페이지가 이동되도록 React Router를 활용한 client-side routing을 구현하였습니다.
- 결과 확인하러가기 버튼을 눌러 결과 페이지로 이동합니다.
![]() 결과페이지 |
![]() 공유 |
- DISC 테스트 결과에 따라 분석된 성향 유형과 그에 맞는 콘텐츠 추천 리스트를 보여줍니다.
- 영화, 책, 음악 콘텐츠를 유형별로 분류하여 제공합니다.
- 추천 결과를 Redis에 저장하고 히스토리 열람을 위해 AOF 기능을 사용하였습니다.
- 테스트 결과를 링크로 공유하여 외부에서 해당 결과를 확인할 수 있습니다.
- 사용자별 추천 결과를 URL에 매핑하여 외부 접근이 가능한 동적 라우팅 기반 공유 기능을 구현하였습니다.
![]() 마이페이지 |
![]() 인기컨텐츠 |
- 유저가 테스트를 통해 추천받은 영화, 책, 음악 등의 콘텐츠 이력을 한눈에 확인할 수 있습니다.
- 유형별 히스토리와 나의 취향 데이터를 기반으로 개인화된 기록을 제공합니다.
- DISC 유형별로 유저들이 많이 추천받은 인기 콘텐츠를 확인할 수 있습니다.
- 모든 사용자의 추천 기록을 기반으로 콘텐츠별 추천 횟수를 집계하고, DB에서 이를 내림차순 정렬하여 인기 콘텐츠를 조회합니다.
![]() 검색 |
![]() Dark mode |
- 사용자는 테스트 추천 외에도 원하는 콘텐츠(책, 영화, 음악 등)를 직접 검색할 수 있는 기능을 사용할 수 있습니다.
- 외부 API(TMDB, Kakao Books, Last.fm 등)를 연동해 검색 결과를 가져옵니다.
- 검색 결과는 카드 형식으로 보여주며, 각 콘텐츠에 대한 상세 정보까지 확인 가능합니다.
- 모든 페이지에서 라이트 모드일 때는 기존 디자인이 유지되며, 다크 모드일 때만 배경·텍스트·카드 색상이 어둡게 변경됩니다.
- TailwindCSS
dark:prefix 활용해 다크모를 적용했습니다.
- Terraform으로 AWS 인프라(VPC, EKS, RDS 등)를 구성하고 Terraform Helm provider로 Prometheus·Grafana·ArgoCD를 배포했으며, Karpenter 설치와 IRSA/IAM 기반 인증·권한 설정까지 포함했습니다.
- GitHub Actions와 Argo CD로 MSA를 자동 배포했으며, ALB Controller, ingress는 Argo CD의 yaml로 설치·관리했습니다.
- InfluxDB, Prometheus, Loki와 Discord 알림을 활용해 로그 및 모니터링 시스템을 구축했습니다.
| Auto Scaling | Alert |
|---|---|
![]() |
![]() |
- 워크로드의 CPU/메모리(필요 시 커스텀 메트릭) 기준으로 Replica 수 자동 조절.
- 예) CPU 60% 초과 시 스케일아웃, 내려가면 스케일인.
- HPA가 파드를 늘려 Pending이 생기면 요구사항(리소스/taint/affinity)에 맞는 노드를 즉시 프로비저닝.
- 부하가 줄어 유휴 노드가 생기면 consolidation/TTL 정책으로 노드 축소.
- 부하 ↑ → HPA 파드 증가 → Pending 발생 → Karpenter 노드 생성 → 트래픽 처리
- 부하 ↓ → HPA 파드 감소 → 유휴 노드 발생 → Karpenter 노드 회수
- CPU 사용률이 70% 이상으로 상승(예: 5분 지속)하면 Discord로 알림 전송.
- Ingress: 단일 Publicc ALB로 경로 기반 라우팅합니다.
| cpu, memory 사용률, node 자원 한계 | 과부하 테스트 |
|---|---|
![]() |
![]() |
| MSA 서비스별 로그 | Prometheus & Argo CD 로그 |
|---|---|
![]() |
![]() |
K6로 단계적 부하를 가해 HPA 확장 동작과 서비스 안정성을 검증하고, 응답시간·에러율·초당처리량(RPS) 을 측정합니다.
과부하 테스트
- 시나리오: 단계적으로 100 VU까지 증가 후 1분 유지 (총 실행 ~5분)
| 항목 | 값 |
|---|---|
| 총 요청 수 | 19,199 |
| 평균 처리량(RPS) | 63.90 req/s |
| 평균 응답시간 | 7.34 ms |
| p90 / p95 | 8.37 ms / 10.16 ms |
| 최소 / 최대 응답시간 | 4.7 ms / 81.75 ms |
| 에러율(http_req_failed) | 0.00% (0 / 19,199) |
http_req_duration: p(90)<300ms, p(95)<400ms → 통과http_req_failed: rate<0.1 → 통과- 체크:
authme status is 200→ 모두 성공
- 지연 시간: p95=10.16ms로 매우 낮아, 설정한 임계치 대비 큰 여유가 있습니다.
- 안정성: 에러율 0%로 요청 19,199건 전부 성공했습니다.
- 처리량: 평균 ~64 req/s에서 안정적으로 유지되었습니다.

























