공공데이터 API 활용하기 ②: 나라장터 공고 목록·상세조회 웹툴 만들기

공공데이터 API를 활용하여 최근 용역공고 목록을 조회한 뒤, 원하는 공고의 상세정보를 확인하는 웹툴을 만듭니다.

AI팀8주차

오늘 목표

이번 주에는 공고 게시일과 공고명을 조건으로 여러 용역공고를 불러옵니다.
(7주차에서 발급한 공공데이터포털 Decoding 인증키가 필요합니다)

한 번에 최종본을 요청하지 않습니다. 목록 조회, 공고 선택, 상세정보 완성의 순서로 기능을 추가하고 매 단계가 정상인지 테스트합니다.

목표 결과물

  • 나라장터공고조회기_v0.1.html — 최근 공고목록 조회
  • 나라장터공고조회기_v0.2.html — 목록 선택과 기본 상세정보
  • 나라장터공고조회기_v1.0.html — 최종 목록·상세조회 웹툴

준비물

  • ChatGPT 또는 Claude
  • Chrome 또는 Microsoft Edge
  • 7주차에 발급받은 공공데이터포털 Decoding 인증키
  • Windows 메모장 또는 사용할 수 있는 코드 편집기
  • 인터넷 연결

오늘 순서

  1. 오늘 사용할 검색용 API 주소와 요청변수 확인하기
  2. 코드 전에 AI가 요구사항을 정확히 이해했는지 확인하기
  3. v0.1에서 최근 공고목록 조회하기
  4. v0.2에서 공고를 클릭해 기본 상세정보 표시하기
  5. v1.0에서 상세항목과 최소 상태처리 완성하기
  6. 실제 API 데이터로 최종 테스트하기

오늘 만들 도구

나라장터 용역 입찰공고 목록·상세조회기

v1.0 완성본에서 공고명 '주차장'으로 조회한 목록 중 하나를 골라 오른쪽에 상세정보가 표시된 화면
Decoding 인증키 입력
+ 최근 7일 조회기간 자동 설정
+ 공고명 선택 입력
→ 목록 조회 버튼 클릭
→ 용역공고 GET 요청 1회
→ 좌측에 최대 20건 표시
→ 원하는 공고 클릭
→ 우측에 상세정보 표시

공고를 클릭할 때는 API를 다시 호출하지 않습니다.
목록을 조회할 때 이미 받은 해당 공고의 정보를 우측에 보여줍니다.

오늘 사용할 조회 방식

구분내용
공고를 찾는 방법공고 게시일과 공고명으로 검색
API 오퍼레이션getBidPblancListInfoServcPPSSrch
주요 요청조건inqryDiv=1, 시작일, 종료일, 공고명(선택)
API 결과첫 페이지의 공고 최대 20건
화면좌측 조회·목록, 우측 상세정보
상세 확인목록의 공고 전체를 클릭

핵심 개념

1. 공고 목록 검색 기능

오늘은 공고번호를 모르는 상태에서 날짜와 공고명으로 목록을 검색합니다.

공고번호를 안다 → 단건 조회
공고번호를 모른다 → 날짜·공고명으로 목록 검색

오늘 사용하는 검색용 오퍼레이션은 다음과 같습니다.

getBidPblancListInfoServcPPSSrch

[링크] - 해당 오퍼레이션 바로가기

이 오퍼레이션은 나라장터 검색조건에 따라 용역 입찰공고를 조회합니다.
물품·공사·외자 공고는 다른 오퍼레이션을 사용합니다.

2. 요청 변수

2-a. 조회 구분

공고목록을 날짜로 조회하려면 요청변수에 inqryDiv=1 을 추가합니다.inqryDiv=1은 공고 게시일시로 조회하는것을 뜻합니다.

# 조회구분
inqryDiv=1

2-b. 날짜 입력

날짜 입력값은 시작일 inqryBgnDt과 종료일inqryEndDt 을 입력합니다. API가 요구하는 형식으로 바꾸어 보냅니다.

  • inqryBgnDt: 시작일 00시 00분
  • inqryEndDt: 종료일 23시 59분
# 시작일 (2026-08-25)
inqryBgnDt=202608250000
# 종료일 (2026-08-31)
inqryEndDt=202608312359

