Log in Get started
← 가이드 목록
시작하기

Resource Contention이란? 여러 작업이 같은 자원을 차지하려고 경쟁하면서 느려지는 이유 쉽게 이해하기

Resource Contention은 CPU·DB Connection·Lock 같은 제한된 자원을 여러 작업이 경쟁하면서 대기와 성능 저하가 생기는 현상입니다. Concurrency·Bulkhead·Bottleneck·HOL까지 초보 기준으로 정리합니다.

Resource Contention이란? 여러 작업이 같은 자원을 차지하려고 경쟁하면서 느려지는 이유 쉽게 이해하기

CPU Core 4개에 CPU 작업 100개, DB Connection 20개에 Query 1,000개가 동시에 들어오면 작업들은 제한된 자원을 서로 차지하려고 경쟁합니다. 이처럼 여러 작업이 CPU·메모리·Connection·Lock 같은 제한된 자원을 동시에 쓰려다 대기와 성능 저하가 생기는 현상Resource Contention(리소스 컨텐션, 자원 경합)이라고 합니다.

사용하려는 사람은 많은데
사용할 수 있는 자원은 적다
→ 서로 차례를 기다린다

화장실 하나 · 직원 100명

화장실이 고장 난 게 아니라 쓰는 사람이 많아서 줄이 생깁니다. Contention은 경쟁·경합입니다. 웹에서는 CPU·메모리·Thread·Worker·DB Connection·Lock·디스크·Network·외부 API 처리량 등이 경쟁 대상입니다.

CPU Core와 DB Connection Pool에서 다수 작업이 경쟁하며 대기하는 Resource Contention
CPU·DB Connection처럼 제한된 자원을 두고 경쟁하면 대기가 생긴다

CPU Contention · Context Switch

4코어에 작업 100개가 들어오면 OS가 CPU 시간을 나눠 줍니다. 실행 대상을 바꾸는 Context Switch에는 상태 저장·로드 비용이 있어, Thread를 1만 개 만든다고 항상 빨라지지 않습니다. 이미지 인코딩 같은 CPU Bound는 Core 대비 동시 작업을 과하게 늘리면 경합이 커집니다. DB·네트워크를 기다리는 I/O Bound는 Core보다 많은 동시 작업이 유리할 수도 있지만 Socket·Memory·Connection은 여전히 한계입니다.

DB Connection · Lock · Bottleneck Shift

Pool 20개에 Query 100개면 80개는 Connection을 받기 전에 기다립니다. Query 50ms여도 대기 2초면 사용자는 DB가 느리다고 느낍니다. Pool을 키우면 대기는 줄어도 DB CPU·Lock 경쟁이 늘 수 있습니다 — Queueing Theory의 Bottleneck Shift입니다. 같은 재고 Row를 1,000명이 사면 Lock Contention이 생깁니다. 앞이 끝나면 뒤가 진행되지만, Deadlock은 서로 기다려 진행이 멈춥니다.

메모리 · 디스크 · Network · 외부 API

메모리 부족은 GC 증가·Swap·OOM으로 이어질 수 있고, 디스크·대역폭도 동시에 쓰면 속도가 떨어집니다. 외부 AI API가 동시 20개 수준인데 1,000개를 보내면 그쪽 Queue·Rate Limit이 생깁니다. 우리 서버가 여유 있어도 병목은 외부일 수 있어 분산 추적이 도움이 됩니다.

Concurrency와 Contention Collapse

동시성을 올리면 처음엔 Throughput이 오르다, 어느 순간 Lock·Connection 대기·Context Switch가 늘며 처리량이 정체·하락할 수 있습니다. Adaptive Concurrency는 Latency를 보고 동시성을 조절합니다. 경쟁이 세지면 Service Time이 늘고 Active Request·Queue가 늘어 악순환이 됩니다. Load Shedding·Saturation 신호(Run Queue·Connection Wait·Lock Wait·Queue Depth)를 함께 봅니다.

Bottleneck · Sharding · Hotspot

Bottleneck은 전체 처리량을 막는 지점이고, Contention은 그 자원을 두고 경쟁하는 현상입니다. Connection이 부족하면 그게 Bottleneck이 됩니다. App 서버만 늘리면 같은 DB·Row로 요청이 더 몰려 경쟁이 심해질 수 있습니다. Lock Granularity를 세밀히 하거나 Sharding으로 분산하면 도움이 되지만 Hot Partition·Hotspot은 남습니다. Cache는 DB 부담을 줄이지만 Cache Stampede·Redis 한 대 과부하를 만들 수 있어 Single Flight·Coalescing·적절한 Batch가 중요합니다.

완화 방법 · HOL과의 차이

Concurrency Limit·Bulkhead·Queue·Cache·Sharding·Lock 범위 조정·Slow Query 단축·CDN·오토스케일(공유 자원까지)이 대표적입니다. HOL Blocking은 앞의 느린 작업이 뒤를 막고, Contention은 여러 작업이 같은 제한 자원을 놓고 경쟁합니다. 둘이 함께 나타날 수도 있습니다. 불공정 스케줄이면 Starvation, 계속 충돌만 하면 Livelock과 맞닿습니다. Race Condition은 결과가 꼬이는 축입니다.

자주 묻는 질문

Resource Contention이란?

제한된 자원을 여러 작업이 동시에 쓰려다 대기와 성능 저하가 생기는 현상입니다.

Pool만 키우면 되나?

Connection 대기는 줄 수 있지만 DB가 감당 못하면 내부 Contention이 커질 수 있습니다.

Worker를 많이 늘리면?

Backend Capacity보다 많으면 DB·CPU 경쟁이 더 심해질 수 있습니다.

서버만 늘리면 사라지나?

공유 DB·Cache·외부 API가 그대로면 남거나 오히려 늘 수 있습니다.

SEO와 관련있나?

SEO 전용 개념은 아닙니다. 심하면 응답·안정성에 영향을 줄 수 있습니다.

정리

Resource Contention = 제한된 자원을 여러 작업이 경쟁하며 대기·성능 저하가 생기는 현상입니다. CPU·Connection·Lock·Network·외부 API 등에서 나타날 수 있고, 어떤 자원이 부족한지·얼마나 점유·얼마나 동시인지·병목이 어디로 이동하는지를 함께 봅니다. 모니터링에서는 Utilization과 Wait Time·Tail Latency를 같이 봅니다. CPU Contention을 보면 또 중요한 개념이 이어집니다. Core는 몇 개인데 Thread가 수백·수천 개면 OS가 번갈아 실행하며 상태를 저장·복원합니다. 실제 업무가 아니라 실행 대상을 바꾸는 데도 CPU 시간이 쓰입니다. 이처럼 CPU가 Process·Thread를 교체하며 실행 상태를 저장·복원하는 과정Context Switching(컨텍스트 스위칭)이라고 합니다.