목록으로

프로그래밍 · Python

Python 완전정복 시리즈 #20: REST API로 인터넷과 대화하기

BeanCon
Python 프로그램이 REST API를 통해 인터넷 서비스와 통신하는 방법을 설명하는 대표 이미지

Python 완전정복 시리즈 20편입니다. REST API의 개념, URL과 HTTP Method, 상태 코드, Query Parameter, Header, API Key와 Token, 요청 Body, CRUD, timeout, 응답 검증, Python requests 사용법까지 정리했습니다.

목차

인터넷 도시에서 배달 주문이 도착했습니다

여러분이 만든 Python 프로그램이 어느 날 새로운 직업을 얻었습니다.

직업은 바로 인터넷 배달 기사입니다.

첫 번째 주문이 들어옵니다.

서울의 현재 날씨를 가져와 주세요.

Python 프로그램은 자신 있게 출발합니다.

그런데 곧 커다란 문제를 발견합니다.

날씨 정보는 어디에 있지?
어떻게 요청해야 하지?
어떤 형식으로 받아야 하지?

Python은 인터넷 한복판에서 길을 잃고 맙니다.

그때 멀리서 간판 하나가 보입니다.

REST API 안내소

안내소 직원이 말합니다.

“인터넷 서비스와 대화하려면 약속된 주소와 요청 방법을 사용해야 합니다.”

오늘은 Python 프로그램이 인터넷과 대화하는 방법인 REST API를 알아보겠습니다.

1. REST API를 이해하기 전에 API부터 알아보자

API는 Application Programming Interface의 약자입니다.

이름만 보면 조금 어렵지만, 핵심은 간단합니다.

API는 프로그램과 프로그램이 서로 기능이나 데이터를 주고받기 위해 마련된 접점입니다.

예를 들어 음식점에서 주방에 직접 들어가 요리사에게 주문하지는 않습니다.

보통 메뉴판을 보고 직원에게 주문합니다.

이 구조를 프로그램 세계로 옮겨보겠습니다.

손님      → 클라이언트 프로그램
직원      → API
주방      → 서버
메뉴판    → API 사용 규칙
완성된 음식 → 서버 응답 데이터

클라이언트는 서버 내부가 어떻게 구성되어 있는지 몰라도 됩니다.

정해진 방법으로 API에 요청하면 서버가 결과를 돌려줍니다.

2. REST API란 무엇인가?

REST는 Representational State Transfer의 약자입니다.

REST API는 웹의 기본 통신 방식인 HTTP를 사용하여 데이터를 요청하고 처리하는 API 설계 방식입니다.

이름은 거창하지만 실제 구조는 다음과 같습니다.

누구에게 요청할 것인가?   → URL
무엇을 할 것인가?         → HTTP Method
어떤 데이터를 보낼 것인가? → 요청 데이터
결과는 어떻게 되었는가?    → 상태 코드
무엇을 돌려받았는가?       → 응답 데이터

즉 REST API는 인터넷 서비스끼리 소통할 때 사용하는 주문서와 같습니다.

3. 인터넷 서비스에는 주소가 있다

실제 음식점에는 주소가 있습니다.

서울시 Python구 API로 20

인터넷의 데이터와 기능에도 주소가 있습니다.

이를 URL 또는 API Endpoint라고 부릅니다.

예를 들어 다음과 같은 쇼핑몰 API가 있다고 가정해보겠습니다.

https://api.example.com/products

이 주소는 상품 목록을 나타냅니다.

특정 상품 하나를 가리키려면 다음과 같이 작성할 수 있습니다.

https://api.example.com/products/100

여기서 `100`은 상품 번호입니다.

주소만 봐도 어떤 데이터를 가리키는지 어느 정도 알 수 있습니다.

/users           사용자 목록
/users/10        10번 사용자
/products        상품 목록
/products/100    100번 상품
/orders          주문 목록
/orders/500      500번 주문

