시스템 간의 데이터 교환 방식 동기와 비동기 통신
비동기 통신 (Asynchronous Communication)
- 요청을 보낸 후, 즉시 다음 작업 수행하고, 응답이 오면 처리하는 방식
(요청과 응답이 독립적으로 처리된다.)
예 : WebSocket, Kafka, Java의 CompletableFuture(Java의 비동기 지원 클래스)
동기 통신 (Synchronous Communication)
- 요청을 보낸 후 응답을 받을 때까지 기다리는 방식
(즉, 요청과 응답이 순차적으로 처리된다.)
예 : HTTP요청(REST Api 호출), 데이터베이스 처리
동기 통신 vs. 비동기 통신 비교
| 장점 | 단점 | |
| 동기 통신 | - 구현이 쉽고 직관적 | - 응답을 받을 때까지 대기해야 하므로 성능 저하 |
| 비동기 통신 | - 응답을 기다리지 않으므로 성능 향상 (병렬 처리 가능) | - 코드가 복잡 - 흐름 제어(예: 콜백, Future, Promise 등)가 필요 |
그렇다면 이 두 통신을 하는 서버는 어떻게 될까 ?
Nginx vs. Apache 비교
| 항목 | Ngnix | Apache |
| 아키텍처 | - 이벤트 기반 (비동기) | 프로세스/스레드 기반(동기) |
| 동작 방식 | - 하나의 프로세스가 여러 요청 | 각 요청마다 새로운 스레드/프로세스 생성 |
| 동시 처리 성능 | - 높은 동시성 처리(병렬 처리) | 동시 요청이 많으면 성능 저하 |
| 정적 콘텐츠 처리 | - 정적 파일 캐싱 지원(빠름) | 프로세스마다 처리(느림) |
| 동적 콘텐츠 처리 | - 자체적으로 처리 불가능(백엔드 서버 필요) | PHP, CGI 등의 동적 콘텐츠 직접 처리 가능 |
| 주요 역할 | - 리버스 프록시, 로드 밸런서, 정적 콘텐츠 서버 | PHP 기반 CMS(WordPress 등), 소규모 서버 |
Nginx의 주요 기능
- 웹 서버(Web Server)
- 정적 파일(HTML, CSS, JS, 이미지 등)을 빠르게 서빙
- 동적 요청은 일반적으로 백엔드 서버(e.g., Spring Boot)로 전달
- 리버스 프록시(Reverse Proxy)
- 클라이언트 요청을 백엔드 서버(Spring Boot 등)로 전달
- 백엔드 서버를 보호하고 부하를 분산(load balancing)
- 로드 밸런서(Load Balancer)
- 여러 서버로 트래픽을 분산하여 성능과 안정성 향상
- 라운드 로빈(Round Robin), IP 해시(IP Hash) 등의 알고리즘 지원
- 캐싱(Caching)
- 정적 리소스를 캐싱하여 서버 부담 감소
- SSL/TLS 터미네이션(SSL Offloading)
- HTTPS 요청을 처리하고, 내부 서버와는 HTTP로 통신 가능
Apache의 주요 기능
- 웹 서버:
- 클라이언트(브라우저) 요청을 받아 웹 페이지를 제공.
- 정적 콘텐츠(HTML, 이미지 등)를 빠르게 서빙하고, 동적 콘텐츠는 PHP, CGI 등으로 처리.
- 모듈 확장성:
- 다양한 모듈을 추가해 서버의 기능을 확장 (예: 보안, 압축, 캐싱 등).
- 리버스 프록시:
- 클라이언트의 요청을 백엔드 서버로 전달하여 트래픽을 분배.
- SSL/TLS 지원:
- HTTPS를 통한 암호화된 통신을 지원.
- 다양한 인증 방식:
- 기본 인증, 다단계 인증 등 여러 가지 인증 방식을 제공.
그런데 Apache에도 비동기 지원하는게 있지 않아 ?
Apache에 비동기 통신도구 - Apache Kafka (카프카)
Kafka
- 분산형 이벤트 스트리밍 플랫폼으로, 대량의 데이터를 빠르고 안정적으로 처리하는 비동기 메시지 큐 역할
고속 데이터 처리 🚀
- 수십만 개의 메시지를 초당 처리 가능
- LinkedIn, Netflix, Uber 같은 대기업에서 사용
분산 시스템 ⚡
- 여러 개의 브로커(서버)로 구성되어 확장성 & 안정성 보장
발행/구독(Pub/Sub) 모델
- **Producer(생산자)**가 메시지를 전송하면,
- **Consumer(소비자)**가 메시지를 구독하여 가져감
영속성 & 장애 복구
- 데이터를 디스크에 저장해서 장애 발생 시에도 복구 가능
'CS지식 및 용어 정리 (설계 패턴 + 방법론)' 카테고리의 다른 글
| 4계층 아키텍처 VS 헥사고날 아키텍처 (0) | 2025.04.05 |
|---|---|
| 트랜잭션 관리 → MSA에서 데이터 일관성을 보장하는 방법 SAGA (Orchestrator) - 테코톡 2차 자료조사 (0) | 2025.03.30 |