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์์ ์์ ์ ์ผ๋ก ์ ์ง๋์์ต๋๋ค.

