REST API에서는 보통 URL을 동사보다 명사 중심으로 설계합니다.

좋은 예는 다음과 같습니다.

/products
/users
/orders

다음과 같은 주소는 REST 스타일에서 권장되지 않습니다.

/getProducts
/createUser
/deleteOrder

행동은 URL이 아니라 HTTP Method로 표현하기 때문입니다.

4. REST API의 다섯 가지 주문 버튼

배달 앱에는 주문하기, 변경하기, 취소하기 같은 버튼이 있습니다.

REST API에도 데이터를 다루는 대표적인 다섯 가지 버튼이 있습니다.

GET     조회하기
POST    새로 만들기
PUT     전체 수정하기
PATCH   일부 수정하기
DELETE  삭제하기

이것을 HTTP Method라고 합니다.

이제 하나씩 살펴보겠습니다.

5. GET: 데이터 가져오기

GET은 서버에서 데이터를 조회할 때 사용합니다.

상품 목록 요청

GET /products

특정 상품 조회

GET /products/100

서버 응답 예시

{
  "id": 100,
  "name": "Python 입문서",
  "price": 25000
}

GET은 서버의 데이터를 읽는 요청입니다.

일반적으로 데이터를 새로 만들거나 변경하지 않습니다.

6. POST: 새로운 데이터 등록하기

POST는 서버에 새로운 데이터를 생성할 때 사용합니다.

회원 가입 요청을 예로 들어보겠습니다.

POST /users

서버로 전달할 데이터

{
  "name": "Lee",
  "email": "lee@example.com"
}

서버 응답

{
  "id": 101,
  "name": "Lee",
  "email": "lee@example.com"
}

기존에 없던 101번 사용자가 새로 생성되었습니다.

쇼핑몰 주문, 게시글 작성, 회원가입, 댓글 등록 등에 POST가 사용됩니다.

7. PUT: 데이터를 통째로 교체하기

PUT은 기존 데이터를 전체적으로 수정하거나 교체할 때 사용합니다.

기존 사용자 정보가 다음과 같다고 가정해보겠습니다.

{
  "name": "Lee",
  "email": "lee@example.com",
  "city": "Seoul"
}

PUT 요청

PUT /users/101

요청 데이터

{
  "name": "Kim",
  "email": "kim@example.com",
  "city": "Busan"
}

기존 사용자 정보가 새로운 내용으로 전체 교체됩니다.

PUT은 집 전체를 리모델링하는 것에 가깝습니다.

8. PATCH: 필요한 부분만 고치기

PATCH는 데이터의 일부만 수정할 때 사용합니다.

사용자의 거주지만 변경해보겠습니다.

PATCH /users/101

요청 데이터

{
  "city": "Jeju"
}

이름과 이메일은 그대로 두고 도시만 수정됩니다.

PATCH는 집 전체가 아니라 벽지 한쪽만 바꾸는 작업에 가깝습니다.

9. DELETE: 데이터 삭제하기

DELETE는 서버에 저장된 데이터를 삭제할 때 사용합니다.

DELETE /users/101

101번 사용자가 삭제됩니다.

DELETE 요청에는 응답 데이터가 없을 수도 있습니다.

서버는 대신 상태 코드를 통해 삭제 성공 여부를 알려줍니다.

10. HTTP Method를 카페 주문으로 기억하기

REST API가 헷갈릴 때는 카페를 떠올려보세요.

GET
메뉴판을 보여주세요.

POST
아메리카노 한 잔 새로 주문할게요.

PUT
주문 전체를 카페라테로 바꿔주세요.

PATCH
샷만 하나 추가해주세요.

DELETE
주문을 취소해주세요.

메뉴는 하나지만 요청 방식에 따라 행동이 달라집니다.

11. Python에 인터넷 통신 장비 장착하기

Python에서 REST API를 호출할 때 자주 사용하는 라이브러리가 `requests`입니다.

먼저 설치합니다.

pip install requests

코드에서 불러옵니다.

