나라장터 입찰공고를 파이썬으로 다루는 가장 현실적인 방법은 공공데이터포털에서 조달청 나라장터 오픈API 활용신청을 하고, 발급받은 인증키로 입찰공고 정보를 조회하는 방식이에요. 화면을 그대로 긁어오는 크롤링보다 응답 구조가 정해져 있어 유지보수가 쉽고, 조회 기간과 조건을 파라미터로 넘길 수 있어 반복 수집에 유리해요. 이 글은 나라장터 입찰공고를 처음 다루는 실무자를 기준으로 신청 절차와 호출 구조, 자주 막히는 지점을 순서대로 정리해요.
한눈에 보기
나라장터 오픈API는 조달청이 공공데이터포털을 통해 제공하는 조회형 데이터 인터페이스예요. 나라장터 화면에서 사람이 직접 눌러 보던 입찰공고, 계약, 낙찰 같은 정보를 정해진 주소와 파라미터로 요청하고, 결과를 XML이나 JSON으로 돌려받는 구조예요. 화면을 흉내 내는 방식이 아니라 데이터를 달라고 요청하는 방식이라고 이해하면 쉬워요.
나라장터 api python 조합으로 검색하는 분들이 가장 먼저 궁금해하는 것은 결국 어디서 키를 받고 어떤 주소로 요청하는가예요. 파이썬을 쓰는 이유도 단순한데, 받아온 결과를 표로 정리하고 특정 품목이나 기관만 걸러내고 정해진 시각에 자동으로 돌리는 일을 짧은 코드로 처리할 수 있기 때문이에요. 호출 자체는 requests 같은 라이브러리로 충분하고, 가공이 필요하면 pandas를 함께 쓰는 경우가 많아요.
전체 흐름은 아래와 같아요.
- 공공데이터포털 회원가입 후 나라장터 관련 오픈API 활용신청
- 승인 후 인증키 확인
- 요청 주소에 파라미터와 인증키를 붙여 호출
- 응답을 파싱해 파일이나 데이터베이스에 저장
- 신규 공고만 골라 알림이나 리포트로 연결
여기까지 이해하면 나머지는 세부 설정의 문제예요. 아래에서 영역별 차이와 절차를 하나씩 풀어볼게요.
나라장터 오픈API는 어떤 영역으로 나뉘나요
오픈API는 하나의 거대한 창구가 아니라 업무 영역별로 나뉘어 제공돼요. 그래서 처음에는 내가 다루려는 정보가 어느 영역에 속하는지부터 정하는 게 좋아요.
| 구분 | 주로 담긴 정보 | 실무 활용 예 |
|---|---|---|
| 입찰공고 정보 | 공사·물품·용역·외자 입찰공고의 제목, 기관, 마감 일시 등 | 신규 공고 수집, 마감 임박 공고 추림 |
| 계약 정보 | 계약 상대방, 계약 금액, 계약 일자 등 | 거래처 파악, 시장 규모 참고 |
| 낙찰 정보 | 개찰 결과와 낙찰자 정보 | 경쟁 구도와 낙찰 흐름 확인 |
| 발주계획 정보 | 앞으로 발주될 사업 계획 | 사전 영업 대상 발굴 |
표에 적힌 항목은 영역을 이해하기 위한 예시이고, 실제로 어떤 항목까지 제공되는지는 각 오픈API의 상세 문서에서 확인해야 해요. 같은 입찰공고라도 공사, 물품, 용역, 외자처럼 대상에 따라 조회 기능이 나뉘어 있는 경우가 많아요. 원하는 공고가 어느 분류에 들어가는지 헷갈린다면, 나라장터 화면에서 같은 조건으로 먼저 검색해 보고 그 결과와 API 결과를 비교하는 방법이 빠른 확인법이에요.
시작 전에 준비할 것
- 공공데이터포털 계정: 활용신청과 인증키 확인에 필요해요.
- 활용 목적 정리: 어떤 공고를, 어떤 주기로, 어디에 쓸지 간단히 적어 두면 신청서 작성이 빨라져요.
- 인증키 보관 방식: 코드에 그대로 적지 말고 환경변수나 별도 설정 파일로 분리하는 편이 안전해요.
- 파이썬 실행 환경: requests는 기본으로 쓰고, 표 가공이 필요하면 pandas를 더해요.
- 저장 위치: 파일, 스프레드시트, 데이터베이스 중 어디에 쌓을지 미리 정해 두면 중복 관리가 쉬워요.
특히 인증키는 사람의 아이디와 비밀번호에 준하는 값이에요. 공개 저장소에 올리면 그대로 노출되니, 처음부터 환경변수로 빼 두는 습관을 권해요. 신청서에 적는 활용 목적도 대충 쓰기보다 실제 업무 흐름대로 적는 편이 이후 수정 요청을 줄여줘요.
단계별 방법: 활용신청부터 첫 호출까지
- 공공데이터포털에 로그인하고 검색창에 나라장터 또는 입찰공고를 입력해요.
- 검색 결과에서 필요한 오픈API를 고르고 상세 페이지를 열어 제공 항목과 요청 변수를 확인해요.
- 활용신청 버튼을 눌러 활용 목적, 활용 시스템, 운영 환경 같은 항목을 작성해요.
- 승인된 뒤 마이페이지의 활용신청 현황에서 인증키를 확인해요.
- 상세 페이지의 요청 주소와 오퍼레이션 목록을 보고, 필요한 기능의 주소를 조합해요.
- 인증키, 페이지 번호, 건수, 응답 형식, 조회 기간을 파라미터로 붙여요.
- 브라우저 주소창에 요청 주소를 붙여 넣어 응답이 정상으로 오는지 먼저 확인해요.
- 정상 응답을 확인한 뒤 같은 주소를 파이썬 코드로 옮기고, 반복과 저장 로직을 붙여요.
브라우저에서 먼저 확인하는 단계를 건너뛰면, 문제가 인증키 때문인지 파라미터 때문인지 구분하기 어려워져요. 코드를 쓰기 전에 주소 한 줄로 정상 응답을 보는 습관이 결국 시간을 아껴줘요. 응답이 오류라면 본문에 적힌 안내 문구를 먼저 읽어 보세요. 원인을 꽤 구체적으로 알려주는 경우가 많아요.
파이썬 코드는 어떻게 구성하나요
호출 자체는 길지 않아요. 인증키를 환경변수에서 읽고, 파라미터를 딕셔너리로 만들고, 요청 주소에 붙여 보내면 끝이에요. 아래는 구조를 이해하기 위한 예시예요.
import os
import requests
SERVICE_KEY = os.environ["G2B_SERVICE_KEY"]
URL = "공공데이터포털 상세 페이지에 안내된 요청 주소"
params = {
"serviceKey": SERVICE_KEY,
"pageNo": 1,
"numOfRows": 10,
"type": "json",
}
res = requests.get(URL, params=params, timeout=30)
data = res.json()
body = data["response"]["body"]
items = body["items"]
실제 요청 주소와 파라미터 이름은 오픈API마다 다르니, 위 코드는 뼈대로만 봐 주세요. 조회 기간이나 품목 같은 조건 파라미터는 상세 문서의 요청 변수 목록에서 이름을 확인해 그대로 넣으면 돼요. 인증키를 이미 인코딩된 형태로 받았다면 다시 인코딩하지 않도록 주의해야 해요. 이 부분에서 오류가 나는 경우가 은근히 많아요.
응답을 다룰 때 자주 만나는 지점이 몇 가지 있어요. 결과가 하나뿐일 때 목록 항목이 리스트가 아니라 객체 하나로 오는 경우가 있어서, 두 형태를 모두 처리할 수 있게 코드를 쓰는 편이 안전해요. 또 전체 건수를 나타내는 값과 현재 페이지를 비교해 반복을 멈추는 조건을 꼭 넣어야 하고요. 같은 공고가 기간을 옮겨 가며 조회하면 여러 번 잡힐 수 있으니, 공고 번호를 기준으로 중복을 걸러내는 처리가 필요해요. 마지막으로 호출 사이에 짧은 대기를 넣어 두면 서버와 내 쪽 모두 부담이 줄어요.
상황별 선택: 화면 검색과 오픈API
| 상황 | 추천 방식 | 이유 |
|---|---|---|
| 가끔 공고를 눈으로 확인 | 나라장터 화면 검색 | 조건 입력과 공고문 확인이 바로 됨 |
| 매일 신규 공고를 모아야 함 | 오픈API | 자동 수집과 중복 제거가 쉬움 |
| 특정 품목·기관만 추적 | 오픈API와 조건 필터 | 조건을 코드로 고정할 수 있음 |
| 지난 공고를 모아 분석 | 오픈API와 저장소 | 기간을 나눠 반복 수집 가능 |
| 공고문 원문과 첨부 확인 | 나라장터 화면 병행 | 문서 열람은 화면이 편함 |
오픈API가 항상 정답은 아니에요. 공고문 원문을 읽고 판단하는 일은 여전히 화면에서 하는 게 빠르고, API는 그 앞단에서 확인할 대상을 줄여주는 역할에 가까워요. 그래서 실무에서는 API로 후보를 모으고 최종 판단은 나라장터 화면에서 하는 조합이 자주 쓰여요.
주의할 점
- 인증키 노출: 공개 저장소에 올리지 말고 환경변수로 관리하세요.
- 호출 한도: 개발용과 운영용 계정의 허용량이 달라요. 한도를 넘기면 오류가 돌아오니 수집 주기와 건수를 조정하거나 운영용 전환을 검토하세요.
- 조회 기간: 너무 긴 기간을 한 번에 요청하면 응답이 느려지거나 일부가 빠질 수 있어요. 기간을 잘게 나눠 반복하는 편이 안정적이에요.
- 종료 조건: 전체 건수와 현재 페이지를 비교해 멈추는 조건을 넣지 않으면 같은 요청을 계속 반복하게 돼요.
- 변경 공고: 마감 일시나 조건이 바뀌는 공고가 있어요. 공고 번호를 기준으로 갱신하고, 변경된 항목이 있으면 따로 표시해 두세요.
- 응답 형식: 형식을 지정해도 오류 상황에서는 다른 형식으로 응답이 올 수 있어요. 상태 코드와 본문을 함께 확인하세요.
- 이용 조건: 공공데이터 이용약관과 출처 표시 기준을 확인하고, 수집한 데이터를 어떻게 쓸지 내부 기준을 정해 두세요.
자주 묻는 질문
인증키는 어디서 발급받나요?
공공데이터포털에서 나라장터 관련 오픈API를 찾은 뒤 상세 페이지의 활용신청을 통해 받아요. 신청서에 활용 목적과 시스템 정보를 적고 승인을 받으면 마이페이지의 활용신청 현황에서 인증키를 확인할 수 있어요. 사용 목적에 따라 개발용과 운영용이 나뉘는 경우가 있으니 필요한 쪽으로 신청하면 돼요.
활용료를 따로 내야 하나요?
공공데이터포털을 통해 제공되는 오픈API는 별도 이용료 없이 활용신청만으로 쓰는 경우가 일반적이에요. 다만 호출 한도와 이용 조건이 정해져 있으니, 실제 업무에 쓰기 전에 해당 오픈API의 안내 문구를 꼭 확인하세요.
크롤링과 무엇이 다른가요?
크롤링은 화면 구조가 바뀌면 코드도 함께 고쳐야 하지만, 오픈API는 정해진 요청 변수와 응답 형식을 쓰기 때문에 상대적으로 안정적이에요. 대신 오픈API는 제공되는 항목과 조회 조건의 범위 안에서만 데이터를 받을 수 있다는 차이가 있어요.
응답이 JSON이 아니라 XML로 보여요.
요청 파라미터에 응답 형식을 지정하는 항목을 넣었는지 먼저 확인해 보세요. 형식을 지정했는데도 오류가 나면 다른 형식으로 응답이 올 수 있으니, 상태 코드와 본문 내용을 함께 보는 습관이 좋아요.
실시간 알림도 만들 수 있나요?
오픈API는 조회형이라 먼저 요청해야 데이터를 주는 구조예요. 그래서 정해진 주기로 신규 공고를 조회하고, 이전에 저장해 둔 공고 번호와 비교해 새로 등장한 항목만 골라내는 방식으로 알림을 구성하게 돼요.
출처
- 공공데이터포털: https://www.data.go.kr/
- 나라장터: https://www.g2b.go.kr/
- 조달청: https://www.pps.go.kr/
입찰공고 알림 서비스 안내
공고를 매번 직접 검색해 확인하는 일이 부담된다면, 조건을 등록해 두고 새 공고가 올라올 때 안내를 받는 방식이 효율적이에요. noos 입찰공고 알림 서비스는 관심 품목과 기관, 지역 같은 조건을 저장해 두고 새로 등록된 나라장터 공고를 놓치지 않도록 안내해 드려요. 오픈API로 직접 수집하는 방식과 함께 활용하면 확인해야 할 공고를 훨씬 줄일 수 있어요.