CS지식 및 용어 정리 (설계 패턴 + 방법론)

비동기 통신(Asynchronous) VS 동기 통신(Synchronous)

Dev.99_tale 2025. 2. 8. 20:47

시스템 간의 데이터 교환 방식 동기와 비동기 통신

비동기 통신 (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의 주요 기능

 

  1. 웹 서버(Web Server)
    • 정적 파일(HTML, CSS, JS, 이미지 등)을 빠르게 서빙
    • 동적 요청은 일반적으로 백엔드 서버(e.g., Spring Boot)로 전달
  2. 리버스 프록시(Reverse Proxy)
    • 클라이언트 요청을 백엔드 서버(Spring Boot 등)로 전달
    • 백엔드 서버를 보호하고 부하를 분산(load balancing)
  3. 로드 밸런서(Load Balancer)
    • 여러 서버로 트래픽을 분산하여 성능과 안정성 향상
    • 라운드 로빈(Round Robin), IP 해시(IP Hash) 등의 알고리즘 지원
  4. 캐싱(Caching)
    • 정적 리소스를 캐싱하여 서버 부담 감소
  5. SSL/TLS 터미네이션(SSL Offloading)
    • HTTPS 요청을 처리하고, 내부 서버와는 HTTP로 통신 가능

 

Apache의 주요 기능

  1. 웹 서버:
    • 클라이언트(브라우저) 요청을 받아 웹 페이지를 제공.
    • 정적 콘텐츠(HTML, 이미지 등)를 빠르게 서빙하고, 동적 콘텐츠는 PHP, CGI 등으로 처리.
  2. 모듈 확장성:
    • 다양한 모듈을 추가해 서버의 기능을 확장 (예: 보안, 압축, 캐싱 등).
  3. 리버스 프록시:
    • 클라이언트의 요청을 백엔드 서버로 전달하여 트래픽을 분배.
  4. SSL/TLS 지원:
    • HTTPS를 통한 암호화된 통신을 지원.
  5. 다양한 인증 방식:
    • 기본 인증, 다단계 인증 등 여러 가지 인증 방식을 제공.

 

 

그런데 Apache에도 비동기 지원하는게 있지 않아 ?

Apache에 비동기 통신도구 - Apache Kafka (카프카)

 

Kafka

 - 분산형 이벤트 스트리밍 플랫폼으로, 대량의 데이터를 빠르고 안정적으로 처리하는 비동기 메시지 큐 역할

 

고속 데이터 처리 🚀

  • 수십만 개의 메시지를 초당 처리 가능
  • LinkedIn, Netflix, Uber 같은 대기업에서 사용

분산 시스템

  • 여러 개의 브로커(서버)로 구성되어 확장성 & 안정성 보장

발행/구독(Pub/Sub) 모델

  • **Producer(생산자)**가 메시지를 전송하면,
  • **Consumer(소비자)**가 메시지를 구독하여 가져감

영속성 & 장애 복구

  • 데이터를 디스크에 저장해서 장애 발생 시에도 복구 가능