import requests

이제 Python 프로그램은 인터넷 서비스에 HTTP 요청을 보낼 준비가 되었습니다.

12. Python으로 첫 번째 GET 요청 보내기

공개된 테스트 API에서 게시글 하나를 가져오는 상황을 가정해보겠습니다.

import requests

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

response = requests.get(url)

print(response.status_code)
print(response.json())

응답 데이터는 다음과 비슷한 형태입니다.

{
  "userId": 1,
  "id": 1,
  "title": "게시글 제목",
  "body": "게시글 내용"
}

코드를 한 줄씩 살펴보겠습니다.

response = requests.get(url)

지정한 URL로 GET 요청을 전송합니다.

response.status_code

요청 처리 결과를 숫자로 확인합니다.

response.json()

JSON 응답을 Python 딕셔너리 형태로 변환합니다.

지난 시간에 배운 JSON이 여기서 바로 등장합니다.

13. REST API 응답에는 영수증 번호가 붙는다

배달 주문을 하면 다음과 같은 상태가 표시됩니다.

주문 접수
조리 중
배달 완료
주문 취소

REST API도 요청 결과를 숫자로 알려줍니다.

이를 HTTP 상태 코드라고 합니다.

대표적인 상태 코드를 살펴보겠습니다.

| 상태 코드 | 의미 | 상황 || ----- | --------------------- | ---------------- || 200 | OK | 요청이 정상 처리됨 || 201 | Created | 새로운 데이터가 생성됨 || 204 | No Content | 성공했지만 반환할 내용이 없음 || 400 | Bad Request | 요청 데이터가 잘못됨 || 401 | Unauthorized | 인증이 필요함 || 403 | Forbidden | 접근 권한이 없음 || 404 | Not Found | 요청한 대상을 찾을 수 없음 || 409 | Conflict | 데이터 충돌이 발생함 || 500 | Internal Server Error | 서버 내부 오류 |

상태 코드는 크게 다음과 같이 구분할 수 있습니다.

2xx  성공
4xx  클라이언트 요청 문제
5xx  서버 문제

14. 404는 인터넷 실종 신고다

다음 주소로 요청했다고 가정해보겠습니다.

GET /products/999999

그런데 999999번 상품이 존재하지 않습니다.

서버는 다음 상태 코드를 반환합니다.

404 Not Found

서버의 말로 번역하면 이렇습니다.

“요청하신 상품을 아무리 찾아도 없습니다.”

반대로 500 오류는 서버가 자신의 발에 걸려 넘어진 상황입니다.

500 Internal Server Error

서버의 속마음은 대략 이렇습니다.

“고객님 잘못은 아닙니다. 제가 방금 조금 망가졌습니다.”

15. 상태 코드를 확인하는 안전한 코드

API 요청이 항상 성공하는 것은 아닙니다.

따라서 응답 상태를 확인해야 합니다.

import requests

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

response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print("요청 실패:", response.status_code)

`raise_for_status()`를 사용하면 실패 상태를 예외로 처리할 수도 있습니다.

import requests

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

response = requests.get(url)
response.raise_for_status()

data = response.json()

print(data)

404나 500 같은 오류가 발생하면 예외가 발생합니다.

이때 #14에서 배운 예외 처리를 연결할 수 있습니다.

import requests

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

try:
    response = requests.get(url, timeout=5)
    response.raise_for_status()

    data = response.json()

    print(data)

except requests.exceptions.Timeout:
    print("서버 응답 시간이 초과되었습니다.")

except requests.exceptions.HTTPError as error:
    print("HTTP 오류가 발생했습니다:", error)

except requests.exceptions.RequestException as error:
    print("API 요청에 실패했습니다:", error)

이제 프로그램은 서버 문제 하나에 그대로 쓰러지지 않습니다.

안전모를 쓴 인터넷 배달 기사가 된 셈입니다.

16. POST 요청으로 새 게시글 등록하기

