Skip to content

CLD-3rd/Final-Team1-Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒ™ MindScape

๐ŸŽฏ ์„ฑํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ์ฝ˜ํ…์ธ  ์ถ”์ฒœ์˜ ์‹œ์ž‘

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



1๏ธโƒฃ ํŒ€์› ๊ตฌ์„ฑ ๋ฐ ์—ญํ• 

๋ฌธ์ง€ํ˜„
ํŒ€์žฅ
๋ฐฑ์ฃผํฌ
๋ถ€ํŒ€์žฅ
๊น€์ข…ํ›ˆ
ํŒ€์›


Frontend infra
Log
Auth server
MSA ์„ค๊ณ„, CI/CD
ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€
๋กœ๊ทธ์ธ ํŽ˜์ด์ง€
๊ณต์œ 


Backend infra
Argocd
Alert
Hpa, Karpenter
Service server
๊ฒฐ๊ณผํŽ˜์ด์ง€
๋งˆ์ดํŽ˜์ด์ง€


Backend infra
Argocd, CI/CD
Hpa
Info server
๊ฒฐ๊ณผ ํŽ˜์ด์ง€
ํ…Œ์ŠคํŠธ ํŽ˜์ด์ง€
์ธ๊ธฐ ์ปจํ…์ธ 
์žฅ๋ฏผ์ง€
ํŒ€์›
์ •์˜๋ฏผ
ํŒ€์›
์ด์˜ˆ์ง€
ํŒ€์›


Backend Terraform
Argocd
CI/CD
Promtail/Loki
Grafana
Service server


Frontend infra
Grafana
K6
Service server
CI/CD
์ธ๊ธฐ ์ปจํ…์ธ 


Backend Terraform
Grafana
Info server
๊ฒ€์ƒ‰
Dark ๋ชจ๋“œ



2๏ธโƒฃ ๊ธฐ์ˆ  ์Šคํƒ

๊ตฌ๋ถ„ ๊ธฐ์ˆ  ์Šคํƒ
์šด์˜ ๋„๊ตฌ 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



3๏ธโƒฃ ์•ฑ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ํšŒ์›๊ฐ€์ž… ยท ๋กœ๊ทธ์ธ

ํšŒ์›๊ฐ€์ž…

ํšŒ์›๊ฐ€์ž…

๋กœ๊ทธ์ธ

๋กœ๊ทธ์ธ

  • ํšŒ์›๊ฐ€์ž…์‹œ ์ค‘๋ณต ์•„์ด๋”” ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ค‘๋ณต ํ™•์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ค‘๋ณต ํ™•์ธ ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผ ๋˜์–ด์•ผ๋งŒ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์ด ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค.
  • Spring Security ๊ธฐ๋ฐ˜ Stateless JWT ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๋„์ž…ํ•˜๊ณ  ๊ตฌ๊ธ€ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2. DISC ํ…Œ์ŠคํŠธ

DISC ํ…Œ์ŠคํŠธ

DISC ํ…Œ์ŠคํŠธ

๊ฒฐ๊ณผํŽ˜์ด์ง€ ์ด๋™

๊ฒฐ๊ณผํŽ˜์ด์ง€ ์ด๋™

  • ์‚ฌ์šฉ์ž๋Š” DISC ํ…Œ์ŠคํŠธ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ต๋ณ€ ์„ ํƒ ์‹œ ํŽ˜์ด์ง€๊ฐ€ ์ด๋™๋˜๋„๋ก React Router๋ฅผ ํ™œ์šฉํ•œ client-side routing์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ํ™•์ธํ•˜๋Ÿฌ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฒฐ๊ณผํŽ˜์ด์ง€ & ๊ณต์œ 

๊ฒฐ๊ณผํŽ˜์ด์ง€

๊ฒฐ๊ณผํŽ˜์ด์ง€

๊ณต์œ 

