들어가며
스프링부트 + 리액트(타입스크립트) 둘 다 하는 강의를 2개 듣고 있는데 프론트 부분을 만질 때 RESTful API를 사용해서 뭘 한다고 하는데 미리 알고 있어야 할 것 같아서 찾아보게 되었다. 물론 듣기도 많이 들었는데 내배캠에서는 백엔드, 프론트엔드 협업을 일절 진행하지 않아서 이런 게 있다 정도하고 넘어갔었다.
RESTful API란?
RESTful API는 웹 서비스에서 데이터를 주고 받는 방식 중 하나로, REST란 'Representational State Transfer'를 줄인건데 난 휴식인줄 알았다...ㅎㅎ;
뭐 이렇다고 한다. 한글로도 어려운데 --;;?
특징
- Uniform (유니폼 인터페이스) : HTTP 표준만을 사용하므로 HTTP를 그대로 사용할 수 있다.
- Stateless (무상태성) : 작업을 위한 상태 정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않아 API 서버는 들어오는 요청만을 단순히 처리하면 된다.
- Cacheable (캐시 가능) : HTTP의 기존 웹 표준을 그대로 사용하므로, 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.
- Client-Server 구조 : REST 서버는 API를 제공하고, 제공된 API를 이용해서 비즈니스 로직 처리 및 저장을 책임져준다.
- Self-descriptiveness (자체 표현 구조) : REST API 메시지만 보고도 이를 쉽게 이해할 수 있다.
장점
- 웹 환경에서 사용하기에 최적화 되어있는 아키텍처라고 한다.
- 분산 컴퓨팅을 위한 아키텍처로, 무상태성을 가지고 있어 서버와 클라이언트의 각각의 역할이 명확하게 분리된다.
- HTTP 표준 규약을 따르는 모든 플랫폼에서 사용이 가능하다.
- 프로토콜에 대한 의존성이 높지 않다.
단점
- 표준으로 정해진 것이 없기 때문에, 설계에 따라 서비스의 질적인 차이가 커지게 된다.
- HTTP를 사용하므로 통신 모델에 제한이 있다.
- RDBMS의 트랜잭션과 같은 기능이 제한적이다.
어떻게 사용할까?
RESTful API는 HTTP 메소드를 사용하여 특정 URL에 대해 CRUD 동작을 수행한다. 예를 들어, 사용자 정보를 관리하는 서비스의 경우, 다음과 같이 사용할 수 있다고 한다.
- GET / users : 모든 사용자 정보 조회
- POST / users : 사용자 정보 생성
- GET / users / {id} : 특정 사용자 정보 조회
- PUT / users / {id} : 특정 사용자 정보 수정
- DELETE / users / {id} : 특정 사용자 정보 삭제
이런 방식으로, URL의 경로와 HTTP 메소드를 조합하여 원하는 동작을 수행할 수 있다.
이론으로만 알고 사용해본 적은 없어서 GPT한테 이미지화 해달라고 했는데 정리가 잘된 것 같다.
CRUD Operation HTTP Method URL(Uniform Resource Locator)
---------------------------------------------------------------------------
사용자 정보 생성 POST /users
모든 사용자 정보 조회 GET /users
특정 사용자 정보 조회 GET /users/{id}
특정 사용자 정보 수정 PUT /users/{id}
특정 사용자 정보 삭제 DELETE /users/{id}
예를 들어, '사용자 정보 생성'이라는 CRUD Operation을 수행하려면, HTTP Method로 'POST'를 사용하고, URL로 '/users'를 사용하게 됩니다. 이와 같은 방식으로 HTTP Method와 URL을 조합하여 다양한 동작을 수행하는 것이 RESTful API의 사용법입니다.
이렇다고 한다. 정리를 하긴 해봤는데 실제로 적용을 해보지 않으면 내 것으로 만들기가 쉽지는 않아보인다.
정리
머리로 하는 공부라고 하지만 결국은 내 손으로 직접 작성해보고 사용해봐야 익힐 수 있다는 생각이 많이 들었다.
부지런히 강의 듣고 많이 만들어보고 폴더구조도 파악하고 차근차근 쌓아가야할 것 같다.
일전에 HTTP를 들을때 그려봤던 건데 알것 같기도 하고... 틈날때마다 포스팅한것을 자주 읽어봐야겠다.
'Knowledge > CS & HTTP' 카테고리의 다른 글
CI/CD 그게 뭔데요...? (1) | 2024.01.08 |
---|---|
쿠키와 세션 (0) | 2023.12.27 |
인터넷 통신이란? (1) | 2023.12.18 |
배열(Array) (0) | 2023.12.16 |
Stack과 Queue (0) | 2023.12.15 |
쓰임 있는 사람이 되기 위해 노력 중입니다.