Skip to content
/ shop Public

네트워크 망 구성 및 캐싱 적용 후 성능 테스트를 위한 토이 프로젝트

Notifications You must be signed in to change notification settings

legowww/shop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📌 프로젝트 구현

상품 검색 결과

JSON
{
    "status": 200,
    "data": {
        "productGroupWithProductPreviews": [
            {
                "productGroup": {
                    "id": 1,
                    "name": "노스페이스 1996 눕시"
                },
                "productPreviews": [
                    {
                        "productId": 219462,
                        "name": "노스페이스 1996",
                        "price": 3000
                    },
                    {
                        "productId": 219447,
                        "name": "노스페이스 1996",
                        "price": 30000
                    },
                    {
                        "productId": 219461,
                        "name": "노스페이스 1996",
                        "price": 30000
                    },
                    {
                        "productId": 6,
                        "name": "[노스페이스] 1996 눕시",
                        "price": 350000
                    },
                    {
                        "productId": 1,
                        "name": "노스페이스 남성 1996 눕시 점퍼",
                        "price": 360000
                    }
                ]
            },
            {
                "productGroup": {
                    "id": 2,
                    "name": "노스페이스 1992 눕시"
                },
                "productPreviews": [
                    {
                        "productId": 6336,
                        "name": "상품6336",
                        "price": 12001
                    },
                    {
                        "productId": 105184,
                        "name": "상품105184",
                        "price": 12002
                    },
                    {
                        "productId": 169676,
                        "name": "상품169676",
                        "price": 12002
                    },
                    {
                        "productId": 137584,
                        "name": "상품137584",
                        "price": 12003
                    },
                    {
                        "productId": 40680,
                        "name": "상품40680",
                        "price": 12003
                    }
                ]
            },
            {
                "productGroup": {
                    "id": 3,
                    "name": "노스페이스 힘다운"
                },
                "productPreviews": [
                    {
                        "productId": 1017,
                        "name": "상품1017",
                        "price": 12000
                    },
                    {
                        "productId": 140201,
                        "name": "상품140201",
                        "price": 12000
                    },
                    {
                        "productId": 190629,
                        "name": "상품190629",
                        "price": 12000
                    },
                    {
                        "productId": 51745,
                        "name": "상품51745",
                        "price": 12000
                    },
                    {
                        "productId": 72661,
                        "name": "상품72661",
                        "price": 12001
                    }
                ]
            }
        ]
    },
    "serverDateTime": "2024-01-06T18:34:35"
}

🏛️ 아키텍처

result2

🛜 네트워크 구성

result1

Public IP를 가지는 Nginx를 통해서만 Private IP를 가지는 WAS와 통신할 수 있도록 인프라 구축

🔨 기술

  • Nginx
  • Spring Boot 3.2
  • MySQL 8.0.35
  • Docker
  • Redis

✅ 캐싱 적용 & 성능 테스트

환경

  • EC2 t2.micro 인스턴스
  • MySQL ProductGroup 테이블 레코드 8개
  • MySQL Product 테이블 레코드 20만개

캐싱 적용 전

쿠팡, 지마켓 등의 사이트에서 상품 검색 시 소요되는 응답 시간을 확인한 결과, 800ms~1600ms 사이의 응답시간을 가짐을 확인함 현재 시스템은 VUser 값을 16명으로 테스트했을 때, 5.2 RPS 의 처리량을 보장하며, 위의 사이트들과 유사한 응답시간을 가질 수 있었음

VUser Average Response Time RPS
16 1574ms 5.2
f1

캐싱 적용 후

검색어 캐싱(Caffaine Cache)

f2

최저가 상품 캐싱(Redis)

f3

image

VUser Average Response Time RPS
300 206ms 162.2

위 차트를 살펴보면 Cache Miss가 잦게 발생한 후 일정 시간이 흐른 뒤에는 처리량과 응답 속도가 안정화되는 것을 볼 수 있다. 이는 모든 요청에 Cache Hit이 적용되었다는 것을 의미하며, 이로 인해 VUser 수를 300명까지 늘려도 문제가 발생하지 않았다. 하지만, 테스트 환경 설정의 한계로 인해 Cache Hit이 100%에 도달한 이번 결과는 일반적인 상황에서 기대하기 어려운 극적인 성능 향상 사례입니다. 실제 업무 환경에서는 자주 사용되는 검색어나 상품 정보를 분석하여 캐시 히트 비율을 약 70% 정도로만 유지해도, 기존 시스템 대비 상당한 성능 향상을 기대할 수 있을 것으로 판단됩니다.

✅ 기타 성능 개선

gzip

적용 전 적용 후
1247Bytes 617Bytes

서버 응답에 사용되는 네트워크 비용을 절감시키기 위해 application/json MIME 에 대해 gzip 압축 적용

ETag

정적 리소스인 상품검색 화면 HTML 에 대해 조건부 캐싱 요청을 적용할 수 있도록 ETag 를 적용

About

네트워크 망 구성 및 캐싱 적용 후 성능 테스트를 위한 토이 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published