성능 개선

서버 성능 올리기 (초급편)

Code Maestro 2022. 12. 31. 15:35
728x90

1. 서버 성능의 기본 지표

서버 성능의 기본 지표는 두 가지이다. 1)응답 시간과 2)처리량이다. 처리량은 시스템에 대한 성능을 평가며, 단위로는 주로 TPS (Transactions per Second)를 사용한다. 응답 시간대기 시간과 처리 시간을 합친 것이다. 

 

 

2. 처리량 올리기

1) 서버 숫자 증가(쉬운 방법)

2) 쓰레드 풀 + DB 커넥션 풀 증가  => 동시 처리할 수 있는 개수가 증가한다. 

 

그러나 위의 방식도 한계가 있다. DB에 대한 임계치가 넘어가면 서버가 먹통이 난다. 

즉, (DB 쿼리 시간 증가 => 처리 시간 증가 =>  TPS 하락) 과정이 나타난다. 

 

TPS를 높이려면 기본적으로 처리 시간을 줄여야 한다.  

 

3. 처리 시간 줄이기

처리 시간을 줄일라면 비중이 높은 대상을 줄여야 한다. 대상은 아래와 같다.

 

  • DB 연동
  • API 호출
  • 데이터 집계/계산

 

1)  DB 처리 시간 줄이기

보통 세 가지 방법을 사용한다. 쿼리 튜닝, 캐시, 장비 업그레이드

 

(1) 캐시 : 데이터 캐싱을 통해 어느 정도 쿼리 전송을 줄일 수 있다. 데이터 캐싱은 처음 쿼리를 전송할 때 데이터베이스에서 직접 가져오지만, 두 번째부터는 캐시에 저장된 데이터를 가져와 DB까지 쿼리를 전송하지 않아도 된다.  

 

DB에서 캐시용으로 NoSQL 류의 Redis를 주로 사용한다. 메모리 기반이고, 성능을 목적으로 했기에 캐시 서버로 주로 사용한다. 그러나 메모리 캐시는 잘못 사용하면 성능이 더 안 좋아지기에 지식에 대한 높은 이해도는 필수이다. 

 

(2) 쿼리 튜닝: 쿼리만 잘 튜닝해서 응답시간이 획기적으로 주는 경우가 많다. 

 

(3) 장비 업그레이드: 여기서도 두 가지로 나뉜다. 

 

첫 번째는 아래와 같이 읽기용 DB와 쓰기용 DB를 나눈다

 

두 번째는 하드웨어를 업그레이드 하는 것이다. CPU와 메모리를 업그레이드하면 속도가 증가하고, DB에 SSD를 꼽으면 정말 좋은 성능을 얻을 수 있다.

 

2)  API 호출 처리 시간 줄이기 

API의 호출 응답 시간이 증가하면 처리 시간은 증가한다. 즉, 성능이 감소한다. 

 

API 호출 성능을 개선하는 방법으로 2가지가 있다. 

 

(1) 캐시: DB와 마찬가지로 서버에 캐시 서버를 두면 시간을 줄일 수 있다. 

 

(2) 호출 제거: 호출을 제거하려면 메시징에 비동기 연동을 하면 된다. 메시징에는 kafaka를 사용한다. 외부 호출 연동자체가 사라지니까 처리 시간도 같이 줄어든다. 

 

3)  데이터 집계와 계산 

데이터 집계와 계산을 실시간으로 하면 DB에 많은 부하를 준다. 그래서 미리 계산해서 캐시나 DB에 보관하면 된다. 좋아요 수 같은 통계류가 여기에 해당된다.

 

 

4. 대기 시간 줄이기

응답 시간을 줄이려면 대기 시간도 줄여야 한다. 대기 시간을 줄이려면 3가지 방법이 있다. 

 

(1) 응답 크기 줄이기: 응답 압축, 이미지 파일 크기 줄이기 등.

 

(2) 트래픽 분리: 이미지, 정적 파일을 CDN을 통해 제공. 

 

(3) 대역폭 늘이기

대역폭이 감소하면 아래와 같은 현상이 일어난다. 

 

그래서 대역폭을 증가하는 게 중요하다. 대역폭을 늘리려면 비용 측면에서 CDN이 유리하다. 

5. 정리

1) 처리량 증가

  • 처리 시간을 줄인다.
  • 장비 추가 (스케일 아웃)
  • 쓰레드풀/커넥션풀 크기 조절

2) 대기 시간 줄이기

  • 응답 크기 줄이기
  • 정적 파일 트래픽 분리(CDN)
  • 대역폭 늘리기

3) 처리 시간 줄이기

  • DB 쿼리 튜닝
  • 캐시
  • 데이터 미리 집계

 

출처: 최범균 유튜브

 

자세한 내용은 위의 유튜브를 참고하는 게 좋다. 

728x90