R에서 REST API 요청 (httr 패키지 활용)

제공

안녕하세요, 여러분! 데이터 분석하면서 API 한 번쯤은 써보고 싶으셨죠? 저도 그랬어요! 그런데 막상 시작하려니 어디서부터 손대야 할지 막막하더라고요. 그래서 오늘은 R을 활용해서 REST API를 쉽고 간편하게 요청하는 방법을 알려드리려고 해요. 특히 강력한 기능을 자랑하는 httr 패키지를 중심으로 다뤄볼 거예요. httr 패키지 기본 사용법부터 시작해서 API 요청과 응답을 어떻게 처리하는지, 다양한 HTTP 메서드는 어떻게 활용하는지, 그리고 실제 API 활용 예시까지 차근차근 살펴볼 예정입니다. R로 REST API를 정복하고 싶으신 분들, 모두 모이세요! 함께 재밌게 배워보자고요!

 

 

httr 패키지 기본 사용법

R에서 API를 다루려면 httr 패키지가 정말 꿀이에요! 마치 마법 지팡이처럼 휘두르면 데이터가 뿅! 하고 나타나는 기분이랄까요? 자, 그럼 이 마법 지팡이를 어떻게 휘두르는지, 기본적인 사용법부터 차근차근 알아볼까요?

GET() 함수

가장 기본이 되는 함수는 바로 GET() 함수랍니다. 이름에서 짐작하셨겠지만, HTTP GET 요청을 보내는 역할을 해요. GET 요청은 서버에 특정 자원을 달라고 요청하는 방식이죠. 마치 “저 좀 이 데이터 주세요~” 하고 공손하게 부탁하는 것과 같아요.

GET() 함수를 사용하는 방법은 아주 간단해요! URL만 넣어주면 끝! 예를 들어, GET("https://www.example.com")처럼 말이죠. 이렇게 하면 지정한 URL에 GET 요청을 보내고, 서버에서 응답을 받아온답니다. 참 쉽죠?

content() 함수

하지만, 단순히 요청만 보내고 끝내면 아무 소용이 없겠죠? 서버에서 보내준 응답을 확인해야 뭔가 의미가 있을 거예요. 이때 사용하는 것이 바로 content() 함수예요. content() 함수는 GET() 함수의 결과값에 사용해서 응답 본문을 추출할 수 있어요. 예를 들어, response <- GET("https://www.example.com")라고 요청을 보냈다면, content(response)를 통해 응답 본문을 확인할 수 있답니다.

응답 본문은 다양한 형태로 올 수 있어요. 단순한 텍스트일 수도 있고, JSON이나 XML 형태일 수도 있죠. content() 함수는 as 인자를 통해 응답 본문을 원하는 형태로 변환할 수 있도록 도와준답니다. 예를 들어, JSON 형태로 응답이 왔다면, content(response, as = "parsed") 또는 content(response, as = "text")를 사용해서 JSON 객체 또는 텍스트 형태로 변환할 수 있어요. 정말 편리하죠?

다른 HTTP 메서드 지원

GET() 함수 외에도 POST(), PUT(), DELETE()다양한 HTTP 메서드를 지원하는 함수들이 있어요. 각 메서드는 서버에 다른 종류의 요청을 보내는 역할을 한답니다. POST()는 새로운 데이터를 생성할 때, PUT()는 기존 데이터를 수정할 때, DELETE()는 데이터를 삭제할 때 사용해요.

각 함수의 사용법은 GET() 함수와 거의 비슷해요. URL과 함께 필요한 추가 정보를 인자로 넣어주면 된답니다. 예를 들어, POST() 함수를 사용할 때는 생성하려는 데이터를 body 인자에 넣어주면 돼요.

헤더 정보 설정

API를 사용할 때는 헤더 정보를 설정해야 하는 경우가 많아요. 헤더 정보는 요청에 대한 추가적인 정보를 담고 있는 부분이에요. add_headers() 함수를 사용하면 원하는 헤더 정보를 추가할 수 있어요. 예를 들어, add_headers(Authorization = "Bearer your_api_key")처럼 API 키를 헤더에 추가할 수 있답니다.

