2023년 9월의 이야기입니다.
제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
similar chart finder
내 종목의 차트는 상승하는 차트일까요?
3.35.36.208
어떤 프레임워크를 사용할까?
사용자에게 응답 결과를 보여주기 위해서는 서버가 필요합니다. 서버를 개발하기 위해서는 웹 애플리케이션 프레임워크를 사용해야 합니다. 제 프로젝트에 적용을 고려한 프레임워크는 Flask, Django, Spring 3가지가 있었습니다. 각자 장단점이 뭐고 저에게 어떤 것이 적합할지 조사해 보았습니다.
우선 제 프로젝트의 아키텍처를 간단히 말하자면, 주가 데이터를 수집, 정제, DB에 저장하는 데이터 웨어하우스와 사용자의 HTTP요청을 받는 WAS서버로 이루어져 있습니다. 물론 각각은 도커 컨테이너로 개발할 예정입니다. 데이터 웨어하우스는 파이썬 말고 다른 선택지를 생각하기 힘들었습니다.
그럼 제 프로젝트의 입장에서 바라본 각 프레임워크의 장단점을 정리해 보겠습니다.
1. Spring
일단, 데이터 웨어하우스는 파이썬을 사용해야 하는데 서버 부분을 자바로 사용할 수 있을까에 대해 생각해 보았습니다.
장점
저는 작년에 Spring을 공부했습니다. 100만 원 치 강의를 결제하여 일단 공부하고 봤었죠. 그래서 세 프레임워크 중 그나마 가장 잘 알고 있는 것 같습니다.
지금 생각해 보면 그 당시에는 무작정 강의를 다 결제해 버렸는데 조금 성급했다는 생각도 드네요. 물론 얻은 것과 남은 것이 굉장히 많고 후회는 절대 하지 않습니다. 저는 Spring을 배우기보다 백엔드 개발의 전반적인 그림을 보려고 했습니다. 뭐 어차피 Spring을 배우면 다른 백엔드 프레임워크는 금방 배울 테니까요.
그리고 보통 채용 공고를 보면 Spring이 압도적으로 많은 것으로 알고 있습니다. 나중에 취업을 생각하니 Spring을 사용해야 하나 고민이 많이 됐습니다.
단점
일단 스프링 프레임워크는 너무 무겁습니다. 엔터프라이즈 수준의 애플리케이션을 개발하는 데 사용될 수 있는 많은 기능과 도구를 제공하지만, 그만큼 메모리를 많이 소모합니다. 최소 500MB 이상의 메모리를 필요로 하기에 후에 EC2 인스턴스에서 실행하기 힘들어 보입니다.
데이터 웨어하우스는 파이썬이고 WAS부분은 자바이기 때문에 서로 통신하려면 REST API 또는 DB로 해야 합니다. 시스템 복잡성을 증가시키며 추가적인 오버헤드와 유지보수 비용을 발생시킬 수 있습니다.
또한 차트의 이미지를 만들어야 합니다. 자바에도 그래프를 그리는 라이브러리가 있긴 합니다만 제가 파이썬의 matlib의 숙련도가 훨씬 높습니다.
2. Django
장점
개발자가 웹 개발에 필요한 거의 모든 것을 제공합니다. (인증, URL 라우팅, 템플릿 엔진, ORM 등)
보안에 대한 많은 기능과 가이드라인을 기본적으로 제공하는 웹 프레임워크입니다. Django는 사용자 인증, 쿠키 및 세션 관리, 크로스 사이트 스크립팅(XSS) 및 SQL 인젝션 방지 등 다양한 보안 문제에 대한 내장된 메커니즘을 갖추고 있습니다.
관리자 패널이 기본적으로 제공되므로, 데이터 관리가 용이합니다.
단점
역시 Flask에 비해 기능이 많은 만큼 무겁기 때문에 메모리를 많이 소모합니다.
또한 Django는 서버프로그래밍 수업에서 아주 잠깐 실습을 해보았지만, 제가 숙련도가 많이 낮습니다. Django의 방대한 기능을 이해하려면 시간이 필요합니다.
3. Flask
장점
매우 가볍고, 확장 가능한 마이크로 프레임워크입니다. 필요한 것만 선택하여 추가하고 사용할 수 있으므로, 매우 유연합니다. 학습 곡선이 상대적으로 완만하여, Python을 알고 있다면 쉽게 접근할 수 있습니다.
또한 제가 1년 전에 웹으로 챗봇을 만들 때 사용해 봤습니다.
단점
Django나 Spring처럼 많은 기능이 기본적으로 제공되지 않으므로, 필요한 기능을 직접 추가해야 할 수 있습니다. 이 점이 제일 무섭네요.
결론
아무래도 제가 생각한 가장 중요한 부분은 비용입니다. 저렴한 EC2를 사용하기 위해서는 가장 메모리 소모가 적고 가벼운 Flask를 선택하는 게 좋다고 결론지었습니다.
하지만 위에서 언급했듯이 Django나 Spring처럼 많은 기능이 기본적으로 제공되지 않으므로, 필요한 기능을 직접 추가해야 할 수 있겠네요. 만약 이 부분 때문에 Flask를 사용하다가 문제가 발생하면, 후에 Django로 옮기는 것도 고려해 봐야겠습니다.
일단 사용해 봅시다!
'프로젝트' 카테고리의 다른 글
비슷한 차트 탐색 프로젝트 - 4. AWS를 사용해서 배포해보자 (0) | 2024.02.17 |
---|---|
비슷한 차트 탐색 프로젝트 - 3. 프로젝트를 Docker로 구성해보자 (0) | 2024.02.17 |
비슷한 차트 탐색 프로젝트 - 1. 시간을 줄이기 위한 여러 실험과 테스트 (0) | 2024.02.17 |
비슷한 차트 탐색 프로젝트 개요 - 처음에 막막했던 부분들(23.12.21) (0) | 2024.02.17 |
프로젝트 주제 변경(딥러닝 주가예측 -> 비슷한 차트 검색) (0) | 2024.02.17 |