서버 성능 및 요청 관리

HTTP 프로토콜을 공부하다 클라이언트와 서버 간의 상호작용에 대해 살짝 알아보았다…
HootJem's avatar
Aug 27, 2024
서버 성능 및 요청 관리
 

서버의 성능은 서버가 처리할 수 있는 요청(request) 객체의 개수에 의해 결정됩니다.
예를 들어, 서버가 최대 50개의 객체를 처리할 수 있다면, 51번째 요청부터는 대기(wait) 상태가 됩니다. 다른 요청이 종료되고 객체가 반환되면 대기 상태에 있는 요청이 처리됩니다.
만약 동시에 100개의 요청이 들어오게 되면, 서버는 과부하가 걸려 "터지게" 됩니다. 이러한 상황을 방지하기 위해 서버를 추가로 구축하는 방법이 필요합니다. 이를 서버 레이드라고 하며, DevOps에서는 이러한 서버 증설을 오토스케일링(auto-scaling)이라고 부릅니다.
 

서버 스케일 전략

서버의 성능을 향상시키는 방법에는 두 가지가 있습니다.
  • 스케일 업(Scale Up): 더 성능이 좋은 컴퓨터(서버)로 교체하거나 업그레이드하는 방법입니다.
  • 스케일 아웃(Scale Out): 서버의 개수를 늘려서 부하를 분산하는 방법입니다.
복사된 서버로 클라이언트가 요청을 보내는 경우, 적절한 응답을 받지 못할 수 있습니다. 따라서 서버가 과부하로 터지기 전에 프로비저닝(provisioning)을 통해 미리 준비를 해두는 것이 중요합니다.
 

로드 밸런싱 및 단일 진입점

이 문제를 해결하기 위해 단일 진입점(single entry point)를 만듭니다. 이 역할을 하는 것이 로드 밸런서(load balancer)입니다. (로드 밸런서 : 안바쁜 쪽으로 요청을 보내준다.)
notion image
 
서버가 각각 세션 저장소를 갖고 있다고 가정했을때 클라이언트의 로그인 요청이 서버1로 가고 게시글 작성이 서버 2로 가게 되면 사용자의 세션을 유지할 수 없기때문에, 외부에 세션 저장소를 두어야 합니다.
notion image
이처럼 외부 세션 저장소를 사용하면 일관된 세션 상태를 유지할 수 있습니다.
그러나 이 방식은 추가적인 데이터베이스(DB)가 필요하며, 요청 처리 속도가 느려질 수 있습니다. 따라서 이러한 저장소는 I/O 발생을 최소화할 수 있는 메모리 기반 DB를 사용하는 것이 좋습니다. 대표적인 메모리 DB로는 MemcachedRedis가 있습니다.
Share article

[HootJem] 개발 기록 블로그