누군가 40MB짜리 사진을 사이트에 올렸어요. 앱이 그 자리에서 모든 걸 멈추고 이미지 크기를 조정하기 시작하면, 다음 열 명의 사용자는 뱅글뱅글 도는 로딩 화면만 바라봐야 해요. 그래서 기다리게 하지 않아요. job을 넘겨버리고 "이거 처리해, 나는 고객 응대 중이야"라고 합니다.
그 벽 너머에서 일을 받아 처리하는 게 바로 워커예요.
바쁜 주방의 라인 쿡을 떠올려보세요. 주문을 받거나 와인을 따르거나 계산대를 운영하지 않아요. 레일에서 주문서 하나를 집어 들고, 요리 하나를 만들고, 내보내고, 다음 주문서를 집어요. 그게 전부예요. 워커는 소프트웨어의 그 라인 쿡이에요. 한 가지 일만 하는 작은 프로그램이 손님이 앉아 있는 홀이 아닌 주방 안쪽에서 조용히 돌아갑니다.
핵심을 짚어보면 이렇습니다. 앱이 하는 일 대부분은 눈앞에서 빠르게 일어나요. 버튼 클릭, 결과 확인. 하지만 어떤 작업은 너무 느리거나 무겁거나 귀찮아서 사람을 그 앞에 붙잡아 두기가 어렵죠. 그래서 앱은 그런 작업들을 워커에게 넘기고, 사용자는 하던 일을 계속합니다. 넘겨지는 작업의 종류는 거의 항상 비슷해요.
- 방금 업로드된 큰 이미지 크기 조정 및 크롭
- 환영 이메일 발송 (그 다음 것도, 그 다음 것도)
- 아무도 기다리기 싫어하는 월간 PDF 보고서 생성
- 대량 주문 데이터를 요약으로 집계
- 동영상, 파일, 가져오기 작업 처리
이것들은 누가 지켜볼 필요가 없어요. 그래서 눈에 띄지 않는 곳에서 처리되고, 사용자는 바로 화면을 돌려받아요.
이제 핵심 묘수가 나옵니다. 워커가 존재하는 진짜 이유예요. 저녁 손님이 몰릴 때 좋은 주방은 메뉴를 다시 짜거나 셰프를 재교육하지 않아요. 라인에 쿡을 더 세울 뿐이에요. 주문서 5장이 밀렸다면 쿡 5명을 붙여요. 소프트웨어도 정확히 같은 방식으로 작동합니다. 일이 쏟아질 때 새로 짤 것이 없어요. 같은 워커의 복사본을 더 많이 나란히 실행하고, 각각이 같은 레일에서 주문서를 집어 가요.
코드를 한 줄도 안 건드려도 이것이 중요한 이유가 있어요.
앱이 느린 작업을 처리하면서도 빠르게 느껴지는 이유예요. 무거운 처리는 백단의 워커에게 넘어갔기 때문에 앞단이 멈추는 일이 없어요.
바쁜 날 규모를 키우는 방식이에요. 가입자나 업로드가 폭주해도 앱이 다운되지 않아요. 쿡을 더 세우면 그만이에요.
반복적인 자동화 작업이 저절로 돌아가는 원리예요. "설정해두면 알아서 된다"는 자동화의 상당수는 사실 사용자가 자는 동안 조용히 주문서를 집어가는 워커랍니다.
워커는 보통 차례를 기다리는 작업 줄에서 일을 공급받아요. 그 줄에는 따로 이름이 있는데, 큐예요. 워커는 줄 맨 앞에서 하나를 꺼내 처리하고, 다음 것을 꺼내요. 줄이 길어지면 쿡을 더 세우고, 조용해지면 쿡들이 잠시 쉬어요. 괜찮아요. 그러라고 있는 거니까요.
오해하지 말아야 할 부분이 하나 있어요. 워커는 영원히 대기하며 돌아가는 프로그램이 아니에요. 핵심은 깨어나서, 맡은 일 하나를 처리하고, 결과를 보고하고, 빠져나가는 거예요. 가볍고, 집중적이고, 일회성이에요. 한 번에 백 개가 필요하면 백 개를 띄우면 되고, 필요 없으면 하나도 안 띄우면 돼요.
모든 것을 하는 기계를 만드는 게 아니에요. 한 가지를 잘하는 작은 쿡 하나를 만들고, 물량이 요구하는 만큼 그 쿡을 고용하는 거예요.