선 조치 후 분석

REST와 MQ의 개념 및 차이점 정리 본문

ETC/IT Knowledge

REST와 MQ의 개념 및 차이점 정리

JB1104 2024. 12. 26. 11:18
728x90
반응형
SMALL

REST와 MQ는 서로 다른 통신 방식과 개념을 가지고 있으며, 각각의 장점과 활용 사례가 다르다.


REST(Representational State Transfer)

▶ REST는 HTTP 프로토콜 기반으로 하는 Stateless 아키텍처

클라이언트와 서버가 요청(Request)과 응답(Response)을 통해 데이터를 주고받음

자원(Resource)을 URI로 표현

각 자원에 대해 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용해 작업을 수행

 

특징

  • Stateless 요청간에 상태 정보를 저장하지 않으며, 각 요청은 독립적
  • 동기적 통신 : 일반적으로 요청에 대해 즉각적인 응답이 필요하므로 동기 방식 작동
  • 표준화 : HTTP 메서드와 상태코드(200, 404, 500 등)를 사용하여 표준화된 통신이 가능
  • 간단하고 직관적 : URI를 통해 자원에 직접 접근하며, 설정이 간단

장점

  • 구현이 쉽고, HTTP 기반이라 추가적인 설정 없이 사용할 수 있음
  • REST API는 다양한 언어와 플랫폼에서 쉽게 사용할 수 있음
  • 브라우저와의 통합이 우수함

단점

  • 요청이 많아질수록 서버 부하가 증가
  • 데이터 처리와 응답 속도가 네트워크 상태에 따라 달라질 수 있음
  • 비동기 처리가 제한적, 복잡한 워크플로우에 부적합

MQ(Message Queue)

MQ는 메시지를 중간 매개체(Queue)에 저장하여 시스템 간 데이터를 비동기적으로 교환하는 방식

대표적인 MQ 기술로는 RabbitMQ, Kafka 등이 있음

 

특징

  • 비동기적 통신 : 메시지를 보내는 시스템(Producer)과 메시지를 받는 시스템(Consumer)이 독립적으로 동작
  • 내결함성 메시지를 Queue에 저장하기 때문에 일시적인 장애에도 데이터가 손실되지 않음
  • 확장성 : 메시지 처리 속도와 양을 제어하기 쉬워 시스템 확장이 용이
  • 구독/발행 모델 지원 : 다수의 Consumer에게 메시지를 전달할 수 있는 Pub/Sub 모델도 지원

장점

  • 시스템 간의 느슨한 결합을 가능하게 함
  • 높은 트래픽을 처리할 수 있으며, 확장이 용이
  • 장애 복구 및 데이터 손실 방지에 강점이 있음

단점

  • 시스템 구현이 비교적 복잡함
  • 추가적인 MQ 브로커 설정 및 관리가 필요
  • 메시지 지연(Latency)이 발생할 수 있음

REST를 선호하는 경우

  • 웹 애플리케이션의 백엔드와 프론트엔드 간 통신
  • 데이터의 실시간 동기화가 필요한 경우
  • 간단한 CRUD 작업

MQ를 선호하는 경우

  • 이벤트 기반 아키텍처(Event-Driven Architecture)
  • 데이터 처리량이 많거나 트래픽이 일정하지 않은 경우
  • 비동기 작업이 필요한 대규모 분산 시스템

REST와 MQ는 서로 보완적인 관계로, 필요에 따라 함께 사용하여 효율적인 시스템을 설계 할 수도 있다.

예를 들어, REST API로 요청을 받고 MQ를 통해 백그라운드 작업을 처리하는 방식이 일반적이다.

 

사용예시

Javascript (프론트엔드)

const data = { orderId: 12345 };

fetch('/api/order', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(data)
})
  .then(response => response.json())
  .then(data => console.log('Response:', data))
  .catch(error => console.error('Error:', error));

 

Spring Boot + Kafka (백엔드)

@RestController
@RequestMapping("/api/order")
public class OrderController {
    private final KafkaTemplate<String, String> kafkaTemplate;

    public OrderController(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    @PostMapping
    public ResponseEntity<String> createOrder(@RequestBody OrderRequest orderRequest) {
        // 메시지를 Kafka에 전송
        kafkaTemplate.send("order-topic", orderRequest.getOrderId().toString());
        return ResponseEntity.ok("Order is being processed");
    }
}

 

Kafka Consumer

@KafkaListener(topics = "order-topic", groupId = "order-group")
public void processOrder(String orderId) {
    System.out.println("Processing order: " + orderId);
    // 주문 처리 로직
}
728x90
반응형
LIST

'ETC > IT Knowledge' 카테고리의 다른 글

프록시(Proxy)란?  (0) 2025.01.02
SSH (Secure Shell)이란?  (0) 2024.12.26
클러스터(Cluster)에 대하여..  (0) 2024.12.24
Zookeeper 기본 개념 정리  (1) 2024.12.18
eGovFrame Web Project vs eGovFrame Boot Web Project 차이점  (0) 2024.12.17