❤️ 알파챗 개발하다 오픈소스에 연240만원 기부하게 된 사연
개발자가 컴퓨터 앞에서 하는 일이 무엇인지 2화입니다.
배경: 알파챗은 생각보다 어려운 기능이었다.
이미 버블 같은 유사 앱이 있으니 알파챗을 쉽게 생각했습니다. 근데 버블의 스토어 평점이 2점대를 못 벗어나는 이유 중에 채팅 기능의 오류가 한 자리를 차지하고 있습니다. (채팅이 메인인 서비스인데!)
어려운 이유는 여러가지가 있지만, 셀럽과 팬이 보는 메시지가 서로 다르니 논리적으로는 별개의 채팅방인데, UX적으로는 하나의 채팅방이라는 경험을 줘야 하는 점에서 SQL 쿼리가 복잡해지기 시작합니다.
어려운 이유는 여러가지가 있지만, 셀럽과 팬이 보는 메시지가 서로 다르니 논리적으로는 별개의 채팅방인데, UX적으로는 하나의 채팅방이라는 경험을 줘야 하는 점에서 SQL 쿼리가 복잡해지기 시작합니다.
그렇다 보니 일반적인 비지니스 애플리케이션에서 나타날일 없는 복잡한 쿼리를 작성하게 됩니다. 그런데 제가 사용하는 Ash framework에서 (전세계적으로) 지금까지 그렇게 복잡한 쿼리를 사용하는 개발자가 없었던 것인지 분명 쿼리는 제대로 작성했는데 결과가 이상하게 나왔습니다.
#버그1 채팅목록에 표시할 마지막 메시지
알파챗으로 인해 채팅방과 메시지가 M:N 관계여서 복잡한 쿼리가 발생하여,
시간 역순으로 정렬했는데도 마지막 메시지가 아닌 랜덤한 메시지가 나오는 현상이 발생
시간 역순으로 정렬했는데도 마지막 메시지가 아닌 랜덤한 메시지가 나오는 현상이 발생
- Ash 프로젝트에 버그 제보함
- 메인 개발자가 "I won't have a chance to look into this for a while unfortunately." 라고 한동안 고칠 시간이 없다는 답변을 받아서 좌절😭
- 하지만 또 다른 Ash 기여자 Ken 이 해당 이슈에 관심을 갖고 고치기 시작
- https://github.com/ash-project/ash_sql/pull/160
- 저도 같이 동참해서 고치기 시작
- 1주일 정도 걸린 끝에 버그를 수정했고, 엄청난 고마움을 느꼈습니다.
#버그2 채팅방의 읽지 않은 메시지 갯수
채팅방에는 각자 어디까지 읽었는지 기억하는지를 저정하는 커서가 있습니다. 채팅방에 새로운 메시지가 오는 등으로 인해 읽지 않은 메시지 갯수를 새로 구해야 하는데, 이때도 알파챗과 커서로 인해 쿼리가 복잡해져서 결과가 제대로 나오지 않는 버그가 생겼습니다.
- Ash 프로젝트에 버그 제보함
- 이번에는 메인 관리자가 직접 나서 버그를 수정해줬습니다.
2번의 위기 때문에 채팅 기능의 일부를 삭제하거나 억지로 구현하려면 DB에서 결과를 바로 받지 못하고, 채팅방의 메시지 전체를 모두 서버로 옮겨와서 계산하는 엄청 계산 속도가 느린 방법으로 해야 하는 상황이었는데, 오픈소스 커뮤니키의 도움으로 Ash 프레임워크의 버그가 수정되서 정상적인 방식으로 기능들을 구현할수 있었습니다.
#자본주의에서 고마움은 돈으로 표현하는 것
2번의 도움을 받고 나서, 이건 Thanks 댓글로 끝나면 안되는 것 같아서, Ash framework 개발에 쓰일수 있도록 회사 차원에서 월 20만원씩 후원을 시작했습니다. 큰돈은 아니지만, BEP 달성을 못한 회사로서는 찐 감사의 표시입니다.
재철님의 이런 노력과 스타트업 정신이 결국 좋은 결과로 보답 받을겁니다. 화이팅이에요
오늘은 제가 또 버그를 고쳤네요 ㅋ