httr 패키지의 추가 기능

httr 패키지에는 이 외에도 다양한 기능들이 숨겨져 있어요! 쿠키 처리, 리디렉션 처리, 타임아웃 설정 등 API를 사용할 때 필요한 거의 모든 기능을 제공한답니다. 정말 만능 패키지라고 할 수 있죠! 다음에는 httr 패키지의 더욱 강력한 기능들을 소개해 드릴게요. 기대해 주세요!

 

API 요청과 응답 처리하기

자, 이제 httr 패키지를 이용해서 API 요청을 보내고, 응답을 처리하는 방법을 자세히 알아볼까요? 마치 레스토랑에서 주문하고 음식을 받는 것과 같아요! 주문이 바로 요청(Request)이고, 음식이 응답(Response)인 셈이죠! httr 패키지는 이 과정을 아주 쉽고 간편하게 만들어준답니다.

GET 요청

가장 기본적인 GET 요청부터 살펴보도록 하죠. GET 요청은 서버에 특정 정보를 요청할 때 사용해요. 예를 들어, 특정 사용자의 정보를 가져오거나, 최신 뉴스 목록을 불러올 때 사용할 수 있죠. httr 패키지에서는 GET() 함수를 이용해서 GET 요청을 보낼 수 있는데, 함수 안에 요청을 보낼 URL을 입력하면 된답니다. 정말 간단하죠?! 마치 "이 주소로 가서 정보 좀 가져다 줘~" 라고 말하는 것과 같아요!

library(httr)

response <- GET("https://api.example.com/users/123") 

위 코드는 https://api.example.com/users/123 에 GET 요청을 보내고, 그 응답을 response 변수에 저장하는 코드예요. response 변수에는 상태 코드, 헤더, 응답 바디 등 다양한 정보가 담겨있답니다. 이 정보들을 어떻게 확인하고 활용할 수 있을까요?

응답 확인

status_code() 함수를 이용하면 응답의 상태 코드를 확인할 수 있어요. 상태 코드는 요청이 성공적으로 처리되었는지, 아니면 오류가 발생했는지 알려주는 중요한 지표예요! 200은 요청이 성공적으로 처리되었다는 것을 의미하고, 404는 요청한 리소스를 찾을 수 없다는 것을, 500은 서버 내부 오류가 발생했음을 나타낸답니다. 마치 레스토랑에서 주문한 음식이 잘 나왔는지, 아니면 재료가 없다거나 주방에 문제가 생겼는지 알려주는 것과 같죠!

status_code(response) # 200 (성공), 400 (잘못된 요청), 500 (서버 오류) 등!

headers() 함수를 이용하면 응답 헤더를 확인할 수 있는데, 헤더에는 응답 바디의 콘텐츠 유형, 서버 정보, 캐싱 정보 등 다양한 메타데이터가 포함되어 있어요. "이 음식은 어떤 재료로 만들어졌고, 유통기한은 언제까지인가요?" 라고 물어보는 것과 비슷하죠~?

headers(response) # 콘텐츠 유형, 서버 정보 등!

가장 중요한 응답 바디는 content() 함수를 이용해서 확인할 수 있어요. content() 함수는 응답 바디를 R 객체로 변환해주는데, JSON 형식의 응답이라면 리스트 형태로, XML 형식이라면 XML 객체로 변환해준답니다. 주문한 음식을 맛있게 먹는 것처럼, API에서 받은 데이터를 R에서 바로 활용할 수 있게 되는 거죠! as = "text" 옵션을 사용하면 응답 바디를 텍스트 형식으로 가져올 수도 있고, as = "parsed" 옵션을 사용하면 JSON이나 XML처럼 구조화된 데이터를 R 객체로 파싱할 수도 있어요! 정말 편리하지 않나요?!

content(response, as = "text") # 응답 바디를 텍스트 형식으로 가져오기!
content(response, as = "parsed") # JSON 또는 XML을 R 객체로 파싱하기!

