PetOK
반려동물 동반 조건을 우리 아이 기준으로 판정하는 지도입니다. 헛걸음 없이 다녀오세요.
PetOK — 헛걸음 없이 다녀오세요
이름은 단순합니다. 우리 아이가 여기 가도 OK인지. 펫프렌들리라는 말만 보고 찾아갔다가, 테라스만 가능하고 7kg 제한이고 맹견은 안 된다는 안내를 현장에서 듣는 일이 너무 흔합니다. 그 헛걸음을 지도 앞에서 끝내 보려는 웹 서비스입니다.
한국관광공사 반려동물 동반여행 정보와 고캠핑 데이터를 우리 DB에 적재한 뒤, 조건 원문을 파싱해 내 아이 기준으로 갈 수 있는지 판정합니다. 가능/불가의 이분법이 아니라 실내인지 야외인지, 체중·체고가 되는지, 확인이 더 필요한지까지 신호등으로 보여 줍니다.
2026 관광데이터 활용 공모전 「반려동물 동반 관광」 지정과제 출품작입니다.
1. 기획 배경
공사 데이터에는 「일부 구역 가능」, 「소형견만」, 「목줄·배변봉투 지참」 같은 문장이 그대로 들어 있습니다. 일부가 어디인지, 소형이 몇 kg인지는 사용자가 현장에서 깨닫는 일이 많습니다.
더 내부적인 함정도 있었습니다. 조건 텍스트를 확신 없이 「불가」로 채우면 지도는 깨끗해 보이지만, 서비스는 거짓말을 하게 됩니다. 정보가 없는 것(null)과 불가(denied)는 다른 값이라는 원칙을 먼저 박았습니다. 확신할 수 없으면 비워 두고, UI에는 「확인 필요」로 남깁니다.
또 하나. 목줄·배변봉투·입마개는 대부분 장소가 요구합니다. 이걸 판정에 넣으면 거의 모든 곳이 「조건부」가 되어 신호등이 무의미해집니다. 판정 축은 구역과 개체 조건(맹견/체중/체고/크기)만 두고, 준비물은 별도 체크리스트로만 보여 줍니다.
2. 핵심 기능
지도와 신호등
공사·고캠핑 공식 장소 약 4,150곳을 네이버 지도 위에 올립니다. 갈 수 있음 / 확인 필요 / 갈 수 없음을 색과 아이콘(체크·물음표·엑스)으로 같이 표시합니다. 사용자가 등록한 장소에는 신호등을 안 줍니다 — 회색 핀입니다. 전국 줌에서는 서버 클러스터가 비율 링으로 보여 줍니다.

내 아이 기준 판정
비로그인에는 소형견을 기본값으로 볼 수 있습니다. 로그인하면 이름·크기·체중·체고·맹견 여부를 남겨 개체별로 판정합니다. 다견가구는 가장 제약이 큰 값을 대표로 보이되, 아이별 결과를 병기합니다. 판정 문구에는 반려동물 이름이 들어갑니다. 「코코와 갈 수 있는지 확실하지 않아요」처럼.

근거 원문
파싱 결과만 내밀지 않습니다. 공사·고캠핑에 적힌 문장을 그대로 보여 주어, 해석이 틀렸을 때 사용자가 스스로 판단할 수 있게 합니다.
발도장·조건 정정
갔던 곳에 사진·한 줄을 남길 수 있습니다. 조건이 달랐다면 제보할 수 있고, 여러 방문자가 같은 필드를 갈리면 판정에 반영됩니다. 좋아요·인기도는 판정이나 정렬에 넣지 않습니다.
공유 링크
장소마다 /p/{id} 주소가 있습니다. 「여기 코코랑 갈 수 있대」 하고 링크를 던질 수 있습니다.
3. 기술 스택
| 영역 | 기술 |
|---|---|
| Frontend | Next.js App Router, React, TypeScript, Tailwind CSS |
| 지도 | 네이버 지도 JavaScript API, supercluster |
| Backend | Next.js Route Handler, 독립 실행 배치 스크립트 |
| DB | PostgreSQL + PostGIS |
| 인증 | Auth.js, 카카오 |
| 이미지 | Cloudflare R2 (발도장 사진) |
| 배포 | VPS, nginx, PM2 |
런타임 요청 경로에서 공사 API를 치지 않습니다. 검색·필터는 적재된 조건 컬럼 위에서만 가능하고, 심사 당일 API가 장애 나도 서비스는 동작해야 합니다.
4. 아키텍처와 동작 방식
데이터 파이프라인
매일 새벽 크론이 공사·고캠핑을 가져옵니다. 공사는 일 1,000회 한도가 있어 이미 받은 건은 체크포인트로 건너뛰고, 고캠핑은 목록을 다시 받아 업서트합니다. 원본 raw는 통째로 보관합니다.
조건 텍스트는 룰 파서가 읽습니다. LLM을 쓰지 않습니다. 미매칭은 소수이고, 예외는 수기 보정합니다. 고캠핑은 구조화된 enum이라 매핑 테이블이 다릅니다. 이름이 비슷하고 100m 안에 있는 공사 행은 고캠핑 쪽으로 duplicate_of를 답니다. 합치지는 않습니다.
판정 엔진
판정은 UI가 아닌 순수 함수입니다. 구역 소스가 없으면 불가, 보조견 전용·맹견 금지·체중·체고·크기 제한을 차례로 보고, 그다음에야 조건부·가능으로 나갑니다. 준비물은 여기 들어오지 않습니다.
지역 필터는 공사 areacode를 쓰지 않습니다. 46% 결측이라 좌표 반경만 쓰습니다.
SEO
장소별 고유 URL, 사이트맵, Open Graph, JSON-LD를 둡니다. 판정은 개체마다 달라 검색 스니펫에 「동반 가능」이라고 박지 않습니다.
5. 이런 분께
- 강아지랑 카페·숙박·캠핑을 가기 전, 실내가 되는지 확인하고 싶을 때
- 체중·체고 제한 때문에 거절당한 적이 있을 때
- 공사·고캠핑 원문을 그냥 읽지 않고 내 아이 기준으로 보고 싶을 때
- 갔던 곳을 발도장으로 남기고 싶을 때
6. 맺음말
PetOK은 공공데이터를 「내 아이는?」라는 질문으로 번역한 지도입니다. 펫프렌들리라는 단어를 믿지 않고, 갈 수 있는지 확실치 않은 곳은 그렇게 말합니다. 그 정직함이 헛걸음을 줄인다고 봅니다.
서비스로 이동해서 직접 사용해 볼 수 있습니다.
서비스 바로가기