본문 바로가기

콩's AI

🏗️ Cursor AI로 10분만에 만드는 GUI 프로그램 : 건축물대장 3편

반응형

🎯 드디어 첨부된 파이썬 소스를 활용해, 누구나 따라할 수 있는 건축물대장 조회 GUI 프로그램을 완성합니다! 비개발자도 쉽게 이해할 수 있도록 단계별로 안내하는 최종 완성편입니다.

 


🏆 시리즈 완주! 지금까지의 여정

1편: 공공데이터포털 API 신청 및 설정
2편: 파이썬과 Cursor AI로 데이터 받아오기
🎯 3편: GUI 프로그램 실전 완성 ← 지금 여기!


📋 1. 준비물 및 환경 세팅 체크리스트

🛠️ 필수 프로그램 설치

🐍 Python 설치

  • Python 3.8 이상 권장 (최신 버전 사용 시 호환성 최고)
  • 설치 시 "Add to PATH" 체크 필수!

📦 필수 라이브러리 한 번에 설치

# 🔥 복사해서 명령 프롬프트에 붙여넣기
pip install PyQt5 pandas requests PublicDataReader --upgrade

🔑 API 서비스키 준비

  • 공공데이터포털 발급 인증키 (1편 참조)
  • ⚠️ 중요: 키 없이는 데이터 조회 불가능

🖥️ 2. 첨부 소스 구조 완벽 분석

🎨 GUI 프로그램 주요 기능

우리가 완성할 GUI 프로그램은 PyQt5 기반으로 다음과 같은 강력한 기능들을 포함합니다:

🔍 검색 기능

  • 건축물대장 유형 선택 (콤보박스로 쉽게 선택)
  • 지역 정보 입력 (시군구/읍면동/대지구분/번/지)
  • 원클릭 조회 버튼으로 간편 검색

📊 결과 표시

  • 실시간 데이터 테이블 표시
  • 페이지네이션 (이전/다음/직접 페이지 선택)
  • 진행상황 표시 및 친절한 오류 안내

성능 최적화

  • 스레드 처리로 대용량 데이터도 끊김 없이 조회
  • 중복 클릭 방지 시스템
  • 메모리 효율적 데이터 처리

🏗️ 프로그램 아키텍처

📁 GUI 프로그램 구조
├── 🎛️ 입력 패널 (검색 조건)
├── 🔍 조회 버튼 (API 호출)
├── 📊 결과 테이블 (데이터 표시)
├── 📄 페이지 네비게이션
└── 💬 상태 메시지 (진행/완료/오류)

🎯 3. 첨부 소스 실행 완벽 가이드

📁 STEP 1: 소스 파일 준비

파일 다운로드 및 저장

📂 작업 폴더 생성
├── 📄 building_ledger_gui.py (메인 프로그램)
├── 📄 requirements.txt (라이브러리 목록)
└── 📁 data/ (결과 저장용)

🔧 STEP 2: 환경 설정

라이브러리 설치 확인

# 📋 설치 상태 확인
pip list | findstr "PyQt5 pandas requests PublicDataReader"

# ❌ 누락된 라이브러리가 있다면 재설치
pip install PyQt5 pandas requests PublicDataReader --force-reinstall

🔑 STEP 3: API 키 설정

소스 코드 내 키 입력

# 🔍 소스 파일에서 아래 부분을 찾아 수정
class BuildingLedgerApp:
    def __init__(self):
        # 🔑 여기에 본인의 API 키 입력
        self.service_key = "여기에_발급받은_서비스키_입력"

🚀 STEP 4: 프로그램 실행

실행 명령어

# 📂 프로그램이 있는 폴더로 이동 후
python building_ledger_gui.py
반응형

🎉 성공 시 화면

  • "건축물대장 정보 조회" 창이 나타남
  • 입력란, 버튼, 결과 테이블이 깔끔하게 배치
  • 상단에 조회 조건, 하단에 결과 표시


🎮 4. GUI 프로그램 사용법 마스터하기

🔍 검색 기능 완전 정복

1️⃣ 건축물대장 유형 선택

유형 설명 활용도

기본개요 건축물 기본 정보 ⭐⭐⭐⭐⭐
총괄표제부 상세 건축 정보 ⭐⭐⭐⭐
표제부 개별 건축물 상세 ⭐⭐⭐

2️⃣ 검색 정보 정확히 입력하기

🏘️ 입력 예시
├── 시군구명: "성남시분당구" 또는 "분당구"
├── 읍면동명: "백현동"
├── 대지구분: "대지" (대지/산/블록 중 선택)
├── 번: "540" (선택사항)
└── 지: "1" (선택사항)

