OpenAPI
공공 CCTV 데이터를 불러와 YOLO로 실시간 분석하는 기술
CLICK TO OPEN
공공 CCTV 데이터를 불러와 YOLO로 실시간 분석하는 기술
CLICK TO OPEN
🔌 MCP — AI한테 새 능력을 더해주는 USB
↑ 유명한 예시 — ChatGPT가 "세종대왕 맥북프로 던짐 사건"을 진지하게 지어낸 답변
ChatGPT한테 "조선왕조실록에 기록된 세종대왕의 맥북프로 던짐 사건"처럼 황당한 질문을 하면? 옛날 AI는 진지하게 가짜 역사를 만들어냄. "1434년에 세종대왕이 이동식 활자 제작에 어려움을 겪어…" 같은 그럴듯한 거짓말
이게 바로 할루시네이션(환각) — 시험 문제 모를 때 답 찍어서 그럴듯하게 쓰는 것과 똑같음
↑ AI를 Tool(도구)에 연결하면 진짜 정보를 가져옴
AI를 진짜 기상청에 연결시켜주면 됨
↑ 옛날 API는 도구(자물쇠)마다 다른 열쇠가 필요했음
AI랑 연결하고 싶은 프로그램이 너무 많은데, 각자 다른 방법으로 연결하면 너무 복잡해짐. Gmail, 슬랙, 캘린더, 지도, 피그마, 구글드라이브… 전부 다른 열쇠 필요
↑ MCP 허브에 도구들을 꽂으면 AI(Claude)가 한 번에 다 씀
스마트폰·노트북·이어폰 옛날엔 충전 케이블이 다 달라서 불편했죠? 요즘은 대부분 USB-C 하나면 끝. 모두가 같은 모양으로 약속했기 때문
MCP도 똑같음 — "이렇게 연결하자!"라고 정해놓은 약속(표준)
| 비교 | 옛날 방식 😵 | MCP 방식 😊 |
|---|---|---|
| 연결 | 프로그램마다 다 다름 | 모두 똑같은 방법 |
| 만들기 | 매번 새로 만들어야 함 | 한 번만 만들면 됨 |
| 사용 | 어려움 | 쉬움 |
"프로토콜"이 뭐야? 우편 봉투처럼 "보내는 사람 왼쪽 위·받는 사람 오른쪽 아래" 이렇게 정해놓은 규칙. MCP도 그냥 AI랑 도구를 연결하는 규칙일 뿐
내가 사용법을 몰라도 AI가 대신 해주는 것
준비물 · Claude 데스크탑 앱 (claude.ai → 다운로드)
따라하기 (예: 컨텍스트7 MCP 연결)
Smithery 사이트 방문 (MCP 모아놓은 마켓) — 무려 6,341개이제 "넥스트JS로 새 웹사이트 만드는 방법 찾아줘" 하면 진짜 최신 정보를 찾아서 알려줌
어려울 것 같지? 사실 진짜 쉬움. fastmcp 라이브러리로 5줄
from fastmcp import FastMCP
mcp = FastMCP("내가 만든 MCP")
@mcp.tool()
def add(a: int, b: int) -> int:
return a + b
이게 끝. 두 숫자를 더해주는 MCP. AI한테 "1 + 5를 내 MCP로 계산해줘"라고 하면 AI가 내가 만든 MCP를 호출해서 6을 가져옴
더 발전시키면?
MCP가 좋긴 한데 컴퓨터 잘 모르는 사람한테 설명하기 어려움. 엄마·아빠한테 "터미널 열고 명령어 치고…" 이러면 곤란
Porter AI · ChatGPT처럼 웹사이트에서 클릭만 하면 MCP를 쓸 수 있게 해줌
| AI 모델 | 방대한 텍스트·이미지로 학습돼 사람처럼 답하는 인공지능 두뇌 (ChatGPT·Claude·Gemini 같은 친구) |
|---|---|
| 할루시네이션 | AI가 모르는 걸 아는 척 거짓말하는 것 |
| 도구(Tool) | AI가 사용할 수 있는 프로그램들 |
| MCP | AI랑 도구를 연결해주는 약속 (USB-C 같은 것) |
| 프로토콜 | 정해진 규칙 |
| Porter AI | MCP를 쉽게 쓰게 해주는 웹사이트 |
API 키 발급 · CCTV 스트림 · YOLO 탐지 · 함수로 정리
API 개요 & 키 설정
API 개요 & 키 설정
📡 서비스 흐름 (Service Flow)
ITS API 주요 파라미터
| 파라미터 | 설명 | 예시 |
|---|---|---|
apiKey | 발급받은 인증 키 | db5c00dc... |
type | 도로 유형 | its (일반도로) / ex (고속도로) |
minX / maxX | 경도 범위 | 120.95 ~ 127.02 |
minY / maxY | 위도 범위 | 30.55 ~ 37.69 |
getType | 응답 형식 | json |
API URL 구조
CCTV 스트림 가져오기
CCTV 스트림 URL 받아오기
urllib로 API 호출 → JSON 응답 → pandas DataFrame 변환 → CCTV URL 선택
단계별 흐름
① 인증 키 → ② 도로 유형·영역 → ③ URL 조립 → ④ 요청 → ⑤ bytes→str 디코딩 → ⑥ JSON 파싱 → ⑦ DataFrame 변환 → ⑧ CCTV URL 선택
전체 코드
핵심 함수 설명
• urllib.request.urlopen(url) — 인터넷 주소에 "자료 주세요" 편지 보내고, 답장 봉투(response) 받기
• response.read().decode("utf-8") — 봉투 열어서 컴퓨터 글자(bytes) → 한글 글자(str) 풀기
• json.loads(json_str) — 글자 묶음을 파이썬이 알아듣는 사전(dict) 모양으로 정리
• pd.json_normalize(data) — 복잡하게 겹친 사전을 엑셀처럼 평평한 표(DataFrame)로 펴기
YOLO로 실시간 탐지
YOLO + ITS
ITS API CCTV URL → cv2.VideoCapture 연결 → 프레임 반복 → YOLO로 차량·사람 탐지
CCTV → cv2 → YOLO 연결 흐름
포인트
• cv2.VideoCapture(URL) — 웹캠 번호(0,1...) 대신 스트림 URL → IP 카메라·CCTV 동일 처리
• cap.isOpened() — 스트림 살아있는 동안 while 반복
• cv2.WINDOW_NORMAL — 창 크기 마우스 조절 가능 (기본은 고정 크기)
• q 키 종료 — waitKey(1) & 0xFF == ord("q") 패턴, 1ms 대기 + 키 비트 추출
• cap.release() + destroyAllWindows() — 자원 반환 필수, 안 하면 다음 실행 시 카메라 잠김
함수로 정리하기
함수 분리 & 재사용
반복되는 API 호출 코드를 def its_cctv() 함수로 묶음 → 다른 파일에서 import 한 줄로 CCTV URL 획득
함수 정의 (v16_04_cctv_its_def.py)
함수 가져와서 YOLO 통합 (v16_05_cctv_its_def_yolo.py)
함수화의 장점
• 재사용 — 다른 파일 import 한 줄로 사용
• 매개변수 — cctv_index 값만 바꿔 원하는 CCTV 선택
• 가독성 — 메인 로직에서 API 세부 코드 은닉 → 깔끔
• 유지보수 — API 주소·키 바뀌어도 함수 1곳만 수정
알라딘 Open API
알라딘 Open API — 도서 검색·베스트셀러·신간
알라딘이 제공하는 도서 관련 Open API. 키워드로 책을 검색하거나 베스트셀러·신간 목록을 가져올 수 있습니다.
API 키 발급
• 알라딘 Open API 신청: https://blog.aladin.co.kr/openapi/popup/6695306
• API 문서(구글 Docs): https://docs.google.com/document/d/1mX-WxuoGs8Hy-QalhHcvuV17n50uGI2Sg_GHofgiePE
베스트셀러 조회 예시
기상청 날씨 API
공공데이터포털 — 기상청 단기예보 API
기상청이 제공하는 초단기·단기 날씨 예보 데이터. 공공데이터포털(data.go.kr)에서 무료로 키를 발급받아 사용합니다.
API 키 발급
• 공공데이터포털: https://www.data.go.kr
• 검색: "기상청 단기예보" → 활용신청 → Service Key 발급
단기예보 조회 예시
카카오 로컬 API
카카오 Local API — 장소 검색·주소 변환
카카오가 제공하는 장소 검색, 좌표-주소 변환 API. REST API 키 하나로 카카오맵·카카오톡 등 다양한 카카오 서비스에 연동 가능합니다.
API 키 발급
• 카카오 개발자: https://developers.kakao.com
• 앱 생성 → 앱 키 → REST API 키 복사
장소 검색 예시
네이버 검색 API
네이버 Open API — 뉴스·책·쇼핑 검색
네이버 검색 결과를 API로 가져옵니다. Client ID와 Client Secret 2가지 API 키를 헤더에 담아 사용합니다.
API 키 발급
• 네이버 개발자: https://developers.naver.com
• 애플리케이션 등록 → Client ID / Client Secret 발급 (API 키)
뉴스 검색 예시
검색 타입별 엔드포인트
• 뉴스: /v1/search/news.json
• 책: /v1/search/book.json
• 쇼핑: /v1/search/shop.json
• 블로그: /v1/search/blog.json