컨테이너 확장의 기술: 재시도

F5 에코시스템 | 2018년 1월 11일

컨테이너 확장은 단순히 서비스 앞에 프록시를 배치하고 끝내는 것 이상의 작업입니다. 확장에는 단순한 분산 외에도 더 많은 요소가 필요하며, 빠르게 변화하는 컨테이너 환경에서 확장성을 보장하려면 재시도, 서킷 브레이커, 검색, 분산, 모니터링이라는 다섯 가지 고유한 기능이 필요합니다.

컨테이너 확장 기술을 다루는 이번 글에서는 재시도에 대해 자세히 살펴보겠습니다.

재시도

어릴 때 게임을 하다 보면 많은 게임에서 재시도라는 개념을 흔히 접하게 됩니다. 실패한 뒤 다른 아이들이 다시 해보게 해주길 바라며 “다시 할래!”라고 외치는 경우가 많죠. 때로는 허락해 주고, 때로는 그러지 않습니다. 하지만 제가 본 바로는, 그렇다고 아이가 다시 시도하는 걸 포기하는 경우는 거의 없습니다.

앱(원한다면 서비스라고 해도 좋습니다)을 확장할 때도 재시도의 개념은 거의 같습니다. 프록시가 서비스를 선택해 요청을 처리하려다 오류를 받습니다. 기본적인 부하 분산 시나리오에서는 일반적으로 HTTP 응답 코드를 확인해 오류 여부를 판단합니다. “200 OK”가 아닌 응답은 모두 오류입니다. 여기에는 네트워크 및 TCP 계층의 시간 초과도 포함됩니다. 부하 분산기는 실패한 응답을 그대로

광기의 정의에 관한 명언

요청자에게 반환하거나, 충분히 지능적이라면 이후 요청에서 성공적인 응답을 받을 수 있기를 기대하며 요청을 재시도할 수 있습니다.

아주 기본적인 이야기처럼 들리지만, 대규모 시스템의 초창기에는 재시도라는 개념 자체가 없었습니다. 실패하면 그대로 실패한 것이고, 우리는 그 상황을 직접 처리해야 했습니다. 보통은 브라우저에서 수동으로 새로고침을 시도했습니다. 이후 프록시가 자체적으로 재시도를 수행할 만큼 똑똑해지면서, 수많은 키보드의 “CTRL” 키와 “R” 키가 닳는 일을 막을 수 있게 되었습니다.

겉으로 보기에는 이는 광기의 정의를 단적으로 보여 주는 사례입니다. 결국 요청이 처음에 실패했다면, 두 번째(심지어 세 번째)에는 성공할 것이라고 기대할 이유가 있을까요?

그 답은 실패의 원인에 있습니다. 앱을 확장할 때는 연결 용량이 장애에 미치는 영향을 이해하는 것이 중요합니다. 특정 시점에 주어진 리소스에 가해지는 부하는 고정되어 있지 않습니다. 연결은 끊임없이 열리고 닫힙니다. 기반 웹 앱 플랫폼은 Apache나 IIS, node.js 엔진 또는 기타 스택 등 어떤 것이든 용량 측면에서 정해진 제약이 있습니다. 동시에 유지할 수 있는 연결 수는 X개뿐입니다. 이 한도에 도달하면 새 연결을 열려는 시도가 응답 없이 대기하거나 실패합니다.

이것이 장애의 원인이라면, 프록시가 실패 응답을 수신하는 데 걸린 몇 마이크로초 사이에 다른 연결이 종료되어 재시도가 성공할 가능성이 생겼을 수 있습니다.

경우에 따라 장애가 플랫폼 내부에서 발생하기도 합니다. 바로 그 악명 높은 “500 내부 서버 오류”입니다. 이 상태는 서버가 과부하 상태가 아닌데도, 호출한 다른 외부 서비스가 제때 응답하지 못했을 때 흔히 나타납니다. 때로는 데이터베이스 연결 풀이 자체 한도에 도달해서 발생하기도 합니다. 외부 서비스에 의존하면 연쇄적인 오류가 발생할 수 있으며, 연결 과부하와 마찬가지로 최초 오류를 전달받을 즈음에는 이미 해결된 경우가 많습니다.

그다지 도움이 되지 않는 “503 서비스를 사용할 수 없음” 오류가 표시될 수도 있습니다. 과부하로 인해 발생할 수 있지만, 모든 HTTP 오류 코드가 그렇듯 실제로 무엇이 잘못되었는지를 항상 정확히 알려 주는 것은 아닙니다. DNS 장애가 발생했거나 IIS 및 ASP의 경우 대기열이 가득 찼을 때 이 오류가 표시될 수 있습니다. 실제로 원인은 매우 다양합니다. 또한 오류를 확인할 즈음에는 문제가 이미 해결되었을 수도 있으므로, 가장 먼저 재시도해 보는 것이 좋습니다.

