![[부하 테스트] 병목지점 판단](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm8EtO%2FbtsOmGzjEDd%2F8h7CMIIhL67Xfn7ZEBb2UK%2Fimg.webp)
[부하 테스트] 병목지점 판단Back-End/부하 테스트2025. 6. 4. 00:42
Table of Contents
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.
모니터링과 병목지점
부하 테스트 과정 중에 성능을 개선하려면 병목 지점을 먼저 파악해야 한다.
병목 지점을 파악하기 위해서는 각 컴퓨터의 CPU 사용률과 메모리 사용률과 같은 값들을 지속적으로 확인할 수 있어야 한다.
여기서 얘기하는 컴퓨터는 로드 밸런서(ELB), 백엔드 서버(EC2), DB(RDS), 캐시(ElastiCache) 등을 얘기한다. 무언가 요청을 받아서 처리하는 형태의 서비스는 전부 컴퓨터에서 처리하기 때문이다.
컴퓨터가 무언가를 처리하려면 CPU와 메모리 같은 자원이 필요하다. 만약 컴퓨터가 처리할 수 있는 최대한의 요청을 처리하고 있다면, CPU 사용률 또는 메모리 사용률과 같은 값이 100%에 가까운 값일 것이다.
여기서 특정 컴퓨터의 자원 사용률이 100%에 가깝다면 병목 지점이라고 판단한다.
위 내용을 정리해보면, 병목 지점을 파악하기 위해서 부하 테스트를 하면서 컴퓨터의 자원(CPU, 메모리 등)을 모니터링(= 어떤 대상을 지속적으로 감시)해야 한다.
메트릭(Metric)
메트릭(Metric)이란 수치 데이터 또는 측정값을 의미한다.
모니터링을 통해 측정하는 CPU, 메모리 등의 값을 전부 메트릭(Metric)이라고 부른다.
모니터링 지표를 보고 병목 지점 판단
모니터링을 통해서 각 컴퓨터의 메트릭을 유심히 살펴서 병목지점을 판단해야한다.
위 사진을 통해서 RDS가 병목지점임을 알 수 있다.
각 시스템별 자원 소모
데이터베이스의 자원 소모
- 디스크로부터 데이터를 조회해서 메모리에 올림
- 메모리에서 연산, 필터링, 집계 등의 작업을 CPU가 처리함
- DB의 특성상 많은 양의 데이터를 가지고 작업을 해야 하는 경우가 빈번해서, CPU, 메모리 둘 다를 많이 사용하는 편이다.
백엔드 서버의 자원 소모
- 백엔드 서버의 로직에 파일을 읽어오거나, 파일을 생성하는 로직이 없다면 디스크는 거의 사용할 일이 없다.
- 파일 업로드나 파일 조회 같은 건 S3와 같은 서비스를 활용해 별도로 분리하는 추세다.
- DB로부터 불러오는 데이터의 양이 그렇게 크지 않을 경우 메모리를 많이 사용할 일이 없다.
- 많은 요청에 대해 로직을 처리해야 하기 때문에 CPU를 많이 사용하는 편이다.
- 복잡한 연산 작업(인코딩, 디코딩, 암호화 등)을 사용할 경우 CPU를 많이 사용한다.
로드밸런서의 자원 소모
- 요청이 들어오면 적절하게 서버들한테 골고루 트래픽을 분배해주는 역할을 한다.
- 임시로 저장해야 하는 데이터가 많은 게 아니기 때문에 메모리를 많이 사용할 일이 없다.
- 많은 요청을 분배해주는 로직(= 연산)을 처리하기 때문에 CPU를 많이 사용한다.
캐시(Redis)의 자원 소모
- 캐시의 특성상 빠르게 데이터를 조회해야 하기 때문에 디스크에 데이터를 저장하지 않고 메모리에 데이터를 저장해둔다.
- 디스크보다 메모리가 데이터 접근 속도(읽기, 쓰기)가 훨씬 빠르기 때문이다.
- 캐시의 주 역할은 데이터 조회다. 연산할만한 작업은 많이 없다. 따라서 CPU보다는 메모리를 많이 사용하는 편이다.
'Back-End > 부하 테스트' 카테고리의 다른 글
[부하 테스트] 트래픽 증가에 따른 시스템 설계 및 확장 (0) | 2025.06.05 |
---|---|
[부하 테스트] k6 설치 및 사용 방법 (0) | 2025.06.03 |
[부하 테스트] 처리량(Throughput), 지연 시간(Latency), 병목 지점(Bottleneck Point) (0) | 2025.06.02 |