카프카를 공부하면서 가장 먼저 느낀 점은 개념을 이해하려면 용어부터 제대로 알아야 한다는 것이다. 특히 공학적인 맥락에서 자주 쓰이는 단어들이 많다 보니 어디선가 들어본 적은 있어도 막상 뜻을 정확히 설명하지 못하고 답변이 부실해진다. 그래서 앞으로는 낯설거나 헷갈리는 단어들을 하나씩 짚어가며 정리하려고 한다. 오늘은 그중에서도 카프카 핵심 가이드에서 메시지를 전송할 때 등장하는 한 가지 용어를 공부해 보겠다.
콜백이라는 단어는 비동기 처리나 에러 상황에서 자주 등장한다.
자바스크립트 에서도 than 안의 함수로 응답메시지를 보내거나 catch로 감싸서 나중에 처리될 함수를 정의하는 것이 콜백이다.
JS 콜백 예시
fetch('/api/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('에러 발생:', error));
일상 생활에서도 보험사나 통신사에서 콜백 서비스를 제공하는 곳이 있다.
고객센터와의 연락에 실패한 고객에게 다시 전화를 해주는 서비스이다.
고객이 연결에 실패했을때 다음에 할 행동을 미리 정의해 놓았기 때문에 가능한 서비스인 것이다.
카프카에서는 메시지를 비동기로 전송할때 메시지가 문제없이 전달이 되었다면 괜찮지만 그렇지 않고 메시지 전송에 완전히 실패했을 경우에는 내용을 알 수 있어야 한다. 그래야 예외를 발생시키든지, 에러를 로그에 쌓든지, 아니면 에러 파일에 메시지를 쓰는 등의 조치를 할 수 있다.
그러므로 카프카는 메시지를 비동기적으로 전송하고 에러를 처리하는 경우를 위해 프로듀서는 레코드를 전송할 때 콜백을 지정할 수 있도록 한다.

callback에 대해 공부하다 보니 fallback 이라는 단어가 생각난다.
앞의 예시를 실패했을 때의 예시를 들어 헷갈릴 수도 있지만 callback은 어떤 작업이 끝났을 때 그 다음 동작이 실행되는 것을 의미한다. 반면, fallback은 에러 상황에서 유의미하다.
예를 들어, 메시지 전송에 실패했을 때 다른 토픽으로 메시지를 보내거나, 실패한 메시지를 로그 파일이나 DB에 저장하는 방식이 있을 수 있다.
카프카에서는 콜백으로 전송 결과를 확인하고, 필요할 경우 fallback으로 대체 처리를 구현하는 방식으로 활용할 수 있다.