Skip to content
··4분 읽기

3개월 후: 여전히 코딩 중, 여전히 배우는 중, 여전히 (가끔) 막히는 중

AI 어시스턴트를 활용한 10개월의 코딩 후, 그것들이 인턴과 같다는 것을 배웠습니다 — 강력하지만 구체적인 지시가 필요합니다. 즉, 느린 챗봇을 빠르게 만드는 것 같은 실제 문제를 해결하려면 프레임워크를 깊이 이해해야 합니다.

업데이트 (2026): S&P 500 금융 챗봇 프로젝트는 결국 폐기되었습니다. Sydney가 돌아와서 이제 블로그 콘텐츠와 제품에 집중합니다. Sydney 사용해보기 →


코딩 여정에 대한 업데이트를 쓸지 말지 고민했습니다. 진전이 화려하거나 외부적으로 보이지 않았으니까 — 왜 귀찮게 할까요?

글쎄요, 이 글이 미래의 저에게 진전이 때로는 느려질 수 있고 성장은 종종 급격하게 일어난다는 좋은 알림이 될 수 있을 것 같습니다.

4월 중순의 자체 평가 챗봇 구축에 대한 마지막 글 이후, 몇 가지 강좌를 들었습니다:

왜 이 강좌들인가요?

개인적인 경험과 이 강좌들을 선택한 사고 과정을 공유하고 싶습니다. 비슷한 여정에 있는 (또는 있게 될) 분들에게 도움이 되길 바랍니다.

기계에 더 나은 지시를 하기

본업을 하면서 코딩에 발을 들인 지 약 10개월이 되었습니다. (2023년 10월에 게시한 코딩 경험 없이 나만의 챗봇을 만든 방법: 배운 교훈에서 더 읽어보실 수 있습니다.)

생성형 AI(chatGPT, Anthropic Claude, Microsoft CoPilot in Visual Studio Code)의 도움 없이는 절대 해낼 수 없었을 것입니다. 하지만 코딩을 할수록, 이 기초 모델들이 강력하지만 아직 인턴과 같다는 것을 깨닫습니다. 계획을 세우거나 모호한 작업을 해결하는 데는 아직 능숙하지 않습니다. 우리의 지시가 구체적일수록 출력이 더 좋아집니다.

이것은 제가 코딩 지시를 점점 더 구체적으로 해야 한다는 것을 의미합니다. 하지만 어떻게? 지금까지 자연어로 원하는 것을 설명해왔습니다. 기본적인 수준에서는 작동하지만, 더 복잡한 작업에는 부적합합니다.

그러면 다음 논리적 질문은 무엇을 배울 것인가입니다.

해결하려는 비즈니스/사용자 문제에 집중

제 챗봇(코드명 Sydney)은 이 웹사이트에서 느렸습니다 (아마 "느립니다"). 느린 것은 다음 두 가지 모두에서 발생합니다:

  • 시작 시간
  • 대화 중

스트리밍이 활성화되지 않아서, 사용자는 완전한 답변을 보기 위해 비교적 오랜 시간을 기다려야 합니다.

그래서 제 목표는 (였고 여전히) 간단합니다: 빠르고 반응적으로 만들기.

제 목표는 간단합니다: 빠르고 반응적으로 만들기. 하지만 더 많은 기초 지식 없이는 이것을 관리 가능한 문제로 분해하기 어렵습니다. 그래서 확장 가능하고, 안전하고, 빠른 프론트엔드 프레임워크, 백엔드 프레임워크, 풀 스택(데이터베이스 포함)에 대해 더 배우기로 했습니다.

React와 Django에 대한 지금까지의 경험

  • React: React는 Django에 비해 배우고 배포하기가 상대적으로 쉽습니다. (당연하죠!) 현재 챗봇 프론트엔드는 React를 사용하며, Claude와 ChatGPT가 대부분의 코딩 작업을 문제없이 처리할 수 있다는 것을 발견했습니다. React로 프로덕션 환경에 배포하는 것도 꽤 간단했고, 챗봇 페이지가 대화 중 더 반응적으로 보입니다.
  • Django: Django와 Django Rest Framework(DRF)는 학습 곡선이 더 가팔랐습니다. 특히 Cloud SQL 데이터베이스를 포함한 배포와 보안 확보가 그랬습니다. Django의 포괄적인 특성은 적절한 수준의 보안으로 배포하는 데 시간이 걸렸다는 것을 의미합니다. 하지만 여전히 프로덕션 환경에서 DRF로 스트리밍 HTML 응답을 작동시킬 수 없습니다! WebSockets를 사용하면 작동시킬 수 있지만, 그 접근 방식은 DRF에서 크게 벗어나므로 아직 채택하지 않았습니다.

그래서 Langgraph 스트리밍을 간단한 프론트엔드와 함께 작동시키는 프레임워크나 방법을 아신다면 알려주세요!

4월에 언급한 금융 챗봇은 어떻게 되었나요?

