티스토리 뷰

728x90
반응형

오늘은 작년부터 조금씩 만들어온 사이드 프로젝트가 있는데 한번 소개 해보려고 합니다. 작년 12월부터 띄엄 띄엄.. 만들기 시작했고, 지금은 프로젝트를 업그레이드하여 버전 2.0을 만들고 있는 중입니다.



프로젝트 소개

character

제가 만든 프로젝트는 카카오 코로나 알리미라는 프로젝트입니다. 카카오 코로나 알리미는 카카오톡을 통해서 코로나 관련 정보를 볼 수 있는 서비스 입니다. 코로나 라이브라는 아주 좋은 서비스가 있지만, 사람들이 카카오톡을 자주 이용하기 때문에 카카오톡 안에 코로나와 관련된 정보를 알려줄 수 있는 서비스를 만들면 좋을 것 같아서 시작하게 됐습니다.



프로젝트 기능

제가 만든 챗봇에는 크게 3가지의 기능이 있습니다.

0시 기준 총 확진자 및 관련 정보들

질병관리청에서 매일 오전에 전날의 확진자 및 관련 정보들을 발표하는데 이 정보들을 가져와서 보여주는 기능입니다. 총 확진자 수, 신규 확진자 수, 격리 해체 수, 치료 중인 환자 수, 사망자 수를 확인할 수 있습니다. 그리고 추가적으로 일주일 동안 총 확진자 수와 신규 확진자 수를 가지고 와서 일주일 간 변화를 그래프로 확인할 수 있게 했습니다.

character

실시간 확진자

현재 실시간 확진자를 볼 수 있는 기능입니다. 실시간 확진자와 어제 동시간대에 대비하여 차이를 확인할 수 있습니다.

character

지역별로 재난 문자 확인

지역별로 오늘 하루 재난 문자를 전부 확인할 수 있습니다. 지역 검색을 누른뒤 안내에 따라서 보고 싶은 도시의 이름을 적으면 그 날 그 도시의 재난 문자를 총 집계해서 볼 수 있습니다.

character



사용한 기술 설명

크롤링, 그래프

코로나와 관련된 정보들을 크롤링하는데 파이썬을 사용했습니다. 파이썬 requests, beautifulsoup, selenium, chromedrivermanager 등의 모듈을 사용해서 크롤링을 했습니다. 그리고 matplotlib, numpy 모듈로 일주일 동안의 총 확진자 수, 신규 확진자 수를 확인할 수 있는 그래프를 만들었습니다.

웹서버

채널 봇을 동작시키려면 봇 서버가 필요합니다. Django 프레임워크로 서버를 구축하여 카카오 채널 봇과 연결시켰습니다. 추가적으로 Nginx 웹서버와 Gunicorn WSGI를 Django 프레임워크와 연결해서 전체적인 서버를 구성했습니다.

아키텍처, 인프라

character

python 이미지에 django 프레임워크, gunicorn 모듈 등을 깔아서 웹서버를 구축하고, Nginx 이미지와 연결해 도커 컴포즈로 관리합니다.

크롤링하는 파이썬 애플리케이션들도 각각 컨테이너로 분리시킨뒤에 도커 컴포즈로 묶어서 관리합니다. 각 파이썬 애플리케이션에 cron을 동작시켜 놓아서 실시간으로 계속 크롤링이 동작합니다.

배포는 AWS Lightsail 인스턴스에 배포했습니다.

CI: Github Actions

컨테이너가 제대로 동작하는지, 크롤링이 제대로 되고 있는지 주기적으로 Github Actions를 사용해 확인합니다. 총 3개의 Workflows가 주기적으로 동작합니다.

첫 번째는 웹서버 컨테이너입니다. Github 레포에 있는 웹서버 도커 컴포즈를 Github Actions를 통해 동작시켜서 정상적으로 동작하는지 확인합니다.

두 번째는 크롤링 애플리케이션 컨테이너들입니다. 마찬가지로 Github 레포에 있는 크롤링 애플리케이션 컨테이너들을 묶어논 도커 컴포즈를 Github Actions를 통해 동작시켜서 정상적으로 동작하는지 확인합니다.

마지막은 직접 크롤링 정보를 받아서 이슈에 올리는 액션입니다. Github Actions쪽에서 파이썬 구동 환경을 구축하고, Github 레포에 있는 크롤링 파일들을 돌려 정보들을 받아온 뒤, 해당 레포의 이슈로 올립니다. 해당 이슈를 확인해서 크롤링이 잘 되고 있는지 확인할 수 있습니다.



느낀점

빠르게 학습 가능

프로젝트를 하면서 공부를 하니깐 훨씬 빨리 이해하고, 습득할 수 있어서 좋았습니다. 도커와 쿠버네티스를 공부하고 있는데 프로젝트를 하면서 도커 스크립트를 짜고, 관련 명령어들을 사용하면서 책이나 레퍼런스로 공부한 내용을 직접 적용해본 것이 도움이 많이 됐습니다.

설계, 문서화 부족

프로젝트 준비를 거의 안하고 생각한데로 바로 구현하는식으로 많이 하다보니 설계나 문서화가 많이 부족하고, 엄청 중요하다는 것을 느꼈습니다. 현재의 프로젝트가 두번 째 버전인데 두 번째 버전에서는 Github Project 탭을 활용해서 칸반보드로 할 일을 적어가면서 프로젝트를 진행했는데 너무 좋았던 것 같습니다.

앞으로 해야할 것

아직 프로젝트의 두번째 버전을 맘에 들게 완벽하게 하지는 못해서 부족한 것이 많은 것 같습니다. 3가지 정도를 개선해 나가면서 공부해보고 싶습니다.

첫 번째는 코드 리팩토링입니다. 예전 코드들을 다시 보다 보니 더러운 코드들이나 비효율적인 코드들이 너무 많은 것 같습니다. 전체적으로 점검하여 코드 리펙토링을 해야할 것 같습니다.

두 번째는 테라폼입니다. 아직 공부를 해봐야 알겠지만, 테라폼 & Github Actions & AWS를 연동하여 깃헙 레포에서 자동으로 배포되게끔 자동화를 시켜보고 싶습니다.

마지막은 Kubernetes입니다. 프로젝트에서 kubernetes를 사용하진 않았지만, 추후에는 kubernetes를 사용해서 애플리케이션을 자동으로 디플로이하며 스케일링하는 시스템을 구축해보려 합니다.



제가 만든 프로젝트 깃허브 url 및 카카오 채널입니다. 한번 써보세요!! 읽어주셔서 감사합니다!!

깃허브

코로나 알리미 채널

728x90
반응형

'후기' 카테고리의 다른 글

Microsoft HackaLearn 후기  (0) 2021.10.24
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday
링크