12장 · 저자 검증 기록
11장을 끝낸 프로젝트에서 12장 요청문만으로 Database와 Cache 적용까지 도달 프로젝트 전체 Test 113개 통과(이 장에서 새로 생긴 것 13개) · 실제 서비스 주소에서 측정 최종 확인 2026-08-31
실제로 만들어봤습니다
책에 인쇄된 요청문만으로 11장에서 만든 AI 브리핑 서비스를 같은 일을 덜 반복하는 구조로 바꿀 수 있는지 확인했습니다.
- 요청문은 책 12장에 나오는 문장을 글자까지 그대로 썼습니다.
- 12장은 11장을 이어가는 장이므로 11장을 끝낸 프로젝트에서 시작했습니다.
- 책에 없는 추가 지시를 보태지 않았습니다.
12장의 완료 기준은 여섯 가지입니다. 전부 통과했습니다.
| 확인 항목 | 결과 | |
|---|---|---|
| 1 | 같은 주식 데이터를 다시 요청하면 저장된 값을 쓰고 금융위원회를 다시 부르지 않는다 | 통과 |
| 2 | 유효시간이 지난 값은 그대로 쓰지 않고 원본에서 다시 확인한다 | 통과 |
| 3 | 같은 근거·같은 모델이면 저장된 브리핑을 돌려주고 Gemini를 다시 부르지 않는다 | 통과 |
| 4 | 근거나 모델, 주요 프롬프트가 바뀌면 이전 결과를 재사용하지 않는다 | 통과 |
| 5 | 사용량 한도에 도달한 동안 추가 호출이 나가지 않고 브리핑 버튼이 막힌다 | 통과 |
| 6 | 빨라진 뒤에도 11장에서 정한 브리핑 품질 기준이 그대로 유지된다 | 통과 |
응답시간은 컴퓨터와 네트워크, 서비스 상태에 따라 달라집니다. 그래서 확인한 것은 책과 같은 숫자가 나오는지가 아니라 반복 요청에서 외부 호출과 AI 생성이 실제로 줄어드는지입니다.
완성된 결과를 공개합니다
| 무엇 | 어디 |
|---|---|
| 12장을 끝낸 프로젝트 | chapters/ch12/source/ai-stock-briefing/ |
| 12장 요청문 | chapters/ch12/prompts.md |
| 적용 전후 측정 결과 요약 | artifacts/measurement-summary.txt |
| 측정 원자료 | artifacts/production-measurement-icn1.json |
| 빈 폴더에서 돌린 Test 실행 결과 | artifacts/source-test-run.txt |
장별 Source를 빈 폴더에 단독으로 놓고 준비와 빌드, Test 실행, 실제 화면 확인까지 했습니다.
자동 검사도 해봤습니다
| 개수 | |
|---|---|
| 12장 Source에서 돌린 검사 전체 | 113개 |
| 이 장에서 새로 생긴 검사 | 13개 |
돌린 검사 코드는 12장 Source 안에 있습니다. 9장부터 11장까지 만든 검사도 함께 다시 돌렸습니다.
이 장에서 새로 생긴 검사는 세 파일에 있습니다.
| 파일 | 무엇을 확인하는가 | 새 검사 |
|---|---|---|
| tests/briefing-actions.test.ts | 한도에 도달하면 다시 부를 수 있는 시간까지 Gemini를 부르지 않는 것, 그 시간을 알 수 없으면 화면에 시간을 확정해 보여주지 않는 것, 한도 오류와 일반 오류를 구분하는 것, 한도 중에도 저장된 결과는 그대로 쓰는 것, 검증을 통과하지 못한 답은 저장되지 않고 통과한 답만 다시 쓰이는 것 | 6개 |
| tests/gemini-briefing-api.test.ts | 한도 응답에서 다시 부를 수 있는 시간을 헤더와 응답 본문 두 곳에서 읽는 것, 어디에서도 확인할 수 없으면 시간을 만들어내지 않는 것, 한도 오류 문구에 Gemini 원문이나 API Key가 섞이지 않는 것 | 4개 |
| tests/server-only-key.test.ts | 오류 메시지에서 Secret 값을 지우는 것, 지울 값이 없으면 원문을 그대로 두는 것, Cache 오류에서 접속 주소와 Token을 모두 지우는 것 | 3개 |
전체 검사 목록과 실행 결과는 artifacts/source-test-run.txt에 있습니다.
저자는 검사와 별도로 실제 서비스 주소에서 직접 측정했습니다. 같은 종목을 같은 조건으로 반복 요청해 적용 전과 적용 후를 각각 다섯 번씩 재고, 최초 저장 한 번과 최초 생성 한 번은 비교값에서 뺐습니다.
| 무엇을 확인했나 | 결과 |
|---|---|
| 주식 데이터 응답시간 | 1.339초 → 0.088초 (93.4% 단축, 약 15.3배) |
| AI 브리핑 응답시간 | 3.350초 → 0.076초 (97.7% 단축, 약 44.3배) |
| 반복 요청의 금융위원회 호출 | 25회 → 0회 |
| 반복 요청의 Gemini 호출 | 5회 → 0회 |
| 반복 요청의 Gemini Token | 30,236개 → 0개 |
| 저장된 값의 유효시간이 지난 뒤 | 원본에서 다시 가져와 저장 데이터를 갱신 |
| 저장된 브리핑의 유효시간 | 1시간 |
| 저장된 브리핑을 다시 쓸 때의 내용 | 처음 만든 브리핑과 같은 문장, 알 수 없는 것 표시도 그대로 |
| 저장된 데이터를 정리할 때 | 유효시간이 지난 것만 지우고 다른 자료는 그대로 |
값은 artifacts/에 있습니다.
공식 자료와 비교했습니다
저장한 데이터를 다시 쓰더라도 원본은 그대로 공식 자료입니다. 저장은 같은 값을 다시 받아오지 않기 위한 것이고, 유효시간이 지나면 아래 공식 자료에서 다시 확인합니다.
금융위원회 주식시세정보 · 지수시세정보 (공공데이터포털) https://www.data.go.kr
금융감독원 OpenDART https://opendart.fss.or.kr
Token 사용량은 Gemini 응답이 알려준 실제 값이고, 비용 환산은 공식 가격 안내의 단가를 그대로 적용했습니다.
Gemini API 가격 안내 https://ai.google.dev/gemini-api/docs/pricing
1회 요청에서 실제로 사용한 Token은 입력 4,998개와 출력 1,019개였습니다. 같은 조건의 요청이 100번 들어온다고 단순하게 가정하면 100번 모두 새로 만들 때 약 60만 Token이 필요하고, 처음 한 번만 만들면 6,017개로 끝납니다. 같은 단가로 환산하면 $0.41에서 $0.004로 약 99% 줄어듭니다.
이 숫자는 1회 실측값을 99회에 환산한 예시이고, 100번을 모두 실행해 합산한 값은 아닙니다.
직접 확인해볼 수 있습니다
만들어보실 때는 책의 12장을 그대로 따라 하시면 됩니다. 요청문은 chapters/ch12/prompts.md에 책에 나오는 순서대로 있습니다.
12장 Source를 받아 자기 인증키와 접속 정보를 넣으면 같은 검사를 그대로 돌려볼 수 있습니다.
이 폴더는 책 12장을 끝낸 상태의 프로젝트야.
내 인증키와 Database, Cache 접속 정보를 넣을 자리를 알려주고
Test를 전부 실행해서 결과를 보여줘.저장된 값을 정말 다시 쓰는지 직접 재볼 수 있습니다.
같은 종목 화면을 두 번 열고 각각 걸린 시간을 보여줘.
두 번째에 금융위원회와 Gemini를 다시 불렀는지 아닌지도 알려줘.유효시간이 지난 값을 다시 확인하는지도 볼 수 있습니다.
저장된 주식 데이터 한 건만 유효시간이 지난 것으로 바꾸고 다시 조회해줘.
원본에서 다시 가져왔는지, 다른 저장 데이터는 그대로인지 확인해줘.조건이 바뀌면 브리핑을 새로 만드는지도 확인할 수 있습니다.
브리핑에 쓰는 근거를 한 군데만 바꿔서 다시 요청해줘.
저장된 이전 브리핑을 쓰는지, 새로 만드는지 알려줘.이런 한계가 있습니다
- 응답시간은 환경에 따라 달라집니다. 컴퓨터와 네트워크, 서버와 Database의 위치, 그때의 서비스 상태에 따라 값이 바뀝니다. 같은 숫자가 나오지 않는 것이 정상입니다.
- 100번 환산은 가정입니다. 1회 실측값을 99회에 환산한 예시이며, 실제 호출 횟수와 사용량은 데이터 구성과 모델, 입력·출력, 가격 정책에 따라 달라집니다.
- 비용은 추정치입니다. 무료 사용 범위에서 실제로 청구된 금액이 아니라, 실제 Token 측정값에 공식 유료 단가를 적용한 값입니다.
- 저장된 값은 최신 값이 아닐 수 있습니다. 유효시간 안에는 저장된 값을 그대로 쓰므로 화면의 데이터 기준일을 함께 확인합니다.
- 저장된 브리핑은 같은 문장이 다시 나옵니다. 근거와 모델이 같은 동안에는 새 표현으로 바뀌지 않습니다.
- Gemini의 모델과 무료 사용 범위, 호출 한도는 바뀔 수 있습니다. 사용할 수 있는 모델과 내 사용량은 Google AI Studio의 공식 안내에서 확인합니다.
- Supabase와 Upstash의 무료 제공량과 화면은 바뀔 수 있습니다. 실습 시점의 화면과 공식 안내를 기준으로 판단합니다.