상권's

TIL 60 (복습) 본문

~2022 작성 글/TIL

TIL 60 (복습)

라마치 2022. 2. 16. 16:37

* 앞 서 학습했던 내용을 복습하기 위해 질문과 답변 형태로 작성했습니다. 질문에 대해 개인적으로 이해하고 작성한 답변이기에 내용이 빈약하거나, 오류가 있을 수 있다는 점 양해 부탁드립니다.

 

REST한 API에 대해서 자세히 설명해주세요.

REST API는 REST 아키텍쳐 스타일을 따르는 API입니다. 여기서 REST란 REpresentational State Transfer의 줄임말로 분산 하이퍼미디어시스템을 위한 아키텍쳐 스타일로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법인 '네트워크 아키텍처 원리'의 모임이라고 할 수 있습니다.

 

추가 : 이러한 REST를 구성하는 스타일은 클라이언트-서버 구조, 무상태(stateless), 캐시, 계층 시스템, 인터페이스 일관성(Uniform Interface), code-on-demand(Optional이며, 서버에서 코드를 클라이언트에 보내서 실행할 수 있어야 합니다.=> 자바스크립트) 가 있습니다.

* HTTP만 잘 따라도 캐시, Stateless, 클라이언트-서버 구조, 계층 시스템은 지킬 수 있습니다.

 

REST를 정의한 로이 필딩은 REST의 모든 스타일을 만족하여야지만 REST API이다라고 하지만 대부분은 REST의 모든 스타일을 만족하지 않고 있습니다. 특히 Uniform Interface의 제약 조건인 자원의 식별(리소스가 URI로 식별되어야 한다.), 메세지를 통한 리소스의 조작(Representation(표현)을 통해서 리소스를 조작해야 한다.)은 잘 지켜지지만 HATEOAS(애플리케이션의 상태는 하이퍼링크를 이용해 전이되어야 한다.)와 자기서술적 메세지(메세지는 스스로를 설명해야 한다. 메세지 해석하는 방법이 포함되어야 한다.)는 지켜지지 않습니다. 자기 서술적 메세지는 custom media type이나 profile link relation 등으로 지킬 수 있으며, HATEOAS는 HTTP 헤더나 본문에 링크를 담아 만족할 수 있습니다.

 

여기서 자기 서술적 메세지에서 custom media type이란, 응답 메세지에서 Content-type으로 media type을 확인할 수 있는데, 여기서 text/html의 경우에는 IANA(HTTP 명세에서 media type은 IANA에 등록이 되어있다고 나옴)에서 태그의 해석방법 등 확인할 수 있습니다. 하지만 JSON은 경우 파싱을 해도 키가 무엇을 의미하는 지 확인할 수 없습니다. 그래서 IANA에 별도로 등록을 하거나,  링크를 통해서 명세함으로써 자기 서술이 가능해집니다.

 

이러한 Uniform Interface을 지켜야 하는 이유는 서버와 클라이언트가 독립적인 진화를 할 수 있도록 하기 위함(REST를 만들게 된 계기, How do i improve HTTP without breaking the web?)입니다. 독립적인 진화를 달성하기 위하여 Uniform Interface가 달성 되어야 합니다.

 

추가 :

1. REST는 HTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처이다.

2. REST에서 가장 중요한 기본 원칙은 URI는 리소스를 표현하는데 집중하고, 행위에 대한 정의는 HTTP 요청 메서드를 통해서 한다. 

 

참고 : 유투브

 

Ajax에 대해서 자세하게 설명해주세요.

Ajax란(Asynchronous Javascript and XML), 자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수순하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식을 말합니다.

 

전통적인 방식은 완전한 HTML을 서버로부터 받아 웹페이지 전체를 처음부터 다시 렌더링하는 방식으로 동작했습니다. 이는 변경할 필요가 없는 부분까지 포함된 완전한 HTML을 서버로부터 매번 받기 때문에 불필요한 데이터 통신이 발생했고, 화면 전환이 일어나면 순간적으로 깜빡이는 현상이 발생했습니다.

 

Ajax는 서버로부터 웹 페이지의 변경에 필요한 데이터만 비동기 방식으로 전송받아 한정적으로 렌더링하는 방식으로 동작해 브라우저에서도 데스크톱 애플리케이션과 유사한 빠른 퍼포먼스와 부드러운 화면 전환이 가능해졌습니다.

 

참고 : 모던 자바스크립트 Deep Dive

'~2022 작성 글 > TIL' 카테고리의 다른 글

TIL 62 (스코프란)  (0) 2022.02.23
TIL 61 (북담 서버 리팩토링3)  (0) 2022.02.20
TIL 59 (북담 서버 리팩토링2)  (0) 2022.02.13
TIL 58 (북담 서버 리팩토링1)  (0) 2022.02.12
TIL 57 (복습)  (0) 2022.02.10
Comments