[나라장터 입찰공고 검색기 #3] AI와 함께 만드는 나만의 파이썬 검색 프로그램 (최종)

나라장터 입찰공고 검색기 마지막 포스팅입니다. 지난 포스팅에서 공공데이터 포털 사이트에서 테스트를 해봤는데요. 테스트 화면을 그대로 ai에게 전달하고 코드를 만들어 달라고 해보았습니다. 몇 번의 에러가 발생했고 최종적으로 입찰공고를 가져오는데 성공했습니다. ✅ 전 단계를 안 보신 분들은 먼저 보고 오세요 [나라장터 입찰공고 검색기 #1] 공공데이터 포털 API 신청 및 인증키 발급 가이드 [나라장터 입찰공고 검색기 #2] 코드 […]

본문 상단 광고 구역 (승인 후 자동 노출됩니다)

나라장터 입찰공고 검색기 마지막 포스팅입니다. 지난 포스팅에서 공공데이터 포털 사이트에서 테스트를 해봤는데요. 테스트 화면을 그대로 ai에게 전달하고 코드를 만들어 달라고 해보았습니다. 몇 번의 에러가 발생했고 최종적으로 입찰공고를 가져오는데 성공했습니다.

✅ 전 단계를 안 보신 분들은 먼저 보고 오세요

[나라장터 입찰공고 검색기 #1] 공공데이터 포털 API 신청 및 인증키 발급 가이드

[나라장터 입찰공고 검색기 #2] 코드 짜기 전 필수 관문! 공공데이터포털 API 테스트 가이드

나라장터 입찰공고 검색기 만들기

1. AI에게 레시피 던져주기: 이미지로 소통하기

지난 포스팅에서 공공데이터 포털 사이트 테스트까지 마쳤습니다. 이제 이 데이터를 바탕으로 AI에게 코드를 만들어 달라고 할 차례입니다.

저는 AI에게 단순히 “만들어줘”라고 하지 않고, 테스트 화면 캡처본결과 XML 파일을 그대로 전달했습니다. “첨부된 이미지를 보고 나라장터 입찰공고를 가져오는 파이썬 코드를 만들어줘”라고 요청하는 방식이죠.

이렇게 하면 AI는 API 가이드를 보지 않고도 우리가 원하는 데이터 구조를 한눈에 파악합니다. 이것이 바로 제가 지향하는 ‘바이브 코딩’의 핵심입니다.

나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력
나라장터 입찰공고 검색기 만들기를 위한 정보입력

2. VS Code에서 코드 실행하기

AI가 코드를 생성해주면, 이제 우리만의 작업 공간으로 가져와야 합니다.

  1. 파일 만들기: VS Code를 실행하고 새 파이썬 파일을 만듭니다. 저는 나라장터입찰공고.py라고 이름 지었습니다.
  2. 코드 복사/붙여넣기: AI가 짜준 코드를 그대로 복사해서 넣습니다.
  3. 인증키 입력: 코드 중간에 service_key를 입력하는 부분이 있습니다. 여기에 지난번 발급받은 Decoding 인증키를 따옴표 안에 정확히 입력합니다.

3. 내 입맛에 맞게 코드 튜닝하기

AI가 처음 준 코드는 데이터만 쓱 가져오는 단순한 형태일 수 있습니다. 저는 조금 더 편하게 사용하기 위해 ‘상호작용 기능’을 추가해 달라고 다시 요청했습니다.

“사용자가 직접 공고명, 조회 시작일시, 조회 종료일시를 입력할 수 있게 코드를 수정해줘.”

이렇게 수정하면 매번 코드를 고칠 필요 없이, 프로그램을 실행할 때마다 내가 원하는 키워드로 실시간 검색이 가능해집니다.

✅ 아래는 위의 절차대로 만든 최종 코드입니다.

import requests


def search_nara_market():
    print("=== 🔍 나라장터 입찰공고 검색기 (최종 수정본) ===")
    keyword = input("검색할 공고명을 입력하세요: ")  # 예: 실시설계
    start_date = input("조회 시작일시 (예: 202604290000): ")
    end_date = input("조회 종료일시 (예: 202604292359): ")

    # 1. 인증키 설정 (반드시 'Decoding' 키 사용!)
    service_key = "본인의 API키를 입력하세요"

    # 2. 베이스 URL (테스트 성공 주소와 동일하게 수정)
    base_url = "https://apis.data.go.kr/1230000/ad/BidPublicInfoService/getBidPblancListInfoServcPPSSrch"

    # 3. 파라미터 구성 (이름을 테스트 화면과 100% 일치시킴)
    params = {
        'serviceKey': service_key,
        'pageNo': '1',
        'numOfRows': '10',
        'inqryDiv': '1',             # 조회구분
        'inqryBgnDt': start_date,    # 시작일시 (기존 오류 수정)
        'inqryEndDt': end_date,      # 종료일시 (기존 오류 수정)
        'bidNtceNm': keyword,        # 입찰공고명
        'type': 'json'
    }

    print("\n📡 데이터를 불러오는 중입니다...")

    try:
        # requests가 한글 인코딩을 알아서 처리해줍니다.
        response = requests.get(base_url, params=params)

        # 만약 또 Unexpected errors가 뜨면 아래 줄의 주석을 풀고 URL을 확인해보세요.
        # print(f"DEBUG URL: {response.url}")

        if "Unexpected errors" in response.text:
            print("❌ 서버 에러: 파라미터 이름은 맞으나 인증키 인식 문제일 수 있습니다.")
            return

        data = response.json()
        items = data.get('response', {}).get('body', {}).get('items', [])

        if not items:
            print(f"🔍 '{keyword}'에 대한 검색 결과가 없습니다.")
            return

        print(f"✅ 총 {len(items)}건의 공고를 찾았습니다.\n")
        print("=" * 60)

        for item in items:
            title = item.get('bidNtceNm')
            instt = item.get('ntceInsttNm')
            date = item.get('bidNtceDt')
            url = item.get('bidNtceDtlUrl')

            print(f"📌 공고명: {title}")
            print(f"   🏛 기관: {instt} | 📅 일시: {date}")
            print(f"   🔗 링크: {url}")
            print("-" * 60)

    except Exception as e:
        print(f"😱 오류 발생: {e}")


if __name__ == "__main__":
    search_nara_market()

4. 에러 해결: AI와 함께 ‘삽질’ 탈출하기

코딩을 하다 보면 한 번에 성공하는 경우는 드뭅니다. 저 역시 에러를 만났는데요. 이때 당황하지 않는 것이 중요합니다.

❌ 에러 발생 시 대처법

에러 메시지를 캡처하거나 텍스트를 그대로 복사해서 AI에게 던지세요. “이런 에러가 나는데 왜 그럴까?”라고 물으면 AI가 답을 찾아줍니다.

🔍 제가 겪은 사례

저의 경우, AI가 API 명세에 있는 정확한 입력 인자(Parameter) 이름을 쓰지 않고 자기 마음대로 이름을 지어서 ‘Unexpected errors’가 발생했었습니다.

  • 원인: inqryBgnDt라는 약속된 이름 대신 다른 이름을 사용함
  • 해결: 에러 메시지를 계속 분석하게 했더니 최종적으로 AI가 파라미터 불일치를 찾아내어 수정해 주었습니다.

여러분도 에러가 나면 입력 인자(Parameter)의 명칭이 API 테스트 화면과 일치하는지 꼭 다시 살펴보라고 명령해 보세요!

5. 마치며: 여러분도 할 수 있습니다!

총 3회에 걸쳐 나라장터 입찰공고 검색기를 만들어봤습니다. 처음엔 막막해 보였던 API와 파이썬 코딩도 AI라는 든든한 조력자와 함께라면 충분히 해낼 수 있습니다.

이제 여러분의 입맛에 맞게 프로그램을 업그레이드해 보세요. ‘바이브 코딩’으로 여러분의 업무를 자동화하는 기쁨을 꼭 누려보시길 바랍니다!

궁금한 사항이나 만들고 싶은 프로그램이 있으면 댓글로 부탁드려요

본문 하단 광고 구역