트래픽 증가에 따른 시스템 설계 및 확장 방법

2025. 6. 2. 21:04·Server&load/load test
트래픽 증가에 따른 시스템 설계 및 확장 방법은 병목지점에 따라 성능 개선 방법이 달라진다.
  1. 시스템 설계 방식
    1. 가장 간단한 형태
      • EC2서버 한 대에서 프론트엔드, 백엔드, DB 관련 프로그램을 전부 실행시키는 형태의 구성
      • 장점
        • 하나의 서버에서 모든 리소스를 관리하기 위해 관리 및 조직이 간단함.
        • 다양한 리소스를 쓰지 않기 때문에 비용이 적게 나옴.
      • 단점
        • 데이터베이스가 많은 컴퓨팅 자원을 사용하여, 웹 애플리케이션 성능에 악영향을 줌.
        • 위와 같은 단점 때문에 별도 서버를 분리하는 형식을 많이 가져감.
    2. 데이터베이스 분리
      • 웹 서버와 데이터베이스를 분리한 인프라 구성
      • 단점
        • 인프라 구성에서 트래픽이 많아지면 정적 파일을 제공하는 부분에서 문제 발생 가능성이 큼.
        • 정적 파일은 용량이 크므로 컴퓨팅 자원을 많이 소모하여 서버 과부화가 걸릴 가능성이 큼.
        • 이를 해결하기 위해 정적 파일 제공 서버만 별도 분리하는 구성을 생성.
    3. 정적 파일 서버 분리 (S3)

      • S3를 활용해 정적 파일만을 제공하는 별도 서버 구축
      • 정적 파일은 용량이 크므로, 정적 파일을 제공하는 곳과 거리가 멀수록 응답 속도가 오래 걸릴 수 있음.
      • 이를 해결하기 위해 캐싱의 원리가 적영된 CDN을 활용하여 장치 파일 전송 속도 향상
    4. CDN 서버 활용
      • 사용자 요청이 많아지는 경우, EC2에 병목지점이 생기는 경우가 있음.
      • 수직적 확장과 수평적 확장을 활용 (이중화의 장점 때문에 주로 수평적 확장)
    5. 수평적 확장
      • 여러개의 웹 애플리케이션을 사용하는 방식.
      • 사용자가 직접 여러 서버에 골고루 요청을 보리게 시킬 수 없음.
      • 여러 대의 웹 애플리케이션 서버에 골고루 전달하기 위한 장치, 로드밸런서 사용
    6. 로드밸런서 도입
      • 수평적 확장을 통해 여러 대의 EC2에 골고루 트래픽을 분산시킬 수 있음.
      • 늘어난 웹 애플리케이션으로 많은 수의 요청이 DB에 몰리게 됨.
        • DB에서 병목 현상 발생 시, DB자체적으로 성능 개선을 먼저 고려 (인덱스 활용, 역정규화, SQL문 튜닝 등)
        • 이후에도 병목 현상 발생 시, 수평적 확장을 고려
      • DB의 수평적 확장은 어려운 점이 많음.
        • 이전에 저장된 데이터를 모든 DB에 복사해야 하므로, 데이터 변경시 마다 동기화해야 함.
        • 데이터 동기화가 DB성능 저하를 유발하여, 장점보다 단점이 더 큰 확장 방식이라고 판단.
        • 따라서 DB는 수평적 확장보다 수직적 확장으로 주로 성능을 개선.
        • DB 수직적 확장 이후에도 추가 성능 개선이 필요하다면 읽기 전용 DB 도입을 고려.
    7. 읽기 전용 데이터베이스 (Read Replica) 도입
      • 실 서비스 중 일부는 정밀한 데이터 동기화가 필요 없는 경우가 있음.
      • 정밀한 데이터 동기화기 필요 없는 경우, 읽기 전용 데이터베이스를 많이 활용.
      • 하나의 DB가 모든 트래픽을 처리했었는데, 읽기 전용 DB를 도입함으로써 나눠서 처리할 수 있게 됨.
      • 전체적인 Throughput은 증가하지만, 고사양의 DB는 비용이 크게 상승하므로, 캐시 서버를 많이 사용함.
    8. 캐시 서버 도입.
      • 데이터 동기화가 불필요한 사항을 캐시로 조회할 수 있도록 함.
      • 데이터를 조회할 때 항상 DB로 요청을 보낸 반면 캐시 서버를 도입함으로써 데이터 조회 요청 응답을  DB서버와 캐시 서버가 나누어 처리할 수 있게됨.
      • 즉, 캐시 서버를 활용하여 DB부하를 줄일 수 있음.
  2. 병목 지점에 따른 성능 개선 방법
    1. EC2가 병목 지점일 경우
      • 애플리케이션 자체의 비효율적인 로직을 효율화하기
      • 정적 파일 서버를 분리. (S3, Cloudfront)
      • 로드밸런서(ELB)를 활용하여 수평적 확장
      • 수직적 확장
    2. RDS가 병목 지점일 경우
      • 비효율적인 쿼리 개선 (index 활용 , SQL문 튜닝, 역정규화 등)
      • 읽기 전용 데이터베이스 도입 (Read Replica)
      • 캐시 서버 도입

'Server&load > load test' 카테고리의 다른 글

병목 지점을 해결하여 성능 개선하기  (0) 2025.06.01
병목현상 측정환경 생성 및 병목지점 진단.  (0) 2025.05.31
모니터링과 메트릭  (0) 2025.05.27
부하 테스트의 기본 개념  (0) 2025.05.24
'Server&load/load test' 카테고리의 다른 글
  • 병목 지점을 해결하여 성능 개선하기
  • 병목현상 측정환경 생성 및 병목지점 진단.
  • 모니터링과 메트릭
  • 부하 테스트의 기본 개념
몽자비루
몽자비루
코딩공부 정리용 블로그입니다.
  • 몽자비루
    공부하는 블로그
    몽자비루
  • 전체
    오늘
    어제
    • 분류 전체보기 (173)
      • python (30)
        • python_selenium (16)
        • python_pygame (3)
      • appium (0)
      • 쿠버네티스 (60)
        • linux (8)
        • shell programming (8)
        • docker (18)
        • cka (23)
      • postman&API (16)
      • QA성장하기 (30)
        • 개발자에서 아키텍트로 스터디 (6)
        • 소프트웨어 공학 이해도 높이기 (6)
        • 테스팅 전문 지식 쌓기 (18)
      • 에러일기 (1)
      • Server&load (35)
        • AWS (27)
        • load test (5)
        • CI CD (3)
        • Jmeter (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    네트워크 테스트
    e2c
    postman
    로스트아크
    쿠버네티스
    도커
    k8s
    cka
    애플리케이션로그
    스터디
    사드웨어리소스
    로스트아크api
    테스트스크립트
    API
    개발자에서아키텍트로
    LOSTARK
    linux
    포스트맨
    앱공존성
    테스트 계획서
    QAKOREA
    python
    리눅스
    application log
    .cpu
    테스트 계획서 만들어보기
    공존성테스트
    vi에디터
    테스트 결과보고서
    qa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
몽자비루
트래픽 증가에 따른 시스템 설계 및 확장 방법
상단으로

티스토리툴바