본문으로 이동
DLDevelopment Lab책을 읽고, 직접 만드는 실험실
19AI가 내 유튜브 댓글을 읽고 답글을 준비합니다20허용한 댓글에만 자동으로 답하게 합니다21내 주식서비스의 챗봇을 기획합니다22기획한 챗봇을 내 주식서비스에 구현합니다
PART 6 · 만든 서비스에 AI를 붙이고, 반복 업무를 맡깁니다22장

기획한 챗봇을 내 주식서비스에 구현합니다

21장 기획서대로 메인 자연어 질문부터 종목 확인·필요한 자료 조회·출처와 일반 설명 표시까지 작동하는 챗봇을 구현하고 실제 결과를 검증합니다.

이어갈 프로젝트 · ai-stock-briefing

21장의 docs/ch21-chat-design.md와 9~12장의 기존 주식서비스에서 시작합니다. 아직 챗봇 코드는 없습니다. 기존 금융위원회·OpenDART·Gemini 설정을 재사용합니다.

커맨드준비막혔을 때완료 확인소스·검증
이번 장의 준비와 서비스

필요한 도구 · 기존 TypeScript·Next.js와 Gemini SDK·모델의 함수 호출 지원 · 기존 검색·가격·공시 함수와 작은 기간 계산 Adapter · 기존 회귀 검사와 새 기능 검사

이미 준비한 계정과 기능은 그대로 이어갑니다.

data-go-kr 준비 안내 →opendart 준비 안내 →gemini 준비 안내 →

투자 추천·매매·목표가·미래 가격 예측·공시 본문 수집·자유 웹 검색·RAG·벡터 DB·장기 대화 저장·새 회원/결제 시스템·별도 모바일 앱 수정은 제외합니다. 챗봇 공개 운영 확장 실습·분산 사용량 저장소는 만들지 않습니다. 기존 브리핑 Cache는 유지합니다.

순서대로 입력하는 커맨드

현재 단계와 입력 위치를 확인한 뒤 하나씩 복사하세요.

01기획서와 기존 서비스를 함께 확인합니다

Claude Code·Codex에 입력튜터 요청

현재 장을 시작하거나 다시 이어갈 때

먼저 확인 · 현재 장과 실제 프로젝트를 확인. 기존에 확인한 맥락은 재사용.

22장 시작해.

02대화창과 일반 설명부터 구현합니다

Claude Code·Codex에 입력실습

대화창·일반 설명 구현

먼저 확인 · 21장 기획서와 기존 서비스·서버 Gemini 설정 확인.

docs/ch21-chat-design.md를 읽고 확정한 화면과 답변 범위대로 구현을 시작해줘.
메인·상세 공통 우하단 플로팅 버튼과 데스크톱 오른쪽 대화 레이어를 만들어.
모바일 웹은 큰 레이어로 만들고 키보드·하단 안전 여백·스크롤·닫기·포커스 복귀를 고려해.
기존 색·글꼴·카드·검색·차트·공시·브리핑과 앱 API는 보존해.

우선 종목 선택 없이 관련 일반 개념에 답하게 해줘.
'AI 일반 설명'과 '최신 확인 자료가 아닙니다'를 표시하고 빈 사실 카드는 만들지 마.
주식 자료 이해에 관련된 경제·기업·데이터·AI 개념도 설명해.
특정 기업의 현재 사실·최근 사건·주가 원인을 기억으로 채우지 마.
범위 밖 질문은 짧게 안내하고 투자 판단·가격 예측은 하지 마.
일반 질문에는 가격·공시 조회를 하지 않고 종목 자료 요청은 아직 준비 중으로 안내해.