물론 무작정 계속 재시도할 수는 없습니다. 네트워크에 과부하를 일으키고 수신 측을 마비시킬 수 있는 TCP 재전송의 의도치 않은 결과처럼, 재시도도 결국에는 무의미해집니다. 포기하기 전에 몇 번 재시도해야 하는지에 대한 절대적인 규칙은 없지만, 일반적으로 3~5회 정도 재시도합니다.

그 시점이 되면 요청자에게 처리할 수 없음을 알리고 서킷 브레이커를 작동시켜야 합니다. 이 기능에 대해서는 다음 글에서 자세히 살펴보겠습니다.

공유
태그: 2018

작성자 소개

Lori Mac Vittie
Lori Mac Vittie수석 엔지니어 겸 최고 에반젤리스트 | F5

Lori MacVittie는 F5 CTO 오피스의 수석 엔지니어이자 최고 에반젤리스트로, 애플리케이션 딜리버리, 자동화 전략 및 인프라 분야에서 깊이 있는 전문성을 보유하고 있습니다. AI 에이전트를 위한 가드레일을 정의하고, 취약한 멀티클라우드 아키텍처를 분석하며, 확장 가능한 시스템의 한계를 탐구하는 등 복잡한 문제를 명확하게 풀어내는 것으로 잘 알려져 있습니다. 애플리케이션 개발, IT 아키텍처, 네트워크 및 시스템 운영 전반에 걸쳐 30년 이상의 업계 경험을 쌓았습니다. F5에 합류하기 전에는 수상 경력이 있는 기술 편집자로 활동했습니다. MacVittie는 컴퓨터 과학 석사 학위를 보유하고 있으며, 보안, 클라우드 및 엔터프라이즈 아키텍처 분야를 아우르는 다수의 저서를 집필한 작가입니다. 또한 보드게임과 비디오 게임을 열정적으로 즐기며, 치즈에 대해서는 거리낌 없이 확고한 견해를 갖고 있습니다.

Lori Mac Vittie의 다른 블로그 게시물

관련 블로그 게시물

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A
F5 에코시스템 | 2023. 07. 13.

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A

F5의 ‘성평등을 향한 여정’ 시리즈 네 번째 Q&A에서는 Rachael Shah와 NGINX 제품 마케팅 책임자 Jenn Gile이 사이버 보안 직종에 대한 오해를 바로잡고, 사이버 보안 분야의 성별 격차를 해소하기 위한 조언과 그 이점에 대해 이야기합니다.

TLS 검사에서 피터 파커 원칙 다루기
F5 에코시스템 | 2019. 12. 09.

TLS 검사에서 피터 파커 원칙 다루기

“큰 힘에는 큰 책임이 따른다.” 볼테르와 처칠도 이와 비슷한 말을 남겼지만, 이 문구는 스파이더맨 코믹스에서 벤 삼촌의 말로 가장 널리 알려져 있습니다. 물론 이 문구가 문화적으로 널리 통용되는 이유 중 하나는 TLS 검사를 비롯해 수많은 상황과 주제에 적용할 수 있기 때문입니다.

Venafi와 F5를 통한 머신 아이덴티티 보호
F5 에코시스템 | 2018. 12. 11.

Venafi와 F5를 통한 머신 아이덴티티 보호

‘머신 아이덴티티’란 간단히 말해 자동화된 프로세스가 자신의 신원을 식별할 수 있도록 하고, 다른 자동화 시스템과 프로세스가 관련 리소스에 적절한 수준의 접근 권한을 부여하도록 하는 방법을 의미합니다. 이 개념 자체는 새로운 것이 아닙니다. 비교적 새로운 점은 이를 구현해야 하는 규모입니다.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다
F5 에코시스템 | 2018. 07. 23.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다

물론 데이터 유출은 더 큰 비용을 초래할 수 있고(적어도 지금은), 실패 사실을 세상에 드러낼 수밖에 없게 합니다(통지 의무가 있으니까요). 하지만 보안을 단순히 데이터 노출 문제로만 봐서는 안 됩니다. 요즘은 데이터가...

내 클라우드에서 나가!
F5 에코시스템 | 2016. 10. 12.

내 클라우드에서 나가!

F5의 Jay Kelley가 전하는 최신 소식에는 Microsoft Office 365용 신규 ID 및 액세스 솔루션을 배포할 때 고려해야 할 사항이 정리되어 있습니다.

Shift(웹 앱) 보안 레터
F5 에코시스템 | 2015. 07. 06.

Shift(웹 앱) 보안 레터

웹 앱 보안을 개발 초기 단계로 앞당기세요. F5 블로그에서 DevOps 파이프라인 초기에 보안을 통합하여 취약점을 예방하고 시간을 절약하는 방법을 알아보세요.