학습 기록

Python 공부 기록 #6 - 방구석을 탈출하다! (HTTP 통신과 Requests)

  1. 목차

인트로: 내 컴퓨터는 너무 외로워

HTTP: 웹이랑 대화하는 언어

Requests 라이브러리: 파이썬 최고의 택배 기사

JSON: 데이터를 주고받는 표준 포맷

아웃트로: 이제 데이터를 수집하러 가자

  1. 인트로: 내 컴퓨터는 너무 외로워

지금까지 배운 파이썬 코드는 제 노트북 안에서만 작동했습니다.

계산기 만들고, 파일 정리하는 것도 좋지만, 제가 코딩을 배우는 진짜 목적은 ’세상의 데이터를 가져와서 분석하는 것’이거든요.

그러려면 제가 짠 파이썬 코드가 인터넷 세상과 소통해야 하겠죠?

오늘은 그 첫 번째 관문인 HTTP 통신과 파이썬 필수 라이브러리인 requests에 대해 공부한 내용을 정리합니다.

  1. HTTP: 웹이랑 대화하는 언어

우리가 크롬 브라우저로 네이버에 접속하는 것도 사실 서버랑 대화를 나누는 과정이라고 합니다. 이때 사용하는 규칙이 HTTP입니다.

요청(Request): “야, 네이버 메인 화면 좀 보여줘.” (Client → Server)

응답(Response): “옛다, 여기 HTML 코드다.” (Server → Client)

식당에 비유하면 이렇게 됩니다:

요청: “김치찌개 하나요!” (주문)

응답: 주방에서 김치찌개가 나옴 (결과물)

주로 4가지 방법(Method)으로 대화합니다

GET: “자료 좀 줘” (조회 - 뉴스 기사 보기)

POST: “이거 처리해 줘” (생성 - 로그인, 글쓰기)

PUT/DELETE: 수정/삭제

솔직히 말하면 GET과 POST만 알아도 90%는 해결되더라고요. PUT/DELETE는 나중에 필요할 때 배워도 될 것 같습니다.

상태 코드: 서버의 대답

서버가 응답할 때 “성공했어”, “실패했어”를 숫자로 알려줍니다.

200번대: 성공 (200 OK가 가장 자주 보임)

300번대: 리다이렉션 (다른 곳으로 이동)

400번대: 클라이언트 오류 (404 Not Found - URL 오타 확인하세요!)

500번대: 서버 오류 (내 잘못 아님!)

처음에 404 에러 뜨면 “내가 뭘 잘못했나?” 했는데, 그냥 주소 오타인 경우가 대부분이었습니다.

  1. Requests 라이브러리: 파이썬 최고의 택배 기사

파이썬에서 HTTP 요청을 아주 쉽게 보내주는 도구가 바로 requests 라이브러리입니다.

얼마나 유명하면 “파이썬을 쓴다면 무조건 쓴다”라고 할까요?

① 실습: 가짜 데이터 가져오기 (GET)

import requests

테스트용 주소로 요청 보내기

url = “https://jsonplaceholder.typicode.com/posts/1

response = requests.get(url)

상태 코드 확인 (200이면 성공!)

if response.status_code == 200:

print(“성공했습니다!”)

print(response.text) # 가져온 내용 출력

else:

print(“실패…”)

코드 단 3~4줄로 웹사이트의 데이터를 가져왔습니다! 처음 성공했을 때 진짜 신기했어요.

② 실전: GitHub 사용자 정보 가져오기

테스트용 API 말고 진짜 API를 써봤습니다.

import requests

github_url = “https://api.github.com/users/octocat

response = requests.get(github_url)

if response.status_code == 200:

user_data = response.json()

print(f“사용자명: {user_data[‘login’]}”)

print(f“공개 저장소: {user_data[‘public_repos’]}개”)

print(f“팔로워: {user_data[‘followers’]}명”)

실행하니까 진짜 GitHub 데이터를 가져오더라고요. 이걸로 뭔가 할 수 있을 것 같은 기분이 들었습니다!

③ POST 요청도 해봤습니다