๊ณต์œ 

  • DISC ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋ถ„์„๋œ ์„ฑํ–ฅ ์œ ํ˜•๊ณผ ๊ทธ์— ๋งž๋Š” ์ฝ˜ํ…์ธ  ์ถ”์ฒœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ์˜ํ™”, ์ฑ…, ์Œ์•… ์ฝ˜ํ…์ธ ๋ฅผ ์œ ํ˜•๋ณ„๋กœ ๋ถ„๋ฅ˜ํ•˜์—ฌ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”์ฒœ ๊ฒฐ๊ณผ๋ฅผ Redis์— ์ €์žฅํ•˜๊ณ  ํžˆ์Šคํ† ๋ฆฌ ์—ด๋žŒ์„ ์œ„ํ•ด AOF ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋งํฌ๋กœ ๊ณต์œ ํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋ณ„ ์ถ”์ฒœ ๊ฒฐ๊ณผ๋ฅผ URL์— ๋งคํ•‘ํ•˜์—ฌ ์™ธ๋ถ€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋™์  ๋ผ์šฐํŒ… ๊ธฐ๋ฐ˜ ๊ณต์œ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

4.๋งˆ์ดํŽ˜์ด์ง€ & ์ธ๊ธฐ์ปจํ…์ธ 

๋งˆ์ดํŽ˜์ด์ง€

๋งˆ์ดํŽ˜์ด์ง€

์ธ๊ธฐ์ปจํ…์ธ 

์ธ๊ธฐ์ปจํ…์ธ 

  • ์œ ์ €๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ถ”์ฒœ๋ฐ›์€ ์˜ํ™”, ์ฑ…, ์Œ์•… ๋“ฑ์˜ ์ฝ˜ํ…์ธ  ์ด๋ ฅ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ํ˜•๋ณ„ ํžˆ์Šคํ† ๋ฆฌ์™€ ๋‚˜์˜ ์ทจํ–ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ์ธํ™”๋œ ๊ธฐ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • DISC ์œ ํ˜•๋ณ„๋กœ ์œ ์ €๋“ค์ด ๋งŽ์ด ์ถ”์ฒœ๋ฐ›์€ ์ธ๊ธฐ ์ฝ˜ํ…์ธ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์‚ฌ์šฉ์ž์˜ ์ถ”์ฒœ ๊ธฐ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ˜ํ…์ธ ๋ณ„ ์ถ”์ฒœ ํšŸ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ , DB์—์„œ ์ด๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ์ธ๊ธฐ ์ฝ˜ํ…์ธ ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

5. ๊ฒ€์ƒ‰ & Dark mode

๊ฒ€์ƒ‰

๊ฒ€์ƒ‰

 Dark mode

Dark mode

  • ์‚ฌ์šฉ์ž๋Š” ํ…Œ์ŠคํŠธ ์ถ”์ฒœ ์™ธ์—๋„ ์›ํ•˜๋Š” ์ฝ˜ํ…์ธ (์ฑ…, ์˜ํ™”, ์Œ์•… ๋“ฑ)๋ฅผ ์ง์ ‘ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ API(TMDB, Kakao Books, Last.fm ๋“ฑ)๋ฅผ ์—ฐ๋™ํ•ด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋Š” ์นด๋“œ ํ˜•์‹์œผ๋กœ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๊ฐ ์ฝ˜ํ…์ธ ์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด๊นŒ์ง€ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ๋ผ์ดํŠธ ๋ชจ๋“œ์ผ ๋•Œ๋Š” ๊ธฐ์กด ๋””์ž์ธ์ด ์œ ์ง€๋˜๋ฉฐ, ๋‹คํฌ ๋ชจ๋“œ์ผ ๋•Œ๋งŒ ๋ฐฐ๊ฒฝยทํ…์ŠคํŠธยท์นด๋“œ ์ƒ‰์ƒ์ด ์–ด๋‘ก๊ฒŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • TailwindCSS dark: prefix ํ™œ์šฉํ•ด ๋‹คํฌ๋ชจ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.



