본문 바로가기

웹 인프라

장애 대응: 안정적인 웹 서비스를 위한 필수 전략 2

안녕하세요:)
지난 글에서는 '무중단 배포를 통해 웹 서비스의 지속적인 업데이트와 안정성을 보장하는 방법'에 대해 알아보았습니다. 이번 글에서는 저번 글에 이어서 '장애 대응'에 대해 살펴보려 합니다.
 
무중단 배포는 서비스가 돌아가기 전, 소프트웨어를 안정적으로 업데이트하고 배포하는 과정이라면, 장애 대응은 실제 서비스 중에 발생할 수 있는 문제를 실시간으로 감지하고 신속하게 대응하는 과정입니다.
 
오늘은 장애 대응이 왜 중요한지, 어떤 종류의 장애가 발생할 수 있는지, 그리고 장애를 해결하기 위한 전략에 대해 다뤄보도록 하겠습니다.
서비스가 예상치 못한 문제를 겪을 때, 어떻게 문제를 감지하고 해결할 수 있는지 궁금하시다면, 계속해서 읽어주세요 ><
 
본격적인 글에 앞서, 장애 대응이 무엇인지 왜 필요한지에 알아보는 걸로 시작해보겠습니다.
 

1. 장애 대응이란?

장애 대응이란, IT 서비스나 시스템이 예기치 않게 중단되거나 성능 저하 등의 문제가 발생했을 때, 이를 빠르게 감지하고 해결하여 원상태로 복구하는 과정을 의미합니다. 현대의 디지털 환경에서 장애 대응은 단순히 기술적인 문제를 해결하는 것 이상의 의미를 가지며, 비즈니스의 연속성을 유지하고 서비스를 이용하는 사용자 신뢰를 보호하는 핵심적인 과정 중 하나입니다.

