폴링(Polling)이란?
폴링은 클라이언트가 서버에게 주기적으로 ‘새로운 정보가 있나요?’라고 반복해서 물어보는 방식입니다. 예를 들어 setInterval을 이용해 5초마다 API를 호출해서 데이터가 바뀌었는지 확인하는 코드가 대표적인 폴링 구현입니다. 이 방식은 구현이 단순하고 어떤 서버 환경에서도 쉽게 적용할 수 있다는 장점이 있습니다. 하지만 실제로 변화가 없는데도 계속 요청을 보내야 하기 때문에 서버 자원과 네트워크 대역폭이 낭비되고, 요청 주기보다 응답이 늦게 반영되는 지연 문제도 발생합니다.
웹훅(Webhook)이란?
웹훅은 반대로 서버가 특정 이벤트가 발생했을 때 미리 등록된 클라이언트의 URL로 직접 데이터를 보내주는 방식입니다. 클라이언트는 ‘이벤트가 생기면 이 주소로 알려줘’라고 미리 콜백 URL을 등록해두기만 하면 됩니다. 대표적으로 GitHub에 코드를 푸시하면 CI 서버로 알림이 가는 것, 결제 서비스에서 결제가 완료되면 가맹점 서버로 결과를 전송하는 것이 웹훅의 예시입니다. 불필요한 요청 없이 이벤트가 발생한 시점에만 통신이 이루어지기 때문에 효율적이고 실시간성이 뛰어납니다.
이해를 돕기 위해 택배 배송을 예로 들어보겠습니다. 폴링은 택배 기사님께 ‘지금 도착했어요? 지금은요?’라고 계속 전화하는 것과 같고, 웹훅은 택배 기사님이 도착하는 순간 직접 ‘지금 도착했어요!’라고 전화를 걸어주는 것과 같습니다. 후자가 훨씬 효율적이라는 걸 직관적으로 알 수 있습니다.
실무에서는 어떻게 선택할까?
두 방식은 상황에 따라 장단점이 갈리기 때문에 다음과 같은 기준으로 선택하는 것이 일반적입니다.
- 이벤트 발생 빈도가 낮고 실시간성이 중요하다면
웹훅이 유리합니다. - 클라이언트가 외부에서 접근 가능한 공개 URL을 가질 수 없는 환경(사내망, 방화벽 뒤)이라면
폴링이 현실적인 대안입니다. - 웹훅은 서버가 요청을 못 받았을 때 재시도 로직이나 실패 처리를 별도로 구현해야 하는 부담이 있습니다.
결국 웹훅은 ‘이벤트 기반’ 통신, 폴링은 ‘요청 기반’ 통신이라는 차이를 이해하면, 서비스의 트래픽 패턴과 인프라 환경에 맞는 방식을 선택하는 데 큰 도움이 됩니다.