Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Table of contents

  1. 적용된 기술스택
    1. Backend
    2. Infrastructure & Cloud
    3. Front
  2. 💡 아키텍처
    1. [Backend] 쿠버네티스 파드
    2. [Backend] EC2 Instnace 평균 CPU 사용률에 따른 노드 스케일 인/아웃
    3. [Backend] Git Actions multijob CI/CD 자동화
    4. [Frontend] Front UI
  3. 🔨 성능 이슈 해결 및 최적화 과정
  4. 📕 프로젝트를 수행하기 위해 따로 공부 및 정리한 포스팅
  5. 📗 프로젝트 진행 포스팅

1인 프로젝트로 진행된 자동화 및 성능개선에 초점을 둔 Spring-Java 기반 채팅 백엔드/프론트 서버 프로젝트입니다 😊

2022.11 부터 시작해서 2024.02 까지 약 1년 3개월이 걸렸네요! 중간중간 현업과 병행하다보니 더딘부분도 있었지만 결국 마무리하게 되었습니다. 제가 좋아하는 자동화와 성능개선을 마음껏 할 수 있어서 정말 재미있는 프로젝트였습니다.


적용된 기술스택

현재 적용된 기술스택은 아래와 같습니다.

Backend

  • Spring-Boot / Java 17
  • Spring-Security / Data-JPA / Cloud
  • Postgresql, Redis
  • Tomcat, Nginx
  • JUnit5, Mockito, testContainer, nGrinder
  • JWT

Infrastructure & Cloud

  • Docker, Kubernetes
  • AWS-IAM / EKS / ECR / RDS / EC2 / ELB / Route-53 / Cloud-Watch / Auto Scaleing
  • Git Actions, shell script, gradle script
  • Grafana & Prometheus, io.micrometer
  • Kafka, RabbitMQ

Front

  • Spring stomp
  • Thymeleaf, html, css

💡 아키텍처

[Backend] 쿠버네티스 파드

img

[Backend] EC2 Instnace 평균 CPU 사용률에 따른 노드 스케일 인/아웃

img

[Backend] Git Actions multijob CI/CD 자동화

img

[Frontend] Front UI

Image 1Image 2Image 3Image 4Image 5


🔨 성능 이슈 해결 및 최적화 과정