새로운 데이터를 만들 때는 POST를 사용합니다.

import requests

url = "https://jsonplaceholder.typicode.com/posts"

new_post = {
    "title": "Python REST API 공부",
    "body": "requests 라이브러리로 POST 요청을 보냈습니다.",
    "userId": 1
}

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

print(response.status_code)
print(response.json())

여기서 중요한 부분은 다음 코드입니다.

json=new_post

Python 딕셔너리를 JSON 형태로 변환하여 서버로 전송합니다.

요청과 응답의 흐름은 다음과 같습니다.

Python Dictionary
        ↓
       JSON
        ↓
    REST API 서버
        ↓
       JSON
        ↓
Python Dictionary

지난 시간에 배운 JSON이 REST API의 택배 상자가 되는 순간입니다.

17. Query Parameter는 주문 옵션이다

배달 앱에서 이런 옵션을 본 적이 있을 것입니다.

매운맛 2단계
치즈 추가
곱빼기

REST API에서도 요청에 조건을 추가할 수 있습니다.

이를 Query Parameter라고 합니다.

예시 주소

/products?category=book&limit=10

구조를 나누어보면 다음과 같습니다.

/products          기본 주소
?                  옵션 시작
category=book      카테고리는 책
&                  다음 옵션 연결
limit=10           최대 10개

Python에서는 다음과 같이 작성할 수 있습니다.

import requests

url = "https://api.example.com/products"

params = {
    "category": "book",
    "limit": 10
}

response = requests.get(
    url,
    params=params
)

print(response.url)

실제 요청 주소는 다음과 같이 만들어집니다.

https://api.example.com/products?category=book&limit=10

18. Header는 택배 상자의 안내 스티커다

API 요청에는 데이터 외에도 추가 정보를 전달할 수 있습니다.

이 정보를 Header라고 합니다.

예를 들면 다음과 같습니다.

데이터 형식은 JSON입니다.
한국어 응답을 원합니다.
이 요청을 보낸 사용자는 누구입니다.
인증 토큰은 이것입니다.

Python 예제

import requests

url = "https://api.example.com/users"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer ACCESS_TOKEN"
}

response = requests.get(
    url,
    headers=headers
)

`Authorization` 헤더에는 인증 정보가 들어갈 수 있습니다.

이것은 건물 출입증과 비슷합니다.

출입증이 없다면 서버가 다음과 같이 응답할 수 있습니다.

401 Unauthorized

19. API Key와 Token은 인터넷 세계의 출입증이다

누구나 중요한 데이터를 가져갈 수 있다면 큰 문제가 됩니다.

그래서 많은 API는 인증 정보를 요구합니다.

대표적인 방식은 다음과 같습니다.

API Key
Access Token
Bearer Token
OAuth

예시

headers = {
    "Authorization": "Bearer my-secret-token"
}

주의할 점이 있습니다.

API Key와 Token을 코드에 직접 작성한 뒤 GitHub에 올리면 안 됩니다.

잘못된 예

API_KEY = "실제_비밀키"

보통 환경 변수로 관리합니다.

import os

api_key = os.getenv("API_KEY")

비밀키는 비밀이어야 합니다.

이름만 비밀키이고 인터넷에 공개되어 있다면 이미 비밀이 아닙니다. 🔑💨

20. 요청 본체 Body에는 무엇이 들어갈까?

POST, PUT, PATCH 요청에서는 서버에 데이터를 함께 보낼 수 있습니다.

이 데이터를 Request Body라고 합니다.

회원가입 요청 예시

{
  "name": "Lee",
  "email": "lee@example.com",
  "password": "secret-password"
}

Python에서는 다음과 같이 전송할 수 있습니다.

import requests

url = "https://api.example.com/users"

user_data = {
    "name": "Lee",
    "email": "lee@example.com",
    "password": "secret-password"
}

response = requests.post(
    url,
    json=user_data
)

