부동산 실거주 종합 리포트 GPTs 만들기
네이버 검색 API × SerpAPI 연동 실습
— cURL부터 OpenAPI 스키마, 실제 산출물 예시까지
00. 실습 개요 — 무엇을 만드는가
이 실습은 네이버 검색 API를 SerpAPI로 연동해, 특정 지역·아파트명을 입력하면 블로그·카페 후기를 자동 수집·정리해 실거주 분석 리포트를 생성하는 Custom GPT(GPTs)를 만든다. 코드는 작성하지 않는다 — cURL을 ChatGPT로 OpenAPI 스키마로 변환하고, 그 스키마를 Actions에 붙여 챗봇화한다.
핵심 흐름은 4단계다 — cURL 확보 → 스키마 변환 → 스키마 입력·테스트 → 실행·공유. 결과물은 교통·생활 인프라·환경·단지 상태·실거주 만족도를 후기 기반으로 균형 있게 정리한 리포트다.
01. GPTs 기본 설정
'GPT 탐색(Explore GPTs)' → 우측 상단 'Create' → Configure 탭에서 아래 기본 사항을 설정한다.
| 기본 설정 | 입력값 |
|---|---|
| Name | 부동산 실거주 종합 리포트 |
| Description | 네이버 검색 API를 활용하여 실거주 후기 중심 부동산 분석 리포트 생성 GPT |
| Capabilities | 없음 |
| Knowledge | 없음 |
02. Actions로 외부 API 연결 — 인증 방식
API(Application Programming Interface)는 프로그램끼리 정해진 규칙으로 정보를 공유하는 도구다. Configure의 Actions에서 인증(Authentication)을 설정하며, 보안 강도는 None < API Key < OAuth 순이다.
| 방식 | 설명 |
|---|---|
| None | 별도 인증 불필요 |
| API Key | 고유 API 키를 입력해 인증 (본 실습 사용) |
| OAuth | 사용자가 직접 로그인하는 방식 |
03. STEP 1 · SerpAPI 기반 cURL 확보
SerpAPI에서 'Naver Search API' → 'Naver Web Organic Results' → 하단 스크롤 → 복사 버튼으로 cURL을 확보한다(Ctrl+F로 'NAVER' 검색 시 편리).