기존 서버 Gemini 연결·모델 설정을 쓰고 키·개발 파일·책 튜터 자료를 전달하지 마.
질문은 1,000자, 초기 모델 상한 3회·전체 30초와 출력 길이 제한을 적용해.
빈 입력·긴 입력·잘못된 역할은 호출 전에 거부하고 HTML·임의 링크는 실행하지 마.
전송 중 중복 제출과 자동 재시도를 막고 실패 상태를 표시해.
닫힌 창에서는 새 외부 호출을 하지 마. 로컬과 운영 환경 모두 대화는 기본 켜짐으로 둬.
CHAT_ENABLED를 설정하지 않아도 활성화하고, 명시적으로 false일 때만 끄게 해.
로컬 검사 뒤 실행 방법과 이번 단계에서 확인할 결과를 알려줘.

03기존 기능에 AI가 사용할 입구를 연결합니다

Claude Code·Codex에 입력실습

현재 조회 연결표 차이 확인

먼저 확인 · 일반 질문을 서비스에서 확인했는지와 21장 연결표 확인.

21장 연결표에서 현재 코드와 달라진 부분과 미확인 항목만 대조해줘.
종목 찾기·기간별 가격 요약·공시 목록 조회의 기존 함수, 입력·결과·실패·Cache를 정리해.
1개월·3개월 가격이 이미 제공되는지, 최근 1년 일봉을 잘라 계산해야 하는지 구분해줘.
기존 브리핑 근거 묶음 대신 검색·가격·공시 하위 함수를 재사용해.
기획서에서 정한 AI용 이름과 입력/결과 형식을 대조하고 바뀐 부분만 갱신해줘.
내부 기존 함수 이름과 AI용 이름을 같은 것처럼 설명하지 마.
현재 Gemini SDK·모델의 공식 함수 호출 방식과 호환성을 확인해줘.
새 모델·프레임워크·자료 제공처로 임의 교체하지 말고 필요한 차이를 알려줘.

실습의 초기 제한은 모델 호출 3회·조회 실행 4회·전체 30초로 제안해.
공시 단독, 가격+공시, 후보 선택 후 재개가 이 범위에서 가능한지 확인할 계획도 적어줘.
이 조사 단계에서는 앞 절에서 만든 제품 코드를 더 바꾸지 마.

04공시 질문 하나를 끝까지 연결합니다

Claude Code·Codex에 입력실습

종목 찾기·공시 질문 구현

먼저 확인 · 확정한 연결표와 일반 설명 결과 확인.

확정한 연결표로 먼저 종목 찾기와 공시 조회 흐름을 구현해줘.
세 조회 기능만 허용하는 서버 목록을 만들고, 이름·형식·길이·대상·기간을 검사해.
종목 검색어는 50자 이내, 실제 후보 최대 5개야.
공시는 확인한 종목의 최근 1년 안 유효 기간, 1~5건만 받아. 기본은 최신순 최대 5건이야.
정확한 대상이 확인됐을 때만 공시를 조회해. 모호하면 후보를 보여주고 멈춰.
공시 질문에 가격이나 전체 시장을 조회하지 마.

모델 호출 3회·조회 실행 4회·전체 30초의 초기 상한을 서버에서 적용해.
순서대로 처리하고 동일 요청의 같은 기능·같은 검증 입력은 결과를 재사용해.
실패 자동 재시도와 무한 반복은 만들지 마. 상한에 닿으면 확보 자료와 미확인을 알려줘.
잘못된 기능명, 임의 URL·SQL·셸·파일 경로는 실행하지 마.

조회 결과는 기획서의 '확인된 자료' 형식으로 연결하고 공시 원문 URL은 서버에서 만들어.
실제 수치·날짜·공시·출처는 서버 값으로 렌더링해. 관련 항목부터 보여주고 나머지는 접어줘.
일반 개념을 함께 물으면 'AI 일반 설명'을 별도 표시하고 확인하지 않은 기업 사실은 넣지 마.
모델 응답 형식과 자료 참조를 검사하되 모든 문장 의미를 보증한다고 하지 마.
설명 검증이 실패해도 확보한 자료는 별도로 표시해.
화면에는 서버가 실제 수행한 종류만 짧게 표시해. 내부 인자·로그를 그대로 노출하지 마.
일반 개념에는 도구를 호출하지 않고 기존 AI 일반 설명을 유지해.
시험 응답으로 정상 흐름과 조회 제한을 확인하고 실제 API 성공과 구분해줘.