import requests

새로운 게시물 생성 (시뮬레이션)

new_post = {

‘title’: ‘파이썬으로 만든 게시물’,

‘body’: ‘requests 라이브러리 테스트 중입니다.’,

‘userId’: 1

}

post_url = “https://jsonplaceholder.typicode.com/posts

response = requests.post(post_url, json=new_post)

if response.status_code == 201: # 201 Created

print(“게시물 생성 성공!”)

print(response.json())

POST는 GET보다 살짝 복잡했는데, 몇 번 해보니 익숙해졌습니다.

  1. JSON: 데이터를 주고받는 표준 포맷

웹에서 데이터를 주고받을 때 가장 많이 쓰는 형식이 JSON입니다. 생긴 게 파이썬의 **딕셔너리(Dictionary)**랑 거의 똑같이 생겨서 다루기가 정말 편합니다.

① JSON과 딕셔너리의 차이

처음에 이게 좀 헷갈렸는데, 이렇게 이해하니 명확해졌습니다:

[Before] 서버에서 받은 JSON (문자열)

print(response.text)

출력: ‘{“title”: “제목”, “userId”: 1}’ ← 따옴표로 감싸진 텍스트

[After] response.json() 후 (딕셔너리)

data = response.json()

print(data[‘title’])

출력: 제목 ← 딕셔너리 키로 바로 접근 가능!

print(type(response.text)) # <class ‘str’>

print(type(data)) # <class ‘dict’>

핵심: response.json() 한 방이면 복잡한 텍스트가 깔끔한 딕셔너리로 변해서, 우리가 배운 키(Key)값으로 바로 데이터를 꺼내 쓸 수 있습니다.

② 실제로 써보기

import requests

url = “https://jsonplaceholder.typicode.com/posts/1

response = requests.get(url)

JSON을 파이썬 딕셔너리로 변환

data = response.json()

print(f“글 제목: {data[‘title’]}”)

print(f“작성자 ID: {data[‘userId’]}”)

딕셔너리 배울 때 “이거 어디다 쓰지?” 했는데, 여기서 진짜 유용하더라고요!

③ 여러 데이터 가져올 때

posts_url = “https://jsonplaceholder.typicode.com/posts

posts_response = requests.get(posts_url)

posts = posts_response.json() # 리스트로 받음

print(f“총 게시물 수: {len(posts)}개”)

print(“최신 3개 게시물:”)

for i, post in enumerate(posts[:3]):

print(f“{i+1}. {post[‘title’]}“)

여러 개를 가져올 때는 리스트로 받아서 for문으로 돌리면 됩니다. 지난 시간에 배운 거 여기서 다 쓰이네요!

☑️ 실무 팁: 에러 처리

찾아보니까 실무에서는 이렇게 에러 처리를 한다고 합니다.

import requests

try:

response = requests.get(url, timeout=5) # 5초 제한

if response.status_code == 200:

data = response.json()

print(“성공!”)

elif response.status_code == 404:

print(“페이지를 찾을 수 없습니다.”)

else:

print(f“에러: {response.status_code}”)

except requests.exceptions.Timeout:

print(“시간 초과!”)

except requests.exceptions.RequestException as e:

print(f“요청 실패: {e}”)

timeout 안 쓰면 서버가 느릴 때 무한정 기다리더라고요. 꼭 써야 할 것 같습니다.

  1. 정리하며

오늘은 파이썬을 인터넷 세계로 연결해 주는 HTTP와 Requests에 대해 정리했습니다.

requests.get()으로 데이터를 요청하고,

response.json()으로 데이터를 해석한다.

이 두 가지만 알면 API를 사용하거나 웹 크롤링을 할 준비가 된 셈입니다.

다음 포스팅에서는 이걸 활용해서 실제 뉴스 기사 제목을 긁어오는 크롤러를 한번 만들어 보겠습니다! (드디어 뭔가 있어 보이는 걸 만드네요)

혹시 설명 중에 틀린 부분이 있거나 더 좋은 팁이 있다면 댓글로 알려주세요! 같이 공부해요. 😊