01기획서와 기존 서비스를 함께 확인합니다
현재 장을 시작하거나 다시 이어갈 때
먼저 확인 · 현재 장과 실제 프로젝트를 확인. 기존에 확인한 맥락은 재사용.
22장 시작해.21장 기획서대로 메인 자연어 질문부터 종목 확인·필요한 자료 조회·출처와 일반 설명 표시까지 작동하는 챗봇을 구현하고 실제 결과를 검증합니다.
21장의 docs/ch21-chat-design.md와 9~12장의 기존 주식서비스에서 시작합니다. 아직 챗봇 코드는 없습니다. 기존 금융위원회·OpenDART·Gemini 설정을 재사용합니다.
필요한 도구 · 기존 TypeScript·Next.js와 Gemini SDK·모델의 함수 호출 지원 · 기존 검색·가격·공시 함수와 작은 기간 계산 Adapter · 기존 회귀 검사와 새 기능 검사
이미 준비한 계정과 기능은 그대로 이어갑니다.
투자 추천·매매·목표가·미래 가격 예측·공시 본문 수집·자유 웹 검색·RAG·벡터 DB·장기 대화 저장·새 회원/결제 시스템·별도 모바일 앱 수정은 제외합니다. 챗봇 공개 운영 확장 실습·분산 사용량 저장소는 만들지 않습니다. 기존 브리핑 Cache는 유지합니다.
현재 단계와 입력 위치를 확인한 뒤 하나씩 복사하세요.
현재 장을 시작하거나 다시 이어갈 때
먼저 확인 · 현재 장과 실제 프로젝트를 확인. 기존에 확인한 맥락은 재사용.
22장 시작해.대화창·일반 설명 구현
먼저 확인 · 21장 기획서와 기존 서비스·서버 Gemini 설정 확인.
docs/ch21-chat-design.md를 읽고 확정한 화면과 답변 범위대로 구현을 시작해줘.
메인·상세 공통 우하단 플로팅 버튼과 데스크톱 오른쪽 대화 레이어를 만들어.
모바일 웹은 큰 레이어로 만들고 키보드·하단 안전 여백·스크롤·닫기·포커스 복귀를 고려해.
기존 색·글꼴·카드·검색·차트·공시·브리핑과 앱 API는 보존해.
우선 종목 선택 없이 관련 일반 개념에 답하게 해줘.
'AI 일반 설명'과 '최신 확인 자료가 아닙니다'를 표시하고 빈 사실 카드는 만들지 마.
주식 자료 이해에 관련된 경제·기업·데이터·AI 개념도 설명해.
특정 기업의 현재 사실·최근 사건·주가 원인을 기억으로 채우지 마.
범위 밖 질문은 짧게 안내하고 투자 판단·가격 예측은 하지 마.
일반 질문에는 가격·공시 조회를 하지 않고 종목 자료 요청은 아직 준비 중으로 안내해.
기존 서버 Gemini 연결·모델 설정을 쓰고 키·개발 파일·책 튜터 자료를 전달하지 마.
질문은 1,000자, 초기 모델 상한 3회·전체 30초와 출력 길이 제한을 적용해.
빈 입력·긴 입력·잘못된 역할은 호출 전에 거부하고 HTML·임의 링크는 실행하지 마.
전송 중 중복 제출과 자동 재시도를 막고 실패 상태를 표시해.
닫힌 창에서는 새 외부 호출을 하지 마. 로컬과 운영 환경 모두 대화는 기본 켜짐으로 둬.
CHAT_ENABLED를 설정하지 않아도 활성화하고, 명시적으로 false일 때만 끄게 해.
로컬 검사 뒤 실행 방법과 이번 단계에서 확인할 결과를 알려줘.현재 조회 연결표 차이 확인
먼저 확인 · 일반 질문을 서비스에서 확인했는지와 21장 연결표 확인.
21장 연결표에서 현재 코드와 달라진 부분과 미확인 항목만 대조해줘.
종목 찾기·기간별 가격 요약·공시 목록 조회의 기존 함수, 입력·결과·실패·Cache를 정리해.
1개월·3개월 가격이 이미 제공되는지, 최근 1년 일봉을 잘라 계산해야 하는지 구분해줘.
기존 브리핑 근거 묶음 대신 검색·가격·공시 하위 함수를 재사용해.
기획서에서 정한 AI용 이름과 입력/결과 형식을 대조하고 바뀐 부분만 갱신해줘.
내부 기존 함수 이름과 AI용 이름을 같은 것처럼 설명하지 마.
현재 Gemini SDK·모델의 공식 함수 호출 방식과 호환성을 확인해줘.
새 모델·프레임워크·자료 제공처로 임의 교체하지 말고 필요한 차이를 알려줘.
실습의 초기 제한은 모델 호출 3회·조회 실행 4회·전체 30초로 제안해.
공시 단독, 가격+공시, 후보 선택 후 재개가 이 범위에서 가능한지 확인할 계획도 적어줘.
이 조사 단계에서는 앞 절에서 만든 제품 코드를 더 바꾸지 마.종목 찾기·공시 질문 구현
먼저 확인 · 확정한 연결표와 일반 설명 결과 확인.
확정한 연결표로 먼저 종목 찾기와 공시 조회 흐름을 구현해줘.
세 조회 기능만 허용하는 서버 목록을 만들고, 이름·형식·길이·대상·기간을 검사해.
종목 검색어는 50자 이내, 실제 후보 최대 5개야.
공시는 확인한 종목의 최근 1년 안 유효 기간, 1~5건만 받아. 기본은 최신순 최대 5건이야.
정확한 대상이 확인됐을 때만 공시를 조회해. 모호하면 후보를 보여주고 멈춰.
공시 질문에 가격이나 전체 시장을 조회하지 마.
모델 호출 3회·조회 실행 4회·전체 30초의 초기 상한을 서버에서 적용해.
순서대로 처리하고 동일 요청의 같은 기능·같은 검증 입력은 결과를 재사용해.
실패 자동 재시도와 무한 반복은 만들지 마. 상한에 닿으면 확보 자료와 미확인을 알려줘.
잘못된 기능명, 임의 URL·SQL·셸·파일 경로는 실행하지 마.
조회 결과는 기획서의 '확인된 자료' 형식으로 연결하고 공시 원문 URL은 서버에서 만들어.
실제 수치·날짜·공시·출처는 서버 값으로 렌더링해. 관련 항목부터 보여주고 나머지는 접어줘.
일반 개념을 함께 물으면 'AI 일반 설명'을 별도 표시하고 확인하지 않은 기업 사실은 넣지 마.
모델 응답 형식과 자료 참조를 검사하되 모든 문장 의미를 보증한다고 하지 마.
설명 검증이 실패해도 확보한 자료는 별도로 표시해.
화면에는 서버가 실제 수행한 종류만 짧게 표시해. 내부 인자·로그를 그대로 노출하지 마.
일반 개념에는 도구를 호출하지 않고 기존 AI 일반 설명을 유지해.
시험 응답으로 정상 흐름과 조회 제한을 확인하고 실제 API 성공과 구분해줘.후보 선택·대화 전환 구현
먼저 확인 · 공시 질문·모호한 이름의 실제 결과 확인.
후보 선택과 대화 대상 전환을 완성해줘.
모호한 종목은 실제 후보 최대 5개를 보여주고 선택을 기다려.
원래 질문을 현재 탭에 보관하고 선택 뒤 그 질문을 이어 처리해.
서버는 선택값을 실제 검색 결과와 대조하고 클라이언트가 확인했다고 한 값만 믿지 마.
검색 결과를 5개로 자른 것과 대상이 정확히 하나로 확정된 것을 구분해줘.
후보 선택 전 가격·공시 조회는 하지 마. 취소·검색 실패에도 질문을 보존해.
상세에서 다른 회사를 명시하면 뒤의 상세 화면은 유지하고 대화 대상만 전환해.
챗봇의 회사명·코드와 '이 종목 상세 보기'를 갱신해.
후속 질문은 최초 상세 종목보다 현재 대화 대상을 우선해.
종목이 없고 대화 대상도 없는 자료 질문에는 대상을 물어봐.
대상이 확정되면 이전 근거·대화 기록을 지우되 새 전환 질문은 이어가게 해.
이전 요청의 늦은 응답은 새 대화에 붙이지 마.
최근 완료된 질문·답변 3회 왕복만 언어 문맥으로 사용하고 사실 근거로 삼지 마.
대화·후보·보관 질문은 현재 탭 메모리에만 두고 새로고침·페이지 이동·지우기로 끝내.
닫았다가 다시 여는 것은 같은 페이지 대화를 유지해. 실제 페이지 이동 때 새로 시작해.
대화 원문을 장기 DB·로그·브라우저 영구 저장소에 남기지 마.
클라이언트가 system/tool 역할·근거·실행 결과를 위조해도 신뢰하지 마.가격 요약과 최근 종가 연결
먼저 확인 · 후보·대화 대상과 기존 가격 함수 확인.
세 번째 기능인 기간별 가격 요약을 연결해줘.
확인한 종목과 1개월·3개월·1년만 허용해.
같은 기능으로 최근 확인 종가와 기준일만 조회하는 질문도 처리해줘.
종가만 물으면 기간을 되묻지 말고, 가격 흐름을 물었는데 기간이 불분명할 때만 되물어.
기존 가격 조회 함수가 최근 1년 일봉을 제공하면 그 자료를 잘라 기존 가격 계산을 재사용하는 Adapter를 추가해.
기존 차트·브리핑 함수의 의미를 바꾸지 마.
최근 확인 가격 기준일을 끝으로 서울 날짜의 달력 월/연을 계산하고,
월말에 대응 날짜가 없으면 해당 월 마지막 날을 사용해.
요청 구간과 실제 첫/마지막 거래일·거래일수·가격 단위·기준일을 구분해줘.
등락률의 시작·끝 값과 계산 기준을 기록하고 AI가 숫자를 계산해 채우지 않게 해.
자료가 짧으면 실제 제공 구간을 밝히고 전체 요청 기간의 성과처럼 표시하지 마.
기존 1년의 자료 부족 기준을 짧은 기간에 그대로 적용하지 마.
다른 기간이나 임의 날짜 요청은 지원하는 기간을 안내해.
공시·일반 개념 질문에 가격 조회를 추가하지 마.
가격과 공시를 함께 요청하면 필요한 두 조회만 실행하고 상한을 지켜.
세 기간·월말·휴장·자료 부족을 시험 응답으로 검사해줘.대표 흐름·제한·회귀 검증
먼저 확인 · 공시·가격·복합 질문·후보 선택 흐름 준비 확인.
대표 공시 질문·가격 질문·복합 질문·후보 선택 재개의 실제 처리 흐름을 검사해줘.
초기 모델 3회·도구 4회·전체 30초가 해당 흐름에 맞는지 근거를 남겨줘.
맞지 않으면 상한을 무작정 늘리지 말고 필요한 호출과 중복을 먼저 설명해줘.
확정한 상한·출력 길이·시간 제한을 한곳에서 관리하고 문서에 기록해.
동일 요청 재사용과 새 HTTP 요청의 사용량을 구분해줘.
잘못된 기능·위조 대상·악성 자료·중복 제출·반복 호출·늦은 응답을 검사하고 결함을 수정해.
외부 실패·정상 0건·모델 답변 실패·상한 도달은 시험 응답으로 구분해 확인해.
시험을 위해 실제 외부 호출을 반복하거나 한도를 소진하지 마.
기존 웹·공유 API 회귀 검사와 새 기능 검사를 실행해줘.실제 자료·화면 최종 검증
먼저 확인 · 독자가 선택한 실제 종목과 API 설정·앞선 시험 결과 확인. 현행 정본은 별도 공개시험을 요청하지 않음.
실제 서비스에서 내가 선택한 종목의 필요한 가격·공시 조회만 최소로 확인해줘.
Gemini가 제안한 기능과 서버가 실행한 기능, 결과의 종목·기간·출처를 대조해.
공시 질문의 가격 조회 없음과 일반 질문의 조회 없음도 기록해줘.
데스크톱·모바일 웹의 대상 표시·입력·읽기·닫기와 기존 화면 보존을 확인해.
시험 응답·실제 API·브라우저 크기 시험·실기기 시험을 구분하고 미확인은 남겨줘.
추가 인증이 필요하면 비밀값을 묻지 말고 설정 위치와 필요한 행동을 안내해.
검증 뒤 챗봇은 켜진 상태로 두고, 활성 상태와 필요할 때 CHAT_ENABLED=false로 끄는 방법을 기록해줘.
확인한 결과와 아직 확인하지 못한 것, 다음에 이어갈 때 필요한 설정을 짧게 정리해줘.
실습 중 추가로 필요했던 작업도 함께 알려줘.이번 장 완료 조건을 확인할 때
먼저 확인 · 현재 장과 실제 프로젝트를 확인. 기존에 확인한 맥락은 재사용.
장 완료 확인해줘.대화창의 일반 개념 답변 확인
먼저 확인 · P22-02 구현 후 로컬 서비스 메인의 대화창을 엶. Code 탭에 입력하지 않음.
주식 자료에서 말하는 변동성이 뭐야?메인에서 공시 질문 확인
먼저 확인 · P22-04 구현 후 로컬 서비스 메인 대화창을 엶.
삼성전자의 최근 공시 5건을 DART 원문과 함께 보여줘.모호한 이름의 후보 확인
먼저 확인 · 공시 흐름 확인 후 서비스 대화창 사용. 이후 P22-05에서 이어가기 동작 보강.
삼성의 최근 공시를 보여줘.대화 대상의 3개월 흐름 확인
먼저 확인 · P22-06 구현과 현재 대화 대상 확인. 서비스 대화창에서 입력.
이 종목의 최근 3개월 가격 흐름을 보여줘. 어느 날짜부터 어느 날짜까지의 자료인지도 알려줘.최근 종가와 일반 설명 구분 확인
먼저 확인 · 종목 상세의 실제 대상·가격 필드가 종가인지 확인. 서비스 대화창에서 입력.
이 종목의 최근 확인 종가와 기준일을 알려주고, 가격을 볼 때 기준일을 확인해야 하는 이유도 설명해줘.한 번에 한 단계만 전달합니다.
질문에 필요한 자료와 실제 실행 기록을 비교해보세요.
모델의 호출 제안과 서버에서 실행한 조회를 나눠 봅니다.
공시 질문은 종목 확인·공시 조회, 일반 개념은 조회 없음인지 서버 실행 기록에서 대조합니다.
도구 설명과 서버 실행 조건을 확인하고 불필요한 조회 원인을 고칩니다. 모델의 선언은 실행 근거가 아닙니다.
선택 전 보관한 질문과 현재 대상을 확인해보세요.
화면의 상세 종목과 챗봇의 현재 대화 대상을 구분합니다.
후보 선택값을 실제 검색 결과와 서버에서 대조하고 원래 질문을 이어가는지 봅니다.
이전 대상 근거와 최근 문맥은 지우되 새 전환 질문은 유지합니다. 늦은 응답은 새 대화에 붙이지 않습니다.
요청 기간과 실제 거래일을 나눠 확인해보세요.
최근 확인 가격 기준일에서 서울 날짜의 달력 3개월을 계산했는지 봅니다.
달력상의 기간을 고정 거래일 수로 바꾸어 계산하고 있지 않은지 확인합니다.
월말 처리와 실제 첫/마지막 거래일을 표시하고 짧은 기간에 맞는 자료 부족 판정을 사용합니다.
반복 호출인지 필요한 조회인지 먼저 확인해보세요.
동일 요청의 재사용과 후보 선택 뒤 새 요청 사용량을 구분합니다.
모델·조회·시간 상한과 요청 실패 상태를 확인합니다.
상한을 무작정 늘리지 말고 실제 호출 흐름과 중복 원인을 확인합니다. 요청당 제한과 실제 검사 기록을 구분합니다.
장 완료 확인해줘.실제 프로젝트에서 튜터와 확인합니다. 사이트를 열어본 기록은 학습 완료가 아닙니다.
장별 소스는 해당 장까지의 기준 상태입니다. 정상 실습은 내 프로젝트를 이어가고, 완성 소스는 비교·복구할 때 사용합니다.
자료 판본 1c784213