모르는게 많은 개발자

REST란 무엇일까? 본문

알아가는 개발

REST란 무엇일까?

Awdsd 2020. 5. 14. 02:50
반응형

프로젝트를 진행하며 API서버를 개발해보면서, REST를 그냥 HTTP Method와 URI를 통해 데이터를 전달하는구나라는 막연하게만 생각해왔다. 그래서 이번에 REST에 대해 정확히 알아보고자 글을 쓴다.


 1. REST란

  • "Representational State Transfer"의 약자로 resource(자원)표현으로 구분된 resource 상태(정보)를 전달하는 것

  • URI를 통해 리소스를 표현하고 HTTP Method를 통해 CRUD를 적용하는 것

  • ROA(Resource Oriented Architecture)를 위한 설계 -> 설계의 중심에 resource를 두고 HTTP Method를 통해 자원을 처리

  • RESTful은 REST의 설계 의도를 명확하게 지켜주는 것을 의미

  • 즉, REST는 HTTP 프로토콜에서 사용되는 메소드 POST, GET,  PUT, DELETE 를 가지고 행위(CRUD)를 정의하고 URI를 리소스로 고려해서 정의하는 설계 패턴
 CRUD행위따른 HTTP Method
HTTP Method CRUD
GET Read
POST Create
PUT Update
DELETE  delete

2. REST 특징

  • Server-Client Architecture

    1. REST 서버는 API를 제공, 제공된 API를 이용해 비즈니스 로직 처리 및 저장을 책임

    2. 클라이언트의 경우 사용자 인증, 컨택스트(세션, 로그인정보)등을 직접 관리

    3. 서로간 의존성 줄어듬

    4. 어떤 플랫폼에서도 사용가능

  • Uniform Interface

    1. URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처

  • Stateless(무상태성)

    1. 클라이언트의 상태 정보를 서버에 저장하지 않는다

    2. 서버는 요청에 대한 처리만 진행

  • Cacheability

    1. REST는 HTTP를 사용함으로써 캐시 기능을 사용할 수 있음

    2. 캐시를 사용함으로써 응답시간이 빨라지고 REST 서버의 트랜잭션이 발생하지 않기때문에 서버의 자원 이용률 향상

  • Self-Descriptiveness(자체 표현)

    1. REST API의 자원(URI)를 통해 무슨 행위를 하는지 쉽게 이해할 수 있음

  • Layered System

    1. REST Server는 여러 개의 계층으로 구성될 수 있다

    2. 보안, 로드 밸런싱, 암호화 계층 등을 추가해 구조의 유연성을 얻음


3. REST API 설계 규칙

Document : 객체 인스턴스나 데이터베이스 레코드와 유사(예: /members/id  member들중에 특정id Document)
Collection : 서버에서 관리하는 디렉토리 리소스(예: /members/ members라는  Collection)
  • 자원을 표현할 때 동사를 사용하지말자(/Members/1 -> /members/1)

  • 자원의 컬렉션은 복수로 표현한다.(/member/ -> /members/

  • URI에 HTTP Method를 표현하면 안된다. (/members/get/1 X)

  • 슬래시(/)는 계층 관계를 나타내는데 사용

  • URI 마지막 문자로 슬래시를(/)를 포함 안함

  • 파일 확장자는 URI에 포함하지 않는다.

  • 밑줄(_)은 가독성이 문자가 가려져 가독성이 안좋아질 수 있으므로 사용하지 않는다


4. HTTP 응답 코드

성공
코드 내용
200 정상 수행
201 자원 생성 요청, 성공적으로 수행
클라이언트 에러
코드 내용
400 클라이언트 요청이 부적절할 경우
401 클라이언트가 권한이 없는 자원을 요쳥할 경우
403 접근 거부된 자원을 요청했을 경우
404 리소스가 존재하지 않을때
405 리소스 허용안함
서버 에러
코드  내용
500 서버에 문제가 있을 때 발생

 

 

 

 

참조

https://mygumi.tistory.com/55

https://oaksong.github.io/2018/03/17/rest/

https://wallees.wordpress.com/2018/04/19/rest-api-restful/

반응형

'알아가는 개발' 카테고리의 다른 글

[NoSql] Redis 개념/특징  (0) 2020.06.14
Base64 인코딩 개념/과정  (0) 2020.06.13
TCP/UDP 특징 총정리  (0) 2020.05.05
[양방향 암호화] 대칭키 암호화  (0) 2020.04.22
[단방향 암호화]해시 함수 / Salt  (0) 2020.04.21
Comments