데이터 & 머신러닝

[python] requests 및 certifi 모듈 활용법

항해사.K 2025. 3. 22. 13:17

1. Python Requests 모듈 활용법

데이터 분석가에게 웹 데이터를 수집하는 것은 중요한 업무 중 하나입니다. Python의 requests 모듈은 HTTP 요청을 간편하게 만들어 데이터 수집 과정에서 매우 유용합니다. 이 글에서는 Requests의 핵심 기능과 데이터 분석 업무에서의 실질적인 활용법을 소개합니다.

1) requests 모듈 소개 및 설치

requests는 파이썬에서 HTTP 요청을 간편하게 처리할 수 있도록 돕는 라이브러리로, 현재(2025년 3월 기준) Python 3.8 이상에서 사용할 수 있습니다. 아래 명령어로 설치할 수 있습니다.

pip install requests

2) GET 요청

데이터 분석 업무에서 가장 흔히 사용되는 HTTP 요청 방법입니다. 예시로 국토부의 아파트 매매 실거래가 자료를 사용해보겠습니다.

import requests

url = 'https://api.odcloud.kr/api/15057511/v1/uddi:1b092ed7-fd1c-4689-841b-5c4db14c990f'
params = {'page': 1, 'perPage': 10, 'serviceKey': 'YOUR_SERVICE_KEY'}
response = requests.get(url, params=params)
data = response.json()
print(data)

 

실제 사용 시 YOUR_SERVICE_KEY 부분에 공공데이터포털에서 발급받은 API 키를 입력하시면 됩니다.


3) 조건을 적용하여 특정 데이터만 가져오기

지역, 기간 등의 조건을 지정해 원하는 데이터만 필터링할 수 있습니다.

params = {'page': 1, 'perPage': 10, 'serviceKey': 'YOUR_SERVICE_KEY', 'LAWD_CD': '법정동코드', 'DEAL_YMD': '거래일자(예시: 202406)'}
response = requests.get(url, params=params)
print(response.json())

4) 가져온 응답 데이터 처리 방법

응답 받은 데이터를 분석 가능한 형태로 처리하는 방법입니다.

  • JSON 데이터 처리
    response = requests.get(url, params=params)
    data = response.json()
  • 텍스트 데이터 처리
    response = requests.get('https://www.example.com')
    html_content = response.text

5) 요청 헤더 설정하기

HTTP 요청을 보낼 때는 요청 헤더(Request Header)를 통해 다양한 메타 정보를 서버에 함께 전달할 수 있습니다. 이는 서버가 요청을 이해하고, 적절한 응답을 보내는 데 중요한 역할을 합니다. 주요 요청 헤더 항목들을 아래 표로 정리하였습니다.

헤더 이름 설명
User-Agent 어떤 브라우저나 앱에서 보낸 요청인지 나타냄
Authorization 인증 정보 (예: API 키, 토큰)
Content-Type 보낼 데이터 형식 (예: JSON, form-data 등)
Accept 클라이언트가 받고 싶은 응답 형식 (예: JSON)
Referer 이 요청이 발생한 원본 페이지의 주소

 

활용 코드는 아래와 같습니다. 요청 헤더에는 더 많은 종류가 있습니다. 더 다양한 헤더 항목과 그 역할이 궁금하다면, https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Headers 의  문서를 참고해 보세요.

headers = {'User-Agent': 'data-analyst-app/1.0'}
response = requests.get(url, headers=headers)

6) 가져온 데이터 파일로 저장하기

데이터 분석을 위해 웹에서 데이터를 파일 형태로 다운로드할 수 있습니다.

response = requests.get(url, params=params)
with open('apartment_sales_data.json', 'wb') as file:
    file.write(response.content)

7) 안정적인 데이터 수집을 위한 예외 처리

네트워크 문제나 서버 오류를 대비해 예외 처리를 구현하는 것이 좋습니다.

try:
    response = requests.get(url, params=params, timeout=10)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print("에러가 발생했습니다:", e)

2. 인증서와 HTTPS 요청 처리 (보안)

1) certifi란?

certifi는 웹에서 HTTPS 요청을 보낼 때 사용되는 SSL 인증서 목록을 제공하는 파이썬 라이브러리입니다. 인증서를 신뢰할 수 있는 기관(CA, Certificate Authority)을 기준으로 검증하며, request와 같은 HTTP 클라이언트에서 이를 활용합니다.

  • 최신 CA 인증서 제공: Mozilla의 최신 인증서 번들을 포함
  • 간편한 인증서 접근: 파이썬 코드로 쉽게 인증서 경로에 접근
  • 넓은 호환성: request, urllib3 등 주요 HTTP 클라이언트와 호환

2) 설치 및 사용 방법

pip install certifi

 

사용 예시는 아래와 같습니다.

import requests
import certifi

response = requests.get(url, params=params, verify=certifi.where())
print(response.text)

verify 매개변수에 certifi.where()를 지정하면, requests는 해당 인증서 목록을 사용하여 서버의 SSL/TLS 인증서를 검증합니다. 이는 Python 애플리케이션에서 HTTPS 연결의 보안을 강화하고, 데이터 전송의 안전성을 확보하는 데 필수적입니다.


3) 실무에서 중요한 이유

  • 내부망/폐쇄망 환경에서 인증서 오류 발생 시, verify=False 또는 사내 인증서 직접 지정이 필요할 수 있음
  • 보안이 엄격한 환경에서는 certifi 최신 상태 유지 및 인증서 경로 명시가 요구됨

주의:verify=False는 개발 환경에서만 임시로 사용해야 하며, 실제 운영 환경에서는 중간자 공격(MITM) 등 보안 위험이 발생할 수 있습니다.


4) certifi의 인증서 경로 확인

import certifi
print(certifi.where())

위 코드를 실행하면, requests가 참조하는 .pem 인증서 경로를 출력합니다.


🧭 마무리

Python의 requests모듈은 웹 데이터를 수집하고 외부 API와 통신하는 데 있어 가장 기본이자 강력한 도구입니다. 직관적인 문법 덕분에 초보자도 쉽게 사용할 수 있으며, 실제 업무에서는 수집 자동화, 데이터 파이프라인 연동, 공공데이터 활용 등 다양한 분야에 응용할 수 있습니다.

 

함께 소개한 certifi 모듈은 HTTPS 통신 시 보안성을 확보해주는 숨은 조력자입니다. SSL 인증서를 검증하는 과정은 사용자 데이터를 안전하게 다루기 위해 반드시 필요한 절차이며, 실무 환경에서는 verify 매개변수와 인증서 경로 지정에 대한 이해가 중요합니다. 웹 기반 데이터 분석을 시작하려는 데이터 분석가라면, requestscertifi는 단순한 라이브러리가 아니라 현실 세계의 데이터를 안정적으로 수집하기 위한 필수 항해 장비입니다.

이제 여러분도 이 두 도구를 나침반 삼아, 필요한 데이터를 직접 탐색하고 분석하는 자신만의 항로를 개척해보세요.

 

바다 같은 데이터 세상에서, 목적지까지 안전하고 효율적인 항해가 되기를 바랍니다.🌊📊


Reference

1. 파이썬 Documentation, Requests 

2. HTTP for Humans, Requests

3. 에드윈, 함께해요 파이썬 생태계

4. 정보통신기술용어해설, HTTP HEader Element, HTTP Header Field HTTP 헤더 항목

5. MDN, HTTP 헤더 


🚢 데이터의 바다는 넓고, 우리의 항해는 계속됩니다.

다음 여정에서 또 만나요! 😎🌊