
네이버 API 호출, 왜 자꾸 막힐까? (feat. IP 차단)
열심히 만든 네이버 부동산 크롤러가 어느 날 갑자기 먹통이 된 경험, 다들 한 번쯤 있으실 겁니다. 분명 어제까지 잘 됐는데, 오늘은 IP가 차단되었다는 메시지만 보이죠. 이 문제의 주된 원인은 바로 '만료된 인증 정보'를 계속 사용하기 때문입니다.
이번 글에서는 이 문제가 왜 발생하는지 근본적인 원인을 파헤치고, Selenium을 활용해 안정적으로 세션을 관리하는 해결책을 단계별로 알아보겠습니다.
💡 원인 분석: 하드코딩된 인증 정보의 배신
문제는 백엔드 코드에 박제된, 즉 하드코딩(Hard-coding)된 인증 토큰과 쿠키 값에서 시작됩니다.
# backend/app.py
HEADERS = {
# ...
# 이 토큰은 유효기간이 지나면 더 이상 쓸 수 없습니다.
"authorization": "Bearer eyJhbGciOiJI...RADVEs",
}
COOKIES = {
# ...
# NID_SES와 같은 세션 쿠키는 시간이 지나면 만료됩니다.
"NID_SES": "AAABtjWvcQnW...L8NAgVwyzgB8NC11X...",
}
이 값들은 영원하지 않습니다. 특정 시간이 지나면 만료되도록 설계되어 있죠.
- 인증 토큰(Authorization) 만료: JWT(JSON Web Token)는 내부에 만료 시간(exp) 정보를 가지고 있어, 이 시간이 지나면 효력을 잃습니다.
- 세션 쿠키(NID_SES 등) 만료: 사용자의 로그인 상태를 유지하는 세션 쿠키 역시 일정 시간이 지나면 자연스럽게 만료됩니다.
만료된 열쇠로 계속 문을 두드리면 어떻게 될까요? 네이버 서버는 이를 비정상적인 봇의 공격으로 판단하고, 해당 IP로부터 모든 요청을 차단해버립니다.
🛠️ 해결 방안: 동적 세션 관리 시스템 구축
가장 확실한 해결책은 실제 웹 브라우저처럼 작동하는 '동적 세션 관리자'를 구현하는 것입니다. 인증 정보가 필요할 때마다 새로운 세션을 동적으로 생성하고, 만료되면 알아서 갱신하는 스마트한 시스템이죠. 이를 위해 우리는 Selenium이라는 브라우저 자동화 도구를 사용할 겁니다.
1. 필요 라이브러리 설치
먼저 백엔드 환경에 관련 라이브러리를 설치합니다. 특히 selenium-wire는 일반 Selenium과 달리 웹페이지가 주고받는 모든 네트워크 요청(헤더, 쿠키 포함)을 엿볼 수 있어 매우 유용합니다.
pip install selenium selenium-wire webdriver-manager
2. 세션 관리자 클래스 구현
세션을 생성하고 관리하는 NaverSessionManager 클래스를 만듭니다. 이 클래스는 초기화될 때 Selenium을 이용해 가상 브라우저를 열고, 네이버 부동산에 접속하여 최신 인증 토큰과 쿠키를 가져와 저장하는 역할을 합니다.
# session_manager.py
import time
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class NaverSessionManager:
def __init__(self):
self.headers = None
self.cookies = None
self._get_new_session() # 시작할 때 새 세션 가져오기
def _get_new_session(self):
print("새로운 네이버 세션을 생성합니다...")
options = webdriver.ChromeOptions()
options.add_argument('--headless') # UI 없이 백그라운드 실행
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
try:
driver.get("https://new.land.naver.com")
time.sleep(3) # 페이지 로딩 및 데이터 요청 대기
# API 요청 가로채서 'authorization' 헤더 찾기
auth_token = None
for request in driver.requests:
if 'authorization' in request.headers and 'Bearer' in request.headers['authorization']:
auth_token = request.headers['authorization']
break
if not auth_token:
raise Exception("Authorization 토큰을 찾지 못했습니다.")
self.headers = { "authorization": auth_token, ... }
self.cookies = {cookie['name']: cookie['value'] for cookie in driver.get_cookies()}
print("세션 생성 완료!")
finally:
driver.quit()
# ... 헤더와 쿠키를 반환하는 메서드 ...
session_manager = NaverSessionManager()
3. Flask 앱에 적용하기
이제 기존의 하드코딩된 변수들을 지우고, API를 호출할 때마다 세션 관리자에게 최신 정보를 받아오도록 코드를 수정합니다.
# app.py
from session_manager import session_manager # 세션 관리자 불러오기
# 기존 HEADERS, COOKIES 변수는 삭제!
@app.route('/api/regions/sido', methods=['GET'])
def get_sido():
url = 'https://new.land.naver.com/api/regions/list?cortarNo=0000000000'
# 동적으로 최신 헤더와 쿠키를 가져와 사용
response = requests.get(url,
headers=session_manager.get_headers(),
cookies=session_manager.get_cookies())
# ... 이하 로직 동일 ...
return jsonify(data)
이렇게 하면 API를 호출하는 시점에 항상 가장 유효한 인증 정보를 사용하게 되어 차단 위험을 크게 줄일 수 있습니다.
⚠️ 주의사항 및 추가 고려사항
이 방법을 적용하기 전에 몇 가지 중요한 점을 반드시 인지해야 합니다.
- 네이버 이용 약관: 이 방법은 공식 API가 아닌 웹 스크레이핑 방식입니다. 서비스 이용 약관에 위배될 수 있으며, 특히 상업적 이용은 법적 문제를 야기할 수 있습니다.
- 세션 유효성 검사: 더 안정적인 시스템을 위해서는 API 호출이 실패했을 때(예: 401 에러) 자동으로 세션을 갱신하는 로직을 추가하는 것이 좋습니다.
- CAPTCHA 대응: 요청이 너무 잦으면 네이버가 로봇이 아님을 증명하라는 CAPTCHA를 띄울 수 있습니다. 이 경우 Selenium만으로는 해결이 어렵습니다.
- IP 우회: 요청 빈도가 매우 높으면 세션을 갱신해도 IP 자체가 차단될 수 있습니다. 이럴 땐 프록시 서버를 이용해 IP를 주기적으로 변경하는 전략이 필요할 수 있습니다.
2025.08.11 - [콩's AI] - AI로 네이버 부동산 매물 조회 프로그램 만들기 (1/3)
AI로 네이버 부동산 매물 조회 프로그램 만들기 (1/3)
네이버 부동산 매물 조회 프로그램 (1/3)안녕하세요! 오늘은 직접 개발한 네이버 부동산 매물 조회 프로그램을 어떻게 만들었는지, 그 과정을 공유해 보려고 합니다. 총 3편에 걸쳐서 진행할 예정
tikongs.tistory.com
2025.08.11 - [콩's AI] - AI로 네이버 부동산 매물 조회 프로그램 만들기 (2/3)
AI로 네이버 부동산 매물 조회 프로그램 만들기 (2/3)
나만의 네이버 부동산 매물 조회 프로그램 (2/3)지난 1편에서는 Flask 백엔드 서버를 구축하고 Vuex를 이용해 프론트엔드와 데이터를 주고받아 아파트 단지 목록을 화면에 표시하는 기본 뼈대를 완
tikongs.tistory.com
2025.08.11 - [콩's AI] - AI로 네이버 부동산 매물 조회 프로그램 만들기 (3/3)
AI로 네이버 부동산 매물 조회 프로그램 만들기 (3/3)
나만의 네이버 부동산 매물 조회 프로그램 (3/3)어느덧 시리즈의 마지막 편입니다! 1편에서 기본 구조를 세우고, 2편에서 상세 정보와 매물 목록을 불러오는 기능까지 완성했죠. 이번 3편에서는
tikongs.tistory.com
'콩's WORK' 카테고리의 다른 글
| Flutter(플러터)의 장점과 단점, 솔직하게 파헤치기 🚀 (0) | 2025.09.17 |
|---|---|
| AI 시대, 개발자가 살아남는법? (0) | 2025.09.16 |
| 🧐 센티넬원(SentinelOne) EDR vs 알약 백신, 뭐가 다를까? (3) | 2025.08.05 |
| 😫 인터넷이 자꾸 끊겨요! 인프라 담당자, 단계별 원인 파악 및 해결 방법 (1) | 2025.08.05 |
| VS Code와 GitHub 연동 방법 🤝 (4) | 2025.08.01 |