본문 바로가기

서버운영 (TA, ADMIN)

[백엔드] RESTful API 이해하기

RESTful 개념 이해하기

백엔드 개발자라면 REST api라는 용어가 익숙할 것이라고 생각한다. 물론 나도 REST api에 대한 개념을 어렴풋이 갖고 있긴 하지만 그것이 뭐냐고 물으면 정확하게 답변하기가 어렵다. 개념이 제대로 잡히지 않았기 때문이라고 보는데..

일반적은 웹어플리케이션 흐름은 MVC(Model/View Controller내 로직처리에 의한 Model 및 View 변경) 패턴이 일반 적이다. 즉 View의 개념까지를 포함하는 것이 웹의 기본.



REST api는 View를 제외한 클라이언트 요청으로 서버내 비즈니스로직을 처리하는 api 정도로 가볍게 이해할 수 있다.

REST(Representational State Transfer)의 약자로 특정 요청에 따른 표현 상태 전이를 표현한다는 의미일까. 위키백과의 설명을 빌리자면 네트워크 아키텍처 원리의 모음으로, 네트워크 아키텍처 원리란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 간단한 의미로는, 웹 상의 자료를 HTTP 위에서 SOAP이나 쿠키를 통한 세션 트래킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다.

브라우저와 같은 웹클라이언트는 URL link와 같은 resource identifer를 통해 resource에 대해 어떤 요청을 하고 그 결과를 받게 된다. 이러한 요청 결과는 브라우저 화면에 새로운 내용이 디스플레이 되는 등의 방식으로 표현된다. 즉, 이 과정을 통해 브라우저 표현상태(Representational State)의 변경(Transfer)을 유발하게 된다. REST는 이러한 특성을 표현한 용어이다. resource는 웹이 제공하는 모든 정보 및 데이터를 의미하며, resource identifier는 resource에 대한 링크이다.

REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다.

REST 아키텍처를 만든 로이필딩은 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 한다.

REST 아키텍처에 적용되는 6가지 제한 조건 (제한조건 준수한다면, 개별 컴포넌트 자유로운 구현 가능)
- 클라이언트/서버 구조(Client-Servcer) : REST 서버는 API 제공. 클라이언트와 서버에서 개발해야할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.
- 무상태(Stateless) : 각 요청 간 클라이언트의 콘텐스트가 서버에 저장되어서는 안된다.
- 캐시처리가능(Cacheable)
- 계층화(Layered System) : REST서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
- 유니폼 인터페이스(Uniform Interface)
- 자체 표현 구조(Self-descriptiveness) : REST API 메시지만 보고도 이를 쉽게 이해할 수 있는 자체 표현구조로 되었다.

REST의 주요한 목표
- 구성 요소 상호작용의 규모 확장성
- 인터페이스의 범용성
- 구성 요소의 독립적인 배포
- 중간적 구성요소를 이용해 응답 지연 감소, 보안을 강화, 레거시 시스템을 인캡슐레이션.

REST API uri 설계 규칙
- URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다는 명사를 사용)
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)으로 표현
     POST : POST를 통해 해당 URI를 요청하면 리소스를 생성.
     GET : GET을 통해 해당 리소스를 조회. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보 로드
     PUT : PUT을 통해 해당 리소스를 수정
     DELETE : DELETE를 통해 해당 리소스를 삭제


웹서비스 백엔드개발시, 흔하게 접하는 API 개발 방식이나 정확한 개념을 잡지 못하고 있었던 것 같다. 제일 무서운것이 대충대충 알고서 상용 서비스에 적용하는 것이 아닐까 싶다. 진정 프로페셔널한 개발자로 나아가고 싶다면 개발 이전 내가 활용하고 있는 개발 방식, 기술에 대한 정확히 이해하고 쓰도록 하자.


REST API JSON 스타일 가이드
https://google.github.io/styleguide/jsoncstyleguide.xml


'서버운영 (TA, ADMIN)' 카테고리의 다른 글

[Prometheus] 메트릭과 라벨  (0) 2023.07.01
[Git] Git 도구 - 서브모듈  (1) 2020.10.25