Technote

성능 최적화 실무

연재 트래픽이 늘기 시작할 때 8부 중 3부

갑자기 유입이 몰릴 때 사이트가 버티게 하는 준비

기회는 예고 없이 옵니다. 소개 글 하나로 몰린 방문자를 흰 화면으로 맞이하지 않으려면, 평소에 해 둘 준비가 몇 가지 있습니다.

유입이 몰리는 순간은 대개 좋은 일과 함께 옵니다. 기사에 소개되거나, 커뮤니티에서 화제가 되거나, 광고 하나가 예상보다 잘 돌아갈 때입니다. 문제는 그 순간이 예고 없이 오고, 준비할 시간이 없다는 것입니다.

이 회차의 목표는 서버를 크게 만드는 것이 아닙니다. 같은 서버로 훨씬 많은 사람을 받는 구성을 미리 만들어 두는 것입니다.

몰릴 때 먼저 무너지는 곳

서버가 동시에 처리할 수 있는 요청 수에는 한계가 있습니다. 한계를 넘으면 요청이 줄을 서고, 줄이 길어지면 앞사람의 처리가 끝나기 전에 뒷사람의 대기가 만료되어 오류 화면이 나옵니다. 그래서 붕괴는 서서히 오지 않고 갑자기 옵니다 — 멀쩡하다가 한순간에 전부 실패합니다.

한계를 넘는 순간의 진행 — 완만하게 나빠지지 않고 한 번에 무너진다

여기서 핵심은 대부분의 방문자가 같은 화면을 본다는 사실입니다. 소개 글을 보고 온 사람들은 거의 다 같은 페이지 한두 개를 열어 봅니다. 그 화면을 매번 새로 만드는 대신 한 번 만들어 둔 것을 나눠 주면, 같은 서버가 감당하는 인원이 크게 달라집니다.

준비 1 — 페이지 캐시를 미리 켜 둡니다

지난 회차의 페이지 캐시가 여기서 결정적입니다. 몰리는 순간에 켜는 것이 아니라 평소에 켜 두고 정상 동작을 확인해 둔 상태여야 합니다. 급할 때 처음 켜면 캐시가 잘못 잡아 엉뚱한 화면이 고정되는 사고가 겹칩니다.

확인 방법은 간단합니다. 로그아웃 상태(또는 시크릿 창)로 페이지를 두 번 열어 보고, 두 번째가 눈에 띄게 빠른지 봅니다. 응답 헤더에 캐시 적중 여부가 표시되는 서버도 많습니다.

준비 2 — 무거운 화면 하나를 찾아 둡니다

사이트에는 캐시할 수 없는 화면이 반드시 몇 개 있습니다. 문의 폼 제출, 검색 결과, 로그인 영역이 그렇습니다. 몰리는 상황에서 실제로 서버를 붙잡는 것은 그 몇 개입니다.

몰릴 때의 부하 지도 — 아래 세 줄이 서버를 붙잡는다

대비는 거창하지 않습니다. 사이트 내 검색을 쓰지 않는다면 꺼 두고, 문의 폼에 자동화 방지 장치를 붙여 두는 정도로도 상당 부분이 정리됩니다. 자동화된 요청이 그 무거운 화면만 골라 두드리는 일이 실제로 흔합니다.

준비 3 — 이미지와 알림

몰리는 순간 대역폭을 가장 많이 먹는 것은 이미지입니다. 첫 화면에 나오는 큰 이미지 몇 장만 적정 크기로 줄여 두어도 체감이 달라집니다.

그리고 사이트가 죽었을 때 알림이 오는 상태인지 확인하세요. 준비의 마지막 조각은 빨리 아는 것입니다 — 다음 회차의 주제입니다.

부하와 캐시 구성에 관한 글은 성능 최적화 아카이브에 있고, 몰리기 전에 구성을 한 번 정비하고 싶다면 최적화 지원 사업이 캐시 계층과 서버 설정을 함께 다룹니다.

다음 회차

다음 회차는 장애 감지입니다. 사이트가 멈췄다는 사실을 고객의 연락으로 알게 되는 상황을, 그 전에 끝내는 방법을 다룹니다.

이 주제의 다른 글

노하우 목록으로

성능 최적화 실무

태그 하나가 더하는 밀리초는 누가 냅니까

추적 스크립트는 내려받고 끝나지 않습니다. 파싱과 실행이 메인 스레드를 점유하는 동안 페이지는 손가락에 반응하지 않습니다. 그 비용은 직접 잴 수 있습니다.

마케터 3분 읽기

₩270,000 · 신청하기