3️⃣ 스마트 조회 시스템

# 🧠 프로그램이 자동으로 처리하는 과정
입력값 검증 → 지역코드 변환 → API 호출 → 결과 표시
     ↓              ↓           ↓         ↓
"분당구백현동" → 시군구코드변환 → 데이터수신 → 테이블출력

📊 결과 화면 활용법

데이터 테이블 기능

  • 🔍 컬럼 정렬: 헤더 클릭으로 오름차순/내림차순
  • 📏 컬럼 크기 조정: 경계선 드래그로 너비 변경
  • 📋 행 선택: 클릭으로 특정 건축물 정보 선택

페이지네이션 마스터

📄 페이지 이동 방법
├── ⬅️ "이전" 버튼: 이전 페이지로
├── ➡️ "다음" 버튼: 다음 페이지로
├── 🔢 페이지 입력: 원하는 페이지 번호 직접 입력
└── 📊 "총 N개 결과 중 N~N 표시" 현재 상태 확인

💡 5. 초보자를 위한 실전 활용 팁

성공적인 검색을 위한 체크리스트

🔍 입력값 검증 가이드

# ✅ 올바른 입력 예시
시군구명: "성남시분당구" ✅
읍면동명: "백현동" ✅
대지구분: "대지" ✅

# ❌ 잘못된 입력 예시
시군구명: "분당" ❌ (너무 짧음)
읍면동명: "백현" ❌ (동 누락)
대지구분: "" ❌ (필수 입력)

🚫 자주 하는 실수와 해결법

문제 상황 원인 해결법

🔴 "데이터가 없습니다" 검색 조건이 너무 구체적 번/지 입력 제거 후 재검색
🔴 "API 호출 실패" 서비스키 오류 키 재확인 및 공백 제거
🔴 "지역 코드 없음" 지역명 오타 정확한 행정구역명 입력
🔴 프로그램 멈춤 대용량 데이터 처리 잠시 대기 (스레드 처리 중)

🔧 고급 활용 기능

📊 데이터 내보내기

# 💾 검색 결과를 파일로 저장하는 방법
def save_results_to_file():
    # CSV 형태로 저장
    df.to_csv("건축물대장_결과.csv", encoding='utf-8-sig', index=False)
    
    # Excel 형태로 저장
    df.to_excel("건축물대장_결과.xlsx", index=False)
    
    print("💾 파일 저장 완료!")

🔄 대량 검색 자동화

# 🚀 여러 지역을 한 번에 검색하는 고급 기능
search_areas = [
    ("성남시분당구", "백현동"),
    ("성남시분당구", "정자동"),
    ("성남시분당구", "수내동")
]

for sigungu, dong in search_areas:
    result = search_building_data(sigungu, dong)
    save_result(f"{sigungu}_{dong}_결과.csv", result)

🤖 6. Cursor AI와 함께하는 스마트 유지보수

🛠️ 코드 개선 요청 예시

🗣️ 자연어로 쉽게 요청

💬 Cursor AI에게 이렇게 말해보세요:

"이 함수 설명해줘"
→ 코드 동작 원리를 한국어로 상세 설명

"버그 찾아서 고쳐줘"
→ 오류를 자동으로 탐지하고 수정 제안

"로딩 화면 추가해줘"
→ 사용자 경험 개선을 위한 기능 추가

"테스트 코드 만들어줘"
→ 프로그램 안정성 검증 코드 자동 생성

🔧 실제 개선 사례

# 🔍 원본 코드
def search_data():
    result = api.call()
    return result

# ✨ Cursor AI 개선 후
def search_data_improved():
    """건축물 데이터를 안전하게 검색합니다."""
    try:
        # 로딩 상태 표시
        self.show_loading(True)
        
        # API 호출
        result = api.call()
        
        # 결과 검증
        if result is None or result.empty:
            self.show_message("검색 결과가 없습니다.")
            return None
            
        return result
        
    except Exception as e:
        self.show_error(f"검색 중 오류 발생: {str(e)}")
        return None
        
    finally:
        # 로딩 상태 해제
        self.show_loading(False)

🚀 7. 실무 활용 및 확장 아이디어

💼 실무 활용 시나리오

🏗️ 건축 프로젝트 관리

📋 활용 사례
├── 🏘️ 지역별 건축물 현황 파악
├── 📊 준공년도별 통계 분석
├── 🏢 용도별 건축물 분류
└── 📈 부동산 시장 동향 분석

🏛️ 공공 업무 효율화