GET 요청은 주로 조회 조건을 URL의 Query Parameter로 전달하고, POST나 PATCH는 데이터를 Body로 보내는 경우가 많습니다.

21. PUT과 PATCH를 직접 비교해보자

현재 사용자 데이터가 다음과 같다고 가정해보겠습니다.

{
  "name": "Lee",
  "email": "lee@example.com",
  "city": "Seoul"
}

PUT 요청

updated_user = {
    "name": "Kim",
    "email": "kim@example.com",
    "city": "Busan"
}

response = requests.put(
    "https://api.example.com/users/101",
    json=updated_user
)

사용자 정보를 전체적으로 교체합니다.

PATCH 요청

changed_data = {
    "city": "Jeju"
}

response = requests.patch(
    "https://api.example.com/users/101",
    json=changed_data
)

도시만 부분적으로 변경합니다.

기억법은 간단합니다.

PUT   이삿짐 전체 교체
PATCH 고장 난 전등 하나 교체

22. DELETE 요청으로 데이터 삭제하기

import requests

url = "https://api.example.com/users/101"

response = requests.delete(url)

if response.status_code == 204:
    print("사용자가 삭제되었습니다.")
else:
    print("삭제 실패:", response.status_code)

삭제 요청은 성공해도 응답 본문이 없을 수 있습니다.

이때 `204 No Content`가 사용됩니다.

23. 실제 REST API 요청은 어떤 모습일까?

한 번에 정리해보겠습니다.

상품 목록 조회

GET /products

특정 상품 조회

GET /products/100

상품 등록

POST /products

상품 전체 수정

PUT /products/100

상품 일부 수정

PATCH /products/100

상품 삭제

DELETE /products/100

URL은 상품이라는 자원을 나타냅니다.

HTTP Method가 그 상품을 어떻게 처리할지 결정합니다.

24. REST API의 핵심은 Resource다

REST에서는 서버가 관리하는 대상을 Resource라고 부릅니다.

쇼핑몰의 Resource는 다음과 같습니다.

사용자
상품
주문
결제
배송
리뷰

URL에서는 보통 복수 명사를 사용합니다.

/users
/products
/orders
/payments
/reviews

이렇게 설계하면 API 주소만 봐도 어떤 데이터를 다루는지 이해하기 쉽습니다.

25. REST API와 CRUD는 한 팀이다

데이터베이스에는 CRUD라는 기본 작업이 있습니다.

Create  생성
Read    조회
Update  수정
Delete  삭제

REST API와 연결하면 다음과 같습니다.

| CRUD | HTTP Method | 역할 || ------ | ----------- | ------ || Create | POST | 데이터 생성 || Read | GET | 데이터 조회 || Update | PUT, PATCH | 데이터 수정 || Delete | DELETE | 데이터 삭제 |

REST API는 데이터베이스의 CRUD 작업을 웹을 통해 사용할 수 있게 해주는 통로가 되기도 합니다.

26. 실전 미션: 우주 정거장 승무원 API

이제 여러분은 지구를 떠나 우주 정거장의 승무원 관리 시스템을 개발하게 되었습니다.

현재 승무원 목록을 가져옵니다.

import requests

url = "https://api.example.com/crew"

try:
    response = requests.get(
        url,
        timeout=5
    )

    response.raise_for_status()

    crew_members = response.json()

    for crew in crew_members:
        print(
            crew["name"],
            crew["role"]
        )

except requests.exceptions.RequestException as error:
    print(
        "우주 정거장과 통신할 수 없습니다:",
        error
    )

새로운 승무원을 등록합니다.

new_crew = {
    "name": "Nova",
    "role": "Engineer",
    "planet": "Earth"
}

response = requests.post(
    url,
    json=new_crew,
    timeout=5
)

if response.status_code == 201:
    print("새 승무원이 등록되었습니다.")
    print(response.json())
else:
    print("등록 실패:", response.status_code)

우주 정거장 서버가 응답하지 않는다면?

통신 두절
산소는 충분
커피는 부족
개발자는 침착해야 함