2-c. 공고명

공고명 입력값이 있으면 다음 요청변수를 추가합니다.

bidNtceNm=사용자가 입력한 공고명

3. 응답목록

API 응답목록은 실제 JSON 형태에 따라 body.items 배열 또는 body.items.item 형태로 보일 수 있습니다.
코드는 두 형태를 먼저 하나의 items 배열로 맞춘 뒤 전체를 반복합니다.

items[0] → 목록의 첫 번째 공고
items[1] → 목록의 두 번째 공고
items[2] → 목록의 세 번째 공고

첫 번째 항목인 items[0]만 표시하면 API가 여러 공고를 보내도 한 건만 보입니다.

4. 전체 건수와 현재 받은 건수는 다를 수 있습니다

값의미
totalCount검색조건에 맞는 전체 공고 수
items.length이번 요청으로 실제 받은 공고 수
numOfRows=20한 번에 받을 최대 공고 수

화면의 전체 126건 중 20건은 오류가 아닙니다.
전체 126건 중 첫 20건만 받은 상태입니다.

5. 버전은 완성도에 따라 올립니다

버전이번 단계에서 확인할 것
v0.1최근 공고목록을 불러오는가
v0.2목록을 선택하면 상세정보가 바뀌는가
v1.0이번 주 필수 기능과 테스트를 모두 통과했는가

v0.2 다음이 v1.0인 것은 중간 단계가 빠진 것이 아닙니다.
1.0은 미리 정한 이번 주 기능범위가 완성되었다는 표시입니다.

준비 - 8주차 폴더 만들기

  1. 원하는 위치에 새 폴더를 만듭니다.
  2. 폴더 이름을 8주차_API로 지정합니다.
  3. 오늘 만드는 HTML은 이 폴더 안에서 파일명으로 구분합니다.
8주차_API/
  나라장터공고조회기_v0.1.html
  나라장터공고조회기_v0.2.html
  나라장터공고조회기_v1.0.html

실습 1 - 검색용 API 요청 확인하기

아래 내용은 이번 주 코드와 복사 프롬프트에 필요한 API 정보입니다.
다른 파일을 찾아보지 않아도 되도록 필요한 항목만 모았습니다.

요청주소

https://apis.data.go.kr/1230000/ad/BidPublicInfoService/getBidPblancListInfoServcPPSSrch

요청변수

요청변수의미이번 주 값
serviceKey인증키사용자가 입력한 Decoding 키
pageNo페이지 번호1
numOfRows한 번에 받을 결과 수20
type응답 형식json
inqryDiv조회 기준1 — 공고 게시일시
inqryBgnDt조회 시작일시시작일 + 0000
inqryEndDt조회 종료일시종료일 + 2359
bidNtceNm입찰공고명입력했을 때만 전달

화면에 사용할 응답값

화면 항목JSON 필드
공고명bidNtceNm
공고번호bidNtceNo
차수bidNtceOrd
공고기관ntceInsttNm
수요기관dminsttNm
계약방법cntrctCnclsMthdNm
공고일시bidNtceDt
입찰마감일시bidClseDt
개찰예정일시opengDt
나라장터 공고 상세보기bidNtceDtlUrl

opengDt는 실제 낙찰결과가 아니라 개찰을 시작할 수 있는 예정 일시입니다.
업체별 개찰결과는 9주차에서 다른 API로 조회합니다.

실습 1 완료 확인

실제 API 연결은 v0.1의 첫 목록 조회에서 확인합니다.

실습 2 - 코드 전에 새 웹툴의 범위 확인하기

ChatGPT 또는 Claude에서 새 대화를 시작합니다.
파일을 첨부하거나 실제 인증키를 입력하지 않습니다.

복사 프롬프트 ① — 요구사항과 제작순서 확인

순수 HTML 파일 하나로 나라장터 용역공고 목록·상세조회 도구를 만들려고 해.