-d engine="naver" \
-d query="Coffee" \
-d where="web" \
-d api_key="123!@#"
cURL을 붙여넣은 후 마지막 줄을 -d api_key="123!@#" 로 변경한다(키 자리표시자).
04. STEP 2 · cURL → OpenAPI 3.1.0 스키마 변환
[OpenAPI 3.1.0 스키마 변환 조건], [cURL]
2. GET 요청으로 변환
3. 모든 파라미터는 query parameter로 작성
4. api_key는 securitySchemes 사용 금지, 반드시 query parameter에 포함
5. api_key 값은 default 값으로 직접 포함 (예: "123!@#")
6. components.schemas에 최소 1개 이상 properties 포함
7. 응답 스키마도 함께 작성
8. 실행 가능한 완성된 JSON만 출력
05. STEP 3 · 스키마 입력 및 완성
생성된 JSON을 복사 → Actions 스키마에 입력 → 오류 발생 시 오류 내역을 ChatGPT에 입력 → 새 답변 재입력. 그 후 API Key를 Description 값에 동일하게 입력(Ctrl+F로 '123!@#' 찾기) → 'Test' 클릭 → 정상 작동 확인 → 'Create'로 최종 생성한다.
아래는 위 조건으로 ChatGPT가 생성한 완성 스키마 전문이다. 이 JSON을 통째로 복사해 Custom GPT의 Actions 스키마 영역에 붙여넣으면 된다.
| 스키마 구성 | 내용 |
|---|---|
| servers.url | https://serpapi.com |
| path | /search (GET, operationId getNaverSearch) |
| 필수 파라미터 | engine(naver) · query · api_key |
| 선택 파라미터 | where(web) · num · start · output(json·html) |
| 응답 스키마 | NaverSearchResponse — search_metadata · search_parameters · search_information · organic_results(단건 객체 ∪ 배열, oneOf) |
| OrganicResult 필드 | position · title · link · source · displayed_link · snippet |
api_key default 값은 반드시 본인이 SerpApi에서 발급받은 실제 키로 교체해야 한다. 키는 외부 노출 금지 자격증명이므로, 게시·공유용 문서에는 절대 실제 키를 적지 않는다(본 예시는 자리표시자로 마스킹함). 'Test' 통과를 위해 Description 값에도 동일한 키를 입력한다. api_key의 "YOUR_SERPAPI_KEY" 자리에 본인 발급 키를 넣어 사용한다. cURL 변환 조건상 securitySchemes를 쓰지 않고 query parameter default에 키를 두는 구조다."openapi": "3.1.0",
"info": {
"title": "SerpApi 네이버 검색 API",
"description": "SerpApi를 통해 네이버 웹 검색 결과(organic_results)를 조회하는 API입니다.",
"version": "1.0.0"
},
"servers": [
{
"url": "https://serpapi.com"
}
],
"paths": {
"/search": {
"get": {
"operationId": "getNaverSearch",
"summary": "네이버 검색 결과 조회",
"description": "engine을 naver로 고정하여 네이버 웹 검색 결과를 조회합니다.",
"parameters": [
{
"name": "engine",
"in": "query",
"required": true,
"description": "검색 엔진 식별자. 네이버 검색은 naver로 고정합니다.",
"schema": {
"type": "string",
"default": "naver"
}
},
{
"name": "query",
"in": "query",
"required": true,
"description": "검색어를 입력합니다.",
"schema": {
"type": "string",
"default": "Coffee"
}
},
{
"name": "where",
"in": "query",
"required": false,
"description": "검색 영역을 지정합니다. 웹 문서 검색은 web 입니다.",
"schema": {
"type": "string",
"default": "web"
}
},
{
"name": "num",
"in": "query",
"required": false,
"description": "페이지당 결과 수(선택).",
"schema": {
"type": "integer"
}
},
{
"name": "start",
"in": "query",
"required": false,
"description": "결과 시작 오프셋(선택).",
"schema": {
"type": "integer"
}
},
{
"name": "output",
"in": "query",
"required": false,
"description": "응답 형식을 지정합니다. json 또는 html.",
"schema": {
"type": "string",
"enum": [
"json",
"html"
],
"default": "json"
}
},
{
"name": "api_key",
"in": "query",
"required": true,
"description": "SerpApi 인증키입니다. 실제 발급받은 키로 교체해야 합니다.",
"schema": {
"type": "string",
"default": "YOUR_SERPAPI_KEY"
}
}
],
"responses": {
"200": {
"description": "검색 성공 응답입니다.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/NaverSearchResponse"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"NaverSearchResponse": {
"type": "object",
"additionalProperties": false,
"properties": {
"search_metadata": {
"$ref": "#/components/schemas/SearchMetadata"
},
"search_parameters": {
"$ref": "#/components/schemas/SearchParameters"
},
"search_information": {
"$ref": "#/components/schemas/SearchInformation"
},
"organic_results": {
"description": "네이버 웹 검색 결과입니다. 단건 객체 또는 배열 모두 대응합니다.",
"oneOf": [
{
"$ref": "#/components/schemas/OrganicResult"
},
{
"type": "array",
"items": {
"$ref": "#/components/schemas/OrganicResult"
}
}
]
}
}
},
"SearchMetadata": {
"type": "object",
"additionalProperties": false,
"properties": {
"id": {
"type": "string",
"description": "검색 요청 고유 ID."
},
"status": {
"type": "string",
"description": "검색 처리 상태."
},
"created_at": {
"type": "string",
"description": "요청 생성 시각."
},
"processed_at": {
"type": "string",
"description": "처리 완료 시각."
},
"naver_url": {
"type": "string",
"description": "원본 네이버 검색 URL."
},
"total_time_taken": {
"type": "number",
"description": "총 처리 소요 시간(초)."
}
}
},
"SearchParameters": {
"type": "object",
"additionalProperties": false,
"properties": {
"engine": {
"type": "string",
"description": "사용된 검색 엔진."
},
"query": {
"type": "string",
"description": "요청에 사용된 검색어."
},
"where": {
"type": "string",
"description": "요청에 사용된 검색 영역."
}
}
},
"SearchInformation": {
"type": "object",
"additionalProperties": false,
"properties": {
"organic_results_state": {
"type": "string",
"description": "검색 결과 수집 상태."
}
}
},
"OrganicResult": {
"type": "object",
"additionalProperties": false,
"properties": {
"position": {
"type": "integer",
"description": "검색 결과 순위."
},
"title": {
"type": "string",
"description": "결과 제목."
},
"link": {
"type": "string",
"description": "결과 링크 URL."
},
"source": {
"type": "string",
"description": "출처명."
},
"source_icon": {
"type": "string",
"description": "출처 아이콘 URL."
},
"displayed_link": {
"type": "string",
"description": "화면 표시용 링크."
},
"snippet": {
"type": "string",
"description": "본문 요약 텍스트."
}
}
}
}
}
}
06. STEP 4 · 실행 및 공유
- 블로그/카페 후기 중심으로 교통, 생활 인프라, 주변 환경, 단지 상태, 실제 만족도를 균형 있게 정리할 것
- 광고성 내용은 제외할 것
공유 범위는 플랜에 따라 다르다 — 초대된 사용자 / 팀 플랜 링크 보유자 / 팀 구성원 / 링크 보유자 / GPT Store 공개. 팀 플랜에서 GPT Store 내 검색 노출 설정이 가능하다.
07. 실제 산출물 예시 — 후기 기반 종합 리포트
본 GPTs에 아크로 서울포레스트 실거주 후기 기반으로 리포트 만들어주세요 - 블로그/카페 후기 중심으로 교통, 생활 인프라, 주변 환경, 단지 상태, 실제 만족도를 균형 있게 정리할 것 - 광고성 내용은 제외할 것를 입력해 생성된 결과 전문이다. 네이버 웹 검색 후기를 SerpApi로 수집해 항목별로 종합한 출력 형태를 그대로 보여준다.
단지 개요
- 위치 : 서울특별시 성동구 왕십리로 83-21, 성수동1가 685-700 일대
- 브랜드 : DL이앤씨 하이엔드 브랜드 '아크로' 적용 단지
- 규모·특징 : 총 280세대, 고층 주상복합형 하이엔드 아파트로 검색 결과상 116㎡~344㎡(약 35~104평) 등 중대형·대형 면적 중심으로 확인됨
- 복합단지 구성 : 주거 2개 동과 업무시설 디타워, 판매·문화시설이 결합된 복합 주거문화공간 성격
- 입지 핵심 : 서울숲 인접, 성수동 상권 접근성, 일부 세대의 한강·서울숲 조망, 초고가 임대·매매 사례가 반복적으로 언급됨
※ 본 리포트는 네이버 웹 검색의 실거주 후기, 사전점검 후기, 호갱노노·집품 등 플랫폼 정보, 블로그·커뮤니티·언론 보도를 종합한 후기 기반 자료입니다. 중개·매물 홍보성 표현은 배제하고 반복적으로 확인되는 의견 위주로 정리했으며, 직접 거주자 후기 표본은 제한적입니다.
1. 교통 환경 평가
- ① 서울숲역·성수권 접근성 반복 언급 — 호갱노노·집품에 교통·편의시설 정보 노출, 지하철·강변북로·성수대교 등 도심·강남권 이동성 장점 평가 다수
- ② 강남·압구정·한남·도심 접근 수요에 유리 — 땅집고 "역 하나면 압구정로데오역", 성수대교·강변북로·동부간선·올림픽대로 접근성 반복 언급
- ③ 차량 중심 고소득·전문직 수요에 입지 체감 양호 — 차량 이동·강남 접근·성수 업무문화권 병행 수요에 적합 의견 다수
- ① 성수·서울숲 일대 주말 혼잡 체감 — "서울숲·핫플 밀집으로 주말 사람 많고 혼잡" 후기 요약
- ② 초역세권 대단지형보다 고급 주상복합 입지 성격 — 280세대 규모, 단지 내 완결형보다 성수·서울숲 외부 인프라 활용형
- ③ 출퇴근 시간 엘리베이터 혼잡 의견 — 집품 후기 요약에서 단점으로 언급
2. 생활 인프라 평가
- ① 성수동 상권·카페·맛집·문화시설 접근성 — 핫플레이스·서울숲 카페거리·맛집·문화시설 접근성 장점 반복 언급
- ② 단지 내·인접 복합시설 이용 편의 — 주거·업무·판매·문화 결합 복합단지, 생활 편의·문화 접근성 강점 평가
- ③ 서울숲 생활권 자체가 큰 인프라 — 산책·여가·반려동물·주말 라이프스타일 만족도 높을 수 있다는 평가 다수
- ① 대형마트·전통 생활형 상권은 수요에 따라 아쉬움 — 트렌디 카페·식음·문화 상권 강하나 대단지 주거지형 생활상권과 체감 차이
- ② 주말·행사·관광 외부 유동인구 부담 가능성 — 상권 인기 자체는 장점이나 주말 혼잡·소음 호불호
- ③ 관리비·생활비 부담 후기 — "관리비 비쌈, 월 100만 원 내외" 의견(면적·사용량·계절별 차이)
3. 주변 환경 및 입지 체감
- ① 서울숲 인접성이 가장 큰 실거주 만족 요소 — 조망·접근성·숲세권 이미지 반복 언급
- ② 일부 세대 한강·서울숲 조망 기대감 큼 — 블로그·언론에서 조망·커뮤니티 조망 장점 소개(동·층·향별 차이 큼)
- ③ 성수동 브랜드 이미지·희소성 높게 평가 — 초고가 매매·임대 사례, 유명 인사 거주 언급, 성수동 대장주 이미지
- ① 일부 조망은 향후 개발·층수·동 배치에 따라 기대와 다를 수 있음 — "일부 층 이상만 가능", 향후 한강뷰 변화 언급
- ② 고층 주상복합 특유의 바람·냉난방·프라이버시 체감 — "바람 센 날 하수구 냄새", "겨울에 춥다", 프라이버시 아쉬움(세대·층·설비별 차이)
- ③ 슈퍼카·외부 방문객 등 소음 의견 — "슈퍼카 많아 간혹 시끄럽다" 후기 요약
4. 단지 설계 및 커뮤니티 평가
- ① 하이엔드 마감·층고·개방감 긍정 — "신축, 층고 높다" 반응, 통창·개방감·고급 마감·조망 설계 반복 언급
- ② 커뮤니티 시설 기대·평가 높음 — 입주민 커뮤니티·문화예술 공간·29층 커뮤니티, 피트니스·클럽라운지·게스트룸·골프연습장 언급
- ③ 세대당 주차 여건 고급 단지 수준 — 주차대수 750대, 세대당 약 2.67대 소개 자료 확인
- ① 소규모 세대수로 커뮤니티 운영비·관리비 부담 가능성 — 280세대 하이엔드 특성상 고급 커뮤니티가 관리비 부담으로 이어질 수 있다는 후기
- ② 엘리베이터 혼잡·층간소음 아쉬움 — "출퇴근 시간 엘리베이터 혼잡", "층간소음 생각보다 있다" 의견
- ③ 업무동 디타워 진동 이슈 보도 이력 — 2022년 디타워 진동 신고·당국 점검 보도 다수. 연합뉴스에 DL이앤씨가 점검 결과 안전성과 무관하다는 취지 설명 보도 병존. 주거동·업무동 구분 필요
5. 실제 만족도 종합
- 서울숲·성수동 입지 체감, 한강·서울숲 조망 가능성
- 하이엔드 브랜드·고급 마감·높은 층고·개방감
- 강남·압구정·도심 접근성, 성수동 상권·문화시설 편의
- 희소성 있는 초고가 주거지 이미지
- 적합 수요 : 서울숲·성수 라이프스타일 선호 1~3인 고소득 가구, 강남·도심·성수 빈번 이동 전문직·기업가·연예인·외국인 임차, 학군보다 희소성·조망·프라이버시·커뮤니티·브랜드 중시 수요
- 관리비 부담
- 주말 서울숲·성수 상권 혼잡
- 출퇴근 시간 엘리베이터 혼잡 가능성
- 일부 세대 냉난방·바람·프라이버시 체감 차이
- 층간소음 관련 일부 후기
- 학군 중심 수요에게는 강남·목동·대치권 대비 선호 갈릴 수 있음
6. 종합 평가
한 줄 평가 — 서울숲·성수동 라이프스타일, 조망, 하이엔드 브랜드, 희소성을 중시하는 수요에게 만족도가 높게 평가되는 초고가 주상복합이나, 관리비·혼잡·학군·생활비 부담은 호불호가 갈릴 수 있는 단지임.
- 서울숲·한강 조망과 성수 문화상권을 일상으로 누리려는 수요
- 하이엔드 보안·커뮤니티·마감·브랜드 중시 수요
- 강남·압구정·한남·도심 접근성 함께 보는 고소득 실거주
- 자녀 학군보다 생활권·자산 희소성·프라이버시 우선 수요
- 관리비·생활비에 민감한 수요
- 대단지형 조경·놀이터·학교 중심 가족 수요
- 주말 혼잡·외부 유동인구·성수 상권 소음 부담 수요
- 전통적 명문 학군 최우선 수요
후기 기반 핵심 키워드 요약
| 항목 | 평가 |
|---|---|
| 교통 | 서울숲·성수권 접근성과 강남·압구정 이동성은 장점으로 평가됨. 다만 주말·출퇴근 혼잡 체감 의견 존재 |
| 생활 인프라 | 성수동 카페·맛집·문화상권 접근성 우수 평가. 대형 생활형 상권 선호 수요는 호불호 가능 |
| 공원·환경 | 서울숲 인접성이 핵심 장점. 산책·여가·조망 만족 기대가 큼 |
| 학군 체감 | 인근 학교 언급은 있으나, 대치·목동형 학군 프리미엄과는 성격이 다르다는 평가 존재 |
| 신축 쾌적성 | 2020년대 준공 하이엔드 단지로 고급 마감·층고·개방감 긍정 평가가 많음 |
| 커뮤니티 | 29층 커뮤니티, 피트니스·라운지·게스트룸·골프연습장 등 고급 커뮤니티 기대감 높음 |
| 실거주 만족 기대 | 서울숲·성수 라이프스타일, 조망, 브랜드, 희소성을 중시하면 만족도 높을 가능성 |
| 초기 혼잡 가능성 | 주말 서울숲·성수 상권 유동인구, 엘리베이터 혼잡, 관리비 부담 의견 존재 |
| 관리비 | 월 100만 원 내외 등 부담스럽다는 후기 존재. 세대·면적·사용량별 차이 큼 |
| 소음·프라이버시 | 슈퍼카 소음, 외부 유동인구, 일부 프라이버시 관련 아쉬움 의견 존재 |
참고한 후기 유형
- 실거주 후기 플랫폼 : 집품 실거주 후기·평점·단점 요약
- 아파트 정보 플랫폼 : 호갱노노, 직방 주변정보·교통·학교·상권 정보
- 사전점검·매물 블로그 : 사전점검 내부 공개, 37·38·62·75평 등 매물 소개 글
- 커뮤니티 반응 : 디시인사이드, 더쿠, MLBPARK 등 일부 언급
- 언론 보도 : 땅집고, 동아일보, 매일경제, 연합뉴스, 중앙일보, 한국경제 등
출처 참고 — 수집된 organic_results 주요 link
- 집품 실거주 후기·시세 : https://zippoom.com/부동산/서울-성동구-성수동1가-아크로서울포레스트/76jxlv
- 호갱노노 단지 정보 : https://hogangnono.com/apt/b5mb9
- 직방 단지 정보 : https://www.zigbang.com/home/apt/danjis/38299
- 사전점검 블로그 : https://blog.naver.com/wonho5637771/222125201955
- 커뮤니티 소개 블로그 : https://blog.naver.com/khy0909072/223372805086
- 교통·학군·상권 블로그 : https://blog.naver.com/gangnam7945/223951519307
- 땅집고 입지·가격 기사 : https://realty.chosun.com/site/data/html_dir/2023/09/14/2023091401276.html
- 동아일보 커뮤니티 시설 기사 : https://www.donga.com/news/article/all/20170526/84567587/2
- 매일경제 분양현장 기사 : https://www.mk.co.kr/news/realestate/7904950
- 연합뉴스 디타워 진동 점검 보도 : https://www.yna.co.kr/view/AKR20220121146200003
- 중앙일보 진동 신고 보도 : https://www.joongang.co.kr/article/25042503
- 뉴스1 경매·실거주 관련 보도 : https://www.news1.kr/realestate/construction/5328801
※ 광고성 분양 홍보 콘텐츠는 배제, 반복 의견 위주 정리. 직접 실거주 후기는 표본이 제한적이므로, 실제 계약·입주 판단 전에는 동·층·향·관리비 고지서·커뮤니티 운영 현황·주말 현장 혼잡도를 별도로 확인하는 것이 바람직합니다.
08. 실습 체크리스트
- GPTs Name·Description을 설정하고 Capabilities·Knowledge를 '없음'으로 두었는가
- SerpAPI에서 Naver Web Organic Results의 cURL을 복사했는가
- cURL 마지막 줄을
-d api_key="123!@#"자리표시자로 변경했는가 - 스키마 변환 조건 4·5(api_key를 query parameter default로)를 프롬프트에 명시했는가
- 생성 JSON을 Actions 스키마에 입력하고, 오류 시 메시지 전체로 전체 JSON 재요청했는가
- 스키마의 api_key default를 본인 발급 키로 교체하고, 게시·공유본에는 실제 키를 남기지 않았는가
- API Key를 Description 값에 동일 입력하고 'Test'로 정상 작동을 확인했는가
- 실행 프롬프트에 "광고성 내용은 제외할 것"을 포함했는가
- 후기 기반 정성 결과를 공식 통계로 교차 검증해 해석했는가
09. 참고 링크
- 검색APISerpAPI — https://serpapi.com/
'인공지능과 오토메이션' 카테고리의 다른 글
| 구글 시트를 "대시보드 웹앱"으로 만들기 - 클로드 코드 실전 가이드 (0) | 2026.06.02 |
|---|---|
| MCP·노코드 자동화 완전 정복 (0) | 2026.05.27 |
| VOC 정성 데이터 분석 & SciSpace 논문 검색 (0) | 2026.05.18 |
| 생성 AI와 ChatGPT를 활용한문서 작성 및 데이터 분석 〈상편〉 (0) | 2026.05.18 |
| 프롭테크가 바라본 AI 시대 — 디스코의 관점과 실험 (0) | 2026.05.15 |