Callbackers.com 개발 기록
개발 동기
명절에 아무런 목표 없이 흘러가기엔 너무나도 긴 연휴이다.
추석 연휴가 시작하기 직전에 갑자기 아이디어가 떠 올랐다.
사건 케이스
- 공용 카드 사용 내역에 대한 Slack Webhook 만들기
- Callback 이 오지 않는다는 클라이언트의 문의
- 레거시 시스템에서 사용하던 Slack Webhook에 대한 관리 체계
1. 공용 카드 사용 내역에 대한 Slack Webhook 만들기
회사에서 제공된 카드는 일정한 그룹에서 공용으로 사용한다.
카드 내역 확인 및 잔고 확인을 위해 notion에서 table을 이용하여 관리하고 있었다.
하지만, 사용한 사람이 직접 추가하거나, 카드 내역을 볼 수 있는 내가 관리하는 방식이었다.
이 방식은, 누락이 자주 발생하여 누가 카드를 사용했는지 알수 없는 상황이 많이 발생했다. (영수증 첨부 필요 없음.)
이 문제가 계속 발생하여, 나는 해결 방법을 찾았다.
300원짜리 카드 사용 내역 문자 서비스를 가입하여, 문자가 오면, Slack으로 Webhook을 보낼 것이다.
이 간단한 케이스는 아이폰 단축어 - 자동화 부분을 이용하여 제작이 가능하다.
이러한 시스템을 중앙에서 집중 관리하여 처리하는게 어떨까 라는 생각이 들었다.
예시) 해당 문자는 각 그룹에 맞게 알림도 가지만, 전체 시스템 관리자에게도 같이 전송돼야한다. 등등
즉 클라이언트 레벨에서 callback을 고치는 것이 아니라, 중간 시스템을 UI를 통해서 output을 수정할 수 있는 시스템을 만들려고 한다.
2. Callback 이 오지 않는다는 클라이언트의 문의
우리의 서비스를 사용하고 작업이 완료되면, 사용자가 지정한 URL로 callback을 주는 시스템이 있다.
한 고객사가 callback이 오지 않는다고 문의가 왔다.
“callback을 전송” 까지의 로깅을 하는 입장에서 전송은 완료 된 것으로 파악 했지만, 상대 서버가 어떤 상태였는지는 확인하지 않는다. (callback 실패가 작업 실패로 처리되는 것을 원치 않는다.)
이러한 상황에서 해당 URL로 예시 Body를 이용하여 전송을 했을 때, 고객사의 PHP 웹 서버에서 에러가 발생하여 다음으로 넘어가지 않는 것을 확인하여 상황을 전달해드렸다.
이러한 부분은 놓치기 쉽고, 서로가 관리를 하지 않는 것이 대부분일 것으로 추측된디. (callback은 단순히 fire & forget)
중간 관리 시스템에서 Callback에 대한 로그를 남겨주고, URL 변경 output 변경 등을 중앙 시스템에서 하는 것이 어떨까?
3. 레거시 시스템에서 사용하던 Slack Webhook에 대한 관리 체계
한번은 더이상 지원되지 않는 Rule 에 의해 Slack 알람이 계속해서 발생하는 이슈가 있었다.
관리하는 시스템이 많고, 다른 자원으로 활용되는 경우도 있어 실제 어떤 서버에서 해당 알림을 요청했는지 찾기가 어려웠다.
이 이후로, Webhook 메시지에 발신자에 대한 정보도 넣는 것으로 Rule을 정했지만, 이미 적용된 시스템에서는 아직도 빠져있다.
컴파일 레벨의 관리체계까 아니기 떄문에, 해당 부분은 늘 누락이 있을 수 있다.
callback을 요청하는 중앙 시스템에서 요청자에 대해서 로깅 및 필터링, 더 나아가 해당 기준으로 분류가 되는 기능이 있으면 좋을까?
callbackers.com 시스템 개발 시작.
callbackers.com 이라는 도메인을 구매했다.
해당 시스템은 AWS 자격증을 딸 생각이 있기 때문에 AWS 시스템을 적극 활용해볼려고 Route53으로 구매를 완료했다.
현재 간단한 데모 구상은 다음과 같다.
Edge -> RabbitMQ -> Worker
Edge 의 수는 서비스의 규모에 따라 확장 가능하게 Lambda를 활용하면 어떨까 싶다.
RabbitMQ는 서비스가 커지면 Kafka로 갈 예정이다.
Edge는 단순히 DB에 접속 기록을 Insert 하는 bot이다.
DB와의 종속성을 없애기 위해, 모든 요청에 대해서 기록한다.
*.callbackers.com 으로 통한다. (e.g. mingkyme.callbackers.com)
Worker는 Edge에서 보낸 Queue 를 Consuming 하여 해당 DB row를 조회하여 기존에 정해진 Rule과 일치하는 것을 찾아, Rule에 맞게 동작한다.
현재는 패스스루, slack 만 연동하여 데모를 진행 중이다.