사용할 API 정보
- 요청주소: https://apis.data.go.kr/1230000/ad/BidPublicInfoService/getBidPblancListInfoServcPPSSrch
- 요청변수: serviceKey, pageNo=1, numOfRows=20, type=json, inqryDiv=1, inqryBgnDt, inqryEndDt
- 공고명이 있을 때만 bidNtceNm을 추가
- 시작일은 YYYYMMDD0000, 종료일은 YYYYMMDD2359
- 결과목록은 body.items 배열 또는 body.items.item 형태로 올 수 있음

최종 흐름은 다음과 같아.
- Decoding 인증키, 시작일, 종료일, 공고명(선택)을 입력한다.
- 검색용 용역 오퍼레이션으로 첫 20건을 조회한다.
- 좌측 목록의 공고를 누르면 우측에 상세정보가 표시된다.
- 공고를 누를 때는 API를 다시 호출하지 않는다.

순수 HTML 파일 하나만 사용하고 페이지 이동, 초기화, 다운로드, 개찰결과는 넣지 않을 거야.

아직 코드는 작성하지 말고,
이해한 입력·API 요청·출력과 v0.1, v0.2, v1.0의 제작순서만 짧게 정리해줘.

AI 답변 확인

확인 항목올바른 내용
오퍼레이션getBidPblancListInfoServcPPSSrch
조회 기준inqryDiv=1 — 공고 게시일시
날짜시작일 0000, 종료일 2359
공고명값이 있을 때 bidNtceNm 전달
목록items 전체를 반복하여 표시
선택현재 목록의 item 재사용, 추가 GET 없음
범위첫 페이지 20건, 페이지 이동 없음

제작순서는 아래와 유사하게 구분되어야 합니다.

v0.1 목록 조회
→ v0.2 목록 선택과 기본 상세
→ v1.0 상세항목과 최소 상태처리

AI가 페이지 이동이나 전체 공고 자동수집을 제안하면 코드를 요청하기 전에 제외해 달라고 합니다.

실습 3 - v0.1: 최근 공고목록 조회하기

이번 단계에서 만들 기능

  • Decoding 인증키 입력
  • 오늘을 포함한 최근 7일 자동 설정
  • 공고명 입력(선택)
  • 목록 조회 버튼
  • 첫 20건을 좌측 목록으로 표시
  • 우측에 공고 선택 안내만 표시

아직 공고 선택과 상세정보 기능은 만들지 않습니다.

복사 프롬프트 ② — v0.1 만들기

앞에서 요구사항을 확인한 같은 AI 대화에 아래 프롬프트를 입력합니다.

이해한 내용이 맞아. 먼저 v0.1 전체 HTML을 새로 만들어줘.

입력과 화면
- 비밀번호형 Decoding 인증키 입력
- 시작일, 종료일, 공고명(선택), 목록 조회 버튼
- 날짜는 오늘을 포함한 최근 7일로 자동 설정
- 좌측에 공고명, 공고번호, 수요기관, 입찰마감 목록 표시
- 우측에는 아직 “목록에서 공고를 선택해 주세요”만 표시

API 요청
- 요청주소: https://apis.data.go.kr/1230000/ad/BidPublicInfoService/getBidPblancListInfoServcPPSSrch
- URLSearchParams로 serviceKey, pageNo=1, numOfRows=20, type=json, inqryDiv=1 전달
- 시작일은 YYYYMMDD0000, 종료일은 YYYYMMDD2359로 변환
- 공고명이 있을 때만 bidNtceNm 전달
- resultCode가 "00"인지 확인하고, body.items 배열과 body.items.item 형태를 하나의 배열로 맞추기
- 배열 전체를 목록으로 표시하고 totalCount와 현재 표시 건수를 구분해 표시

입력이 비었거나 시작일이 종료일보다 늦으면 API를 호출하지 말고 한 줄로 안내해줘.
인증키는 코드나 브라우저 저장소에 저장하지 마.
페이지 이동, 초기화, 공고 선택 기능은 아직 추가하지 마.
React, 외부 라이브러리, CDN, 서버 없이 실행 가능한 전체 HTML을 출력해줘.

HTML 파일로 저장·실행

  1. AI 답변의 <!DOCTYPE html>부터 </html>까지 전체를 복사합니다.

  2. 메모장에 붙여넣습니다.

  3. 8주차_API 폴더에 다음 이름으로 저장합니다.

    나라장터공고조회기_v0.1.html
    
  4. 파일 형식은 모든 파일, 인코딩은 UTF-8로 선택합니다.

  5. 저장한 파일을 더블클릭하여 Chrome 또는 Edge에서 엽니다.

