웹 아키텍쳐

웹 아키텍처5 - 메세징 시스템과 Kafka - 디도스 방지 가능?

dodo4723 2024. 2. 17. 09:54
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.

 

비슷한 차트 검색기

 

similar chart finder

내 종목의 차트는 상승하는 차트일까요?

3.35.36.208

 

 

웹 아키텍처에서의 메세징 시스템에 대한 이해

 

저는 웹사이트 제작 프로젝트를 진행하고 있습니다. 그런데, 만약 누군가가 한 번만 클릭해도 되는 버튼을 일부러 악의적으로 수백 번을 매우 빠르게 클릭하여 웹 서비스가 정상적으로 기능하지 않는 상황을 계속 걱정하고 있습니다. 최근에 메세징 시스템을 알게 되었고, 오늘 한번 공부해보려고 합니다.

 

특히 레디스와 함께 알게 된 카프카에 대해 궁금한 점이 많습니다. 한번 공부해 봅시다!




메세징 시스템이란?

메세징 시스템은 애플리케이션 간의 통신을 돕는 중간자 역할을 하는 시스템입니다. 메세징 시스템을 통해 애플리케이션은 서로 독립적으로 메시지를 주고받을 수 있게 됩니다. 이런 특성 덕분에 메세징 시스템은 분산 시스템에서 메시지의 전달, 버퍼링, 라우팅, 트랜잭션 등을 안정적으로 처리해 주는 핵심 요소입니다.


 

메세징 시스템의 필요성

메세징 시스템은 웹 서비스의 안정성과 확장성에 큰 기여를 합니다. 메세징 시스템이 없다면 각 애플리케이션은 서로 직접 통신해야 하므로, 애플리케이션 간의 결합도가 높아집니다. 이는 확장성을 저해하고, 한 애플리케이션의 문제가 다른 애플리케이션에 영향을 미칠 수 있습니다.

 

반면, 메세징 시스템은 애플리케이션 간의 결합도를 낮추고, 메시지를 안정적으로 전달함으로써 이러한 문제를 해결해 줍니다. 또한, 메세징 시스템을 사용하면 비동기 처리가 가능해져서 시스템 전체의 효율성을 높일 수 있습니다.


 

메세징 시스템의 종류

웹 아키텍처에서 사용되는 메세징 시스템에는 여러 종류가 있습니다.

  1. RabbitMQ: RabbitMQ는 오픈 소스 메세징 중개인으로, AMQP(Advanced Message Queuing Protocol)를 지원합니다. 높은 확장성과 유연성을 가지고 있으며, 다양한 메세징 패턴을 지원합니다.
  2. Kafka: Kafka는 LinkedIn에서 개발한 분산 스트리밍 플랫폼입니다. 높은 처리량, 메시지 저장 기능, 실시간 스트리밍 등의 특징을 가지고 있습니다.
  3. ActiveMQ: ActiveMQ는 Apache Software Foundation에서 개발한 오픈 소스 메세징 중개인으로, JMS(Java Message Service)를 구현합니다.

요즘은 Kafka를 제일 많이 사용한다고 합니다. 아래에서 Kafka에 대해 더 자세히 알아보겠습니다.


 

결론적으로 메세징 시스템은 웹 아키텍처에서 애플리케이션 간의 통신을 돕는 중요한 요소입니다. 메세징 시스템을 이해하고 활용하는 것은 웹 서비스의 안정성과 효율성, 그리고 확장성을 높이는 데 큰 도움이 됩니다.




Apache Kafka

Apache Kafka란?

Apache Kafka는 LinkedIn에서 개발된 오픈 소스 분산 스트리밍 플랫폼입니다. Kafka는 실시간 데이터 피드를 관리하기 위해 설계되었으며, 높은 처리량, 데이터 복제를 통한 내결함성, 메시지 저장 등의 특징을 지니고 있습니다.

 

Kafka는 퍼블리셔-서브스크라이버 모델을 기반으로 하며, 데이터를 '토픽(Topic)'이라는 카테고리에 저장합니다. 이를 통해 다수의 생산자(Producer)가 데이터를 생성하고, 소비자(Consumer)가 이를 소비하는 구조를 가집니다.


 

Apache Kafka의 주요 구성요소

  1. Producer: Producer는 메시지를 생성하고 Kafka Broker에 전달합니다. 이 메시지는 Key-Value 형태로 되어있으며, 특정 토픽에 연결됩니다.
  2. Broker: Kafka Broker는 클러스터에서 실행되는 Kafka 애플리케이션입니다. Broker는 토픽에 대한 메시지를 받아 저장하고, Consumer에게 전달합니다.
  3. Topic: Topic은 메세지를 분류하는 데 사용되는 카테고리입니다. Producer는 메시지를 특정 Topic에 보내고, Consumer는 특정 Topic에서 메시지를 가져옵니다.
  4. Consumer: Consumer는 Broker로부터 메시지를 가져와 처리합니다. Consumer는 특정 Topic에 대한 구독을 통해 메시지를 받아옵니다.

 

Kafka의 활용 사례

  1. 로그 처리: Kafka는 로그 데이터를 실시간으로 처리하는 데 유용합니다. 여러 서버에서 생성된 로그를 중앙 집중식 로그 시스템으로 전달하거나, 실시간 모니터링, 로그 분석 등에 활용할 수 있습니다.
  2. 스트림 처리: Kafka는 큰 데이터 스트림을 처리하는 데 적합합니다. 실시간 분석, 실시간 대시보드, 실시간 추천 등에 활용됩니다.
  3. 이벤트 소싱: Kafka는 이벤트 소싱 아키텍처를 구현하는 데 사용될 수 있습니다. 이벤트를 순서대로 저장하고 재생하는 데 Kafka를 활용할 수 있습니다.

 

동시에 수많은 HTTP요청을 방지할 수 있을까?

많은 수의 HTTP 요청이 서버에 동시에 도달하는 경우를 공격 또는 부하 상황이라고 할 수 있습니다. 이런 상황에서 Kafka는 한 가지 대응 방법이 될 수 있습니다. Kafka는 대량의 데이터 스트림을 처리하는 데 탁월한 성능을 보여주는 플랫폼으로, 많은 양의 HTTP 요청을 큐에 넣고 순차적으로 처리하는 데 활용할 수 있습니다.

 

하지만 Kafka만으로는 부족한 점이 있습니다. Kafka는 메시지를 처리하는 데 탁월하지만, HTTP 요청 자체를 제어하거나 필터링하는 데는 한계가 있습니다. 이런 상황에는 로드 밸런서, 방화벽, CDN 등 다른 웹 인프라 기술을 함께 사용하여 부하를 분산시키고, 악의적인 요청을 차단하는 것도 중요합니다.

 

또한, 서버 측에서 요청의 빈도를 제한하는 '레이트 리밋팅(rate limiting)' 기술을 사용하거나, 사용자 인증을 통해 악의적인 요청을 필터링하는 방법도 있습니다.

 

따라서 Kafka는 부하 상황에 대응하는 전체 전략의 일부로 사용될 수 있지만, 다른 기술과 함께 사용되어야 효과적으로 대응할 수 있습니다.

반응형