제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
비슷한 차트 검색기
내 종목의 차트는 과연 상승하는 차트일까요?
www.similarchart.com
프로젝트 완성
1. 기능 모두 구현 후 일주일간
일주일 전에 모든 사용자 기능을 구현 완료했었다는 포스탕을 작성했었죠. 그 후 일주일이 지났네요.
일주일 동안 여러 최적화 작업과 테스트를 진행했습니다. 대충 나열해 보자면,
- 비슷한 차트 탐색시간 1/4로 단축(4시간 -> 1시간)
- Nginx 적용(도메인, 캐싱, 요청 수 제한, HTTPS 등)
- 전체 테스트(한번 테스트 시 12시간) 여러 번
- CloudFlare 적용(CDN)
- 끝도 없이 나오는 버그 수정
등을 진행했습니다. 각각에 대해서는 이후에 포스팅으로 다루겠습니다.
2. 해치웠나?
사실 계획대로라면 11월에 끝내야 할 프로젝트입니다. 처음에는 아주 간단하게 설계했었습니다. 사용자의 요청을 받는 form 페이지와 결과 페이지 두 가지만 일단 만들어보자 했었죠.
그런데 막상 핵심 기능을 만들고 보니 이 기능도 추가됐으면 좋겠다, 이건 이렇게 하는 게 더 좋겠다, 한국 주식뿐 말고 외국인들을 위한 미국 주식도 추가해 보자 등의 생각이 자꾸 떠올랐습니다.
그래서 이제 프로젝트가 끝났나? 아직 아니야.. / 이번엔 진짜 끝났나? 아직 이 기능도 있으면 좋을 것 같아.. / 이젠 해치웠나?.. 버그&오류발생.. / 이젠 진짜 끝났나?.. 최적화를 더 할 수 있을 것 같다..
위와 같은 딜레마에 계속 빠지더군요 그렇게 이것저것 하다 보니 여기까지 왔습니다. 그래도 결국 해냈다고 생각하니 후련하네요.
3. 프로젝트를 진행한 가장 큰 이유
사실 이 프로젝트를 시작한 이유는 제가 만들어보고 싶었던 것을 만드는 것 그 이상도 이하도 아니었습니다. 취업을 위한 프로젝트? 졸업작품을 위한 프로젝트? 그런 건 뒷전이었습니다.
저는 최근에 주식에 대해 관심을 가지기 시작했습니다. 이것저것 알아보면서 공부하던 도중, 전문가들이 이 차트는 상승하는 차트다, 곧 폭등하는 차트다 등등 말하더군요. 정말 이 차트가 그런 차트인지 검증하고 싶었습니다.
그런데 아무리 찾아봐도 제가 원하는 앱이나 웹 등의 프로그램이 없었습니다. 그래서 직접 만들어보고 싶다고 생각했습니다.
4. 모험
물론 딱 봐도 쉽지 않다고는 생각했습니다. 수많은 웹, 앱, 프로그램들이 존재하는 지금까지도 제가 원하는 수준의 프로그램이 존재하지 않는다는 것은 그만큼 쉽지 않다는 것일까요?
일단 될지 안될지는 모르지만 무작정 부딪혀보기로 했습니다. 파이썬(느리지만 생산성 up)이냐 C(빠르지만 생산성 down)냐 자바(취업에 유리)냐 언어선택부터 시간을 많이 들였던 것 같네요.
단순히 생각해 봅시다. 특정 32일 치 차트와 비슷한 가장 비슷한 과거 차트를 찾으려고 합니다. 그러면 어느 정도의 연산이 필요할까요?
64(비교일 수) X 2600(한국주식 전 종목) X 2400(10년 치 주가데이터) X 4(시가, 고가, 저가, 종가 고려) = 약 16억
그냥 무작정 탐색하면 사용자 요청 한번 당 16억의 연산이 필요합니다. 1초에 2천만 번의 연산을 한다고 알려진 파이썬으로는 80초가 걸리네요.
시간도 문제지만 메모리도 문제입니다. 클라우드 환경에 서버를 띄우려면 1GB 이내의 메모리를 사용해야 합니다. 그냥 전 종목의 10년 치 주가 데이터를 메모리에 올리는 것만 해도 거의 3GB입니다.
이 문제를 해결하는 데 이제까지 했던 알고리즘 공부가 도움이 많이 되었습니다. 근 2년 동안 매일 1문제 이상 거의 1000문제를 푼 보람이 있던 것 같네요. 해시, DP, 비트마스킹등의 알고리즘이 들어갔습니다.
코랩에서 수많은 실험 끝에 쓸만한 알고리즘을 개발해 어느 정도 타협점을 찾을 수 있었습니다. 이 알고리즘에 대한 자세한 내용은 이후 포스팅에서 다룰 예정입니다.
또한 매일매일 주가 데이터를 불러와 전처리, 정제, 분석하여 데이터베이스에 저장하는 모든 과정을 자동화했습니다.
위 문제를 어느 정도 해결했다고는 하지만 프로젝트는 이제 시작이었죠. 웹페이지를 만들어 사용자들에게 보여줄 수 있을지는 또 다른 모험입니다.
5. 웹페이지를 만들자
저는 이전에 백엔드 공부를 어느정도 진행했었습니다. 김영한 개발자님의 Spring 강의를 100만 원어치 결제하여 전부 수강했었습니다.
사실 Spring 공부를 하며 조금 지루한 면이 있었습니다. 당시에는 이게 정말 나에게 도움이 되는 것인가 싶기도 했죠. 하지만 Spring 공부를 했던 것이 아닌 백엔드 공부를 한 것이라고 생각합니다. Spring에서 배웠던 개념들이 Spring과 자바뿐만 아니라 어느 언어나 프레임워크에서든지 비슷한 느낌이네요.
또한 학교 팀프로젝트에서도 Flask를 활용하여 간단한 챗봇을 만든 경험이 있습니다.
하지만 이렇게 내 주변사람들만 몇 번 사용해보고 말 것이 아닌 실제로 사용자들에게 배포하는 것은 전혀 달랐습니다. 사소한 것 하나하나 고려해야 하는 것들이 훨씬 많았습니다.
사소한 버그, 생각지 못한 사용자 행동, 오류 등 아직도 걱정되는 부분이 많네요.
그래도 서비스를 직접 개발하니 너무 재밌습니다.
계속 생기는 욕심
일단 완료 선언을 했지만, 아직 더 해보고 싶은 것들이 있습니다.
토스증권에서 잠깐 사람들에게 기능을 공개해 봤는데, 어떤 앱인지 물어보는 분들도 많더군요. 보통 이런 기능들은 웹보다는 앱으로 만드는 게 보통인가 봅니다.
그래서 React Native를 사용하여 웹뷰 앱을 만들어볼까도 생각 중입니다. 웹은 이제까지 공부해 온 것이라도 있지만 앱은 아예 제가 모르는 미지의 영역이라.. 할 수 있을지는 모르겠지만요.
모험은 계속된다
방학도 이제 한 달밖에 남지 않았네요. 2월 말에 치르는 정보처리기사 필기시험 접수를 일단 무작정 해놓았는데, 프로젝트를 우선시하느라 준비를 제대로 할지는 모르겠습니다. 불합격하면 할 수 없죠..
일단 계속 열심히 노력해야겠습니다! 좀 쉬어야 하는데 쉴 엄두가 나지 않네요.
'프로젝트' 카테고리의 다른 글
프로젝트18. 파일로 캐싱 레디스로 캐싱 웹서버로 캐싱 CDN으로 캐싱 (0) | 2024.02.17 |
---|---|
프로젝트17. Nginx 적용! (캐싱, 로깅, 요청제한, HTTPS) (0) | 2024.02.17 |
프로젝트15. 모든 사용자 기능 구현완료! 힘들었던 점과 식겁했던 순간 (1) | 2024.02.17 |
프로젝트14. 웹페이지 다국어 간단하게 지원하는 방법(직접 제작) (0) | 2024.02.17 |
프로젝트13. 새 노트북 사서 프로젝트 옮겨 백지부터 실행했더니 에러폭탄 (0) | 2024.02.17 |