v0.1 조회기에서 공고 목록 20건과 전체 건수가 표시되고 오른쪽 상세 칸에는 선택 안내만 있는 화면

v0.1 새 기능 테스트

  1. 파일을 열어 종료일이 오늘, 시작일이 오늘에서 6일 전인지 확인합니다.
  2. Decoding 인증키를 입력하고 공고명 없이 조회합니다.
  3. 목록에 최대 20건과 totalCount가 구분되어 표시되는지 확인합니다.
  4. 목록의 공고명에서 한 단어를 골라 공고명으로 다시 조회합니다.

기대 결과

  • 처음에는 오늘을 포함한 최근 7일이 설정됩니다.
  • 각 공고에 공고명·공고번호·수요기관·마감일시가 보입니다.
  • 공고명을 입력하면 해당 단어가 포함된 새 목록으로 바뀝니다.
  • 결과가 20건보다 많아도 페이지 이동 버튼은 없습니다.

최근 7일에 결과가 없다면 시작일을 30일 전으로 넓혀 다시 조회합니다.

마지막으로 인증키를 비우거나 시작일을 종료일보다 늦게 설정했을 때, API를 호출하지 않고 입력 안내가 표시되는지 확인합니다.

이 첫 목록 조회가 Decoding 인증키와 API 연결 테스트를 겸합니다.
v0.1 테스트를 통과한 뒤 다음 단계로 진행합니다.

실습 4 - v0.2: 공고를 선택해 기본 상세정보 표시하기

이번 단계에서 추가할 기능

  • 목록의 공고 카드 전체를 클릭
  • 선택한 공고를 색으로 구분
  • 우측에 기본 상세정보 4개 표시
  • 클릭할 때 추가 API 요청 없이 현재 item 사용

복사 프롬프트 ③ — v0.2 목록 선택과 기본 상세

테스트를 통과한 나라장터공고조회기_v0.1.html을 AI 대화에 첨부하고 아래 프롬프트를 입력합니다.
새 대화를 사용해도 됩니다.

첨부한 정상 v0.1을 v0.2로 수정해줘.

- 좌측 공고 카드 전체를 클릭할 수 있게 만들기
- 클릭한 공고를 눈에 띄게 표시하기
- 우측에 공고명, 공고번호, 차수, 수요기관 표시하기
- 공고번호와 차수는 숫자로 바꾸지 않고 문자열 그대로 표시하기
- 상세정보는 목록 조회 때 받은 item을 사용하기
- 공고를 클릭할 때 fetch를 다시 호출하지 않기
- 새 목록을 조회하면 이전 선택과 우측 상세를 비우기

그 밖의 기능은 바꾸거나 추가하지 말고 실행 가능한 전체 HTML을 출력해줘.

v0.2 파일 저장

  1. AI 답변의 전체 HTML을 복사합니다.

  2. 8주차_API 폴더에 다음 이름으로 저장합니다.

    나라장터공고조회기_v0.2.html
    
  3. v0.1에 덮어쓰지 않습니다.

  4. 저장한 v0.2를 브라우저에서 엽니다.

v0.2에서 첫 번째 공고를 클릭해 목록에 강조 표시되고 오른쪽에 공고명·공고번호·차수·수요기관이 표시된 화면

v0.2 테스트 1 — 첫 번째 공고 선택

  1. 공고명 없이 목록을 조회합니다.
  2. 첫 번째 공고를 클릭합니다.

기대 결과

  • 선택한 공고가 다른 색으로 표시됩니다.
  • 우측에 공고명·공고번호·차수·수요기관이 표시됩니다.
  • 좌측 공고와 우측 상세값이 같습니다.
  • 목록이 다시 로딩되지 않고 바로 표시됩니다.

v0.2 테스트 2 — 다른 공고 선택

두 번째 공고를 클릭합니다.

