📝"claude code로 공인중개사 매물 관리 자동화 시스템 만들어보기 "
일요일 스터디 후에 바이브코딩이 아닌 다른곳에 클로드코드를 사용하는 예시들을 보고 그동안 너무 갇힌 시각으로 AI를 사용했다는 생각이 들었습니다.
그래서 이것저것 알아보다가 또 제 시선을 확~끄는게 생겨서 이렇게 글을 안올리면 다른 관심사에 빠져서 스터디 끝날때까지 하나도 만들지 못할거 같아서 우선 급하게 1편부터.....
항상 생각의 꼬리에 꼬리를 물고 가면 다른걸 보지 못하는 성향 때문에 한동안 바이브 코딩에 빠져서 본업인 부동산 업무도 소홀히 하고 (처음에 AI에 관심을 가진건 부동산 업무를 자동화 하기 위함이었는데 ...) 같이 일하는 사람들한테 그동안의 미안한 마음을 갚는 마음으로 제대로 만들어 보기로 결심을 해봅니다. (본업에서 쓸만하게 만들면 제대로 만드는거겠죠?)
✅ 자동화시 저만의 체크 point
반복되는 업무가 어떤것이 있는지 생각한다.-> 반복되는 업무를 행동단위로 쪼개본다.-> 병목구간이 있는지 생각해본다.->자동화로 문제해결이 되는지 더 큰 문제들이 발생할수 있는 요인이 있는지 생각해본다. 위의 체크포인트로 생각해 보니 첫 업무 자동화는 매물 관리 자동화가 가장 적합 한거 같아서 이걸로 정합니다.
사실 위와 같이 클로드와도 심층대화를 며칠에 걸쳐서 하고 제미나이, GPT와도 했습니다. AI들은 고객상담이나 계약관련한걸 이야기 했는데 곰곰히 고민해보니 앞에 사례들은 실수가 있거나 문제가 생기면 금전적인 손해를 동반하기에 우선 매물 자동화로 정해봅니다.
1. 도입부 (Hook)
## 🎯 문제 상황
- 주 업무가 비 주거용 부동산이 전문임 .
- 주거용과 비교해서 매물 확인시 찾아봐야 할게 많음
- 매일 반복되는 매물 확인 작업
- 네이버 부동산, 건축물대장 ,기존의 매물장등 을 비교 분석해야 함.
- 중복 매물, 허위 매물 걸러내는 데 너무 많은 시간 소요.
- "이걸 자동화할 수 없을까?"라는 고민에서 시작
needs:
- "자동으로 매물을 모아서 보여줬으면 좋겠어"
- "중복은 알아서 제거"
- "가격이 바뀐 매물을 바로 확인"2. 프로젝트 개요
## 🚀 만들고자 하는 것
- 매물 자동 수집 봇
- 중복/허위 매물 필터링 시스템
- 일일 매물 리포트 자동 생성
- 기존 매물장과 비교
- 매물들의 히스토리 관리
- 자동으로 매물의 정보들 입력 및 보고서 작성3. PRD.md 작성
## 📋 PRD.md (Product Requirements Document)
### 3.1 프로젝트 정의
- 프로젝트명: PropertyBot
- 목표 사용자: 일일 매물 확인에 지친 공인중개사
- 핵심 가치: 시간 절약, 정확도 향상
### 3.2 주요 기능 명세
#### Feature 1: 매물 자동 수집
- 네이버 부동산 크롤링
- 지역별/가격대별/층수/평형/주차등 필터링
#### Feature 2: 중복 제거
- 주소 기반 중복 체크
- 가격/면적 유사도 분석
- 허위 매물 패턴 감지
- 허위 매물 많은 업소 관리
#### Feature 3: 리포트 생성
- 일일 신규 매물 요약
- 가격 변동 매물 추적
- 이메일/노션 자동 발송 (카카오톡)
- 건축물 대장등 내용과 주소 기반 하여 같은 매물 일시 병합
### 3.4 성공 지표
- 일일 매물 수집량: 100건 이상
- 중복 제거 정확도: 95% 이상4. 기능 명세서
: 클로드에게 PRD를 기반으로 한 스켈레톤 만들어 달라고 요청하여 세부 사항 확인하여 수정
4.1 Feature 1: 매물 자동 수집
yaml
기능명: auto_property_collector
우선순위: P0 (필수)
개발일정: Week 1-2
상세_기능:
데이터_소스:
- 네이버 부동산 API/크롤링
- 건축물대장 API/크롤링
- 네이버 지도 API/크롤링
수집_주기:
- 기본: 30분 간격
- 심야: 2시간 간격 (00:00 - 06:00)
- 긴급: 수동 실행 가능
필터링_옵션:
지역:
- 시/도 선택
- 구/군 선택
- 동 선택 (최대 5개)
가격:
- 매매가: 최소/최대 설정
- 전세가: 최소/최대 설정
- 월세: 보증금/월세 구간
면적:
- 전용면적: 최소/최대 (㎡)
- 공급면적: 최소/최대 (㎡)
- 평형대: 10평대, 20평대, 30평대 등
층수:
- 저층 (1-3층)
- 중층 (4-10층)
- 고층 (11층 이상)
- 특정층 제외 (예: 4층)
건물_유형:
- 오피스텔
- 상가
- 빌라
- 상가주택
- 사무실
- 건물
- 토지
기술_스펙:
- 언어: Python 3.9+
- 라이브러리: BeautifulSoup4, Requests, Selenium
- 에러처리: 3회 재시도, 실패시 알림4.2 Feature 2: 중복 제거 시스템
yaml
기능명: duplicate_remover
우선순위: P0 (필수)
개발일정: Week 2-3
상세_기능:
중복_판별_기준:
1단계_필터:
- 주소 완전 일치
- 면적 + 층수 일치
- 가격 일치 (오차 범위 내)
2단계_필터:
- 주소 유사도 90% 이상
- 가격 오차 범위 ±5%
- 면적 오차 범위 ±9㎡
3단계_필터:
- 이미지 유사도 검사
- 설명문 유사도 검사
허위_매물_감지:
패턴_분석:
- 시세 대비 15% 이하 가격
- 일반적이지 않은 조건
신뢰도_점수:
- 0-30점: 허위 의심 (빨간색 표시)
- 31-70점: 확인 필요 (노란색 표시)
- 71-100점: 신뢰 가능 (초록색 표시)
성능_목표:
- 중복 제거 정확도: 95% 이상
- 처리 속도: 100건당 5초 이내
- 오탐율: 5% 이하4.3 Feature 3: 리포트 생성 및 알림
yaml
기능명: report_generator
우선순위: P1 (중요)
개발일정: Week 3-4
상세_기능:
리포트_유형:
일일_리포트:
- 발송시간: 매일 오전11시
- 내용:
- 신규 매물 요약
- 가격 변동 매물
- 관심 매물 업데이트
- 시장 동향 간단 분석
주간_리포트:
- 발송시간: 매주토요일 오전 9시
- 내용:
- 주간 매물 통계
- 가격 트렌드 분석
- 인기 매물 TOP 10
긴급_알림:
- 조건: 관심 지역 급매물 등록
- 발송: 즉시
발송_채 널:
이메일:
- HTML 템플릿
- 매물 이미지 포함
- 클릭 가능한 링크
노션:
- 매물정보 DATABASE로 전송
- 실시간 업데이트
- 필터링/정렬 기능
- 매물 비교 기능
카카오톡: (추후 구현 )
- 알림톡 API 연동
- 요약 정보 + 상세 링크
웹_대시보드: (추후 구현)
- 실시간 업데이트
- 필터링/정렬 기능
- 매물 비교 기능4.4 Feature 4: 공공 데이터 통합
yaml
기능명: public_data_integration
우선순위: P2 (선택)
개발일정: Week 4-5
상세_기능:
건축물대장:
수집_정보:
- 건축년도
- 총 세대수
- 주차대수 (자주식 유무 )
- 승강기 유무
- 건물 구조
- 연면적
- 바닥면적
- 건축면적
- 대지면적
- 용도
활용_방안:
- 매물 정보 보강
- 노후도 자동 계산
- 주차 가능 대수 표시
- 층당 면적 자동 계산
- 건물 총 면적 자동 계산
실거래가_정보:
수집_정보:
- 최근 5년 실거래 내역
- 평균 거래가격
- 거래량 추이
활용_방안:
- 시세 비교 제공
- 적정가 판단 지원
- 가격 협상 근거 제공
- 빠른 매물 검색
API_연동:
- Notion API
- 구글 API
- 국토교통부 실거래가 API
- 건축물대장 API
- 네이버 지도 API
- 토지대장 API (Phase 2)5. 기술 스택
5.1 백엔드
yaml
언어: Python 3.9+
프레임워크: FastAPI
주요_라이브러리:
크롤링:
- BeautifulSoup4: HTML 파싱
- Selenium: 동적 페이지 크롤링
- Requests: HTTP 요청
데이터베이스:
- PostgreSQL: 메인 DB
- SQLAlchemy: ORM
- Alembic: 마이그레이션
스케줄링:
- APScheduler: 작업 스케줄링
- Celery: 비동기 작업 (선택)
알림:
- SendGrid: 이메일 발송5.2 프론트엔드 (대시보드)
yaml
프레임워크: React (선택사항)
UI_라이브러리: Ant Design
주요_기능:
- 실시간 매물 목록
- 필터링/정렬
- 매물 상세 보기
- 통계 차트5.3 인프라
yaml
개발_환경:
- Docker: 컨테이너화
- Docker Compose: 로컬 개발
배포_환경:
- AWS EC2 / Naver Cloud (선택)
- PostgreSQL RDS
- S3: 이미지 저장
모니터링:
- Logging: Python logging
- APM: Sentry (선택)6. 데이터베이스 스키마
sql
-- 매물 정보 테이블
CREATE TABLE properties (
id SERIAL PRIMARY KEY,
source VARCHAR(50) NOT NULL, -- 'naver'
source_id VARCHAR(100) UNIQUE,
-- 위치 정보
address VARCHAR(255) NOT NULL,
address_detail VARCHAR(255),
latitude DECIMAL(10, 8),
longitude DECIMAL(11, 8),
-- 매물 정보
property_type VARCHAR(50), -- '상가', '오피스텔', '빌라', '상가주택', '사무실', '건물', '토지'
transaction_type VARCHAR(20), -- '매매', '전세', '월세', '단기임대'
price_sale BIGINT,
price_deposit BIGINT,
price_monthly INTEGER,
-- 면적 정보
area_exclusive DECIMAL(6, 2), -- 전용면적
area_supply DECIMAL(6, 2), -- 공급면적
-- 층수 정보
floor INTEGER,
total_floors INTEGER,
-- 기타 정보
room_count INTEGER,
bathroom_count INTEGER,
direction VARCHAR(20),
built_year INTEGER,
-- 메타 정보
is_duplicate BOOLEAN DEFAULT FALSE,
trust_score INTEGER DEFAULT 50,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_checked_at TIMESTAMP
);
-- 가격 변동 이력 테이블
CREATE TABLE price_history (
id SERIAL PRIMARY KEY,
property_id INTEGER REFERENCES properties(id),
price_type VARCHAR(20),
old_price BIGINT,
new_price BIGINT,
changed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 사용자 관심 매물 테이블
CREATE TABLE user_interests (
id SERIAL PRIMARY KEY,
user_id INTEGER,
property_id INTEGER REFERENCES properties(id),
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);6. API 명세
6.1 매물 수집 API
yaml
endpoint: POST /api/properties/collect
description: 수동으로 매물 수집 트리거
request:
{
"source": "naver",
"filters": {
"location": "강남구",
"price_min": 5000000,
"price_max": 10000000000000,
"area_min": 59,
"area_max": 85
}
}
response:
{
"status": "success",
"collected": 45,
"duplicates": 12,
"new": 33
}6.2 매물 조회 API
yaml
endpoint: GET /api/properties
description: 필터링된 매물 목록 조회
parameters:
- page: 1
- limit: 20
- sort: created_at_desc
- filters: {...}
response:
{
"total": 156,
"page": 1,
"data": [
{
"id": 1,
"address": "강남구 역삼동",
"price": 850000000,
"area": 84.5,
...
}
]
}7. 성공 지표 (KPI)
7.1 정량적 지표
yaml
필수_달성_목표:
- 일일 매물 수집량: 100건 이상
- 중복 제거 정확도: 95% 이상
선택_달성_목표:
- 허위 매물 감지율: 80% 이상
7.2 정성적 지표
사용자 업무 시간 단축 체감
매물 정보의 신뢰도 향상
고객 응대 품질 개선
8. 개발 일정
8.1 마일스톤
yaml
Phase 1 (Week 1-2): MVP 개발
- 네이버 부동산 크롤러
- 기본 중복 제거
- 데이터베이스 구축
Phase 2 (Week 3-4): 핵심 기능
- 고급 필터링
- 리포트 생성
- 이메일 알림
Phase 3 (Week 5-6): 고도화
- 공공 데이터 연동
- 대시보드 개발
- 성능 최적화
Phase 4 (Week 7-8): 안정화
- 버그 수정
- 사용자 피드백 반영
- 배포 및 모니터링9. 리스크 관리
9.1 기술적 리스크
yaml
리스크_1:
내용: 웹사이트 크롤링 차단
영향도: 높음
대응방안:
- User-Agent 로테이션
- IP 프록시 사용
- 요청 간격 랜덤화
리스크_2:
내용: 대량 데이터 처리 성능
영향도: 중간
대응방안:
- 데이터베이스 인덱싱
- 캐싱 전략 수립
- 비동기 처리
리스크_3:
내용: API 제한 및 변경
영향도: 높음
대응방안:
- 여러 데이터 소스 확보
- API 버전 관리
- 폴백 메커니즘10. 향후 계획
10.1 Phase 2 기능 (3-6개월)
AI 기반 매물 추천
고객 CRM 연동
계약서 자동 생성
스켈레톤을 처음부터 끝까지 꼼꼼히 본다고 봤는데도 만들어 나가면서 수정할 부분들이 많이 생길거 같은 느낌이 드네요.
나머지는 2편으로 이어서 쓰겠습니다. 어느정도 까지 구현이 가능할지 저도 궁금하네요. :)