REST API 란?
개발, 특히 백엔드를 꿈꾸는 개발자라면 지겹도록 듣는 말이 있다.
바로 REST API이다.
이것이 무슨 의미인지 정확하게 파악한 적이 있는가?
결론부터 말하자면 다음과 같다.
REST API는 'HTTP method를 이용하여 통신한다'와 같은 '규칙'을 통하여, 어플리케이션의 자원을 식별하고 조작하는 것을 의미한다.
어떤 의미인지 모르겠는가?
지금부터 낱낱이 파헤쳐보도록 하자!
API 란 무엇인가?
API는 Application Programming Interface를 의미한다. 이는 다른 어플리케이션과 통신하기 위해 따라야 하는 규칙을 정의하는 것이다(출처: AWS).
https://aws.amazon.com/ko/what-is/restful-api/
RESTful API란 무엇인가요? - RESTful API 설명 - AWS
Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API Gateway를 사용하면 실시간 양방향 통신 애
aws.amazon.com
이 말이 무엇이냐. 누군가가 어떤 어플리케이션을 개발했으면 이걸 사용하는 사람은 어플리케이션 개발자가 요구하는 규칙을 따라야 한다. 이 규칙을 정의하는 행위, 혹은 이 규칙 자체를 API라고 한다.
예를 들어, 부모님이 밥먹기 전에 꼭 손을 씻으라고 하신다. 우리는 부모님이 밥을 지어주셨으니 밥을 먹기 위해서 마땅히 따라야 할 것이다. 여기서 밥먹기 전에 꼭 손을 씻으라는 규칙을 정의하는 행위, 혹은 규칙 자체가 API인 것이다.
일반적인 예로는 네이버 API가 있다. 우리는 개발하면서 크롤링을 한 번쯤 해볼 수 있을 것이다. 이를 위해 대부분 복잡한 과정을 겪었을 것이다. 그런데 네이버의 경우, 이걸 편하게 해주는 검색 API를 제공한다. 이것으로 우린 쇼핑, 뉴스, 백과사전 등 크롤링 등의 작업을 더욱 쉽게 할 수 있다.
여기를 보면 하나 하나 자세히 설명이 나와있다.
https://developers.naver.com/docs/serviceapi/search/news/news.md#%EB%89%B4%EC%8A%A4
검색 > 뉴스 - Search API
검색 > 뉴스 뉴스 검색 개요 개요 검색 API와 뉴스 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 영화, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 있는 API
developers.naver.com
요약하자면, 네이버 개발자 센터에서 자신의 애플리케이션을 등록하면 클라이언트 아이디와 클라이언트 시크릿이 발급된다는 것이다. 그리고 이 클라이언트 아이디와 클라이언트 시크릿을 입력하여야 네이버 검색 API를 사용할 수 있다.
검색 규칙을 사용할 수 있다니? 이게 무슨 말이지?

여기서는 어플리케이션를 의미하는 것이다. 즉, 조금 더 확장하여 정리하자면 API는
API란 application을 사용하기 위하여 필요한 규칙, 혹은 규칙을 정의하는 것, 혹은 이런 규칙이 정해진 어플리케이션 자체를 의미한다.
REST란 무엇인가?
이제 거의 다왔다. API를 알았으니 이제는 REST 차례이다.
REST는 Representational State Transfer의 줄임말이다. 이건 해석하지 않고 설명하는 것이 더 이해하기 편하다.
어플리케이션이 가진 자원(정보 자체)을 URI(Uniform Resource Identifier)를 통해 식별하여 HTTP Method를 통해 자원에 접근하고 조작한다.