기대 결과

  • 선택 표시가 두 번째 공고로 이동합니다.
  • 우측 값이 두 번째 공고의 정보로 바뀝니다.
  • 첫 번째 공고의 값이 남아 있지 않습니다.
  • 좌측과 우측의 공고번호·차수가 문자열 그대로 같습니다.

결과가 한 건이면 공고명을 지우거나 조회기간을 넓힌 뒤 다시 진행합니다.

공고명을 바꾸어 새 목록을 조회했을 때 이전 선택과 우측 상세정보가 사라지면 v0.2 테스트가 끝납니다.

실습 5 - v1.0: 상세정보와 최소 상태처리 완성하기

이번 단계에서 추가할 기능

  • 우측 상세정보 10개
  • 나라장터 공고 상세보기 링크
  • 조회 중 버튼 잠금
  • 정상 0건과 요청 실패 안내
  • 작은 화면에서 좌우 영역을 위아래로 배치
  • 새로고침할 때 인증키 비우기

복사 프롬프트 ④ — v1.0 완성하기

테스트를 통과한 나라장터공고조회기_v0.2.html을 AI 대화에 첨부하고 아래 프롬프트를 입력합니다.
새 대화를 사용해도 됩니다.

첨부한 정상 v0.2를 이번 주 최종본 v1.0으로 완성해줘.

우측 상세정보를 아래 10개로 늘려줘.
- 공고명 bidNtceNm
- 공고번호 bidNtceNo
- 차수 bidNtceOrd
- 공고기관 ntceInsttNm
- 수요기관 dminsttNm
- 계약방법 cntrctCnclsMthdNm
- 공고일시 bidNtceDt
- 입찰마감 bidClseDt
- 개찰예정 opengDt
- 나라장터 공고 상세보기 링크 bidNtceDtlUrl

마무리 기능
- 좌측은 조회조건과 목록, 우측은 상세정보로 배치
- 조회 중에는 조회 버튼을 잠그고 “조회 중” 표시
- 정상 0건과 요청 실패를 화면에 짧게 안내
- 비어 있는 상세값은 undefined 대신 - 표시
- 상세보기 주소가 없으면 - 표시, 있으면 새 탭에서 열기
- 새로고침하면 인증키 입력칸 비우기
- 화면이 좁으면 좌측과 우측을 위아래로 배치

기존 목록 조회와 선택 방식은 유지해줘.
페이지 이동, 초기화, 다운로드, 인증키 저장 등 새 기능은 추가하지 마.
React, 외부 라이브러리, CDN, 서버 없이 실행 가능한 전체 HTML을 출력해줘.

최종 HTML 저장

  1. AI 답변의 전체 HTML을 복사합니다.

  2. 8주차_API 폴더에 다음 이름으로 저장합니다.

    나라장터공고조회기_v1.0.html
    
  3. v0.2에 덮어쓰지 않습니다.

  4. 저장한 v1.0을 브라우저에서 엽니다.

v1.0에서 선택한 공고의 공고기관·계약방법·입찰마감·개찰예정과 나라장터 상세보기 링크가 오른쪽에 표시된 화면

실습 6 - v1.0 최종 테스트

라이브 API 데이터는 계속 바뀌므로 특정 공고명이나 전체 건수를 정답으로 사용하지 않습니다.
내가 클릭한 공고와 우측에 표시된 값이 같은지를 중심으로 테스트합니다.

테스트 1 — 첫 화면과 목록 검색

  1. 파일을 열어 인증키는 비어 있고, 날짜는 최근 7일로 설정되었는지 확인합니다.
  2. 정상 Decoding 인증키로 공고명 없이 조회합니다.
  3. 목록의 공고명에서 한 단어를 골라 다시 조회합니다.

기대 결과

  • 좌측에는 최대 20건이 표시되고 우측에는 공고 선택 안내가 보입니다.
  • 전체 건수와 현재 표시 건수가 구분됩니다.
  • 공고명을 입력하면 새 목록으로 바뀌고 이전 선택은 사라집니다.
  • 페이지 이동 버튼은 없습니다.

테스트 2 — 선택과 상세정보

첫 번째와 두 번째 공고를 차례로 클릭하고 아래 항목을 확인합니다.

