기록
[GPT가 알려주는] 미들웨어 (Middleware)란? 본문
**"미들웨어(Middleware)"**는 개발에서 아주 자주 등장하지만, 처음엔 추상적으로 느껴질 수 있는 용어예요.
✅ 한 줄 정의
미들웨어란, OS와 애플리케이션 사이에서 ‘중간 역할’을 해주는 소프트웨어입니다.
쉽게 말하면:
앱 ↔ 시스템(하드웨어/네트워크) 사이에서
데이터 전달, 통신, 보안, 연결관리 등을 도와주는 중간 관리자
🎯 비유
| 구성 | 설명 |
| 애플리케이션 | 손님 |
| 운영체제(OS) | 건물 |
| 미들웨어 | 안내 데스크 직원 역할 |
- 손님이 어디로 가야 할지, 어떻게 요청을 해야 할지 알려줌
- 복잡한 내부 통신을 대신 처리
🧱 미들웨어의 주요 기능
| 기능 | 설명 |
| 통신 처리 | 네트워크 메시지 송수신, 연결 유지 |
| 데이터 직렬화/역직렬화 | 데이터를 전송하기 좋은 포맷으로 바꾸기 |
| 멀티 플랫폼 호환 | 리눅스 ↔ 윈도우, 모바일 ↔ 서버 등 중간 호환 역할 |
| 보안/인증 | 연결 인증, 암호화 지원 |
| 서비스 발견/동기화 | Pub/Sub, 클러스터링 등 |
✅ 실제 예시
| 분야 | 미들웨어 예시 | 설명 |
| 자동차 | DDS (Data Distribution Service) | 센서 ↔ 앱 간 실시간 데이터 전달 |
| 웹 서버 | Apache, Nginx | 클라이언트 ↔ 서버 요청 중개 |
| 모바일 앱 | Firebase, Retrofit | 클라이언트 ↔ 서버 API 중개 |
| 게임 | Unity의 네트워크 모듈 | 서버 ↔ 클라이언트 위치 정보 전달 |
| IoT | MQTT 브로커 | 센서 ↔ 클라우드 메시지 전송 처리 |
✅ 개발자 입장에서 미들웨어란?
- 하드웨어나 저수준 통신을 직접 처리하지 않아도 되게 해주는 도구
- 복잡한 통신/연동/동기화를 깔끔하게 정리해줌
- 앱 개발자는 비즈니스 로직에 집중할 수 있음
✅ 요약
| 항목 | 내용 |
| 미들웨어란? | 앱과 시스템 사이에서 데이터 통신/연동을 중개하는 소프트웨어 |
| 왜 필요함? | 복잡한 하드웨어/통신 처리를 대신해주기 때문 |
| 예시? | DDS, MQTT, gRPC, Firebase, ROS, Nginx 등 |
필요하면 DDS나 MQTT 같은 구체적인 미들웨어의 내부 동작도 설명드릴 수 있어요 :)
좋습니다! 🙌
이제는 정말 많이 쓰이는 DDS와 MQTT — 둘 다 Pub/Sub 기반 미들웨어지만 역할, 구조, 동작방식이 꽤 달라요.
아래에 비교 + 내부 구조 중심으로 설명드릴게요.
✅ 기본 개념 정리
| 항목 | DDS (Data Distribution Service) | MQTT (Message Queuing Telemetry Transport) |
| 개발사/표준 | OMG (Object Management Group) | IBM → OASIS 표준 |
| 구조 | Brokerless (브로커 없이 Peer-to-Peer도 가능) | Broker 기반 (서버를 통해 중계) |
| 통신 방식 | Pub/Sub, QoS 다양 | Pub/Sub, 경량 메시징 |
| 사용 분야 | 자동차, 로봇, 국방, 자율주행 | IoT, 스마트홈, 센서 네트워크 |
| 실시간성 | ✔ 강력 (하드 실시간도 가능) | ❌ 약함 (Best-effort 중심) |
| 프로토콜 | RTPS (Real-Time Publish-Subscribe) | TCP/IP (WebSocket 가능) |
| 메시지 구조 | IDL 정의된 구조화 데이터 | Topic + Payload (자유 포맷) |
🧠 DDS 내부 동작 구조
DDS는 Publisher ↔ Subscriber ↔ Topic을 기준으로 RTPS 프로토콜을 통해 통신합니다.
🔧 핵심 구성 요소
| 요소 | 설명 |
| DomainParticipant | DDS 네트워크 내 한 프로세스를 나타냄 |
| Publisher / Subscriber | 송신자 / 수신자 |
| Topic | 전달할 데이터 주제와 타입 (IDL로 정의됨) |
| DataWriter / DataReader | 실질적인 데이터 송/수신 객체 |
| QoS (Quality of Service) | 신뢰성, 지속성, 우선순위 등 설정 가능 |
📘 예시 동작 흐름
- DomainParticipant가 네트워크 참가
- Publisher가 DataWriter로 Topic /vehicle/speed에 데이터 전송
- Subscriber는 DataReader로 동일 Topic을 구독하고 수신
- RTPS를 통해 실시간으로 전송되며, 손실/지연 없이 전달됨
🧠 MQTT 내부 동작 구조
MQTT는 경량 메시징 프로토콜로 **Broker(중계서버)**를 중심으로 동작합니다.
🔧 구조
[Publisher] →→→ ┐
│
[ MQTT Broker ] ←→→ [Subscriber]
│
[Device] →→→ ┘
💡 동작 흐름
- Publisher가 Broker에 topic = /sensor/temp, payload = 24.5 전송
- Broker는 해당 토픽을 구독한 모든 Subscriber에게 메시지 전송
- Subscriber는 데이터를 수신하고 처리
✅ 장점
- 매우 가볍고 단순
- 브로커가 있으므로 연결 관리와 버퍼링이 쉬움
- IoT에서 많이 사용됨
🔄 DDS vs MQTT 차이 요약
| 구분 | DDS | MQTT |
| 브로커 | 없음 (Peer-to-Peer 가능) | 있음 (필수) |
| 실시간성 | 고성능 RT | 낮음 (간헐적 통신) |
| QoS 옵션 | 매우 다양 (50개 이상) | 3단계 (0,1,2) |
| 메시지 정의 | IDL 기반 구조화 타입 | 자유 포맷 텍스트/바이너리 |
| 사용 예 | 자율주행차, 로봇 | 온도센서, 스마트홈 |
✅ 어떤 걸 써야 할까?
| 상황 | 추천 미들웨어 |
| 차량용 센서, 자율주행 시스템 | ✅ DDS |
| 실시간 제어/분산 시스템 | ✅ DDS |
| 간단한 IoT 센서/기기 연결 | ✅ MQTT |
| 서버 ↔ 디바이스 간 메시징 | ✅ MQTT |
✅ 마무리 요약
- DDS: 하드 리얼타임, 구조화된 데이터, 브로커 없음, 강력한 QoS
- MQTT: 가볍고 단순, 브로커 필요, IoT에 적합
원하시면 DDS 실습 예제 (Fast DDS 설치, IDL → pub/sub 코드)나
MQTT 메시지 흐름 예제도 코드로 만들어 드릴게요! 😄
'잡동사니 > GPT가 알려주는' 카테고리의 다른 글
| [GPT가 알려주는] 의존성 주입(DI: Dependency Injection)이란? (1) | 2025.07.02 |
|---|---|
| [GPT가 알려주는] S/W 설계 예시 (0) | 2025.07.01 |
| [GPT가 알려주는] DDS (Data Distribution Service) 란? (0) | 2025.06.30 |
| [GPT가 알려주는] 원시취득과 명도 청구란? (1) | 2025.06.30 |
| [GPT가 알려주는] 정렬 알고리즘 과 시간 복잡도 (1) | 2025.06.27 |