171 lines
4.3 KiB
Markdown
171 lines
4.3 KiB
Markdown
# 엑셀 주소 → 우편번호 자동 변환 앱
|
|
|
|
엑셀 파일에서 "주소" 컬럼의 주소를 읽어 네이버 지도 API를 통해 우편번호를 조회하고, "우편번호" 컬럼에 자동으로 매칭하여 저장하는 Python 애플리케이션입니다.
|
|
|
|
## 주요 기능
|
|
|
|
- 📋 엑셀 파일의 "주소" 컬럼 자동 인식
|
|
- 🌐 네이버 지도 API를 사용한 정확한 우편번호 조회
|
|
- 📝 "우편번호" 컬럼 자동 생성 및 데이터 추가
|
|
- ✅ 처리 결과 통계 표시
|
|
- 🔄 배치 처리 지원
|
|
|
|
## 설치 방법
|
|
|
|
### 1. 필수 요구사항
|
|
- Python 3.7 이상
|
|
- pip (Python 패키지 관리자)
|
|
|
|
### 2. 라이브러리 설치
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 3. 네이버 API 등록
|
|
|
|
1. [네이버 클라우드 콘솔](https://console.ncloud.com/)에 접속
|
|
2. 회원가입 또는 로그인
|
|
3. "Services" → "AI · Application Service" → "Naver API" 선택
|
|
4. "Application" 메뉴에서 새 애플리케이션 등록
|
|
5. Maps 서비스에서 "Geocoding API" 권한 추가
|
|
6. API 인증 정보 확인:
|
|
- Client ID
|
|
- Client Secret
|
|
|
|
### 4. 환경 변수 설정
|
|
|
|
`.env.example` 파일을 참고하여 `.env` 파일을 생성합니다:
|
|
|
|
```bash
|
|
# .env 파일
|
|
NAVER_CLIENT_ID=your_client_id_here
|
|
NAVER_CLIENT_SECRET=your_client_secret_here
|
|
```
|
|
|
|
## 사용 방법
|
|
|
|
### 기본 사용법
|
|
|
|
```bash
|
|
python main.py 파일경로.xlsx
|
|
```
|
|
|
|
또는 대화형 모드:
|
|
|
|
```bash
|
|
python main.py
|
|
# 그러면 파일 경로를 입력하도록 요청합니다
|
|
```
|
|
|
|
### 예시
|
|
|
|
```bash
|
|
python main.py customers.xlsx
|
|
```
|
|
|
|
## 엑셀 파일 형식
|
|
|
|
### 필수 요구사항
|
|
- 첫 번째 행은 헤더 행
|
|
- **"주소"** 라는 이름의 컬럼 필수 존재
|
|
|
|
### 입력 예시
|
|
|
|
| 이름 | 주소 |
|
|
|------|------|
|
|
| 홍길동 | 서울시 강남구 테헤란로 123 |
|
|
| 김철수 | 부산시 중구 중앙대로 456 |
|
|
|
|
### 출력 예시
|
|
|
|
| 이름 | 주소 | 우편번호 |
|
|
|------|------|---------|
|
|
| 홍길동 | 서울시 강남구 테헤란로 123 | 06234 |
|
|
| 김철수 | 부산시 중구 중앙대로 456 | 48058 |
|
|
|
|
## 주소 입력 형식
|
|
|
|
네이버 API는 다양한 주소 형식을 지원합니다:
|
|
|
|
### 도로명 주소 (권장)
|
|
```
|
|
서울시 강남구 테헤란로 123
|
|
경기도 성남시 분당구 정자동 100-1
|
|
```
|
|
|
|
### 지번 주소
|
|
```
|
|
서울시 강남구 역삼동 123
|
|
부산시 중구 중앙동 456-7
|
|
```
|
|
|
|
## 트러블슈팅
|
|
|
|
### "네이버 API 인증 정보가 없습니다" 오류
|
|
|
|
**.env 파일이 제대로 설정되었는지 확인하세요:**
|
|
|
|
```bash
|
|
# .env 파일이 존재하는지 확인
|
|
ls -la .env
|
|
|
|
# 파일 내용 확인 (값이 비어있지 않은지 확인)
|
|
cat .env
|
|
```
|
|
|
|
### "주소 검색 결과 없음" 경고
|
|
|
|
- 주소 형식이 정확한지 확인하세요
|
|
- 존재하지 않는 주소일 수 있습니다
|
|
- 도로명 주소 또는 정확한 주소로 다시 시도해보세요
|
|
|
|
### API 요청 타임아웃
|
|
|
|
네이버 API 응답이 느린 경우입니다:
|
|
- 잠시 후 다시 시도하세요
|
|
- 인터넷 연결 상태를 확인하세요
|
|
|
|
### "X-NCP-APIGW-API-KEY-ID" 관련 오류
|
|
|
|
API 인증 정보가 잘못되었을 가능성이 있습니다:
|
|
1. 네이버 클라우드 콘솔에서 클라이언트 ID/Secret 재확인
|
|
2. `.env` 파일에 정확히 입력했는지 확인
|
|
3. 파일을 저장한 후 다시 실행
|
|
|
|
## 처리 시간
|
|
|
|
주소 개수에 따라 처리 시간이 달라집니다:
|
|
- 100개 주소: ~1-2분
|
|
- 1,000개 주소: ~10-20분
|
|
- 10,000개 주소: ~100-200분
|
|
|
|
## API 사용 제한
|
|
|
|
네이버 API는 무료로 일정량의 요청을 제공합니다:
|
|
- 월 25,000건의 무료 쿼터 제공
|
|
- 초과 시 추가 요금 발생 가능
|
|
|
|
자세한 내용은 [네이버 Geocoding API 문서](https://api.ncloud-docs.com/docs/ai-geocoding-geocode)를 참고하세요.
|
|
|
|
## 파일 구조
|
|
|
|
```
|
|
excelpostchanger/
|
|
├── main.py # 메인 애플리케이션
|
|
├── address_handler.py # 우편번호 조회 로직
|
|
├── excel_handler.py # 엑셀 파일 처리 로직
|
|
├── config.py # 설정 파일
|
|
├── .env.example # 환경 변수 예시
|
|
├── .env # 환경 변수 (실제 사용)
|
|
├── requirements.txt # Python 의존성
|
|
└── README.md # 이 파일
|
|
```
|
|
|
|
## 라이선스
|
|
|
|
MIT License
|
|
|
|
## 지원
|
|
|
|
문제가 발생하거나 기능 요청이 있으면 이슈를 등록해주세요.
|