POST 요청

POST 요청은 서버에 새로운 데이터를 생성하거나, 기존 데이터를 수정할 때 사용해요. 예를 들어, 새로운 사용자를 등록하거나, 게시글을 작성할 때 사용할 수 있죠. httr 패키지에서는 POST() 함수를 이용해서 POST 요청을 보낼 수 있어요. body 인자를 이용해서 서버에 전송할 데이터를 지정할 수 있는데, JSON 형식으로 데이터를 전송하려면 encode = "json" 옵션을 사용하면 된답니다! 마치 레스토랑에서 "이런 재료로 이렇게 요리해주세요!" 라고 주문하는 것과 같아요.

new_user <- list(name = "홍길동", age = 25)
response <- POST("https://api.example.com/users", body = new_user, encode = "json")

다른 HTTP 메서드

PUT, DELETE 등 다양한 HTTP 메서드도 PUT(), DELETE() 함수를 이용해서 간편하게 사용할 수 있어요. 각 메서드는 서버에서 특정 작업을 수행하도록 지시하는데, PUT은 기존 데이터를 수정하고, DELETE는 데이터를 삭제한답니다. 마치 레스토랑에서 "주문한 음식을 변경해주세요!" 또는 "주문 취소할게요!" 라고 말하는 것과 같죠!

API 요청과 응답을 잘 처리하는 것은 효율적인 데이터 활용의 첫걸음이에요! httr 패키지를 이용하면 이 과정을 아주 쉽고 간편하게 처리할 수 있답니다. 다음에는 실제 API를 활용하는 예시를 살펴보면서 httr 패키지의 활용법을 더욱 깊이 있게 알아보도록 하겠습니다!

 

다양한 HTTP 메서드 활용

자, 이제 httr 패키지로 API를 호출하는 기본적인 방법은 익히셨으니, 좀 더 깊이 들어가 볼까요? GET 방식만 사용해서는 API의 모든 기능을 활용할 수 없어요! 마치 훌륭한 요리사가 다양한 칼을 사용하는 것처럼, 우리도 상황에 맞는 HTTP 메서드를 사용해야 API를 제대로 다룰 수 있답니다. GET, POST, PUT, DELETE… 각각의 메서드는 고유한 역할을 가지고 있어요. 마치 마법 주문처럼요! ✨ 이제 각 메서드의 특징과 httr에서 사용하는 방법을 자세히 알아보도록 하겠습니다.

1. GET: 정보 가져오기의 달인!

GET 메서드는 데이터를 '읽어 오는' 역할을 합니다. 웹 페이지를 열거나, 특정 정보를 요청할 때 주로 사용되죠. GET 요청은 URL에 파라미터를 포함시켜 서버에 전달할 수 있습니다. 예를 들어, 특정 사용자의 정보를 가져오고 싶다면 ?user_id=123과 같이 URL에 추가할 수 있죠. httr에서는 GET() 함수를 사용하고, 쿼리 파라미터는 query = list(user_id = 123)처럼 추가해요. 간단하죠? 😊

2. POST: 새로운 데이터를 생성할 때!

POST 메서드는 서버에 새로운 데이터를 '만들도록' 요청하는 역할을 해요. 새로운 게시글을 작성하거나, 회원 가입을 할 때처럼 말이죠! POST 요청은 데이터를 요청 본문(body)에 담아 전달합니다. httr에서는 POST() 함수를 사용하고, body = list(title = "새로운 게시글", content = "내용입니다!")와 같이 데이터를 추가할 수 있어요. 마치 선물 상자에 내용물을 담아 보내는 것과 같아요! 🎁

3. PUT: 기존 데이터를 수정할 때!

PUT 메서드는 기존 데이터를 '업데이트' 하는 역할을 담당합니다. 이미 작성된 게시글의 내용을 수정하거나, 사용자 정보를 변경할 때 사용되죠. PUT 요청 역시 POST처럼 데이터를 요청 본문에 담아 전달해요. httr에서는 PUT() 함수를 사용하고, body = list(title = "수정된 제목", content = "수정된 내용입니다!")와 같이 변경할 데이터를 전달합니다. 마치 낡은 옷을 수선하는 것과 같네요! 🧵

