트래픽 증가에 따른 시스템 설계 및 확장 방법은 병목지점에 따라 성능 개선 방법이 달라진다.
- 시스템 설계 방식
- 가장 간단한 형태
- EC2서버 한 대에서 프론트엔드, 백엔드, DB 관련 프로그램을 전부 실행시키는 형태의 구성
- 장점
- 하나의 서버에서 모든 리소스를 관리하기 위해 관리 및 조직이 간단함.
- 다양한 리소스를 쓰지 않기 때문에 비용이 적게 나옴.
- 단점
- 데이터베이스가 많은 컴퓨팅 자원을 사용하여, 웹 애플리케이션 성능에 악영향을 줌.
- 위와 같은 단점 때문에 별도 서버를 분리하는 형식을 많이 가져감.
- 데이터베이스 분리
- 웹 서버와 데이터베이스를 분리한 인프라 구성
- 단점
- 인프라 구성에서 트래픽이 많아지면 정적 파일을 제공하는 부분에서 문제 발생 가능성이 큼.
- 정적 파일은 용량이 크므로 컴퓨팅 자원을 많이 소모하여 서버 과부화가 걸릴 가능성이 큼.
- 이를 해결하기 위해 정적 파일 제공 서버만 별도 분리하는 구성을 생성.
- 정적 파일 서버 분리 (S3)
- S3를 활용해 정적 파일만을 제공하는 별도 서버 구축
- 정적 파일은 용량이 크므로, 정적 파일을 제공하는 곳과 거리가 멀수록 응답 속도가 오래 걸릴 수 있음.
- 이를 해결하기 위해 캐싱의 원리가 적영된 CDN을 활용하여 장치 파일 전송 속도 향상
- CDN 서버 활용
- 사용자 요청이 많아지는 경우, EC2에 병목지점이 생기는 경우가 있음.
- 수직적 확장과 수평적 확장을 활용 (이중화의 장점 때문에 주로 수평적 확장)
- 수평적 확장
- 여러개의 웹 애플리케이션을 사용하는 방식.
- 사용자가 직접 여러 서버에 골고루 요청을 보리게 시킬 수 없음.
- 여러 대의 웹 애플리케이션 서버에 골고루 전달하기 위한 장치, 로드밸런서 사용
- 로드밸런서 도입
- 수평적 확장을 통해 여러 대의 EC2에 골고루 트래픽을 분산시킬 수 있음.
- 늘어난 웹 애플리케이션으로 많은 수의 요청이 DB에 몰리게 됨.
- DB에서 병목 현상 발생 시, DB자체적으로 성능 개선을 먼저 고려 (인덱스 활용, 역정규화, SQL문 튜닝 등)
- 이후에도 병목 현상 발생 시, 수평적 확장을 고려
- DB의 수평적 확장은 어려운 점이 많음.
- 이전에 저장된 데이터를 모든 DB에 복사해야 하므로, 데이터 변경시 마다 동기화해야 함.
- 데이터 동기화가 DB성능 저하를 유발하여, 장점보다 단점이 더 큰 확장 방식이라고 판단.
- 따라서 DB는 수평적 확장보다 수직적 확장으로 주로 성능을 개선.
- DB 수직적 확장 이후에도 추가 성능 개선이 필요하다면 읽기 전용 DB 도입을 고려.
- 읽기 전용 데이터베이스 (Read Replica) 도입
- 실 서비스 중 일부는 정밀한 데이터 동기화가 필요 없는 경우가 있음.
- 정밀한 데이터 동기화기 필요 없는 경우, 읽기 전용 데이터베이스를 많이 활용.
- 하나의 DB가 모든 트래픽을 처리했었는데, 읽기 전용 DB를 도입함으로써 나눠서 처리할 수 있게 됨.
- 전체적인 Throughput은 증가하지만, 고사양의 DB는 비용이 크게 상승하므로, 캐시 서버를 많이 사용함.
- 캐시 서버 도입.
- 데이터 동기화가 불필요한 사항을 캐시로 조회할 수 있도록 함.
- 데이터를 조회할 때 항상 DB로 요청을 보낸 반면 캐시 서버를 도입함으로써 데이터 조회 요청 응답을 DB서버와 캐시 서버가 나누어 처리할 수 있게됨.
- 즉, 캐시 서버를 활용하여 DB부하를 줄일 수 있음.
- 가장 간단한 형태
- 병목 지점에 따른 성능 개선 방법
- EC2가 병목 지점일 경우
- 애플리케이션 자체의 비효율적인 로직을 효율화하기
- 정적 파일 서버를 분리. (S3, Cloudfront)
- 로드밸런서(ELB)를 활용하여 수평적 확장
- 수직적 확장
- RDS가 병목 지점일 경우
- 비효율적인 쿼리 개선 (index 활용 , SQL문 튜닝, 역정규화 등)
- 읽기 전용 데이터베이스 도입 (Read Replica)
- 캐시 서버 도입
- EC2가 병목 지점일 경우
'Server&load > load test' 카테고리의 다른 글
병목 지점을 해결하여 성능 개선하기 (0) | 2025.06.01 |
---|---|
병목현상 측정환경 생성 및 병목지점 진단. (0) | 2025.05.31 |
모니터링과 메트릭 (0) | 2025.05.27 |
부하 테스트의 기본 개념 (0) | 2025.05.24 |