예외 처리가 여러분을 지켜줍니다. ☕🛰️

27. API 요청이 느릴 때 timeout이 필요한 이유

다음 코드는 서버가 응답할 때까지 오랫동안 기다릴 수 있습니다.

response = requests.get(url)

실무에서는 요청 시간을 제한하는 것이 좋습니다.

response = requests.get(
    url,
    timeout=5
)

5초 안에 응답이 오지 않으면 Timeout 예외가 발생합니다.

서버 응답을 무한히 기다리는 프로그램은 인터넷 카페 앞에서 영업 종료 후에도 문을 두드리는 손님과 같습니다.

28. 응답 JSON을 그대로 믿으면 위험하다

API가 항상 예상한 데이터를 보내는 것은 아닙니다.

예상한 응답

{
  "name": "Lee",
  "age": 30
}

실제 응답

{
  "message": "사용자를 찾을 수 없습니다."
}

다음 코드는 오류가 발생할 수 있습니다.

print(data["name"])

안전하게 접근하려면 `get()`을 사용할 수 있습니다.

name = data.get("name")

if name is None:
    print("사용자 이름이 없습니다.")
else:
    print(name)

상태 코드와 응답 구조를 함께 확인해야 합니다.

29. REST API를 사용할 때 지켜야 할 기본 원칙

요청 실패에 대비하기

네트워크는 언제든 끊길 수 있습니다.

try:
    response = requests.get(
        url,
        timeout=5
    )

except requests.exceptions.RequestException:
    print("네트워크 요청 실패")

상태 코드 확인하기

응답이 왔다고 해서 성공한 것은 아닙니다.

if response.status_code == 200:
    print("성공")

비밀키를 공개하지 않기

API Key는 환경 변수로 관리합니다.

응답 데이터 검증하기

필요한 Key가 실제로 존재하는지 확인합니다.

timeout 설정하기

무한 대기를 방지합니다.

30. 초보자가 자주 만나는 오류 극장

401 Unauthorized

경비원: 출입증을 보여주세요.
Python: 집에 두고 왔는데요.
경비원: 돌아가세요.

원인

API Key 또는 Token 누락

403 Forbidden

Python: 출입증 있습니다.
경비원: 출입증은 맞는데 이 구역 권한은 없습니다.

원인

인증은 되었지만 접근 권한 부족

404 Not Found

Python: 999번 상품 주세요.
서버: 그런 상품은 태어난 적도 없습니다.

원인

잘못된 URL 또는 존재하지 않는 데이터

429 Too Many Requests

Python: 요청!
Python: 요청!
Python: 요청!
Python: 요청!
서버: 잠깐만요. 숨 좀 쉽시다.

원인

짧은 시간에 너무 많은 요청 전송

500 Internal Server Error

Python: 주문할게요.
서버: 죄송합니다. 주방에서 냄비가 폭발했습니다.

원인

서버 내부 문제

31. API 문서는 인터넷 세계의 메뉴판이다

처음 사용하는 API는 사용 방법을 알 수 없습니다.

그래서 API 제공자는 보통 문서를 제공합니다.

API 문서에는 다음 정보가 포함됩니다.

요청 URL
HTTP Method
필수 Parameter
요청 Body 형식
인증 방법
응답 JSON 구조
상태 코드
호출 제한

문서를 읽지 않고 API를 호출하는 것은 메뉴판을 보지 않고 주방에 “알아서 맛있는 것 주세요”라고 외치는 것과 같습니다.

운이 좋으면 음식이 나오지만, 대개 오류가 나옵니다.

32. REST API는 어디에서 사용될까?

REST API는 현대 소프트웨어 거의 모든 분야에서 사용됩니다.

날씨 앱
지도 서비스
쇼핑몰
결제 시스템
모바일 앱
SNS
클라우드 서비스
보안 관제
AI 서비스
사내 업무 시스템

