Programming/python

Udemy Python Boot Camp Section 33 정리 | API Endpoint, API parameter

자히Zahi 2025. 5. 10. 04:39

* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 Udemy 강의를 결제하지 않은 타인의 학습을 고려하여 작성되지 않았습니다.

* 이 글을 학습에 활용하기를 원하신다면, Udemy에서 '[한글자막] Python 부트캠프 : 100개의 프로젝트로 Python 개발 완전 정복' 강의를 구매하시는 것을 권장드립니다.

 

 

거짓말이라고 믿고 싶지만 쓰던 포스트가 날라가서 처음부터 다시 쓰고 있다. 이런 젠장할...

그러니까 내가 하고 싶은 말은, 이번 글은 이러한 사유로 평소보다 불친절한 글이 될 수 있다는 것이다. 특정 부분(API)에 대한 정보가 얻고 싶다면 다른 블로그를 이용하기를 추천한다. 하지만 나와 같은 강의를 듣다가 복습 등을 하기 위해 이 글을 이용한다면, 알아서 판단하길 바란다. 내 블로그를 이용하라고 하기엔 앞에 "이 글은 필자가 자신이 배운 내용을 정리하기 위한 것"이라고 박아놓기도 했고... 아무튼,

서론이 너무 길었다.. 본격적으로 강의 이야기를 해보자.

 

API는 Application Programming Interface의 약자로 프로그래머는 API를 이용하여 소프트웨어를 생성하거나 외부 시스템과 상호작용할 수 있다. 이번 강의에서는 이 중 후자의 기능을 다룬다.

 

API는 일종의 요청서이다. 외부 시스템에 특정 정보를 요구하면 그 정보를 얻을 수 있다. 하지만, 만약 요청서 양식이 틀렸거나, 요청할 수 없는 내용을 요청한다면 그 내용은 반려당한다. 네이버에 특정 회원의 비밀번호를 알려달라고 요청서를 보낸다 한들 그걸 보내줄리 없는 것을 예시로 들 수 있다.

 

API Endpoint는 데이터 혹은 외부시스템이 저장된 위치와 비슷한 개념이다. 이걸 알아야 정보를 요구할 곳을 지정할 수 있는데, google에 검색하면 쉽게 찾을 수 있다.

 

지금부터는 requests(request 뒤에 s를 붙여야 한다.)모듈을 이용하여 API로 외부 시스템의 데이터를 얻는 방법을 알아볼 것이다. (내장 모듈이 아니므로 pip으로 설치해야 한다.)

import requests

response = requests.get(url="EndPoint")

 

이 코드로 외부시스템으로부터 response, 응답 내지 반응을 받을 수 있다. 그러나 이걸 출력한다면 다소 띠용한 대답을 얻는다.

<Response [200]>

 

여기에 있는 200이 그 대답인데, 우리가 요청한 수치는 json 데이터이기 때문에 원하는 응답을 얻지 못한 것처럼 보인다.

하지만 이 "200"은 내 요청이 유효했는지 알려주는 숫자로, 숫자별 의미를 알고 싶다면 아래 링크를 이용할 수 있다.

 

HTTP Status Codes Glossary

Wondering what an HTTP status code means? Browse this list of HTTP status codes for definitions and code references.

www.webfx.com

 

링크 속 가장 중요한 내용만 요약해보겠다.

맨 앞 자리가 1 → 아직 처리 중이니 기다려보세요.

맨 앞 자리가 2 → 처리 됐습니다. 요청하신 데이터도 드릴게요.

맨 앞 자리가 3 → 해당 데이터에 대한 접근 권한이 없습니다.

맨 앞 자리가 4 → 요청서가 잘못됐어요.

맨 앞 자리가 5 → 님 잘못은 아니고 서버에 문제가 생겼어요.

 

하지만 우리는 여전히 불만이 있다. "저 혹시 홍대입구역 가는 길 좀 알려주실 수 있나요?ㅠㅠ" 라고 물었는데 "네."하고 답변하는 것과 뭐가 다른가? 우리는 아직 홍대입구역에 가는 길을 알지 못한다...

 

 

 

