-
[REST API] 내가 이해한 REST API 개념BACK-END/REST API 2021. 3. 24. 10:33
요즘 채용 사이트를 둘러보면 아래처럼 REST API, RESTful API 라는 단어를 자주 보게 된다.
나는 굳이 이직을 위해서가 아니라 요즘 개발 트렌트를 알기 위해서 구인사이트를 자주 살펴보는데, 요즘 REST API 사용 경험이 우대사항 또는 자격요건인 경우가 많이 보인다.
REST API가 대체 무엇이고, 어떤점이 좋길래 이렇게 우대사항 항목에 REST API 사용 경험을 넣는걸까 궁금해졌다. 그래서 내가 유튜브와 구글링을 하며 이해하게 된 REST API를 정리해보려한다.
API(Application Programming Interface)
우선 REST API를 이해하기 위해서는 API 의 개념부터 정확히 짚고 넘어가야한다.
어떤 기계를 만들면 사용자가 그 기계를 전부 활용할 수 있도록 제어장치를 만들어야 한다. 예를 들면 TV는 사용자가 TV 를 키거나 끄고 음량을 조절할 수 있도록 리모콘을 만들어야하고, 자판기는 어떤 음료수를 뽑을건지 선택하는 버튼이 있어야 하며, 컴퓨터에는 컴퓨터를 조작하기 위한 키보드와 마우스가 있어야한다. 이를 인터페이스(Interface) 라고 한다. 이 인터페이스라는 것은 기계와 인간간의 소통 창구 역할을 해준다.
사용자가 명령을 하기위한 장치인 리모콘과 자판기 버튼 뿐만 아니라, 사용자가 내린 명령의 결과물을 출력하는 TV 스크린, 컴퓨터 모니터 또한 인터페이스에 속한다.
이제 소프트웨어적인 측면에서 바라보자.
컴퓨터나 스마트폰을 키면 사용자들이 프로그램이나 사이트, 어플을 원하는대로 제어하고 정보를 볼 수 있도록 버튼, 스크롤바, 슬라이더, 브라우저 창 등 소프트웨어적인 장치들이 마련되어 있다. 이런 소프트웨어와 인간의 소통을 위해서 고안된 장치들을 UI (User Interface) 라고 부른다.
하지만 우리 눈에 보이지 않는 영역에도 인터페이스가 있다. 바로 기계와 기계, 소프트웨어와 소프트웨어 사이에서의 수많은 정보 요청과 정보 교환이 이루어지기 위한 인터페이스다. 예를들어 기상 정보를 제공하는 다양한 어플과 사이트들의 관리자들이 기상청 서버로부터 실시간으로 정보를 공유 받고자 할때
"date:191031|place:seoul|which:temperature"
"이 날짜, 이 지역의 온도를 알려줘"
이런식으로 원하는 정보를 얻기 위한 지정된 형식으로 기상청 서버에 정보를 요청해야 하는 것이다. 이렇게 표시해서 이 주소로 정보를 요청하면 기상청이 이렇게 대답해준다.
"17degree"
"17도야"
이러한 공개된 메뉴얼이 있으면 누구든 이걸 활용해서 기상청이 제공하는 정보로 소프트웨어를 만들 수 있다. 이처럼 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단을 API(Application Programming Interface) 라고 한다.
REST API (Representational State Transfer)
REST API는 정보들이 주고 받아지는데에 있어서 개발자들 사이에 널리 쓰이는 일종의 형식이다. 어떤 제품이아니라 형식이기 때문에 어떤 프레임워크를 쓰던, 어떤 툴을 사용해서 소프트웨어를 만들던, 이 폼에 맞춰서 기능들을 만들어내면 되는것이다.
REST API는 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청하는 모습 자체만으로 추론이 가능하다. 그렇기 때문에 인수인계 받을 개발자는 REST API 형식의 소스를 보고 "아 어디서 무엇을 요청하는거네" 하고 알 수 있게 된다.
https://도메인/classes { "results" : [ {"idx" : 1. "name" : "예비반"}, {"idx" : 2. "name" : "초급반"}, {"idx" : 3. "name" : "중급반"}, {"idx" : 4. "name" : "고급반"} ] }
위의 소스는 학원 DB에서 반 목록 정보를 요청하는 것으로 보인다. RESTful 하게 만든 API는 요청을 보내는 주소만으로도 대략 이게 뭘 하는 요청인지 파악이 가능하다. 리소스의 idx 를 맨 마지막에 적으면 인덱스 번호에 해당되는 정보만 가져오게된다.
https://도메인/classes/1 결과 : {"idx" : 1. "name" : "예비반"}
또한 거기에 students를 붙이면 이 반에 해당하는 학생들의 정보가 가져와지고
https://도메인/classes/1/students { "results" : [ {"idx" : 1. "name" : "홍길동", "age" : "10"}, {"idx" : 2. "name" : "계월향", "age" : "10"}, {"idx" : 3. "name" : "전우치", "age" : "12"}, {"idx" : 4. "name" : "성춘향", "age" : "13"} ] }
students 다음에 또 인덱스 번호 15 를 적으면 이 반에서 15번에 해당하는 학생의 정보가 가져와진다.
https://도메인/classes/1/students/15 { "results" : [ {"idx" : 15. "name" : "김볼펜"} ] }
혹은 이렇게 조건을 붙여서 나이가 10살인 학생들의 정보만 따로 추출 할 수도 있다.
https://도메인/classes/1/students?age=10 { "results" : [ {"idx" : 1. "name" : "홍길동", "age" : "10"}, {"idx" : 2. "name" : "계월향", "age" : "10"} ] }
자원을 구조와 함께 나타내는 이런 형태의 구분자를 URI 라고 한다.
그런데 이런 조회 작업뿐만 아니라, 정보를 새로 넣거나 수정하거나 삭제해야 하는 CRUD 작업도 필요하다.
REST API 에서는 이를 위해서 POST(CREATE), GET(READ), PUT(UPDATE), DELETE, PATCH(부분 수정) 이렇게 5가지를 사용한다. 이것들을 우체국에 있는 박스들로 비유하자면 POST, PUT, PATCH는 박스가 사이즈가 커서 BODY라는 박스에 이것저것 담아 보내기 때문에 비교적 데이터들을 안전하게 감춰서 실어보낼 수 있다.
해당 글은 REST API의 아주 기초적인 개념을 설명한것이고 인터넷에 restful api design guidelines 라고 검색하면 보다 자세한 내용을 찾아볼 수 있다.