코로나인포 개발기 : 백엔드 편

크로코 (Croco)·2020년 2월 20일
17

코로나인포

목록 보기
2/2
post-thumbnail

안녕하세요! Croco에서 코로나인포를 만들고 있는 Heewon이라고 합니다!

지난 글에 이어 오늘은 백엔드에 대해 다뤄보고자 해요.

✅ 해당 글에서는 백엔드 ( 와 약간의 기획 ) 만 다뤄요!

기술 스택

  • Django
    • Django Rest Framework
  • Postgresql

처음 접한 장고 🧐

Node.js, PHP 등 익숙한 언어들을 던지고 생뚱맞은 장고를 택한 이유는 단 하나였습니다. 장고를 사용하시는 분들이 가장 많이 이야기하는, 생산성입니다. 물론 장고가 아예 처음인지라 러닝커브가 높다면 오히려 생산성을 저하시킬 수도 있었을 겁니다.

그래서 저는 가장 기본이 되는 모듈인 patients(확진자)를 만들어본 후 앞으로의 방향을 결정하기로 했습니다. 단순히 CRUD와 권한 체크만 있는 모듈이었기 때문에 Node.js로 전환하는데도 시간이 얼마 걸리지 않을거라고 생각했습니다.

장고를 어느정도 사용해보고 내린 결론은 코로나 인포와 같은 프로젝트에 사용하기 매우 적합하다였습니다. 기본적인 틀들이 잡혀있고, 권한, Api 문서, 어드민, router등 간단하고 작은 프로젝트에 적합한 프레임워크였습니다.

따라서 핵심 기능들을 만들고 린 방법론을 적용하려는 우리에게 장고는 최고였습니다.

1차 배포 😆 - 확진자, 확진자 이동경로, 실시간 피드(업데이트 내역), 통계

일단은 현재 사람들이 가장 불안해하는 부분과 궁금해하는 부분인 확진자 현황과 이동경로에 집중하기로 했습니다.빠르게 Patients모듈을 만들고 Patients와 1:N관계의 Movements모듈을 만들었습니다. 어드민 계정일 경우에 두 모듈에 Push, Patch, Put 권한을 부여해주었고 정상적으로 동작했습니다. Serializer를 사용하니 인풋과 아웃풋의 validate까지 간편하게 할 수 있었습니다.

문제는 확진자 통계를 내는 report 모듈 이였습니다. Patients와 Movements 모두 Model이 있어 ModelViewSet, ModelSerializer를 활용했습니다. 모델이 없는데 어떤 식으로 구현을 해야할지 혼란스러웠지만 다행히 ModelViewSet과 ModelSerializer는 각각 ViewSet과 Serializer를 상속하고 있었습니다. 공식 도큐멘트를 통해 내용을 확인하고 Serializer에 내포낼 6개의 수치를 만들어주고, Viewset에서 데이터를 만들어 내보내줬습니다.

이렇게 모델이 없는 모듈까지 개발을 마칠 수 있었습니다.

추가 기능은 어떤게 좋을까? 어떻게 알지? 🤔

사용자들이 점차 유입되면서 너무 기능이 없다는 피드백을 생기기 시작했습니다. 우리는 새로운 기능을 추가하고자 했지만 해당 기능이 정말 유저들이 환영할 기능인지 알 방법이 없었습니다. 이 검증 및 구현 또한 아주 빠르게 이루어져야했구요. 우리는 결국 극단적인 선택을 하게 되었습니다. 프론트엔드 코드에 스태틱 데이터를 넣어버렸습니다.

![https://velog.velcdn.com/images%2Fcroco_space%2Fpost%2F98ab821b-bd96-4bb5-9236-e9d24d526dcf%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fcroco_space%2Fpost%2F98ab821b-bd96-4bb5-9236-e9d24d526dcf%2Fimage.png)

🔼애증의 커밋...

실시간 뉴스 😊

관련 영상 기능을 간단하게 테스트하고 받은 피드백을 종합해본다면 '실시간으로 정보를 볼 수 있으면 좋겠고 보다 신뢰성 있는 정보였으면 좋겠다'였습니다. 유튜브 영상은 신뢰성이 너무 떨어지고 실시간 영상을 보여줄 방법도 찾기가 어렵다고 생각했습니다.

우리가 내린 결론은 '실시간 뉴스'였습니다. 뉴스는 유튜브 영상들에 비해 신뢰도가 있는 글들인 경우가 많다고 판단했습니다. 하지만 문제는 '실시간' 이었습니다. API 요청이 들어올때마다 크롤링을 해야하나? 미리 크롤링을 해두고 보여줘야 하나? 하는 고민들이 있었지만 네이버 뉴스 검색 API를 활용하기로 결정했습니다. 키워드를 활용해 검색하면 실시간으로 데이터를 받아볼 수 있었고 일일 API한도가 2만5천건으로 충분하다고 판단했습니다.

(옛날에 만들어뒀던 네이버 뉴스 크롤러를 활용해 DB에 담아두는 작업을 하기는 했으나 '실시간'의 목적에 벗어난다고 생각해 API로 전환했답니다😵)

마무리

https://coronas.info/

코로나인포를 백엔드 개발을 맡은 Heewon이었습니다.

많은 기대 부탁드려요!

profile
세상을 바꾸는 사이드 프로젝트 팀, 크로코입니다.

3개의 댓글

comment-user-thumbnail
2020년 2월 22일

타 사이트도 많이 봤는데 이 사이트가 가장 디자인을 잘하신 것 같아요!

1개의 답글