ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 오픈소스 프로젝트를 만들어본 썰 풉니다! (feat. FastAPI, Slack)
    🎁 토이 프로젝트/Emoji Rank (이모지 랭크) 2021. 4. 18. 02:27

    안녕하세요! 운동하는 개발자 Jay입니다! 

    이번 포스팅은 Emoji Rank라는 오픈소스 프로젝트를 만들어 보고 느낀점 등을 공유해보려고 합니다. 

     

    오픈소스  프로젝트라고는 하지만, 다른분들이 많이 이용하실지는 모르겠네요 ㅎㅎ 그래도 나름 README도 빡세게 썼고 최소한의 수정으로 커스텀할 수 있게 만들어 보려고 노력했습니다.

     

    1. Emoji Rank (이모지 랭크)가 뭐하는 프로젝트야?


    Mathpresso 백엔드 개발자분이 공유해주신 글

    우연히 링크드인이였나? 슬랙에 공유된 내용이었나? 아무튼.. 매프 멤버들이 서로 토마토를 주는 이유는? 이라는 글을 읽고 되게 재밌는 내용이라고 생각했습니다.

     

    간단하게 설명드리자면, 슬랙에서 사용되는 Emoji 중 칭찬 스티커 느낌으로 의미 있는 Emoji를 선택해서 그 Emoji를 다른 멤버들 글에 리액션(Emoji를 다는 행위)하는 걸 카운트하고, 그걸 웹페이지에서 확인할 수 있는 슬랙 봇입니다.

    누가 제일 많은 Emoji를 받았는지 확인을 할 수 있고, 이 자체가 멤버들에게 고마움을 표현하는 하나의 문화입니다. 저는 되게 재밌고 슬랙을 사용하는 다른 회사에서도 이런 문화를 같이 경험해 보면 좋을 것 같다고 생각했고, 토이 프로젝트로 만들어 보자고 결심했습니다.

     

    위 글에도 나와있지만, heyburrito 라는 Node.js 오픈소스 프로젝트가 이미 있었습니다. (뒤늦게 알게 됨 😅)  그래도 만들어 보는데 의미가 있다고 생각도 했고, 이때 FastAPI에 흥미가 생겼던 때라 FastAPI로 만들어 보면 재밌을 것 같아 프로젝트를 시작하게 되었습니다.

     

    2. Emoji Rank를 소개합니다.


    Emoji Rank 예제 프론트

     

    Emoji RankSlack WebHook을 처리하는 API 서버입니다. 그래서 위처럼 프론트 화면을 따로 만들어야 확인이 가능합니다. 프론트 화면도 간단하게 vue로 구현하여 레포지토리에 공개했습니다. (Emoji Rank Web

     

    TMI지만 아이콘은 이모지 랭크 = 롤 랭크 = 제가 골드... 의식의 흐름대로 만들었습니다 ㅎㅎ 선글라스 낀 모습의 이미지는 친구랑 하고 있는 토이 프로젝트 그룹 아이콘을 응용했습니다 ㅎㅎ

     

    FastAPI로 이틀 정도 공식문서를 찾아가면서 빠르게 구현하려고 노력했습니다. 기능은 이모지 리액션(추가, 제거)에 따라 카운트를 업데이트해줍니다.

    reactions 모델에 저장된 데이터 예시

    모델링할 때 이모지 타입과 년, 월, 받은 사람, 보낸 사람을 저장할 수 있습니다. 아직 API가 풍부하지 않아 간단한 기능만 되는데 추후에 내가 많이 리액션을 단 멤버, 나에게 리액션을 많이 준 멤버에 대한 API도 추가할 수 있을 것 같습니다.

     

    리액션 타입(이모지 종류)도 추가하거나 수정 가능해서 할로윈, 크리스마스 등 이벤트 기간에 특별한 이모지로 추첨이나 마음을 전달하는 이벤트성으로도 활용할 수 있을 것 같아요!😃

     

    슬랙에서 동작하는 모습

     

    3. 힘들었던 점


    회사에서 사용하는 프레임워크가 Django 였고, 익숙한 프레임 워크보다는 새로운 걸 해보고 싶었습니다. 게다가 규모가 큰 프로젝트도 아니라 Django로 하기에는 오버스펙이라고 생각했어요.

     

    그래서 FastAPI로 프로젝트를 진행했는데, 프로젝트 구조라던지 sqlalchemy, pydantic 과 같은 패키지에 익숙하지 않아서 속도가 빠르게 나진 않았던 것 같습니다. 게다가 모듈을 인식하는 sys.pathIDE로 할 때는 잘 찾는데 cmd에서 실행할 때는 잘 못 찾는 경우가 있어서 삽질을 좀 했던 것 같아요 ;;😨 (sys.path에 결로 추가하는 방식으로 해결) 

     

    FastAPI를 사용하면서 느낀 점은 아직 잘~은 모르지만 async, DI, DTO, Service layer 분리 같은 개념들이 잘 적용되어 있는 프레임워크라는 생각이 들었습니다. 그래서 Django랑은 많이 다르게 느껴지기도 했고요.

     

    그리고 구조라든지 통신에 대한 디테일 등을 만들어가 가야 해서 Django로 주로 개발을 하던 저에게는 러닝 커브가 크게 느껴졌습니다. 그래도 개발 패턴이나 방법에 대해 많이 공부할 수 있는 프레임워크인 것 같아서 좋은 것 같고 계속 공부해보려고 합니다!

     

    나중에는 쉽게 동작할 수 있도록 Docker file 형태로 만들어서 공유하는 게 최종 목표입니다!

     

    4. 마치며


    느낌표 의미를 안다면 당신은 진정한 롤 유저

    제가 사용하는 업무 툴인 슬랙을 이용해서 한 프로젝트라 재밌었고, Emoji Rank가 많이 쓰였으면 좋겠고 다른분들엑 PR이나 리뷰도 많이 왔으면 좋겠네요!

     

    마지막으로, 좋은 글 공유해주시고 저에게 좋은 동기부여를 주신 Mathpresso의 Backend Engineer Dan님에게 감사의 인사를 전합니다! 정말 감사합니다~ (이글을 보실지 모르겠지만 ㅎㅎ)

     

    긴 글 읽어주셔서 감사합니다! 좋은 하루 보내세요~!

     

    댓글

운동하는 개발자 JAY-JI