📌 실무에서 마주친 기술
- Armeria 기반 gRPC 서버에서 Kotlin Coroutine을 활용한 API 응답 처리 중,
suspend 함수로 인해 스레드가 응답 대기 중단되고 다른 요청 처리를 수행하는 구조를 경험함.
- 예시) Armeria + gRPC + Kotlin Coroutine 환경에서의 논블로킹 처리
🧠 관련된 CS 개념
- 개념 키워드:
- 동기 / 비동기
- 블로킹 / 논블로킹
- 코루틴 / 쓰레드
- 컨텍스트 스위칭 / 논블로킹 I/O
- 참고 자료:
📘 개념 요약 및 정의
동기 vs 비동기는 작업이 기다려야 하는지에 대한 것이고,
블로킹 vs 논블로킹은 쓰레드가 막히는지 여부에 대한 개념이다.
- 동기 블로킹: 작업 순서대로 진행하며, 쓰레드가 멈춘다 (ex. Spring MVC)
- 비동기 논블로킹: 요청만 해두고 응답이 오면 콜백/코루틴으로 처리하며, 쓰레드는 다른 작업을 수행할 수 있다 (ex. Armeria + Coroutine)
- 코루틴은 중단(suspend)과 재개(resume)를 통해 쓰레드 낭비 없이 비동기 흐름을 관리할 수 있게 해준다.
✍️ 내가 이해한 방식으로 설명하기
Armeria + gRPC + Kotlin Coroutine 기반의 서버에서
suspend 키워드가 붙은 함수는 실제로는 비동기적으로 동작하며,
요청 처리는 중단되더라도 해당 쓰레드는 EventLoop 구조 덕분에 다른 요청을 처리할 수 있었다.