예를 들어 쇼핑몰 앱은 다음과 같이 동작할 수 있습니다.

앱
 ↓ GET /products
상품 서버
 ↓ JSON 응답
앱 화면에 상품 표시

주문할 때는 다음과 같습니다.

앱
 ↓ POST /orders
주문 서버
 ↓ 주문 결과
앱에 주문 완료 표시

33. AI 시대의 REST API

AI 모델도 REST API를 통해 외부 프로그램과 연결할 수 있습니다.

Python 프로그램이 AI 서버에 질문을 보냅니다.

{
  "message": "Python 함수란 무엇인가요?"
}

AI 서버가 응답합니다.

{
  "answer": "함수는 특정 작업을 수행하는 코드 묶음입니다."
}

Python 프로그램은 이 결과를 웹사이트, 챗봇, 업무 자동화 시스템에서 사용할 수 있습니다.

즉 AI를 사용하는 것과 AI 서비스를 만드는 것 모두 REST API와 깊이 연결됩니다.

34. 지금까지 배운 내용이 하나로 합쳐진다

REST API를 호출하는 코드에는 지금까지 배운 Python 개념이 모두 등장합니다.

변수

url = "https://api.example.com/users"

딕셔너리

user = {
    "name": "Lee"
}

JSON

response.json()

함수

def get_user():
    pass

조건문

if response.status_code == 200:

반복문

for user in users:

예외 처리

try:
    ...
except:
    ...

모듈

import requests

REST API는 지금까지 학습한 Python 문법이 실제 인터넷 서비스에서 하나로 조립되는 지점입니다.

흩어져 있던 퍼즐 조각들이 드디어 우주선 한 대가 되는 순간입니다. 🚀

35. 오늘 배운 내용을 한 장의 주문서로 정리하기

요청 주소
어디에 보낼 것인가?

HTTP Method
무엇을 할 것인가?

Header
누가 어떤 형식으로 요청하는가?

Parameter
어떤 조건을 추가할 것인가?

Body
어떤 데이터를 전달할 것인가?

Status Code
요청 결과가 어떻게 되었는가?

Response
서버가 어떤 데이터를 돌려주었는가?

36. 오늘 배운 내용을 한 문장으로 정리하면

REST API는

Python 프로그램이 URL과 HTTP Method를 사용해 인터넷 서비스에 요청을 보내고, 주로 JSON 형식으로 결과를 받는 통신 방식입니다.

37. Python 프로그램이 인터넷 시민권을 얻었습니다

지금까지 여러분의 Python 프로그램은 컴퓨터 안에서 혼자 동작했습니다.

하지만 REST API를 이해한 순간부터 달라집니다.

Python은 이제

날씨를 가져오고
지도를 검색하고
상품을 주문하고
데이터베이스를 조회하고
클라우드를 제어하고
AI에게 질문할 수 있습니다.

혼자 계산하던 프로그램이 인터넷 전체와 협업하는 프로그램으로 성장한 것입니다.

인터넷 도시의 초보 배달 기사였던 Python은 이제 URL 지도를 읽고, JSON 상자를 운반하며, 상태 코드 영수증까지 확인하는 베테랑 통신 전문가가 되었습니다.

다음 편 예고

다음 시간에는

"[Python 완전정복 시리즈 #21] requests 라이브러리 실전 가이드 | 공공데이터와 외부 API를 Python으로 가져오는 방법"

을 통해 실제 API 요청 코드를 조금 더 깊게 다뤄보겠습니다.

단순히 GET 요청을 보내는 것을 넘어

Query Parameter 전달
Header와 인증 처리
응답 데이터 가공
페이지네이션
Timeout과 재시도
API 결과 파일 저장

까지 하나의 미니 프로젝트로 연결해 보겠습니다.

이제 Python은 인터넷과 인사만 나누는 수준을 넘어, 본격적으로 데이터를 수집하고 업무를 자동화하기 시작합니다.

댓글

0

댓글을 불러오는 중입니다.