...?
아직 가지마라. 차근차근 예시를 들어가며 설명하겠다. 아래 문장을 계속 보면서 이해해 보자.
어플리케이션이 가진 자원(정보 자체)을 URI(Uniform Resource Identifier)를 통해 식별하여 HTTP Method를 통해 자원에 접근하고 조작한다.
예를 들어, 온라인 서점이 있고, 다양한 책들이 있다고 하자. 각 책은 서비스의 "자원"이 될 수 있다. 이 자원들을 URI로 접근하고, HTTP Method를 사용하여 조작할 수 있다.
여기서 책(자원)에 접근하는 방식이 URI라고 생각하면 된다.
예를 들어, '/books/{id}'와 같은 URI가 있다고 하면, '/books/1'의 의미는 책들(자원들) 중에서 id가 1인 책을 나타내는 것이다. id=1이 바로 자원(Resource)의 식별자(Identifier)가 되는 것이다(URI의 RI 부분).
이 자원들을 HTTP method(GET, POST, PUT, DELETE)로 조작하는 것이다. 각각 예시를 들어보며 설명하겠다.
GET: 자원을 조회할 수 있다. '/books/1'과 같은 URI가 있다고 하면, 여기에 GET method를 사용하겠다고 요청(Request)하면 "id가 1인 책의 정보를 보여주세요."라는 의미이다.
POST: 자원을 생성할 수 있다. '/books'와 같은 URI가 있을 때, 여기에 POST method를 사용하겠다고 요청하면 "새 책에 대한 정보를 채울 테니 새 책을 생성해 주세요."라는 의미이다.
PUT: 자원을 수정할 수 있다. '/books/1'과 같은 URI가 있을 때, 여기에 PUT method를 사용하겠다고 요청하면 "id=1인 책에 대하여 수정해 주세요."라는 의미이다.
DELETE: 자원을 삭제할 수 있다. '/books/1'과 같은 URI가 있을 때, 여기에 DELETE method를 사용하겠다고 요청하면 "id=1인 책에 대하여 삭제해 주세요."라는 의미이다.
이처럼 REST API는 'HTTP method를 이용하여 통신한다'라는 '규칙'을 통하여, 어플리케이션의 자원을 식별하고 조작하는 작동 방식을 의미한다.
여기서 각 HTTP method는 DB에서의 CRUD 연산과 대응된다.
CRUD란
Create(생성, POST에 대응된다)
Read(읽기, GET에 대응된다)
Update(수정, PUT에 대응된다)
Delete(삭제, DELETE에 대응된다)
위에 든 HTTP method에 따른 URI 예시는 어디까지나 예시이다. 이는 사람마다 다르게 정의할 수 있다는 것이다. 누구는 '/books/1'을 "책 id가 아니라 제목이 1인 책 정보를 주세요."라고 할 수도 있다는 것이다.
다만 일종의 URI 구조 규칙은 존재한다.
일반적인 URI 구조 규칙
1. 소문자를 사용한다.
쓸데없는 에러가 생길 수 있기 때문이다.
(X) 'http://Books/1'
(O) 'http://books/1'
2. 언더바(_) 대신 하이픈(-)을 사용한다.
대문자를 사용하지 못하니 camelCase로 표기할 수 없고, 언더바(_)는 검색창에서 잘 보이지 않으니 하이픈(-)을 쓰자.
(X) 'http://books/1/bookName'
(O) 'http://books/1/book-name'
3. 마지막에 슬래쉬(/)를 포함하지 않는다.
맨 뒤에 슬래쉬는 의미가 없고 괜히 혼란을 일으킬 수 있다(괜히 뒤에 뭔가가 더 있는 듯한 느낌을 주니까).
(X) 'http://books/1/book-name/'
(O) 'http://books/1/book-name'
4. 요청 방식을 포함하지 않는다.
어떤 요청을 보낼지는 Method로 하면 된다.
(X) GET 'http://books/get/1/book-name'
(O) GET 'http://books/1/book-name'
5. 파일 확장자는 URL에 포함시키지 않는다.
.jpg와 같은 확장자 타입은 보여주지 않는다. 대신 다른 방식으로 처리한다(이건 다음 기회에 언급하겠다).
(X) 'http://books/1/photo.jpg
(O) 'http://books/1/photo
6. 전달하는 자원은 명사를 사용한다. 단, 컨트롤 자원(ex. 책을 구매하는 작업과 같이 동작 자체가 자원인 경우)은 동사를 사용한다.
(X) 'http://books/buying'
(O) 'http://books/buy'
7. URI에 작성되는 영어를 복수형으로 작성한다.
문법적으로 맞지 않자만 실무에서 복수형으로 많이 나타낸다.
(X) 'http://books/1/price'
(O) 'http://books/1/prices'
마무리
이만하면 REST API에 대한 이해도가 충분히 높아졌을 것이다.
다음 시간에는 RESTful API에 대하여 알아보겠다.
긴 글 읽어주셔서 감사합니다.

'Data Engineering > Server' 카테고리의 다른 글
| [HTTP/2] HTTP/2 개념과 실습코드 (2) | 2024.12.30 |
|---|---|
| [HTTP] Request와 Response 패킷 파헤치기 (1) | 2024.08.15 |