성능 최적화 방법과 결과를 link 에 상세히 정리하였습니다! 이를 바탕으로 작성한 포스팅입니다.

  • 2023-01-16 성능 최적화 과정 - 1 : 도커 리소스 추가와 서버 수평 확장를 통한 성능 최적화 진행
  • 2023-01-17 성능 최적화 과정 - 2 : JPA-Batch를 통한 성능 최적화 진행
  • 2023-01-24 성능 최적화 과정 - 3 : JDBC-Batch 성능 그래프 확인
  • 2023-01-27 성능 최적화 과정 - 4 : JDBC Batch 최적화 및 Postgresql 병렬 프로세서 확장
  • 2023-03-05 성능 최적화 과정 - 5 : AWS-RDS 그래프 지표 관찰 및 db connection 증가를 통한 성능 최적화 진행
  • 2023-03-11 성능 최적화 과정 - 6 : 부하 테스트를 위한 툴 제작 및 실제 테스트 결과
  • 2023-03-16 성능 최적화 과정 - 7 : RDB 인덱싱 활성화를 통한 성능 최적화 진행
  • 2023-05-01 성능 최적화 과정 - 8 : 이벤트 전송 스레드 증가를 통한 성능 최적화 진행
  • 2023-12-21 성능 최적화 과정 - 9 : HPA(max 3), ReadinessProbe, CPU limit, EKS NodeGroup AutoScaling O(CPU usage 50%), Caching, 톰켓 최적화

    개선된 지표확인

    img img img

    MetricBeforeAfterChange
    Total Tests40,228181,050349.29% 🟢
    Error Rate51.11%(20,560)0.00%(0)No Error 🟢
    TPS 평균 (Average)109.27312.16185.94% 🟢
    TPS p5069.00319.00362.32% 🟢
    TPS p954.00217.455362.50% 🟢
    TPS p992.84132.284556.34% 🟢
    TPS p99.91.6396.525852.76% 🟢
    MTTFB 평균 (Average)1605.44 ms950.89 ms-40.68% 🟢
    MTTFB p501636.55 ms919.20 ms-43.90% 🟢
    MTTFB p9524013.28 ms1322.11 ms-94.47% 🟢
    MTTFB p9927690.40 ms1833.22 ms-93.40% 🟢
    MTTFB p99.928157.50 ms2099.12 ms-92.52% 🟢
    MTTFB 차이 평균 (Average Difference)2838.38 ms112.52 ms-96.04% 🟢
    MTTFB 평균적인 변동률 (Average Variability)75.00%10.67%-85.77% 🟢
  • 2023-12-29 성능 최적화 과정 - 10 : Nginx Ingress replicaSet=2~3

    개선된 지표확인

    img img img

    MetricIngress Pod 1Ingress Pod 2Change
    Total Tests181,050240,58732.93% 🟢
    Error Rate0.00%(0)0.00%(3)N/A
    TPS 평균 (Average)312.16410.5531.51% 🟢
    TPS p50319.00422.5032.38% 🟢
    TPS p95217.45288.6032.69% 🟢
    TPS p99132.28147.6211.62% 🟢
    TPS p99.996.5237.04-61.68% 🔴
    MTTFB 평균 (Average)950.89 ms709.86 ms-25.29% 🟢
    MTTFB p50919.20 ms693.65 ms-24.54% 🟢
    MTTFB p951322.11 ms958.64 ms-27.49% 🟢
    MTTFB p991833.22 ms1117.45 ms-39.05% 🟢
    MTTFB p99.92099.12 ms1396.80 ms-33.54% 🟢
    MTTFB 차이 평균 (Average Difference)112.52 ms58.82 ms-47.66% 🟢
    MTTFB 평균적인 변동률 (Average Variability)10.67%7.67%-28.09% 🟢
  • 2024-01-03 성능 최적화 과정 - 11 : RDB b-tree Long type PK indexing

    개선된 지표확인
    MetricBeforeAfterChange
    Total Tests220,313236,9577.54% 🟢
    Error Rate0.00%(7)0.00%(0)-
    TPS 평균377.24404.367.18% 🟢
    TPS p50390.25420.507.76% 🟢
    TPS p95270.60277.902.69% 🟢
    TPS p9992.5864.34-30.53% 🔴
    TPS p99.934.0543.1726.74% 🟢
    MTTFB 평균496.27 ms456.42 ms-8.03% 🟢
    MTTFB p50480.31 ms431.84 ms-10.07% 🟢
    MTTFB p95882.81 ms799.67 ms-9.41% 🟢
    MTTFB p991163.81 ms1130.67 ms-2.84% 🟢
    MTTFB p99.91225.86 ms1275.62 ms4.06% 🔴
    MTTFB 차이 평균106.51 ms74.02 ms-30.46% 🟢
    MTTFB 평균적인 변동률20.77%15.27%-26.60% 🟢
  • 2024-02-04 성능 최적화 과정 - 12 : RDB 캐싱 (Look-Aside + Write-Around)

    개선된 지표확인

    img img img

    MetricBeforeAfterChange
    Total Tests12,35616,78836.00% 🟢
    Error Rate0.00%(0)0.00%(0)0 ⚪
    TPS 평균 (Average)228.81310.8935.87% 🟢
    TPS p50240.50307.5027.84% 🟢
    TPS p95162.40282.8574.20% 🟢
    TPS p99107.09237.47121.77% 🟢
    TPS p99.990.36223.55147.24% 🟢
    MTTFB 평균 (Average)438.32 ms324.82 ms-25.93% 🟢
    MTTFB p50432.94 ms323.11 ms-25.27% 🟢
    MTTFB p95733.43 ms380.09 ms-48.14% 🟢
    MTTFB p99912.43 ms471.73 ms-48.31% 🟢
    MTTFB p99.9951.93 ms496.67 ms-47.85% 🟢
    MTTFB 차이 평균 (Average Difference)65.06 ms24.31 ms-62.68% 🟢
    MTTFB 평균적인 변동률 (Average Variability)13.73%7.67%-44.11% 🟢

📕 프로젝트를 수행하기 위해 따로 공부 및 정리한 포스팅

그 밖에 Reactor, R2DBC, Spring-WebFlux Transactional 처리, K8S, AWS, etc.

📗 프로젝트 진행 포스팅


Table of contents