반응형
💡 “서버는 동시에 몇 명까지 처리할 수 있나요?”
사용자 10명이 동시에 버튼을 누르면
서버는 그걸 하나씩 처리할까?
아니면 여러 개를 동시에 처리할까?
→ 바로 여기서 비동기와 병렬 처리의 개념이 등장합니다.
이해하면 서버는 훨씬 효율적으로 동작하게 만들 수 있어요!
🧭 기본 개념부터 정리
✅ 비동기(Asynchronous)
하나의 요청이 끝날 때까지 기다리지 않고, 다음 작업으로 넘어감
console.log("A");
setTimeout(() => {
console.log("B");
}, 1000);
console.log("C");
출력 결과:
A
C
B
✅ → 오래 걸리는 작업을 기다리지 않고,
✅ → 콜백/Promise/async-await을 통해 결과만 나중에 받는 방식
✅ 병렬 처리(Parallel)
여러 작업을 동시에 실행하는 구조
CPU 코어나 워커 스레드를 나눠서 실제 동시 작업 수행
📦 예시:
- 파일 여러 개를 동시에 압축
- API 여러 개를 한 번에 호출
- 이미지 리사이징을 워커 프로세스로 처리
🔁 실무에서 비동기 처리를 써야 하는 이유
이유 | 설명 |
서버 리소스 낭비 방지 | 대기 시간 동안 다른 요청 처리 가능 |
외부 API 대기 시간 줄이기 | I/O 처리 중 다른 작업 수행 |
응답 속도 향상 | 병렬 요청으로 시간 절약 |
시스템 확장성 향상 | 논블로킹 구조로 처리량 증가 |
🔧 비동기 & 병렬 처리 구조 예시
✅ 비동기 구조 (Node.js 스타일)
app.get('/user', async (req, res) => {
const user = await getUserFromDB(); // DB 대기 중
res.send(user);
});
→ 서버는 DB 응답 기다리는 동안
→ 다른 요청들도 자유롭게 처리 가능
✅ 병렬 요청 처리 예시 (Promise.all)
const [user, posts] = await Promise.all([
getUserInfo(),
getUserPosts()
]);
→ 두 API를 동시에 실행
→ 총 1초 걸릴 작업을 0.5초로 단축할 수 있음 ✅
🧱 실무에서 자주 쓰는 비동기 처리 도구
도구 | 설명 |
Promise | 기본적인 비동기 구조 |
async/await | 비동기를 동기처럼 작성 가능 |
BullMQ / RabbitMQ | 작업 큐 → 워커에게 분배 |
worker_threads (Node.js) | CPU 병렬 처리 (이미지 처리 등) |
웹훅(Webhook) | 외부 이벤트를 기다리는 방식 |
🧩 큐 & 워커 패턴이란?
큐(Queue): 처리할 작업을 순서대로 쌓아둠
워커(Worker): 큐에 있는 작업을 하나씩 또는 병렬로 꺼내서 실행
예시:
- 주문이 들어오면 → 주문 큐에 추가
- 워커가 주문을 하나씩 처리 (결제, 문자 발송 등)
✅ 서버는 빠르게 응답만 주고,
✅ 나머지 무거운 작업은 워커가 따로 처리
⚠️ 실무에서 주의할 점
항목 | 주의 포인트 |
비동기 오류 처리 | try/catch 또는 .catch() 필수 |
병렬 요청 과다 | 외부 API rate limit 초과 주의 |
큐 병목 | 워커 수 부족 시 지연 발생 가능 |
CPU 작업은 따로 분리 | Node.js는 싱글 스레드이므로 워커로 분산 필요 |
🧠 정리 한마디!
"서버는 멀티태스킹처럼 보이지만,
진짜 효율을 내려면 비동기 구조와 병렬 처리가 필수입니다!"
✔️ 요약
- 비동기: 기다리지 않고 요청 처리 → 서버 효율 극대화
- 병렬 처리: 여러 작업을 동시에 → 속도 최적화
- 큐/워커: 무거운 작업을 분리 → 응답 지연 방지
반응형
'개발 공부 > 서버' 카테고리의 다른 글
[서버 성능 최적화] 웹서버 튜닝, Nginx와 Apache에서 성능을 끌어올리는 설정법 (3) | 2025.05.28 |
---|---|
[서버 성능 최적화] 정적 vs 동적 자원 구분과 최적화, 이미지, JS, CSS 속도 향상 전략 (0) | 2025.05.27 |
[서버 성능 최적화] 로드밸런싱 다시 보기, 서버가 많아지면 꼭 필요한 분산 전략 (1) | 2025.05.23 |
[서버 성능 최적화] DB 쿼리 성능 최적화 전략, 인덱스, N+1 문제, 정규화/비정규화 (0) | 2025.05.22 |
[서버 성능 최적화] 응답 속도 개선의 핵심, 캐싱 전략 제대로 이해하기 (0) | 2025.05.21 |