05후보를 고른 뒤 원래 질문을 이어갑니다

Claude Code·Codex에 입력실습

후보 선택·대화 전환 구현

먼저 확인 · 공시 질문·모호한 이름의 실제 결과 확인.

후보 선택과 대화 대상 전환을 완성해줘.
모호한 종목은 실제 후보 최대 5개를 보여주고 선택을 기다려.
원래 질문을 현재 탭에 보관하고 선택 뒤 그 질문을 이어 처리해.
서버는 선택값을 실제 검색 결과와 대조하고 클라이언트가 확인했다고 한 값만 믿지 마.
검색 결과를 5개로 자른 것과 대상이 정확히 하나로 확정된 것을 구분해줘.
후보 선택 전 가격·공시 조회는 하지 마. 취소·검색 실패에도 질문을 보존해.

상세에서 다른 회사를 명시하면 뒤의 상세 화면은 유지하고 대화 대상만 전환해.
챗봇의 회사명·코드와 '이 종목 상세 보기'를 갱신해.
후속 질문은 최초 상세 종목보다 현재 대화 대상을 우선해.
종목이 없고 대화 대상도 없는 자료 질문에는 대상을 물어봐.
대상이 확정되면 이전 근거·대화 기록을 지우되 새 전환 질문은 이어가게 해.
이전 요청의 늦은 응답은 새 대화에 붙이지 마.
최근 완료된 질문·답변 3회 왕복만 언어 문맥으로 사용하고 사실 근거로 삼지 마.
대화·후보·보관 질문은 현재 탭 메모리에만 두고 새로고침·페이지 이동·지우기로 끝내.
닫았다가 다시 여는 것은 같은 페이지 대화를 유지해. 실제 페이지 이동 때 새로 시작해.
대화 원문을 장기 DB·로그·브라우저 영구 저장소에 남기지 마.
클라이언트가 system/tool 역할·근거·실행 결과를 위조해도 신뢰하지 마.

061년 자료에서 필요한 기간을 계산합니다

Claude Code·Codex에 입력실습

가격 요약과 최근 종가 연결

먼저 확인 · 후보·대화 대상과 기존 가격 함수 확인.

세 번째 기능인 기간별 가격 요약을 연결해줘.
확인한 종목과 1개월·3개월·1년만 허용해.
같은 기능으로 최근 확인 종가와 기준일만 조회하는 질문도 처리해줘.
종가만 물으면 기간을 되묻지 말고, 가격 흐름을 물었는데 기간이 불분명할 때만 되물어.
기존 가격 조회 함수가 최근 1년 일봉을 제공하면 그 자료를 잘라 기존 가격 계산을 재사용하는 Adapter를 추가해.
기존 차트·브리핑 함수의 의미를 바꾸지 마.

최근 확인 가격 기준일을 끝으로 서울 날짜의 달력 월/연을 계산하고,
월말에 대응 날짜가 없으면 해당 월 마지막 날을 사용해.
요청 구간과 실제 첫/마지막 거래일·거래일수·가격 단위·기준일을 구분해줘.
등락률의 시작·끝 값과 계산 기준을 기록하고 AI가 숫자를 계산해 채우지 않게 해.
자료가 짧으면 실제 제공 구간을 밝히고 전체 요청 기간의 성과처럼 표시하지 마.
기존 1년의 자료 부족 기준을 짧은 기간에 그대로 적용하지 마.
다른 기간이나 임의 날짜 요청은 지원하는 기간을 안내해.