4. DELETE: 데이터를 삭제할 때!

DELETE 메서드는 이름 그대로 데이터를 '삭제'하는 역할을 합니다. 더 이상 필요 없는 게시글을 삭제하거나, 회원 탈퇴를 할 때 사용되죠. httr에서는 DELETE() 함수를 사용합니다. 주의할 점은, DELETE 요청은 데이터를 삭제하기 때문에 신중하게 사용해야 한다는 거예요! ⚠️

5. PATCH: 부분적인 수정이 필요할 때!

PATCH 메서드는 PUT과 비슷하지만, 데이터의 '일부분'만 수정할 때 사용됩니다. 예를 들어, 사용자의 이름만 변경하고 싶을 때 전체 정보를 다시 보낼 필요 없이 이름 정보만 PATCH 요청으로 보낼 수 있죠. httr에서는 PATCH() 함수를 사용하고, body = list(name = "새로운 이름")과 같이 수정할 데이터만 전달하면 됩니다. 정말 효율적이죠? 👍

6. HEAD: 헤더 정보만 확인하고 싶을 때!

HEAD 메서드는 GET 요청과 유사하지만, 응답 본문 없이 헤더 정보만 받아옵니다. 파일의 크기나 수정 날짜와 같은 정보를 빠르게 확인하고 싶을 때 유용하게 사용할 수 있어요. httr에서는 HEAD() 함수를 사용하면 됩니다. 마치 책의 목차만 확인하는 것과 같아요! 📖

7. OPTIONS: 서버가 지원하는 메서드를 확인할 때!

OPTIONS 메서드는 서버가 어떤 HTTP 메서드를 지원하는지 확인하는 데 사용됩니다. API를 사용하기 전에 어떤 기능을 사용할 수 있는지 알아보는 데 유용하죠. httr에서는 VERB("OPTIONS", url)처럼 사용할 수 있어요. 마치 레스토랑 메뉴판을 보는 것 같네요! 🍽️

자, 이제 다양한 HTTP 메서드와 httr에서 사용하는 방법을 알아보았어요! 각 메서드의 특징을 잘 이해하고 상황에 맞게 사용한다면 API를 더욱 효과적으로 활용할 수 있을 거예요. 다음에는 실제 API를 활용하는 예시를 살펴보면서, 배운 내용을 실전에 적용해 보도록 하겠습니다. 기대해 주세요! 😉

 

실제 API 활용 예시

자, 이제 httr 패키지를 활용해서 실제 API를 써보는 시간이에요! 두근두근~? 지금까지 익힌 기능들을 가지고 실제 서비스에서 어떻게 활용할 수 있는지, 예시를 통해 꼼꼼하게 살펴볼게요. 준비되셨나요? ^^

공공 데이터 포털 API 활용

먼저, 누구나 한 번쯤은 들어봤을 만한 공공 데이터 포털 API를 사용해 보도록 할게요. 공공 데이터 포털은 다양한 분야의 데이터를 API 형태로 제공하고 있어서 연습하기에 딱! 좋아요. 저는 그중에서도 도서관 정보 API를 사용해서 전국의 도서관 정보를 가져와 보겠습니다! (짝짝짝!)

httr 패키지를 사용하면 정말 간단하게 API를 호출할 수 있어요. 마치 마법 주문을 외우는 것처럼 말이죠! ✨ API 요청 URL을 만들고, GET() 함수를 사용해서 요청을 보내면 끝! 응답 결과는 content() 함수를 사용해서 확인할 수 있답니다. 참 쉽죠?

library(httr)
library(jsonlite)