🎯 공공기관 활용
├── 📋 건축 인허가 업무 지원
├── 🗺️ 도시계획 수립 자료
├── 📊 지역 개발 현황 모니터링
└── 📈 통계 데이터 수집 자동화

🔮 확장 기능 아이디어

1️⃣ 데이터 시각화 추가

# 📈 차트 기능 추가 예시
import matplotlib.pyplot as plt

def create_building_chart(df):
    """건축물 현황을 차트로 시각화"""
    use_counts = df['주용도명'].value_counts()
    
    plt.figure(figsize=(10, 6))
    use_counts.plot(kind='bar')
    plt.title('🏗️ 지역별 건축물 용도 분포')
    plt.xlabel('용도')
    plt.ylabel('건수')
    plt.show()

2️⃣ 지도 연동 기능

# 🗺️ 지도 표시 기능 (folium 라이브러리 활용)
def show_on_map(df):
    """건축물 위치를 지도에 표시"""
    import folium
    
    # 지도 생성
    m = folium.Map(location=[37.4013, 127.1091], zoom_start=15)
    
    # 건축물 위치 마커 추가
    for idx, row in df.iterrows():
        folium.Marker(
            [row['위도'], row['경도']],
            popup=f"🏠 {row['건축물명']}",
            tooltip=f"📍 {row['지번주소']}"
        ).add_to(m)
    
    # 지도 저장
    m.save('building_map.html')

3️⃣ 다양한 API 연동

# 🔗 다른 공공데이터 API와 연동
apis_to_integrate = [
    "🏠 아파트 실거래가 API",
    "🏞️ 토지 정보 API", 
    "🏛️ 건축 인허가 API",
    "📊 지역별 통계 API"
]

🎯 8. 트러블슈팅 가이드

🚨 자주 발생하는 오류와 해결법

❌ PyQt5 설치 오류

# 🔧 해결 방법 1: pip 업그레이드
python -m pip install --upgrade pip
pip install PyQt5

# 🔧 해결 방법 2: conda 사용 (Anaconda 설치된 경우)
conda install pyqt

# 🔧 해결 방법 3: 가상환경 생성
python -m venv building_env
building_env\Scripts\activate
pip install PyQt5

❌ API 호출 실패

# 🔍 디버깅 코드 추가
def debug_api_call():
    print("🔑 API 키 길이:", len(self.service_key))
    print("🏘️ 시군구 코드:", sigungu_code)
    print("🏠 법정동 코드:", bdong_code)
    print("📋 요청 파라미터:", params)
    
    # API 응답 확인
    response = requests.get(api_url, params=params)
    print("📡 응답 상태:", response.status_code)
    print("📄 응답 내용:", response.text[:200])

❌ 한글 깨짐 현상

# 🔧 인코딩 설정 추가
import sys
if sys.version_info[0] == 3:
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
    sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')

🏆 9. 시리즈 완주 및 마무리

🎉 여러분이 완성한 것들

달성한 성과들

  • 🏗️ 완전한 GUI 프로그램 개발 완료
  • 📊 공공데이터 API 마스터
  • 🤖 Cursor AI 활용법 습득
  • 💼 실무 활용 가능한 도구 보유

📈 향후 발전 방향

🚀 다음 단계 로드맵
├── 📊 데이터 분석 고도화
├── 🤖 AI/ML 기능 추가
├── 🌐 웹 서비스 배포
└── 📱 모바일 앱 개발

💝 특별 보너스: 완성 소스 활용 가이드

📁 프로젝트 구조 권장사항

📂 BuildingLedgerProject/
├── 📄 main.py (메인 프로그램)
├── 📄 config.py (설정 파일)
├── 📄 utils.py (유틸리티 함수)
├── 📁 data/ (데이터 저장)
├── 📁 exports/ (결과 파일)
└── 📄 README.md (사용법 안내)

🔄 지속적인 개선을 위한 팁

# 📝 개선 아이디어 체크리스트
improvement_checklist = [
    "✅ 사용자 경험(UX) 개선",
    "✅ 성능 최적화",
    "✅ 에러 처리 강화", 
    "✅ 새로운 기능 추가",
    "✅ 코드 문서화"
]

 

 

📚 참고 자료 및 추가 학습

🔗 공식 문서

📖 추천 학습 자료

  • 파이썬 GUI 프로그래밍 심화 과정
  • 데이터 분석 및 시각화 기술
  • API 개발 및 연동 방법론

 

반응형

⚠️ 광고 차단 프로그램 감지

애드블록, 유니콘 등 광고 차단 확장 프로그램을 해제하거나
화이트리스트에 추가해주세요.