REST와 RESTful

Heejeong Choi·2021년 8월 14일
0

웹개발

목록 보기
2/6
post-thumbnail
해당글은 '스프링 부트로 배우는 자바 웹 개발'을 읽고 작성 었습니다.

REST(Representational State Transfer)

  • REST는 웹에서 데이터를 전송하고 처리하는 방법을 정의한 인터페이스
  • 분산 네트워크 프로그래밍의 아키텍처 스타일(WWW과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식)
  • 즉, 자원을 이름으로 구분해 해당 자원의 상태 및 정보들을 주고 받는 모든 것을 의미함.

REST의 구체적인 개념

HTTP URI(Uniform Resource Identified) 을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, HEAD)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미.

REST 특성

  1. 클라이언트/서버(Client/Server)
    👉 클라이언트와 서버가 서로 독립적으로 구분되어야 함.
    👉 서버 또는 클라이언트 생성시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다.

  2. Stateless; 상태없음
    👉 클라이언트와 서버간의 통신시 상태가 없어야함.
    👉 세션이나 쿠키 정보를 별도로 저장하지 않아서 API 서버는 들어오는 요청만 단순히 처리하면 되는 시스템.
    👉 그렇기 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해짐.

  3. 레이어드 아키텍쳐(Layered Architecture)
    👉 서버와 클라이언트 사이에 게이트웨이, 방화벽, 프록시가 있는 것 처럼 다계층 형태로 레이어를 추가/수정/제거가 가능하고 확장성 또한 가능해, 구조상의 유연성을 둘 수 있다.

  4. 캐시(Cache)
    👉 클라이언트가 캐시를 통해서 응답을 재사용 할 수 있고 이를 통해 서버의 부하를 낮춰 서버의 성능 또한 향상 시킬 수 있음.
    👉 Last-Modified 태그 또는 E-Tag를 이용해 캐싱 구현이 가능.

  5. 코드 온 디멘트(Code on demand)
    👉 요청이 오면 코드를 준다는 뜻
    👉 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에게 전달해 해당 기능을 동작하도록 하는 것.
    👉 ex) 애플릿, javaScript, 플래쉬

  6. 통합 인터페이스
    👉 서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이루어져야만 함
    👉 HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능(특정 언어나 기술에 종속되지 않음)
    👉 그렇다면 통합 인터페이스 규칙은 어떻게 될까? (👇🏽)

REST 인터페이스 규칙

  1. 리소스 식별 : 웹 안에서 서로 구분할 수 있는 개념으로, URI와 같은 고유 식별자를 통해 표현이 가능하다.
  2. 표현을 통한 리소스 처리: 같은 데이터에 대해서 표현 할 때, JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현 될 수 있다.
  3. 자기 묘사 메세지
    • 네트워크 통신 : 헤더(header) 부분에 현재 보내고 있는 데이터 패킷에 대한 메타 정보를 담아서 본문을 읽을 때 어떤 의도로 작성되었는지 파악 가능.
    • HTTP 통신 : Http header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을 수 있음.
  4. 애플리케이션의 상태에 대한 하이퍼미디어(HATEOAS, Hypermedia As The Engine Of Application State)
    • 웹은 여러 페이지들과 그 페이지들을 이동할 수 있는 링크 정보들로 구성됨.
    • REST API를 개발할 때도 단순히 데이터만 전달하지 않고, 링크 정보까지 포함한다면 웹에 친숙한 API가 될 수 있음.

RESTful?

REST에 대해 앞에서 배워보았는데, 그렇다면 RESTful 하다는 것이 무엇일까?
우선 RESTful을 배우기전에 API를 알아보자.

API?

데이터와 기능의 집합.

그렇기 때문에 API 이용자는 API를 사용하면 API가 제공하는 데이터를 얻을 수 있고, API가 제공하는 특정 기능을 사용 할 수있다.

그래서 RESTful이 뭐라고?

API의 구조가 위에서 언급한 REST 요건들에 적합한 경우를 말한다.

REST API

RESTful 한 API를 말한다.


추가적으로, 우리가 여태까지 여러가지 기술 아키텍처 스타일을 배워왔던 것 처럼, REST 역시 특정 기술에 종속성을 갖지 않고 분산 처리를 위한 서버를 만들기 위해 반드시 REST 특성을 준수해야 할 의무는 없지만, 서버 개발의 경우 고가용성과 확장성이 요구되므로 REST의 특성을 지켜 개발을 진행하다 보면 더 확장성 있는 서버 애플리케이션을 개발할 수 있으니, 웹개발을 한다면 적어도 REST 특성을 머리속에 넣어두고 활용 할 수 있도록 하는 것이 좋겠다.

profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.

0개의 댓글