[개발 후기] 금융 AI 웹 서비스를 오픈하며 겪은 기술적 도전과 교훈 안녕하세요, 커리어리 여러분. 물리학과 대학원생입니다. 최근에 취미 프로젝트로 AI를 활용한 주가 예측 웹 서비스(AI 시
[개발 후기] 금융 AI 웹 서비스를 오픈하며 겪은 기술적 도전과 교훈 안녕하세요, 커리어리 여러분. 물리학과 대학원생입니다. 최근에 취미 프로젝트로 AI를 활용한 주가 예측 웹 서비스(AI 시그널)를 오픈하게 되었습니다. 단순히 모델을 만드는 것을 넘어, 이를 실제 사용자에게 서비스하는 완전한 웹 애플리케이션으로 구현하는 과정에서 많은 것을 배울 수 있었습니다. 이 글에서는 LSTM 같은 시계열 모델을 실제 서비스 환경에 통합하고, 그 결과를 안정적으로 웹에 표현하기까지 맞닥뜨린 몇 가지 기술적 난제와 그 해결 과정을 공유하려고 합니다. 저와 같은 주니어 개발자분들, 또는 사이드 프로젝트를 고민하시는 분들께 작은 도움이 되었으면 합니다. 1. 핵심 기술 스택과 선택 이유 저는 이 서비스의 백엔드와 AI 파이프라인 구축에 Python (FastAPI) 를, 프론트엔드에는 React를 사용했습니다. 데이터 처리와 분석에는 Pandas, NumPy가, 그리고 가장 중요한 예측 모델에는 TensorFlow/Keras를 활용하여 LSTM 네트워크를 구현했습니다. LSTM(Long Short-Term Memory)을 선택한 이유는 주가 데이터가 시간의 흐름에 따라 의미를 가지는 시계열 데이터이기 때문입니다. LSTM은 과거 정보를 장기적으로 기억하고 망각하는 메커니즘을 통해 이러한 시퀀스 패턴을 학습하는 데 매우 효과적입니다. 현재는 비교적 단순한 EWMA(지수가중이동평균) 로 5일 예측을 제공하고 있으며, Prophet과 LSTM 모델은 지속적으로 튜닝 중에 있습니다. 2. 가장 큰 도전: "개발 환경"과 "서비스 환경"의 차이 모델 개발 단계(Jupyter Notebook 등)에서는 모든 것이 잘 작동했습니다. 문제는 이 모델을 항상 가동되어야 하는 백엔드 API 서버에 통합할 때 발생했습니다. 도전 1: 모델 로딩 및 추론 속도: 요청이 들어올 때마다 모델을 로드하고 예측을 수행하면 응답 시간이 매우 길어졌습니다. 특히 TensorFlow 모델의 초기 로딩은 상당한 부하를 줍니다. 해결책: 서비스 시작 시 모델을 미리 메모리에 로드(Singleton Pattern) 하고, 들어오는 예측 요청에 대해 이 미리 로드된 모델 인스턴스를 재사용하는 방식으로 변경했습니다. 이를 통해 개별 예측 요청의 처리 속도를 획기적으로 개선할 수 있었습니다. 도전 2: 동시 요청 처리: 여러 사용자가 동시에 다른 종목(예: 삼성전자, SK하이닉스)을 예측 요청하면 어떻게 처리해야 할까요? 하나의 긴 작업이 다른 사용자의 요청을 막을 수 있습니다. 해결책: 비동기 작업 큐(Celery + Redis) 를 도입했습니다. 사용자의 예측 요청은 큐에 들어가고, 워커(Worker)가 순차적으로 비동기적으로 작업을 처리합니다. 사용자에게는 작업 ID를 즉시 반환하고, 완료 여부는 폴링(Polling) 또는 웹소켓으로 확인하도록 구현해 서버의 응답성을 유지했습니다. 3. 프론트엔드와의 소통: 복잡한 예측 결과를 직관적으로 AI 모델이 출력하는 것은 단순한 숫자 배열일 뿐입니다. 이를 일반 사용자가 이해할 수 있는 차트와 지표로 변환하는 것이 중요했습니다. Chart.js 라이브러리를 사용하여 과거 주가 흐름과 모델의 예측선(EWMA, 향후 LSTM 결과)을 하나의 라인 차트에 오버레이하여 시각화했습니다. 예측 결과에 대한 불확실성을 표현하기 위해 신뢰 구간(Confidence Interval) 을 음영 처리된 영역으로 표현하는 방법을 고민하고 있습니다. 이는 사용자에게 "예측이 절대적이지 않다"는 점을 전달하는 중요한 수단입니다. 4. 지속적인 개선과 앞으로의 과제 서비스 오픈(v1.0)은 시작일 뿐입니다. 현재는 다음과 같은 과제를 진행 중입니다. 모델 성능 개선: 현재 기본적인 EWMA를 넘어, 보다 정교한 LSTM과 Prophet 모델을 실전에 적용하기 위해 하이퍼파라미터 튜닝과 크로스밸리데이션을 반복하고 있습니다. 백테스트 시스템 구축: 과거 데이터로 모델을 검증하는 백테스트 기능을 추가하여, 모델의 예측 성과를 정량적으로 평가할 수 있는 지표를 제공할 계획입니다. 시스템 모니터링: API 응답 시간, 예측 작업 큐의 대기 상황, 모델 추론 정확도 등을 모니터링하여 서비스의 건강 상태를 체계적으로 관리하려고 합니다. 마치며: 감정을 배제한 수학적 승리를 위한 기술 이 서비스의 슬로건은 "인간의 감정을 배제한 수학적 승리" 입니다. 저는 이 문장이 단지 투자 철학뿐 아니라, 개발 철학과도 맞닿아 있다고 생각합니다. 감정적인 코딩이나 확신 없는 추측보다, 측정 가능한 지표(수학), 테스트 가능한 코드, 그리고 안정적인 시스템 아키텍처를 통해 서비스의 신뢰도를 높여나가는 것이 진정한 "기술적 승리"의 길이라고 믿습니다. 이 글을 읽으시는 개발자 분들 중에 AI/ML 모델 서빙(Model Serving), 시계열 데이터 처리, 또는 FinTech 프로젝트에 관심이 있으신 분들과 더 깊이 이야기해보고 싶습니다. 비슷한 고민을 해오셨거나, 제 접근 방식에 대한 조언이 있다면 아낌없는 댓글 부탁드립니다! 감사합니다.