[심화] 9. 폴링

백하림's avatar
Jul 25, 2025
[심화] 9. 폴링
🔥

✅ 폴링(Polling)이란?

어떤 조건이 충족되었는지를 주기적으로 검사하여,
조건이 만족될 때까지 계속 반복 체크하는 방식.
즉, **"지금 됐어?"**라고 계속 물어보는 구조임.
→ 일정 간격으로 상태를 체크하는 반복 요청 모델

App.java

package ex08.polling; public class App { public static void main(String[] args) { LotteMart lotteMart = new LotteMart(); Customer1 customer1 = new Customer1(); // 1. 마트는 입고 준비 new Thread(() -> { lotteMart.received(); // 5초 }).start(); // 2. 입고 확인 while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } if (lotteMart.getValue() != null) { // request (폴링) customer1.update(lotteMart.getValue() + "이 들어왔습니다."); break; } else System.out.println("상품이 아직 들어오지 않았어요."); } } }

Customer1.java

package ex08.polling; public class Customer1 { public void update(String msg) { System.out.println("손님1이 받은 알림 : " + msg); } }

LotteMart.java

package ex08.polling; public class LotteMart { private String value = null; public String getValue() { return value; } public void received() { for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { throw new RuntimeException(e); } } value = "상품"; } }
notion image
🔥
  1. LotteMart.received()가 5초 뒤에 value"상품"으로 설정
  1. 메인 쓰레드에서는 0.1초마다 lotteMart.getValue()null인지 체크함
  1. null이면 "상품이 아직 들어오지 않았어요." 출력 (폴링)
  1. 값이 들어오면 "손님1이 받은 알림 : 상품이 들어왔습니다." 출력

🔁 폴링 구조 특징

항목
설명
기술 방식
일정 주기로 상태를 직접 확인함 (Thread.sleep + if)
장점
구현 간단, 동기 흐름 유지 가능
단점
자원을 계속 사용함 (CPU 낭비), 응답 지연 발생 가능
비동기 아님
이벤트나 콜백이 아니라 내가 직접 감시해야 함

🔄 비교: 폴링 vs 푸시 vs 옵저버

방식
설명
자원 효율성
응답 속도
구조/관계
예시 표현
폴링
직접 주기적으로 확인
❌ 낮음
⏱ 지연 가능
단방향
"계속 새로고침”
푸시
서버가 알아서 알려줌
✅ 좋음
✅ 빠름
주로 1:1
"DM 오면 진동 울리기”
옵저버 패턴
상태 변화 감지 후 옵저버에게 알림
✅ 좋음
✅ 빠름
1:N 구조
"내가 상태 바꾸면 구독자들 전부에게 알림”

콜백 메서드

🔥
콜백은 어떤 메서드 안에서, 외부로부터 전달받은 다른 메서드를 간접적으로 실행하는 구조로, 호출 흐름이 뒤로 위임되는 비동기적/동적 실행 방식이다.
Share article

harimmon