공시·일반 개념 질문에 가격 조회를 추가하지 마.
가격과 공시를 함께 요청하면 필요한 두 조회만 실행하고 상한을 지켜.
세 기간·월말·휴장·자료 부족을 시험 응답으로 검사해줘.

07필요한 기능만 썼는지 검사합니다

Claude Code·Codex에 입력실습

대표 흐름·제한·회귀 검증

먼저 확인 · 공시·가격·복합 질문·후보 선택 흐름 준비 확인.

대표 공시 질문·가격 질문·복합 질문·후보 선택 재개의 실제 처리 흐름을 검사해줘.
초기 모델 3회·도구 4회·전체 30초가 해당 흐름에 맞는지 근거를 남겨줘.
맞지 않으면 상한을 무작정 늘리지 말고 필요한 호출과 중복을 먼저 설명해줘.
확정한 상한·출력 길이·시간 제한을 한곳에서 관리하고 문서에 기록해.
동일 요청 재사용과 새 HTTP 요청의 사용량을 구분해줘.

잘못된 기능·위조 대상·악성 자료·중복 제출·반복 호출·늦은 응답을 검사하고 결함을 수정해.
외부 실패·정상 0건·모델 답변 실패·상한 도달은 시험 응답으로 구분해 확인해.
시험을 위해 실제 외부 호출을 반복하거나 한도를 소진하지 마.
기존 웹·공유 API 회귀 검사와 새 기능 검사를 실행해줘.

08필요한 기능만 썼는지 검사합니다

Claude Code·Codex에 입력실습

실제 자료·화면 최종 검증

먼저 확인 · 독자가 선택한 실제 종목과 API 설정·앞선 시험 결과 확인. 현행 정본은 별도 공개시험을 요청하지 않음.

실제 서비스에서 내가 선택한 종목의 필요한 가격·공시 조회만 최소로 확인해줘.
Gemini가 제안한 기능과 서버가 실행한 기능, 결과의 종목·기간·출처를 대조해.
공시 질문의 가격 조회 없음과 일반 질문의 조회 없음도 기록해줘.
데스크톱·모바일 웹의 대상 표시·입력·읽기·닫기와 기존 화면 보존을 확인해.
시험 응답·실제 API·브라우저 크기 시험·실기기 시험을 구분하고 미확인은 남겨줘.
추가 인증이 필요하면 비밀값을 묻지 말고 설정 위치와 필요한 행동을 안내해.
검증 뒤 챗봇은 켜진 상태로 두고, 활성 상태와 필요할 때 CHAT_ENABLED=false로 끄는 방법을 기록해줘.
확인한 결과와 아직 확인하지 못한 것, 다음에 이어갈 때 필요한 설정을 짧게 정리해줘.
실습 중 추가로 필요했던 작업도 함께 알려줘.

09이번 장의 완성을 확인합니다

Claude Code·Codex에 입력튜터 요청

이번 장 완료 조건을 확인할 때

먼저 확인 · 현재 장과 실제 프로젝트를 확인. 기존에 확인한 맥락은 재사용.

장 완료 확인해줘.

10대화창과 일반 설명부터 구현합니다

만든 서비스의 대화창에 입력실습

대화창의 일반 개념 답변 확인

먼저 확인 · P22-02 구현 후 로컬 서비스 메인의 대화창을 엶. Code 탭에 입력하지 않음.

주식 자료에서 말하는 변동성이 뭐야?

11공시 질문 하나를 끝까지 연결합니다

만든 서비스의 대화창에 입력실습

메인에서 공시 질문 확인

먼저 확인 · P22-04 구현 후 로컬 서비스 메인 대화창을 엶.

삼성전자의 최근 공시 5건을 DART 원문과 함께 보여줘.

12후보를 고른 뒤 원래 질문을 이어갑니다

만든 서비스의 대화창에 입력실습

모호한 이름의 후보 확인

먼저 확인 · 공시 흐름 확인 후 서비스 대화창 사용. 이후 P22-05에서 이어가기 동작 보강.