# API 요청 URL 생성
base_url <- "http://apis.data.go.kr/1471000/LibInfoService/getLibList"
service_key <- "YOUR_SERVICE_KEY"  # 여러분의 서비스 키를 넣어주세요!
params <- list(
  numOfRows = 10, # 한 페이지에 표시할 데이터 개수
  pageNo = 1, # 페이지 번호
  dtl_region = "서울특별시" # 지역 설정 (예: 서울특별시)
)

# URL에 쿼리 파라미터 추가
url <- modify_url(base_url, query = c(serviceKey = service_key, params))

# API 요청 및 응답 처리
response <- GET(url)

# 응답 상태 확인 (200은 성공!)
status_code(response)

# 응답 내용 확인 (JSON 형식)
raw_content <- content(response, "text")

# JSON 데이터를 R 데이터프레임으로 변환
library_data <- fromJSON(raw_content)

# 도서관 목록 출력
print(library_data$response$body$items$item)

위 코드에서 YOUR_SERVICE_KEY 부분에는 여러분의 서비스 키를 넣어주셔야 해요! 공공 데이터 포털에서 회원가입 후 발급받을 수 있답니다. 그리고 dtl_region 부분에는 원하는 지역을 넣어주세요. "서울특별시", "부산광역시" 등 다양한 지역을 설정할 수 있어요. 결과는 짜잔~! 데이터프레임 형태로 깔끔하게 출력된답니다. 이 데이터를 활용해서 도서관 위치를 지도에 표시하거나, 지역별 도서관 수를 비교하는 등 다양한 분석을 할 수 있어요. 정말 멋지지 않나요?! 🤩

API의 다양한 기능

하지만, 여기서 끝이 아니에요! API는 단순히 데이터를 가져오는 것뿐만 아니라 데이터를 수정하거나 삭제하는 등 다양한 작업을 할 수 있도록 지원해요. POST(), PUT(), DELETE() 등의 함수를 사용하면 된답니다. 예를 들어, 새로운 도서관 정보를 추가하고 싶다면 POST() 함수를, 기존 도서관 정보를 수정하고 싶다면 PUT() 함수를 사용하면 돼요. 마치 레고 블록처럼 원하는 기능을 조립해서 사용할 수 있다는 것이 API의 가장 큰 매력이 아닐까 싶어요! 😊

API 오류 처리

API를 사용하다 보면 가끔씩 오류가 발생할 수도 있어요. 하지만 당황하지 마세요! httr 패키지는 오류 처리 기능도 꼼꼼하게 제공하고 있답니다. status_code() 함수를 사용해서 응답 상태 코드를 확인하고, http_error() 함수를 사용해서 오류 메시지를 확인할 수 있어요. 오류 메시지를 잘 분석하면 문제의 원인을 빠르게 파악하고 해결할 수 있을 거예요. 💪

자, 이제 여러분은 httr 패키지를 활용해서 API를 자유자재로 다룰 수 있는 능력을 갖추게 되었어요! 🎉 API는 데이터 분석, 웹 개발 등 다양한 분야에서 활용되는 강력한 도구이니, 꼭! 익혀두시면 좋을 거예요. 앞으로 여러분의 멋진 활약을 기대할게요! 😊 다음에는 더욱 흥미로운 주제로 찾아뵙겠습니다! 기대해 주세요~! 😉

 

자, 이제 R의 httr 패키지를 이용해서 REST API와 즐겁게 소통하는 방법, 조금 감이 잡히셨나요? 처음엔 어려워 보였던 API 요청도 httr과 함께라면 생각보다 훨씬 쉽게 할 수 있다는 걸 알게 되셨을 거예요.

GET, POST, PUT, DELETE! 이제 여러분은 HTTP 메서드라는 강력한 도구를 손에 넣으셨어요. 마치 마법 주문처럼 API를 다룰 수 있게 된 거죠!

앞으로 데이터 분석이나 웹 서비스 개발에 httr을 적극 활용해서 놀라운 결과물을 만들어보세요. 여러분의 빛나는 아이디어를 httr이 멋지게 펼쳐줄 거예요.

다음에 또 다른 흥미로운 R 이야기로 만나요! 화이팅!

 


코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다