좋은 소식은 이 프로젝트가 많은 분들의 관심을 불러일으켰다는 것입니다 — 많은 질문과 댓글을 받았습니다. 나쁜 소식은? 완성하기에는 아직 한참 멀었습니다 T.T 이유는 다음과 같습니다:

1. 검색 품질, 벡터 저장소 월 비용, 임베딩 비용 간의 균형

4월 에서 언급했듯이, Weaviate의 Serverless Cloud Vector Store를 평가하고 있습니다. 실제 비용이 듭니다. 이 프로젝트의 경우:

  • 데이터 볼륨: 1천만 이상, 아마 1,250만 - 1,500만 데이터 객체.
  • 비용 추정: 벡터 차원 512로, 비용이 $600에서 $750 사이일 수 있습니다.

이 금액은 프로덕션 환경의 기업에는 관리 가능하지만, 이런 사이드 프로젝트에는 너무 비쌀 수 있습니다. 그래서 비용을 낮출 방법을 찾아야 합니다.

Weaviate 가격 체계에 따라, 두 가지 레버는: 데이터 객체 수 줄이기 또는 벡터 차원 줄이기입니다. 둘 다 다른 트레이드오프가 있습니다.

데이터 객체를 줄이는 방법

  • 공격적 텍스트 정리: S&P 500의 500개 기업 각각이 지난 10년간 여러 보고서를 가지고 있다는 점을 고려하면, 10K와 10Q 보고서의 전체 텍스트 크기를 줄이면 도움이 될 수 있습니다. 이 옵션은 이미 다 사용한 것 같습니다.
  • 청크 크기 늘리기: 청크 크기를 256에서 512, 1,000, 2,000 또는 3,000으로 늘리면 데이터 객체를 2배, 4배 또는 10배 줄일 수 있습니다. 하지만 더 큰 청크는 덜 정확하기 때문에 검색 품질이 떨어질 수 있습니다.

벡터 차원을 줄이는 방법

벡터 차원을 줄이는 것은 검색 품질과 직접적으로 연관되는 것 같습니다 — 차원이 낮을수록 검색 품질이 나빠집니다. OpenAI의 "text-embedding-3-small"과 "text-embedding-3-large" 다양한 차원으로 여전히 실험 중입니다. 좋은 추천이 있으시면 공유해주세요!

OpenAI의 "text-embedding-3-large" 모델을 사용하면 임베딩 단계에서도 비용이 추가됩니다. 예를 들어, 23개 기업의 10K/10Q 보고서를 지난 10년간 벡터 차원 1024로 임베딩하는 데 $4.5가 들었습니다. 이것은 전체 S&P 500에 대해 $100+가 될 수 있다는 뜻입니다. (네, 좀 절약하는 편입니다. 이전에 몰랐나요 :P ?)

2. 쿼리 변환, 구조화, 검색 중 지연 시간

쿼리 변환과 구조화가 정교할수록, 더 나은 검색어/콘텐츠 검색어를 생성할 수 있어 더 높은 품질의 검색으로 이어집니다. 하지만 지연 시간도 늘어납니다.

  • 쿼리 변환은 모델에게 초기 사용자 질문을 검색에 더 적합한 하위 질문으로 변환하도록 요청하는 단계입니다. 예를 들어, "Airbnb의 영업이익률이 2020년부터 2022년까지 어떻게 변했나요?"라는 원래 질문으로, 모델은 다음과 같은 하위 질문을 생성할 수 있습니다:
[
"What was Airbnb's operating margin in the 10-K filing for the year 2020?",
"What was Airbnb's operating margin in the 10-K filing for the year 2021?",
"What was Airbnb's operating margin in the 10-K filing for the year 2022?"
]
  • 쿼리 구조화는 모델에게 이 질문들을 관련 필터와 함께 검색 쿼리 또는 콘텐츠 검색 쿼리로 변환하도록 요청하는 단계입니다. 위의 예를 사용하면, 질문 1에 대해 모델은 다음을 반환할 수 있습니다
\{
    "content_search": "What was Airbnb's operating margin in the 10-K filing for the year 2021?",
    "company_conformed_name": "Airbnb, Inc.",
    "form_type": "10-K",
    "conformed_period_of_report": "2021-12-31"
\}

검색의 경우, 결과를 많이 반환할수록 모델이 처리하는 데 더 오래 걸립니다. 결과를 적게 반환하면 응답 시간은 빨라지지만 컨텍스트 부족으로 인해 답변 품질이 잠재적으로 낮아질 수 있습니다.

마무리

더 많은 것을 다루고 있지만, 이 글이 이미 예상보다 길어졌으니 여기서 마무리하겠습니다.

풀타임으로 일하면서 코딩을 배우고 계신가요? 모든 것이 동등하게 중요하게 느껴질 때 다음에 무엇을 배울지 어떻게 결정하시나요?

감사합니다,

Chandler

계속 읽기

나의 여정
연결
언어
환경설정