네이버페이, 네이버 블로그 접속 불가 오류(https://dotorilee.tistory.com/24), (https://blog.naver.com/koysisters/220419327927)

 
장애 대응은 왜 필요할까요?
오늘날 인터넷과 클라우드 기반 서비스의 급속한 확산으로 인해, 서비스의 가용성이 기업의 신뢰도와 직결되게 되었습니다. 유저들은 항상 끊기지 않는 서비스 상태를 기대하고 서비스가 중단되면 UX가 크게 저하될 뿐만 아니라, 기업의 평판과 매출에도 직접적으로 큰 타격을 줄 수 있습니다. 
이런 상황에 대비하기 위해 장애 대응은 단순히 문제가 발생했을 때 문제를 수습하는 차원을 넘어, 사전에 장애를 예방하고 재빠르게 대응하라 수 있는 체계적인 전략과 도구를 갖추는 것이 좋습니다.
 
왜 서비스 장애가 기업의 평판에 영향을 미칠까요?
장애 대응의 필요성은 단순히 기술적인 측면에서만이 아니라, 비즈니스의 연속성을 유지한다고 살짝 언급 했었습니다. 예를 들어서 설명하자면, 대규모 전자상거래 플랫폼에서 발생하는 장애는 몇 분의 서비스 중단만으로도 수백만 달러의 손해를 초래할 수 있습니다. 또한, 장애 대응이 미흡할 경우, 고객은 경쟁사로 이탈할 가능성이 높아지고, 이는 기업의 장기적인 성장에도 부정적인 영향을 미칠 수 있습니다. 

카카오 주가 추이, 출처: 연합인포맥스(https://news.einfomax.co.kr) / 매일 경제(https://www.mk.co.kr/news/it/10504027)

추가로 실제 사례로서, 카카오 데이터 센터 화재는 이러한 장애 대응의 중요성을 잘 보여주는 사례입니다. 지난 주말 판교에 위치한 카카오 데이터 센터에서 화재가 발생하면서, 카카오의 다양한 서비스들이 중단되는 대규모 서비스 장애가 발생했습니다. 이로 인해 사용자들은 큰 불편을 겪었으며, 카카오의 신뢰도와 평판에 타격을 입혔습니다. 이 사태로 인해 카카오의 주가는 급락했고, 정치권에서는 대형 온라인 플랫폼 기업의 서비스 운영에 대한 규제 강화 목소리가 커졌습니다.
 
이 사례는 단순히 서비스 장애가 기업의 재무적 손실 뿐만 아니라, 주가 하락, 사용자 이탈, 그리고 규제 강화와 같은 심각한 후폭풍을 초래할 수 있음을 보여줍니다. 따라서, 장애 발생 가능성을 낮추는 것은 물론, 장애가 발생했을 때 이를 빠르게 복구할 수 있는 체계적인 전략은 모든 IT 서비스 운영에 있어서 기본이 되어야 합니다.
 

2. 장애의 종류

발생하는 장애의 종류는 어떤 것들이 있을까요? 장애는 여러가지 원인에 의해 발생할 수 있으며, 그 유형에 따라 대응 방식도 달라집니다. 이번 섹션에서는 IT 서비스에서 발생할 수 있는 주요 장애 유형에 대해 알아보겠습니다.
 
1. 하드웨어 장애
서버, 스토리지, 네트워크 장비에서 생기는 물리적인 문제를 말합니다. 대표적으로 하드 드라이브의 고장, 서버 과열, 전원 공급의 중단이 있습니다. 이러한 장애는 서비스의 중단을 초래할 수 있으며, 특히 데이터 손실이나 복구 시간의 증가로 이어질 수 있습니다. 그렇기 때문에 하드웨어 장애는 정기적인 유지보수와 빠른 장애 감지 시스템을 통해 그 영향을 최소화할 수 있습니다.

카카오 데이터 센터 화재 참고 이미지 (https://www.kakaocorp.com/page/detail/9902) / (https://mylovekbs.kbs.co.kr/index.html?source=mylovekbs&amp;sname=mylovekbs&amp;stype=magazine&amp;contents_id=70000000398949)

2022년 10 15일 카카오 데이터 센터 화재
하드웨어 장애의 예로, 카카오 데이터 센터 화재 사태가 있습니다.
SK C&C 판교 데이터 센터에 리튬이온배터리 화재는 전원 공급 장치의 중단으로 이어지며, 주요 서비스들이 순식간에 중단된 사례입니다. 이 사건은 전원 공급 시스템의 이중화가 불충분했을 때 발생할 수 있는 대규모 하드웨어 장애의 전형적인 예입니다. 비록 데이터는 여러 곳에 이중화되어 있었지만, 전원 공급의 이중화와 시스템 전체의 이중화가 부족했던 것이 복구 지연의 주된 원인이었습니다. 이를 방지하기 위해 이중화된 전원 공급 시스템이나 예비 서버를 준비하는 것이 중요하며, 중요한 데이터와 서비스는 여러 지역에 분산되어 있어야 합니다.
 
 
2. 소프트웨어 오류
소프트웨어 오류는 애플리케이션, 운영체제 또는 미들웨어에서 발생하는 문제로, 버그, 메모리 누수, 소프트웨어 업데이트 시 발생하는 호환성 문제 등이 여기에 해당합니다. 이런 종류의 오류는 시스템 불안정성을 초래하거나 서비스 기능이 제대로 작동하지 않게 만들 수 있습니다.
 
예를 들어, 새로운 버전의 소프트웨어를 배포하는 과정에서 발견되지 않는 버그가 서비스 중단을 초래할 수 있습니다. 이를 예방하기 위해서는 충분한 테스트와 단계적인 배포 전략이 필요하며, 문제가 발생하였을 때 빠르게 롤백할 수 있는 계획을 항상 마련해두는 것이 좋습니다.

Zero-Downtime Deployment 참고 이미지(https://2cloud.io/blog/zero-downtime-during-deployment)

여기서 저번 글에서 배운 무중단 배포 전략이 중요한 역할을 합니다. 새로운 버전의 소프트웨어를 기존 서비스에 영향을 미치지 않으면서 배포할 수 있습니다. 또한, Docker와 Kubernetes와 같은 도구를 활용하면 컨테이너 기반의 배포를 더욱 안정적이며 일관된 환경에서 소프트웨어를 운영할 수 있으며, 문제가 발생했을 때 빠르게 롤백할 수 있습니다. 이러한 방식으로 소프트웨어 오류로 인한 장애를 최소화하고, 서비스 장애를 예방할 수 있습니다.
 
 
3. 네트워크 장애
인터넷 연결, 데이터 전송, 네트워크 장비 간의 통신 문제가 여기에 해당합니다. 인터넷 서비스 제공업체(ISP)의 장애, 네트워크 장비의 고장, DDoS(분산 서비스 거부) 공격 등이 대표적인 예시입니다. 네트워크 장애는 서비스가 전혀 접근 불가능하게 만들거나, UX를 저하시키는 대표적인 원인이 됩니다.

LoL 챔피언십 &lsquo;디도스 공격&rsquo; 서버마비 참고 이미지(https://www.hani.co.kr/arti/society/society_general/1130965.html)

'리그 오브 레전드 챔피언스 코리아 대회 DDoS 사태'
'리그 오브 레전드 챔피언스 코리아(LCK)' 대회에서의 DDos 공격은 이러한 네트워크 장애의 한 예로, 서비스의 각용성과 안정성을 저해하는 큰 문제로 대두되었습니다. 
디도스 공격은 다수의 컴퓨터에서 특정 서버에 대량의 트래픽을 동시에 유도하여 서버가 정상적인 서비스를 제공하지 못하게 만드는 공격 방식입니다. LCK 대회에서는 이 공격으로 인해 경기가 중단되었었고, 관중과 온라인 시청자들에게 큰 불편을 가져다줬습니다. 이와 같은 사례는 네트워크 장애가 실제 서비스 운영에 얼마나 큰 영향을 미칠 수 있는지를 잘 보여주는 사례입니다.
 
네트워크 장애는 IT인프라의 복잡성에 원인을 두고, 장애 발생 시 빠르고 효과적인 대응이 요구되는 장애입니다. GSLB(Global Server Load Balancing)와 CDN(Contenst Delivery Network)과 같은 기술은 이러한 네트워크 장애 발생 시 트래픽을 적절히 분산시키고, 대체 서버로의 전환을 통해 서비스의 연속성을 유지하는 데 중요한 역할을 할 수 있습니다.  
 
 
4. 자연재해로 인한 장애
자연재해 및 외부 요인은 IT 인프라에 물리적인 피해를 입히는 외부 요인을 말합니다. 지진, 홍수, 화재와 같은 자연재해는 물론, 인위적인 사고나 전력 공급의 대규모 중단도 이에 해당됩니다. 자연재해는 다른 모든 장애들보다 더 큰 규모의 영향을 미치며, 대응책 마련이 어려운 경우도 많습니다..ㅠㅠ

2012년 허리케인 샌디의 피해 이미지(https://m.khan.co.kr/world/america/article/201210312113205#c2b)

2012년 허리케인 샌디(Hurricane Sandy), 참고 기사
허리케인 샌디는 자연재해가 IT인프라에 미칠 수 있는 심각한 영향을 잘 보여주는 사례입니다. 이 재난은 뉴욕과 뉴저지 지역을 강타했으며, 전력망과 데이터 센터에 심각한 피해를 입혔습니다. 뉴욕시의 주요 데이터 센터들이 정전으로 인해 가동 중단되면서, 많은 웹 사이트와 온라인 서비스가 오프라인 상태가 되었고, 많은 사용자들에게 피해를 주었습니다.
 
자연재해에 대한 대응은 IT인프라의 안정성과 가용성을 보장하는 데 반드시 필요한 과정입니다. 허리케인 샌디와 같은 대규모 재해에 대한 대응책으로 데이터 센터의 물리적 위치 선택, 이중화된 전력 공급 시스템, 재해 복구 계획(DRP) 등은 반드시 고려해야 할 요소들입니다.
 

3. 장애 감지 방법

위에서 봤던 장애들에 효과적으로 대응하기 위해서는 신속하고 정확한 감지가 필요합니다. 장애가 발생했을 때 이를 빠르게 인지하고, 적절한 조치를 취하는 것이 시스템의 안정성과 서비스의 지속성을 유지하는 핵심 요소입니다. 장애 감지 방법에는 이것저것 있지만, 주로 모니터링 시스템, Health Check, 로그 분석 및 오류 추척 등이 사용됩니다. 각각 하나씩 살펴보도록 하겠습니다.
 
1. 모니터링 시스템
모니터링 시스템은 서버, 애플리케이션, 네트워크 등 IT 인프라의 다양한 요소들을 성능 지표를 통해 실시간으로 감시하고, 장애나 이상 징후 발견 시 경고하는 역할을 합니다. 예를 들어 CPU 사용량이 비정상적이거나, 네트워크 트래픽이 급증하거나 하는 등의 평소와 다른 이상 패턴이 감지될 경우 시스템 관리자에게 알림을 보냅니다.

Datadog, Grafana, Prometheus 참고 이미지(https://www.datadoghq.com/blog/network-device-monitoring/) / (https://sahsumit.medium.com/server-monitoring-using-prometheus-and-grafana-a041b3333fa7)

대표적으로 사용되는 도구는 Prometheus, Grafana, Datadog 등이 있으며, 서버의 성능 지표를 시각적으로 보여주고 특정 임계값을 넘었을 때 자동으로 알림을 발생시킵니다. 이런 도구들을 사용함으로써 시스템 관리자는 실시간으로 장애를 인지하고 대응할 수 있습니다.
 
 
2. Health Check
Health Check는 개별 서비스나 시스템의 상태를 주기적으로 점검하여, 각 서비스가 정상적으로 작동하고 있는지를 확인하는 과정입니다. 모니터링 시스템과 마찬가지로 특정 서비스가 제대로 작동하지 않거나, 응답이 없는 경우 이를 감지하고 자동으로 복구 절차를 진행하거나 관리자에게 알림을 보냅니다.
 
Health Check는 특히 GSLBCDN에서 중요한 역할을 합니다. 예를 들어, 특정 서버에 문제가 발생한 경우, Health Check를 통해 이를 감지하고, 트래픽을 자동으로 다른 정상 서버로 분산시켜 서비스의 연속성을 유지할 수 있습니다. 이 과정은 무중단 배포와 같은 전략과 결합되어 장애 대응에 있어서 더욱 좋은 매커니즘을 형성할 수 있습니다.
 
 
3. 로그 분석과 오류 추적
로그 분석은 장애 발생 원인을 파악하고, 문제를 해결하는 데 있어서 중요한 역할을 합니다. 서버와 애플리케이션은 모든 작업과 이벤트를 로그 파일이라는 일종의 기록 파일을 만들어 놓게 되는데, 이 파일에 있는 로그를 분석하면 시스템이 언제, 어디서, 어떤 이유로 장애를 겪었는지를 확인할 수 있습니다.

ELK Stack 참고 이미지(https://velog.io/@bbkyoo/ELK-ELK-Stack-%EA%B0%9C%EB%85%90), (https://www.loggly.com/use-cases/what-is-the-elk-stack/), (https://cybercentrecanada.github.io/assemblyline4_docs/installation/monitoring/)

예를 들어, 특정 시간대에 반복적으로 발생하는 오류 로그를 분석하여, 시스템의 취약점을 파악하고 이를 개선하는 데 사용할 수 있습니다. 또한 ELK Stack(Elasticsearch, Logstash, Kibana)와 같은 도구는 로그 데이터를 실시간으로 수집, 분석, 시각화하여 장애를 추적하고 대응하는 데 큰 도움을 줍니다.
 
 
다양한 장애 감시 방법이 있지만, 이들은 상호보완적으로 작동하며, 시스템이 언제나 최상의 상태로 운영될 수 있도록 도움을 줍니다. 장애를 감지하는 것이 빠르고 정확해야만, 그에 따른 대응 역시 신속하게 이루어질 수 있습니다. 다음은 감지 과정을 통해 발견된 장애에 대한 구체적인 대응 전략에 대해 살펴보겠습니다.
 

4. 장애 대응 전략

장애가 발생했을 때 이를 최소한의 시간 내에 복구하고, 시스템을 원상태로 되돌리는 것이 장애 대응의 핵심입니다. 장애 대응 전략은 장애의 종류와 발생 상황에 따라 다양한 접근 방식을 취할 수 있습니다. 여기에서는 Auto Recovery, Failover, Restart + Rollback 그리고 DRP를 중점으로 살펴보겠습니다.
 
1. 자동 복구(Auto Recovery)
시스템에서 장애가 발생했을 때 이를 자동으로 탐지하고, 최소한의 개입으로 문제를 해결하는 기술입니다. 자동 복구 시스템은 사전에 정의돈 규칙과 알고리즘에 따라 작동하며, 일반적으로는 '모니터링 및 탐지 -> 자동 조치 -> 문제 해결' 의 방식으로 이루어집니다.
 
자동조치의 경우, 탐지된 문제가 경미한 경우, 시스은 자동으로 복구 작업을 시도합니다. 예를 들어, 서버가 과부하로 인해 응답하지 않는다면, 자동으로 해당 프로세스를 재시작하거나 부하를 줄이는 작업을 수행할 수 있습니다.
 
 
2. Failover
페일오버는 시스템의 주 서버가 장애로 인해 작동하지 않을 때, 대기 중인 백업 서버로 자동으로 전환하여 서비스를 지속하는 전략입니다. 이전 글인 무중단 배포에서도 나왔으며 이 과정은, 사용자에게 거의 인지되지 않을 정도로 신속하게 이루어지고 시스템의 가용성을 보장해주는 아주 좋은 대응 전략입니다.

Failover 참고 이미지(https://avinetworks.com/glossary/failover/)

좀 더 자세히 설명하자면?
페일오버 시스템은 주 서버와 백업 서버로 구성되며, 장애 발생 시 서비스의 연속성을 보장하는 역할입니다. 주 서버가 정상적으로 운영되는 동안 백업 서버는 대기 상태에 들어가 있고, 주 서버가 장애를 일으키면 페일오버 매커니즘이 즉각적으로 작동하여 백업 서버를 활성화 시키고, 모든 트래픽을 백업 서버로 전환합니다.
이 과정에서 데이터의 일관성과 연결의 안정을 유지하는 것이 무엇보다 중요한데, 이를 위해 주기적인 테스트와 유지관리가 반드시 필요합니다. 백업 서버의 상태를 계속해서 관리 및 점검해야 하며, 실제 장애 발생 시 원활한 전환이 이루어질 수 있도록 철저히 준비해야 합니다. 
 
 
3. 재시작과 롤백(Restart, Rollback)
재시작과 롤백은 소프트웨어 시스템 업데이트 중 문제가 발생했을 때, 이를 해결하기 위한 방법 중 하나입니다. 주로 무중단 배포나 장애 발생 시 사용되며, 시스템을 회복시키는 데 중요하게 작용합니다.
 
재시작의 경우,
특정 프로세스나 서비스가 비정상적으로 돌아갈 경우, 이를 재시작함으로써 문제를 해결하려 합니다. 예를 들어, 애플리케이션 서버가 응답하지 않으면, 해당 서버를 재시작하여 정상 상태로 복귀시킬 수 있습니다.

롤백 참고 이미지(https://octopus.com/blog/rollback-strategies)

롤백의 경우,
여기서의 롤백은 Rollback Deployment 전략을 말하는데 이는 업데이트된 변경 사항이 문제가 될 경우, 이전 안정된 상태로 돌리는 작업입니다. 롤백은 시스템이 완전히 손상되기 전에 빠르게 대응할 수 있는 방법 중 하나입니다. 예로, 새로 배포된 버전에서 버그가 발견되면, 자동으로 이전으로 롤백하여 서비스를 안정적으로 유지할 수 있습니다. 
 
 
어? 둘이 비슷한데, Failover와 Rollback은 같은 거 아닌가요? 
Failover의 경우에는 시스템 장애 발생 시 서비스의 지속성을 보장하는 것이 목적이고, 롤백의 경우는 잘못된 업데이트나 배포로 인해 시스템이 터질 위기에 처했을 때, 서버를 안정적인 이전 버전으로 되돌리는 것이 목적입니다.
또 다른 차이점은, Failover는 하드웨어나 네트워크와 같은 물리적 인프라의 장애에 대한 장애 대응 전략이며, 롤백은 소프트웨어 배포나 업데이트 시 발생하는 문제를 해결할 때의 전략입니다.
 
 
4. 자연재해 대응
이와 같은 자연재해로부터 시스템을 보호하기 위해서는 어떤 노력이 필요할까요? 재해로부터 시스템을 보호하기 위해서는 철저한 재해 복구 계획(Disaster Recovery Plan, DRP)과 데이터 센터의 이중화 전략이 필요합니다. 

DRP 참고 이미지(https://stock.adobe.com/)

DRP는 자연재나 대규모 장애가 발생했을 때, 데이터를 복구하고 서비스를 복원하는 데 필요한 절차와 도구를 포함한 포괄적인 계획입니다. 
이중화 전략을 통해 시스템의 여러 부분을 다양한 위치에 분산 배치하면, 한 지역에서 재해가 발생해도 다른 지역에서 서비스를 지속할 수 있습니다. 예를 들어, 데이터 센터를 여러 지역에 분산시키고, 각 데이터 센터 간에 실시간으로 데이터를 복제함으로써, 하나의 데이터 센터가 손실되더라도 다른 데이터 센터에서 서비스를 지속할 수 있습니다.
 
이런 전략들은 자연재해를 포함한 다양한 장애 상황에서 시스템을 보호할 수 있으며 장애를 빠르게 복구하고, 사용자들의 불편을 최소화 할 수 있습니다. 물론 비즈니스의 연속성도 지킬 수 있습니다..!
 

끝내는 말

이번 글에서는 '장애 대응을 통한 안정적인 웹 서비스를 위한 전략'에 대해 알아보았습니다. 장애 대응의 중요성, 다양한 장애의 유형, 그리고 효과적인 대응 전략까지 다뤄보았는데, 도움이 되셨을까요?
 
저도 글을 적으면서 장애 대응은 단순히 문제를 해결하는 것을 넘어, 사용자에게 지속적으로 안정적인 서비스를 제공하기 위해 꼭 필요한 부분이라고 다시 한 번 느낄 수 있는 시간을 가질 수 있었습니다. ㅎㅎ
 
다음 글부터는 웹 페이지의 성능과 사용자 경험에 큰 영향을 미치는 '렌더링'에 대해 알아보도록 하겠습니다..!!
 
읽어주셔서 감사합니다:)