삼성의 최근 공시를 보여줘.

131년 자료에서 필요한 기간을 계산합니다

만든 서비스의 대화창에 입력실습

대화 대상의 3개월 흐름 확인

먼저 확인 · P22-06 구현과 현재 대화 대상 확인. 서비스 대화창에서 입력.

이 종목의 최근 3개월 가격 흐름을 보여줘. 어느 날짜부터 어느 날짜까지의 자료인지도 알려줘.

141년 자료에서 필요한 기간을 계산합니다

만든 서비스의 대화창에 입력실습

최근 종가와 일반 설명 구분 확인

먼저 확인 · 종목 상세의 실제 대상·가격 필드가 종가인지 확인. 서비스 대화창에서 입력.

이 종목의 최근 확인 종가와 기준일을 알려주고, 가격을 볼 때 기준일을 확인해야 하는 이유도 설명해줘.
이 장에서 막혔을 때

22장. 기획한 챗봇을 내 주식서비스에 구현합니다 — 단계별 힌트

한 번에 한 단계만 전달합니다.

H22-TOOL · 공시만 물어도 가격까지 조회합니다.

힌트 1

질문에 필요한 자료와 실제 실행 기록을 비교해보세요.

힌트 2

모델의 호출 제안과 서버에서 실행한 조회를 나눠 봅니다.

힌트 3

공시 질문은 종목 확인·공시 조회, 일반 개념은 조회 없음인지 서버 실행 기록에서 대조합니다.

명시적으로 정답을 요청했을 때

도구 설명과 서버 실행 조건을 확인하고 불필요한 조회 원인을 고칩니다. 모델의 선언은 실행 근거가 아닙니다.

H22-STOCK · 후보 선택 후 질문이나 대상을 잊습니다.

힌트 1

선택 전 보관한 질문과 현재 대상을 확인해보세요.

힌트 2

화면의 상세 종목과 챗봇의 현재 대화 대상을 구분합니다.

힌트 3

후보 선택값을 실제 검색 결과와 서버에서 대조하고 원래 질문을 이어가는지 봅니다.

명시적으로 정답을 요청했을 때

이전 대상 근거와 최근 문맥은 지우되 새 전환 질문은 유지합니다. 늦은 응답은 새 대화에 붙이지 않습니다.

H22-PERIOD · 3개월을 물었는데 자료 부족으로 나옵니다.

힌트 1

요청 기간과 실제 거래일을 나눠 확인해보세요.

힌트 2

최근 확인 가격 기준일에서 서울 날짜의 달력 3개월을 계산했는지 봅니다.

힌트 3

달력상의 기간을 고정 거래일 수로 바꾸어 계산하고 있지 않은지 확인합니다.

명시적으로 정답을 요청했을 때

월말 처리와 실제 첫/마지막 거래일을 표시하고 짧은 기간에 맞는 자료 부족 판정을 사용합니다.

H22-LIMIT · 한도에 걸려 답변이 멈춥니다.

힌트 1

반복 호출인지 필요한 조회인지 먼저 확인해보세요.

힌트 2

동일 요청의 재사용과 후보 선택 뒤 새 요청 사용량을 구분합니다.

힌트 3

모델·조회·시간 상한과 요청 실패 상태를 확인합니다.

명시적으로 정답을 요청했을 때

상한을 무작정 늘리지 말고 실제 호출 흐름과 중복 원인을 확인합니다. 요청당 제한과 실제 검사 기록을 구분합니다.

