반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 스프링부트
- resultMap
- 스프링 컨테이너
- DI
- kafka
- spring
- SQL
- mybatis
- sqld
- 싱글톤
- java
- 스프링 부트
- JPA
- 스프링 빈
- 스프링 부트 입문
- 필드 주입
- @Configuration
- DIP
- springboot
- assertThrows
- jdbc
- 스프링 프레임워크
- assertThat
- thymeleaf
- 스프링 부트 기본
- Effective Java
- Javascript
- 생성자 주입
- db
- 스프링
Archives
- Today
- Total
선 조치 후 분석
REST와 MQ의 개념 및 차이점 정리 본문
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 |