부제 : 그리팅 해결사가 일하는 법
그리팅의 Smart 백엔드 엔지니어 ‘권준’님께서 지난 9월 7일에 ‘그리팅 해결사가 일하는 방법’을 발표해주셨어요!
최근들어 그리팅에 많은 분들이 합류해주셨다보니, 개발팀에서 어떻게 일하는지 공유하고 최근에 해결한 이슈를 예로 들어 발표해주셨습니다.
먼저 그리팅의 개발팀에서 일하는 방식에 대해 설명해 주셨는데..!
개발팀은 ‘Agile’방식을 이용해서 프로덕트를 개발하고 있습니다.
많은 분들이 Agile 방식으로 일한다~ 일한다! 하지만 정작 정확한 Agile이 무엇인지에 대해 인지하고 있으신 분은 많이 없더라구요!
Agile 방식에 대해 설명드리자면, 작은 단위의 Agile 팀으로 시작해 작은 Product를 우선 만들어요. 그리고 1~4주의 짧은 주기로 VOC를 받아 개선하면서 Product를 완성해가는 방식이라 보시면 됩니다.
즉 고객과 함께 만들어가는 Product이고, 이 과정을 계속해서 반복하며 지속적으로 개선해 나아가는 일 하는 방식입니다!사실 설명을 듣고 나니 ‘이거 그냥 우리 그리팅 팀인데?’라는 생각이 딱 들더라구요. 실제로 그리팅(Greeting)은 고객의 소리에 빠르게 반응하여 기능을 개발하고 반영하는 것으로 유명해요!
그리고 고객이 필요로 할만한 기능이 무엇이 있을지 고민하고 빠르게 개발하고 반영하는 엄청난 속도를 가진 팀이거든요!
그리고 Agile로 문제를 해결한 case가 있어서 함께 공유드려요!
저희 고객 기업인 A사에서 1만 명의 지원자 데이터를 Excel로 다운로드하고 싶다는 니즈가 있었어요.
물론 이론적으로는 다운로드하는데 문제가 없지만, Stream으로 받기에 약 15~20분의 다운로드 시간이 소요되고 이렇게 긴 시간 동안에 다른 일을 전혀 할 수 없는 상황이 발생할 뿐만 아니라 중간중간 패킷이 분실됨으로써 데이터가 누락되거나 파일이 깨지는 경우가 발생했습니다 .
그래서 Smart 백엔드 엔지니어 준님께서 생각하신 첫 번째 해결 방법으로는
‘데이터 요청하는 것도 Stream으로 하면 속도가 엄청 빨라질 것이고 그럼 시간이 개선되고 패킷 분실률도 상당히 줄 것이다!’라는 생각이 들어 실행하려 했지만, 그리팅에서 단일 데이터만 가져오는 것이 아닌 다양한 정보(예를 들어, 지원자의 평가 정보 등등) 을 가져와야 하다 보니 이 방법을 사용하기에는 어렵겠다는 결론이 났어요.
그럼 현재 상황으로서는 두 가지 문제에 봉착한 상태입니다.
1. 다운로드 시간(15~20분) 동안 네트워크가 안정적으로 유지되어야 한다
2. 지원자 조회 시간은 어떻게 해도 병목이 발생하는 상황이다.
이 두 가지를 해결하려면 어떻게 해야 할까요?
그리팅팀은 항상 사용자 입장에서 생각하고 문제를 해결하고자 하기에 사용자 입장에서 문제를 다시 생각해 보기로 했습니다.
- 다운로드를 유지시키지 않으면 파일이 잘 못 받아지는 것
- 다운로드 속도가 느리다는 것 (파일을 한 줄씩 생성함과 동시에 다운로드)
그럼! “다운로드 파일을 완벽하게 만들고, 다운로드 속도를 보장하면 해결되는 것 아닐까?!”라는 생각이 번뜩 들었어요!
사용자가 직접 다운로드 받으면 지속적으로 두 가지 문제가 발생하니, 네트워크를 안정적으로 유지하게 하는 것은 ‘그냥 우리가 AWS에서 직접 받아서 전달하면 다운로드도 금방 되고 온전한 파일을 줄 수 있지 않을까?’라는 번뜩이는 아이디어가 났습니다!
바로 실행에 옮겼고, 위 사진 같은 프로세스가 만들어 보았어요.
“오 그럼 Excel Stream에서 Amazon S3로 보내고 이걸 메일로 사용자에게 보내면 문제가 해결되겠다!”라는 생각으로 다른 팀원들에게 피드백을 요청했어요.
역시 이래서 그리팅팀을 좋아해요. 다양한 관점으로 문제를 바라봐 주는 팀원들이 항상 있거든요.
그래서 다른 팀원의 의견인 ‘암호화가 되지 않아서 저 링크를 제3자에게 유출’되면 아주 아찔한 상황이 발생하게 될 수 있다는 피드백을 받고 암호화에 눈을 돌렸어요.
근데 또 두 가지의 문제에 봉착했어요.
- 기존 엑셀 제작 프로그램은 암호화를 제공하지 않습니다.
- Xlsx-populate, sheetJS 라이브러리는 암호화를 제공하지만 이것을 도입하려면 코드를 전부 갈아엎어야,,,
이 문제를 어떻게 해결할 수 있을지에 대해 고민하다가 Excel 파일을 압축해서 압축파일에 암호화를 하는 방식으로 Add를 하면 어떨까?!라는 아이디어가 떠올랐고 이 고민을 해결해 줄 수 있는 라이브러리가 있는지 열심히 찾아보았어요.
그 결과! Archiver라는 라이브러리가 있었고, 그걸 통해서 아래의 프로세스를 만들 수 있게 되었어요 :)
사용자가 데이터를 요청 → AWS에서 그리팅(Greeting)이 직접 다운로드(시간 단축 / 파일 깨짐 방지) → 압축 후 암호화 → Amazon S3를 통해 사용자에게 메일을 발송 !
이로써 패킷 분실로 인한 데이터 누락, 파일 깨짐을 방지하고, 데이터 다운로드를 위한 시간을 줄이며, 암호화를 통해 보안까지 잡을 수 있는 프로세스를 만들었어요.
이 문제 해결은 Agile한 의사결정이 아니었다면 시간이 더욱더 오래 걸렸을 것이라 생각해요.
- 지원자 조회 시간을 해결하기 힘들다는 점을 파악하고 사용자 입장에서 문제를 다시 고려했습니다 !
→ S3(빠른 다운로드 서비스)에 데이터를 업로드하고 링크를 제공하는 방식을 사용함 - 보안 이슈를 고려하여 엑셀을 암호화하기 결정!
→ 엑셀 암호화가 어렵다는 판단하에 또 다른 방법인 압축 암호화를 사용함
*결론적으로 약 2주만에 배포가 완료되었습니다
만약 우리가 Agile한 의사결정이 없었고, 다양한 관점을 가진 그리팅 팀원이 없었다면?
1. 데이터베이스 병목에 초점을 두고 계속해서 문제를 해결했다면?
→ 쿼리 최적화
2. 보안 이슈를 고려하여 엑셀 파일을 암호화하는 방법을 사용해서 문제를 해결했다면?
→ 다른 프로그램을 사용해서 코드를 갈아엎음
*1~2달 정도 걸리지 않았을까?
이 과정 속에서 배운 점을 공유하자면
1. 문제를 해결할 땐 사용자 입장에서 문제를 고민하자 !
2. 진짜 문제가 무엇인지 계속해서 생각해 보자!
3. 문제를 해결할 수 있는 여러 가지 방법들을 생각해 보자!
4. 지금 해결한 문제가 완벽한 해결 방법은 아닐 수 있다!
라고 말할 수 있을 것 같아요.
이상 Smart 백엔드 엔지니어, 준님의 ‘그리팅 해결사가 일하는 방법’이었습니다. (와아아아아)
그리팅의 일하는 방식, 그리고 문제 해결을 위한 접근 방식 어떠셨나요?
저희 그리팅은 정말 열정적으로 문제를 해결하고 싶은 욕구가 강한 팀이에요! 어떻게 하면 더 효율적으로 해결할까? 어떻게 하면 더 편하게 사용할 수 있을까?에 대해 끊임없이 고민하고 실행하는 팀으로 유명합니다.
이러한 팀 그리팅에 합류하고 싶다면 채용공고 링크를 따라가시면 현재 오픈된 포지션, 그리고 자신의 포지션이 아직 열려있지 않다면 인재풀에 등록이 언제든지 가능하니 편하게 문의주세요!