디버깅 → 정상 기록 복구 → 장별 소스로 재시작 →
이번 장의 완료 체크리스트
  • 기획서와 일반 대화기획서·기존 코드·설정을 대조하고 플로팅/레이어·종목 없는 일반 설명을 구현합니다. 기존 화면·앱 API를 보존하고 관련 일반 질문에 조회 없이 설명과 고정 표시를 제공합니다.
  • 세 기능과 실제 실행연결표 뒤 AI용 이름을 확정하고 종목 찾기·가격 요약·공시 목록만 서버에서 검증·실행합니다. 공시는 최근 1년 최신순 최대 5건과 서버 DART 링크이며, 공시 질문에 가격 조회가 없어야 합니다.
  • 후보와 대화 대상실제 후보 최대 5개·선택값 서버 대조·선택 전 가격/공시 조회 없음·원래 질문 보관을 검사합니다. 상세 화면은 유지하고 대화 대상만 전환하며 이전 근거/문맥/늦은 응답을 차단합니다. 최근 완료 3회 왕복은 탭 메모리의 언어 문맥으로만 사용합니다.
  • 기간과 답변 경계서울 날짜의 달력 1·3·12개월과 월말을 계산하고 요청 기간·실제 거래일·자료 수·단위·등락률 기준·짧은 자료를 구분합니다. 확인된 자료와 AI 일반 설명을 분리하고 공시 본문 미조회·잘못된 설명 참조·없는 출처를 검사합니다.
  • 제한·실패·회귀질문 1,000자·초기 모델 3회/조회 4회/30초를 대표·복합·후보 재개로 검증하고 확정값을 기록합니다. 동일 요청 재사용·중복 제출·위조 대상·악성 자료·외부 실패/0건/AI 실패·늦은 응답과 기존 웹/API 회귀를 검사합니다.
  • 실제 자료 대조선택한 종목의 필요한 조회를 최소로 실제 확인합니다. Gemini 제안·서버 실행·결과의 종목·기간·가격·기준일·DART 원문을 대조하며 공시 질문의 가격 조회 없음과 일반 질문의 조회 없음을 확인합니다.
  • 화면과 모바일 웹데스크톱과 모바일 웹 크기에서 대상·입력·답변·출처·닫기·포커스·스크롤·안전 여백·기존 화면 보존을 직접 확인합니다. 실제 모바일 기기와 키보드 검증은 별도로 실시 여부를 기록하며 미실시를 성공으로 표시하지 않습니다.
  • 최종 기록로컬에서 실제 자료로 답변을 확인하고 결과와 다시 시작하는 방법을 기록합니다. 대화 활성 상태와 CHAT_ENABLED=false로 중단하는 방법을 확인합니다. 시험 응답으로 확인한 결과는 실제 API 결과와 구분합니다.
장 완료 확인해줘.

실제 프로젝트에서 튜터와 확인합니다. 사이트를 열어본 기록은 학습 완료가 아닙니다.

장별 소스와 저자 검증 기록
22장 완성 소스 ↗저자 검증 상세 기록 ↗

장별 소스는 해당 장까지의 기준 상태입니다. 정상 실습은 내 프로젝트를 이어가고, 완성 소스는 비교·복구할 때 사용합니다.

자료 판본 1c784213
이 장의 개발 용어
API
프로그램이 다른 서비스와 정해진 방식으로 요청·응답을 주고받는 연결 방법.
Cache
같은 조건에서 계산·생성한 결과를 일정 조건 동안 재사용하는 저장 방식.
함수 호출
AI가 사용할 기능과 입력을 제안하고 서버가 검사해 실행하는 방식. 모델의 말만으로 실행됐다고 보지 않습니다.
튜터 사용 안내실습 자료 업데이트
← 이전 장21장. 내 주식서비스의 챗봇을 기획합니다부록 G · 내 포트폴리오 →
Development Lab아이디어를 AI와 함께 나만의 결과물로 만듭니다.

책에서 배운 개발 원칙을 AI와 직접 만들며 확인하는 실험실입니다. 아이디어를 서비스로, 서비스를 나만의 결과물로. AI와 함께 만들고, 직접 확인하며, 내 손으로 완성합니다.

자료실튜터 안내업데이트
SAStudy AI LabILInvestment LabDLDevelopment Lab

© 2026 Study AI Lab. All rights reserved.