상세 항목확인할 점
공고명클릭한 목록과 같은 공고명
공고번호클릭한 목록과 같은 번호
차수좌측과 같은 문자열 유지
공고기관ntceInsttNm 값
수요기관dminsttNm 값
계약방법cntrctCnclsMthdNm 값
공고일시bidNtceDt 값
입찰마감bidClseDt 값
개찰예정opengDt 값
공고 상세보기주소가 있으면 새 탭에서 열리고, 없으면 - 표시

값이 없는 항목은 undefined가 아니라 -로 표시되어야 합니다.

공고를 바꿀 때 선택 색상과 우측 값이 함께 바뀌고, 목록은 다시 로딩되지 않아야 합니다.

테스트 3 — 0건과 실패

  1. 공고명에 결과가 나오기 어려운 긴 문자열을 입력합니다.

    결과가없을검색어_12345
    
  2. 목록 조회를 누릅니다.

기대 결과

  • 오류가 아니라 조건에 맞는 용역공고가 없습니다와 같은 안내가 표시됩니다.
  • 이전 목록과 상세정보가 남아 있지 않습니다.
동작기대 결과
인증키를 비우고 조회API를 호출하지 않고 입력 안내
시작일을 종료일보다 늦게 입력API를 호출하지 않고 날짜 안내
인증키 일부를 지우고 조회요청 실패 안내, 인증키나 전체 주소는 표시하지 않음
정상 인증키로 다시 조회목록을 다시 정상 조회

테스트 4 — 새로고침과 작은 화면

  1. 인증키를 입력하고 목록을 한 번 조회합니다.
  2. 브라우저를 새로고침합니다.
  3. 브라우저 창의 너비를 좁힙니다.

기대 결과

  • 새로고침하면 인증키가 사라집니다.
  • 조회기간은 다시 최근 7일로 설정됩니다.
  • 좁은 화면에서는 좌측과 우측이 위아래로 배치됩니다.

마지막으로 HTML 파일에서 자신의 인증키 앞부분을 검색합니다. 검색 결과가 없으면 최종 테스트가 끝납니다.

웹툴이 제대로 작동하지 않을 때

증상먼저 확인할 부분
최근 7일이 비어 있음공고명 삭제 후 시작일을 30일 전으로 넓히기
공고명 검색이 적용되지 않음검색용 ...ServcPPSSrch와 bidNtceNm 사용 여부
날짜 입력값 오류시작일 0000, 종료일 2359, 12자리 형식 확인
첫 공고만 표시됨items[0]만 쓰지 않고 items 전체를 반복하는지 확인
목록이 있는데 0건으로 표시실제 응답이 items 배열인지 items.item 구조인지 확인
공고를 누를 때 다시 로딩됨선택 함수에서 fetch하지 않고 현재 item을 쓰는지 확인
다른 공고를 눌러도 값이 같음클릭한 공고의 item을 우측에 연결했는지 확인
차수 000이 0으로 보임차수를 숫자로 바꾸지 않았는지 확인
undefined가 보임빈 값을 -로 바꾸어 표시하는지 확인
XML이나 일반 글이 응답됨type=json과 인증키·활용신청 상태 확인
Failed to fetch인터넷, HTTPS 주소, 회사망 접근 제한 확인

오류를 AI에게 알릴 때는 긴 공통 템플릿을 사용할 필요가 없습니다.
현재 버전, 실패한 동작, 기대 결과, 실제 화면 문구를 짧게 적고 현재 HTML 전체를 첨부합니다.

예시:

v0.2에서 목록은 정상적으로 나와.
그런데 두 번째 공고를 눌러도 우측에는 첫 번째 공고가 계속 보여.
기대 결과는 클릭한 공고의 정보로 우측 전체가 바뀌는 거야.
현재 HTML을 확인하고 수정된 전체 HTML을 출력해줘.

AI에게 보내기 전에 실제 인증키와 serviceKey=가 포함된 전체 요청주소를 제거합니다.

API가 일시적으로 작동하지 않을 때

별도의 테스트 파일은 사용하지 않습니다.
아래 축약 JSON은 실제 API 연결을 대신하는 자료가 아니라, 현재 HTML이 목록과 상세 필드를 올바르게 읽도록 작성되었는지 AI와 검토하는 자료입니다.

