입사한지 한달이 조금 넘어가는 시점에서 이벤트 대상자들에게 알림을 발송하는 업무를 맡게 되었다.
파일에서 line을 읽어 curl 명령을 실행하는 쉘 스크립트 기본 틀을 리더님께서 구현하여 설명을 해주셨고, 그것을 바탕으로 알림 발송 스크립트를 구현했다.
알림을 발송하는 API를 반복적으로 호출해주면 되기 때문에 복잡한 업무는 아니었지만, 리얼 환경의 실제 유저들을 대상으로 하기때문에 실수가 발생할 경우 CS적인 문제가 발생할 수 있는 업무였다.
되도록 깔끔하게 마무리하기 위해서 스크립트도 꾸준히 개선하고 사전 테스트도 여러번 진행했었는데 아니나 다를까 결국 문제가 발생하고 말았다.
발생한 문제
- 일부 유저들에게 알림 발송이 실패
- 알림 발송 실패케이스를 확인하다 유저 ID가 다르게 사용되어 오발송된 케이스 확인
문제의 원인
- 이벤트 대상자 명단을 엑셀로 작성된 파일과 csv(comma-separated values)를 txt로 변환한 파일 두가지를 받았는데 스크립트에서 처리하기 위한 포맷으로 만들기 위해서 csv를 변환한 txt 파일의 경우 comma 문자를 지우는 처리가 필요했고 (나중에 찾아보니 10자도 안되는 코드를 추가하는 것 만으로도 처리가 가능했었다…) 엑셀의 경우 쭉 복사해서 붙여넣기만 하면 원하는 포맷으로 만들 수 있었다. 그래서 엑셀의 내용을 복사해서 새로운 txt 파일을 생성했다. (문제의 발단)
- 엑셀에서 특정 문자열을 지멋대로 변환시키는 케이스가 있었는데 전혀 예상하지 못했다.
- 0으로 시작하는 숫자포맷 → 0을 지워서 표기
- 날짜와 관련된 단어가 포함 → 날짜 형식으로 표기
- 등등…
- 실제 유저의 아이디들은 테스트 환경에 존재하지 않아서 사전 테스트를 진행할 때 다른 테스트 계정들을 이용하여 테스트를 진행했었고, 아이디가 변환되어 발생하는 문제들을 사전에 확인하지 못했다.
- 해당 아이디들로 alpha 테스트를 진행해도 되는지 알림 API를 담당하는 팀에 문의를 해보는 것이 좋았을 것 같다.
사후처리
진행 과정을 같이 follow 해주셨던 팀원분께서 파이썬으로 엑셀에서 지멋대로 변환시킨 케이스들을 쭉 뽑아주셨고 (은인 ㅠㅠ), 다행히도 혹시 몰라서 같이 구현해놓은 알림을 회수하는 스크립트를 이용하여 오발송된 알림을 회수처리하고 미전송된 계정에 다시 알림을 전송하였다.
이후 새로운 알림 발송을 진행할 때는 value 변환 가능성이 있는 엑셀파일대신 csv를 txt로 변환한 파일을 사용하기 위해 comma 문자를 지우는 스크립트를 추가하였다.
1 2 3 4 5
# CRLF 문자와 comma 문자를 제거 cat $INPUT_FILE | tr -d '\r' | tr -d ',' | \ while read line; do ... done
느낀점
- 정말 예측하지 못했던 부분에서 생각지도 못했던 문제가 발생할 수도 있다는 것을 경험했고, 가능하면 실제 환경과 최대한 비슷하게 테스트를 진행해서 미리 발생할 수 있는 오류를 확인하는 것이 중요하다는 것을 다시한번 느꼈다.
- 이벤트에 대한 작업들이 단계적으로 이루어졌는데 알림발송은 가장 마지막 단계였었다. 그런데 알림발송 차례가 되었을때 퇴근시간이 가까웠고, 문제 대응이 어려울 수 있으므로 리더님께서 다음날 진행하는 것이 좋겠다고 기획팀을 설득해주셨다. 리더님의 말을 따른 것이 정말 다행이었다.
- 오발송된 케이스를 확인했을때 바로 회수를 진행하려 했었는데, 같이 follow 해주셨던 팀원분께서 이벤트 기획팀에서의 정책이 따로 있을 수 있으니 무작정 회수를 진행하면 안된다고 말씀해주셨다. 회사 업무에서는 하나하나 확실하게 확인하고 진행하는 것이 중요하다는 것을 업무적으로 배울 수 있었다.
- 기획팀에서 이벤트 유입을 확인하기 위해 알려준 이벤트 코드를 잘못 사용했다..