프로젝트

웹 프로젝트11. 클린코드고 뭐고 일단 돌아가게 만들자? 괜찮으려나..

dodo4723 2024. 2. 17. 10:05
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.

 

비슷한 차트 검색기

 

비슷한 차트 검색기

전 종목의 최근 10년간 모든 차트를 탐색합니다. 내 종목의 차트는 과연 상승하는 차트일까요?

www.similarchart.com



 

일단 돌아가게 만들고 보자? 이래도 되는 건가 싶다..

저는 9월부터 본격적으로 웹 프로젝트를 시작했습니다. 정말 백지상태부터 시작했습니다. 첫 시작은 구글 코랩의 주피터 노트북 파일에서 시작했습니다. 일단 라이브러리로 주가 데이터를 불러오는 것과 매우 시간과 메모리 측면에서 비효율적인 코드부터 시작하여 점점 살을 붙여나가기 시작했죠.

 

하지만 4달정도가 지나 프로젝트를 어느 정도 진행한 지금, 코드들과 파일 구조등을 보니 마음에 들지 않는 부분들이 꽤 많습니다. 예를들어 객체지향 프로그래밍을 하지 않고 함수형으로 무작정 작성한 코드들, 반복이 심해 함수로 따로 만들었으면 좋아 보이는 부분들, 주석이 부족한 부분들 등등.

 

특히 코드가 정리가 안되니 개발할때 지장이 생기는 경우도 있습니다. 그리고 클래스를 거의 사용하지 않고 진행하니 가끔 클래스의 장점들이 필요해지는 것을 느끼네요.

 

또한 취업과 면접 등을 위해 언젠가는 제 코드를 보여줄 날이 올 것 같은데, 이렇게 정리되지 않은 부분이 많은 코드를 보여주면 감점을 받을까 걱정되네요. 왜 이렇게 됐을까 돌아보는 시간을 가져보려고 합니다.

변명과 핑계일수도



모든 것이 불투명

저는 이왕 프로젝트를 하며 공부할 겸 후에 배포까지 하여 사람들이 직접 사용해 보도록 만들고 싶었습니다. 처음에는 일단 코드를 작성하여 어떤 기능을 만들 때 이것이 정말 의미 있는 시간 내에 가능한지 확인하고 싶었습니다. 가설을 검증하는 것과 비슷한 느낌이네요.

 

여러 모험을 하느라 클린 코드에 신경을 많이 쓰지 못한 것 같습니다.

 

 

프로젝트의 핵심 기능조차 가능여부 불투명

제 프로젝트에는 여러 코드들이 있지만, 제가 만들고 있는 웹 프로젝트의 핵심 기능으로 예를 들어보겠습니다. 사용자가 어떤 종목의 32일 치 차트와 비슷한 과거 차트들을 보여달라고 할 때, 다음과 같은 연산 횟수가 필요합니다.

 

2630(종목 수) x 1200(5년 치) x 32(32일 치 비교) x 4(시가, 고가, 종가, 저가 4가지 항목 비교) = 약 4억

 

 

파이썬이 1초에 2천만 번 연산을 한다고 알고 있는데, 위 연산만으로도 한번 사용자에게 응답하는데 20초 이상이 걸립니다. 많은 사용자가 동시에 요청하면 서버에 부하가 많이 갈 것으로 예상됩니다. 또한 자원이 제한적인(메모리사용 500MB 이하) AWS환경에서도 잘 동작해야 하죠.

 

이 문제를 해결하기 위해 여러 알고리즘들과 가설들을 실험, 테스트하는데 시간과 에너지가 많이 소모되어 클린 코드에 신경 쓸 여유가 많이 없었던 것 같기도 합니다.



 

일단 잘 돌아가는지 빠르게 확인 VS 천천히 꼼꼼하게 설계하여 클린코드

 

현재 상황을 보면, 핵심 기능들은 어느 정도 틀이 잡혀갑니다. 하지만 아직 구현해야 할 부가 기능들이 많이 있습니다. 지금도 고민되는군요. 빨리 정리되지 않은 코드들을 정리한 다음, 나머지 기능들을 만들어갈지, 아니면 제가 원하는 수준까지 모든 기능들을 잘 돌아가게끔 구현한 다음, 마지막에 정리되지 않은 코드들을 리팩터링 할지..

 

물론 정리가 너무 안되어 개발에 영향을 주는 부분들은 바로바로 깔끔하게 정리하고 있습니다.

 

어떤 것이 정답인지는 잘 모르겠지만, 그래도 역시 제 성향을 보면 일단 잘 돌아가게 만들어 불확실성을 없앤 다음, 코드들을 정리하는 것이 더 즐거운 것 같습니다. 클린 코드 책도 읽어봐야겠네요.

 

 

사실 지금은 취업이고 뭐고 제가 하고 싶은 것을 하고 있어서 즐겁네요. 나중일은 미래의 나에게 맡겨보죠!

반응형