{
  "response": {
    "header": { "resultCode": "00", "resultMsg": "정상" },
    "body": {
      "items": [
        {
          "bidNtceNo": "R25BK01093927",
          "bidNtceOrd": "000",
          "bidNtceNm": "양주시 공릉천수계 차집관로 정비사업 기본 및 실시설계 용역",
          "ntceInsttNm": "경기도 양주시",
          "dminsttNm": "경기도 양주시",
          "cntrctCnclsMthdNm": "지명경쟁",
          "bidNtceDt": "2025-10-17 10:24:56",
          "bidClseDt": "2025-10-24 10:00:00",
          "opengDt": "2025-10-24 11:00:00",
          "bidNtceDtlUrl": "https://www.g2b.go.kr/"
        },
        {
          "bidNtceNo": "R25BK01099370",
          "bidNtceOrd": "000",
          "bidNtceNm": "회양천 재해복구사업 기본 및 실시설계용역",
          "ntceInsttNm": "경상남도 합천군",
          "dminsttNm": "경상남도 합천군",
          "cntrctCnclsMthdNm": "지명경쟁",
          "bidNtceDt": "2025-10-17 20:54:23",
          "bidClseDt": "2025-10-23 10:00:00",
          "opengDt": "2025-10-23 11:00:00",
          "bidNtceDtlUrl": "https://www.g2b.go.kr/"
        }
      ],
      "totalCount": 2
    }
  }
}

현재 HTML을 AI 대화에 첨부하고 위 JSON과 아래 문장을 함께 붙여넣습니다.

현재 HTML은 수정하지 말고 코드만 검토해줘.
위 응답을 받는다면 items 두 건을 목록으로 만들고,
각 공고를 선택했을 때 우측 값이 바뀌는 구조인지 확인해줘.
차수 000이 문자열로 유지되는지와 선택할 때 API를 다시 호출하지 않는지도 알려줘.

다음 내용을 코드 기준으로 확인합니다.

  • items 두 개를 목록 두 건으로 표시하는가
  • 첫 번째와 두 번째 공고를 선택할 때 우측 값이 바뀌는가
  • 차수 000이 유지되는가
  • 목록 선택 때 API 재요청이 없는가

실제 API가 정상화되면 v0.1의 첫 목록 조회부터 다시 진행합니다.
축약 JSON을 이용한 코드 검토는 실제 화면 테스트와 API 연결 성공을 대신하지 않습니다.

이번 주 해보기

실제 업무와 관련된 공고를 직접 찾아봅니다.

  1. 공고명 없이 최근 7일의 목록을 조회합니다.
  2. 업무와 관련 있는 단어를 공고명에 입력하여 다시 조회합니다.
  3. 공고기관과 수요기관이 같은지 다른지 확인합니다.
  4. 입찰마감일시와 개찰예정일시를 구분합니다.
  5. 공고 상세보기 링크를 열어 웹툴의 공고번호·기관·일시와 대조합니다.
  6. 9주차에서 개찰결과를 확인하고 싶은 공고번호와 차수 한 쌍을 메모합니다.

결과물 저장하기

8주차_API 폴더에 다음 파일이 있는지 확인합니다.

8주차_API/
  나라장터공고조회기_v0.1.html
  나라장터공고조회기_v0.2.html
  나라장터공고조회기_v1.0.html
  • v0.1은 최근 공고목록 조회를 통과한 중간본입니다.
  • v0.2는 목록 선택과 기본 상세정보를 통과한 중간본입니다.
  • v1.0은 이번 주 필수 기능과 최종 테스트를 통과한 완성본입니다.
  • React 프로젝트나 별도 JavaScript 파일은 없습니다.
  • 실제 인증키를 저장한 파일은 없습니다.

오늘 완료 확인

공식 참고자료

오늘의 핵심

공공 API에서 목록을 찾고, 사용자가 선택한 항목을 상세정보로 연결하면 공고번호를 미리 준비하지 않아도 실제 업무 흐름에 맞는 검색 도구가 됩니다. 우선 첫 20건을 조회하는 단순한 도구부터 완성한 뒤 다음 API로 확장합니다.

© KYONGHO ENGINEERING & ARCHITECTS