반응이 400번대 (잘못된 요청) 라면 그건 에러가 발생한 것이다. 그런데 우리의 컴퓨터는 "아니요."라는 답변을 입력받긴 했으니, 실제로는 에러가 뜨지 않는다.

 

이때 우리는 전에 배운 raise를 사용해 인위적으로 에러를 발생시키고 프로그램을 중단할 수 있다. raise에 관한 건 아래 링크를 참고할 것 (그런데 설명이 그닥 친절하거나 자세하진 않으니 구글에 서치하는 것도 좋은 선택이다.)

 

Udemy Python Boot Camp Section 30 정리 | 오류, 예외 try, catch, except, finally, json 파일 다루기

* 이 글은 필자가 자신이 배운 내용을 정리하기 위한 것이며, 결코 Udemy 강의를 결제하지 않은 타인의 학습을 고려하여 작성되지 않았습니다.* 이 글을 학습에 활용하기를 원하신다면, Udemy에서 '[

iamthevest.tistory.com

 

그리고 상태 코드(위 경우에는 200)만 출력하고 싶다면 아래 코드를 사용해보자.

import requests

response = requests.get(url="EndPoint")
print(response.status_code)

 

attribute 이름이 status_code로 직관적이라 외우기 쉽다.

 

 

하지만 if response.status_code == 401부터 if response.status_code == 499까지 적는 비효율적인 짓을 할 개발자가 어디있을까? 이에 맞는 에러 메시지를 하나하나 출력하라고? raise exception까지 쓰면서?

 

그런 비효율적이고 불미스러운 사태를 방지하기 위해, 아래처럼 코드를 쓸 수 있다.

import requests

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

 

뭔 코드냐면, response의 status code가 200이 아니라면, status code에 따른 에러 메시지를 raise로 출력한다.

노가다 대리 메서드라고 보면 된다.

 

잠시 다른 곳으로 셌는데, 이 글의 진도는 아직 제발 아니에서 멈춰있다...

 

그러면 이제 정말 홍대입구역으로 가는 길을 알 차례이다!!

그 방법은 길었던 서론에 비해 굉장히 간단한데,

response.json()을 하면 된다. 그러면 파이썬 딕셔너리처럼 활용 가능한 형태의 데이터를 얻을 수 있다. (data = response.json() 같은 코드로 변수에 저장할 수 있다.)

 

일부 API는 매개변수를 요구한다. 강의에서는 위도와 경도를 입력하면 일출, 일몰 시간을 알려주는 API를 소개하고 있다.

이런 매개변수가 필요한 API는 보통 페이지에 어떤 매개변수를 요구하는지 적혀져 있으며, 이 매개변수들은 딕셔너리 형태 데이터를 requests.get 함수에 키워드인자 params에 넣어 적용할 수 있다.

코드가 더러워지는 걸 원하지 않는다면, 매개변수로 요구되는 데이터들을 따로 변수에 넣어 "params=(딕셔너리 변수명)"와 같이 간단히 표현할 수 있다.

 

코드를 실행하지 않고 웹사이트에서 바로 매개변수를 대입하고 싶다면,

(API endpoint)?(키워드인자1)=(매개변수1)&(키워드인자2)=(매개변수2)... 처럼 쓰면 된다.

 

 

마지막 과제가 남긴 했는데... 개념은 어차피 이게 끝일테니 슬슬 글을 마무리하겠다

밤새면서 이게 뭔 짓거리인가 싶긴 하지만 스스로 불러온 재앙이니 받아들이고 현실의 참담함과 슬픔에 수긍하자.

오랜만에 밤새니까 내가 쓰는 말이 한국어 문장 구조를 채택하고 있는지도 확신할 수 없다

언젠가 내가 API에 대한 지식이 필요해지면 다시 블로그에 와서 이 미친새끼는 뭐라 처 쓴거야 아 밤샜구나... 하고 수정하지 않을까?

 

틀린 내용이 있으면 댓글을... ㅈㅂ 달아주시긔. 밤 새서 제 정신이 아니긔...