CALLBACK
architecture
CALLBACK
Callback Function 의 필요성은 Strategy Design Pattern 을 통해서 쉽게 알 수 있다.
Template Callback Pattern Pseudo Code:
fun dispatch(callback: (String) -> Unit) {
// Context: 변하지 않는 부분
val context = "Context"
// Strategy: 변하는 부분
callback(context)
}
위 코드를 통해서 배울 수 있는 부분은 다음과 같다.
- callback 함수를 호출하는 것은 callback 함수를 파라미터로 받는 다른 함수,모듈,스레드이다.
- callback 함수는 람다식으로 전달이 가능하다.
- callback 함수는 Deferred Execution 된다.
여기까지가 Callback 함수가 필요성과 동기식 Callback Function 의 사용 방법이다. 높은 동시성(high-concurrency)을 요구하는 소프트웨어의 경우에는 Async Callback 방식을 사용해야 한다. 예를 들어, 서비스 서버가 플랫폼으로의 호출 결과를 반드시 알아야 하는 경우 '알림(notification) 방식' 을 이용하면 된다. 즉, Callback API 를 제공해주고 플랫폼에 해당 API 를 등록하면, 플랫폼은 서비스 서버로 부터 요청을 받고 결과를 비동기로 Callback API 로 전달한다.
높은 동시성외에도 비동기가 필요한 경우는 '디스크의 파일 읽고 쓰기, 네트워크 데이터 송수신' 등 시간이 많이 걸리는 I/O 작업을 하는 경우, 해당 작업을 백그라운드 형태로 진행한다.
만약, 전체 시스템을 Fully-Async Architecture 로 구성하려면, 클라이언트에게 응답을 전송하기 위해 Event Streaming Platform or Cloud Databases 가 필요하다.