4๏ธโƒฃ ์•„ํ‚คํ…์ฒ˜

  • 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 ์•Œ๋ฆผ์„ ํ™œ์šฉํ•ด ๋กœ๊ทธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.



5๏ธโƒฃ Auto Scaling (Pods โ†” Nodes) & Alert

Auto Scaling Alert
autoScaling alert

Pod ์˜คํ† ์Šค์ผ€์ผ๋ง (HPA)

  • ์›Œํฌ๋กœ๋“œ์˜ CPU/๋ฉ”๋ชจ๋ฆฌ(ํ•„์š” ์‹œ ์ปค์Šคํ…€ ๋ฉ”ํŠธ๋ฆญ) ๊ธฐ์ค€์œผ๋กœ Replica ์ˆ˜ ์ž๋™ ์กฐ์ ˆ.
  • ์˜ˆ) CPU 60% ์ดˆ๊ณผ ์‹œ ์Šค์ผ€์ผ์•„์›ƒ, ๋‚ด๋ ค๊ฐ€๋ฉด ์Šค์ผ€์ผ์ธ.

๋…ธ๋“œ ์˜คํ† ์Šค์ผ€์ผ๋ง (Karpenter)

  • HPA๊ฐ€ ํŒŒ๋“œ๋ฅผ ๋Š˜๋ ค Pending์ด ์ƒ๊ธฐ๋ฉด ์š”๊ตฌ์‚ฌํ•ญ(๋ฆฌ์†Œ์Šค/taint/affinity)์— ๋งž๋Š” ๋…ธ๋“œ๋ฅผ ์ฆ‰์‹œ ํ”„๋กœ๋น„์ €๋‹.
  • ๋ถ€ํ•˜๊ฐ€ ์ค„์–ด ์œ ํœด ๋…ธ๋“œ๊ฐ€ ์ƒ๊ธฐ๋ฉด consolidation/TTL ์ •์ฑ…์œผ๋กœ ๋…ธ๋“œ ์ถ•์†Œ.

๋™์ž‘ ํ๋ฆ„

  1. ๋ถ€ํ•˜ โ†‘ โ†’ HPA ํŒŒ๋“œ ์ฆ๊ฐ€ โ†’ Pending ๋ฐœ์ƒ โ†’ Karpenter ๋…ธ๋“œ ์ƒ์„ฑ โ†’ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ
  2. ๋ถ€ํ•˜ โ†“ โ†’ HPA ํŒŒ๋“œ ๊ฐ์†Œ โ†’ ์œ ํœด ๋…ธ๋“œ ๋ฐœ์ƒ โ†’ Karpenter ๋…ธ๋“œ ํšŒ์ˆ˜

Alert

  • CPU ์‚ฌ์šฉ๋ฅ ์ด 70% ์ด์ƒ์œผ๋กœ ์ƒ์Šน(์˜ˆ: 5๋ถ„ ์ง€์†)ํ•˜๋ฉด Discord๋กœ ์•Œ๋ฆผ ์ „์†ก.



6๏ธโƒฃ Argocd

- MSA: ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ Kubernetes Deployment๋กœ ๊ตฌ์„ฑํ•˜๊ณ , Argo CD(GitOps)๋กœ ๋ฐฐํฌ/๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- Ingress: ๋‹จ์ผ Publicc ALB๋กœ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.



7๏ธโƒฃ Grafana

cpu, memory ์‚ฌ์šฉ๋ฅ , node ์ž์› ํ•œ๊ณ„ ๊ณผ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ


MSA ์„œ๋น„์Šค๋ณ„ ๋กœ๊ทธ Prometheus & Argo CD ๋กœ๊ทธ




8๏ธโƒฃ K6

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)

์ž„๊ณ„์น˜(Threshold) ํŒ์ •

  • 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์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

mindScape BE repository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5