일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 안드로이드 레트로핏 사용법
- rxjava disposable
- ANR이란
- 안드로이드 유닛테스트란
- 자바 다형성
- 2022 플러터 설치
- 큐 자바 코드
- 객체
- ar vr 차이
- android ar 개발
- 스택 큐 차이
- 안드로이드 유닛 테스트 예시
- 스택 자바 코드
- rxjava hot observable
- rxjava cold observable
- 안드로이드 라이선스 종류
- 안드로이드 레트로핏 crud
- jvm 작동 원리
- 서비스 vs 쓰레드
- 멤버변수
- 클래스
- Rxjava Observable
- 플러터 설치 2022
- 안드로이드 라이선스
- jvm이란
- 서비스 쓰레드 차이
- 안드로이드 os 구조
- android retrofit login
- 안드로이드 유닛 테스트
- 2022 플러터 안드로이드 스튜디오
- Today
- Total
나만을 위한 블로그
REST란? 본문
REST : Representational State Transfer, 대표적 상태 전달? 대표적 상태를 전달한다는 게 무슨 뜻일까?
네이버 사전에선 REST를 이렇게 말하고 있다.
- 확장성 생성 언어(XML) 파일로 된 웹 페이지를 읽어 원하는 정보를 수집하는 기능
확장성 : 범위나 규모 따위를 늘려서 넓히는 성질
생성 : 사물이 생겨남, 또는 사물이 생겨 이뤄지게 함
XML 파일로 된 웹 페이지? HTML, CSS, JS를 사용하는 웹 페이지를 말하는 것이겠다.
그럼 특정 웹 페이지를 읽고 원하는 정보를 수집하는 기능은 모두 REST라고 말할 수 있는 건가?
잘 모르겠다. 다른 포스팅에선 REST를 어떻게 설명하는지 확인해보자.
REST : WWW 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식, 웹에 존재하는 모든 자원(이미지, 동영상, DB 내 데이터들)에 고유한 URI를 부여해 활용하는 것으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법론
URI : Uniform Resource Identifier, 균일한 자원 식별자
이 문장은 웹 페이지 안에 들어있는 이미지, 동영상 따위의 모든 데이터들에 고유한 식별자를 부여해서, 이것의 주소를 지정하는 방법론을 말하는 듯하다.
그리고 이런 REST 형식을 따른 시스템을 RESTful하다고 부른다고 한다.
아래는 영문 위키백과의 설명을 가져온 것이다.
REST : 웹 서비스를 만드는 데 사용할 제약조건 집합을 정의하는 소프트웨어 아키텍처 스타일이다. RESTful 웹 서비스라고 하는 REST 아키텍처 스타일을 준수하는 웹 서비스는 인터넷의 컴퓨터 시스템 간 상호 운용성을 제공한다. RESTful 웹 서비스를 사용하면 요청 시스템이 일관되고 사전 정의된 상태 비저장 작업 집합을 사용해서, 웹 리소스의 텍스트 표현에 접근하고 조작할수 있다...RESTful 웹 서비스에서 리소스의 URI에 대한 요청은 HTML, XML, JSON 또는 다른 형식으로 형식화된 페이로드로 응답을 이끌어낸다...(중략)
근데 왜 이것을 쓰는 것일까?
검색을 하다보니 HTTP 함수라는 말이 자주 보인다. 이것부터 먼저 짚고 넘어가야 할 것 같다.
HTTP : Hypertext Transfer Protocol, 하이퍼텍스트 전송 규약(프로토콜)
규약 : 조직체 안에서 서로 지키도록 협의해서 정해놓은 규칙
규칙 : 여러 사람이 모두 지키기로 작정한 법칙, 또는 제정된 질서
HyperText : 문장 중의 어구나 그것에 붙은 표제, 표제를 모은 목차 등이 서로 연결된 문자 데이터 파일
HTTP란 내가 가진 어떤 데이터 파일을 누군가에게, 혹은 불특정 다수에게 보낼 때 이런이런 형식에 맞춰서 보내라고 정해져 있어서, 누구든지 준수해야 하는 프로토콜인 듯하다.
위키백과에서는 아래와 같이 말하고 있다.
- HTTP는 분산된 협업 하이퍼미디어 정보 시스템을 위한 응용 프로그램 프로토콜이다. WWW에서의 데이터 통신의 기초이며, 하이퍼텍스트 문서에는 사용자가 쉽게 액세스할 수 있는 다른 리소스에 대한 하이퍼링크(마우스 클릭, 웹 브라우저에서 화면을 누름)가 포함돼 있다. HTTP는 클라-서버 컴퓨팅 모델에서 요청-응답 프로토콜로 작동한다.
HTTP는 중간 네트워크 요소가 클라-서버 간의 통신을 개선하거나 활성화할 수 있도록 설계됐다. HTTP 자원은 URI 체계 및 HTTP(S)를 써서 URL(Uniform Resource Locator)에 의해 네트워크에서 식별되고 위치한다.
그럼 HTTP 함수는 뭘까? 위에서 클라-서버 컴퓨팅 모델에서 요청-응답 프로토콜로 작동하는 것이 HTTP라고 했다.
이 HTTP는 식별된 자원에 대해 수행할 원하는 조치를 표시하기 위해 함수를 정의한다. 이걸 HTTP 함수라고 한다.
함수의 종류는 GET, HEAD, POST, PUT(=UPDATE), DELETE, TRACE, OPTIONS, CONNECT, PETCH가 있지만 내가 주로 사용하는 것은 CRUD에 사용되는 GET/POST, PUT, DELETE다.
즉, HTTP 함수란 웹 페이지에서 데이터의 조회, 추가, 수정, 삭제 등의 작업을 해야 할 때 사용하는 도구라고 이해했다.
다시 돌아가서, REST는 웹에 존재하는 이미지, 영상 따위의 모든 자원들에 고유한 식별자를 부여해 자원을 정의하고, 자원의 주소를 지정하는 방법론이라고 했다.
REST를 설명할 때 HTTP와 HTTP 함수가 나오는 이유는, 웹 페이지의 하이퍼링크를 통해 서버의 데이터를 조회하거나 조작할 필요가 있을 때 이 2가지를 사용하기 때문이 아닐까?
그럼 REST 형식을 따르는 시스템을 Restful하다고 했는데, REST의 특징은 뭐가 있을까?
아래는 인터페이스가 Restful로 참조되어야 하는 경우 충족해야 하는 6개의 공식 제약이다. 이 중 하나라도 해당하지 않으면 RESTful하다고 할 수 없다. 즉, 이 6개의 제약이 REST의 특징이라고 할 수 있다.
1. 클라-서버 구조 : 자원이 있는 서버, 자원을 요청하는 클라이언트의 구조다. UI 문제와 데이터 스토리지 문제를 분리하면 여러 플랫폼에서 UI 이식성이 향상된다. 또한 서버 구성요소를 단순화해서 확장성을 향상시킬 수 있다.
2. 상태 비 저장(stateless) : 클라에서 서버로 가는 각 요청에는 요청을 이해하는 데 필요한 모든 정보가 포함되어야 하며 서버에 저장된 Context를 쓸 수 없다. 따라서 세션 상태는 모두 클라에 유지된다.
3. 캐시 처리기능(Cacheable) : 웹 표준인 HTTP 프로토콜을 그대로 갖다 쓰므로 웹에서 쓰는 기존 인프라를 그대로 활용할 수 있다.
4. 계층화(Layered system) : API 서버는 순수한 비즈니스 로직을 실행하고 그 앞에 사용자 인증, 암호화, 로드밸런싱 등을 수행하는 계층을 추가해 구조상의 유연성을 줄 수 있다.
5. 인터페이스 일관성 : URI로 지정한 자원에 대한 조작을 통일하고, 한정적인 인터페이스로 수행한다. HTTP 표준에만 따르면 모든 플랫폼에 사용 가능하다.
6. 자체 표현 구조 : 동사(메서드) + 명사(URI)로 이뤄져 있어, 어떤 메서드에 무슨 행위를 하는지 알 수 있으며 REST API 자체가 API 메시지만 보고도 이해할 수 있는 것이다.
좀 어렵다. 이것을 공부하다가 그나마 쉽게 풀어쓴 것 같다고 느껴지는 영문 포스팅을 찾았다. 관심있다면 확인하자.
www.codecademy.com/articles/what-is-rest
결론
- REST는 웹에 있는 이미지, 동영상 등 모든 자원에 고유 URI를 부여해, 웹 서비스를 만드는 데 필요한 제약조건들의 집합을 정의하는 소프트웨어 아키텍처 스타일이다.
- REST의 특징은 6개 있으며 이 중 하나라도 해당하지 않으면 RESTful하다고 할 수 없다.