delpho
네트워크에 대하여 - 3 본문
_1. RESTful이란 무엇이며, 이것에 대해서 아는대로 설명해보세요.(보충필요)
[ RESTful ]
- REST + ful (접미사)
- REST스러운, REST스럽다
- REST에 대한 원칙을 준수했을때, 그 시스템이 RESTful하다라고 말할 수 있음
[ REST ]
- HTTP를 잘 활용하기 위해 만들어진 아키텍처
- 네트워크 리소스를 정의하고 처리하는 방법을 설명하는 일련의 원칙을 기반으로 하는 아키텍쳐 스타일
- HTTP 통신에서 URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD 요청을 전달하는 방식
- URI와 HTTP Method를 사용해서 자원과 행위를 표현함!
- API의 의미를 표현하기 쉽고 의미를 파악하기도 쉽다.
- URI와 HTTP Method를 사용해서 자원과 행위를 표현함!
- REpresentational State Transfer 👉 표현적인 상태 전달 (의역 = 리소스의 표현에 의한 상태(정보) 전달)
- 리소스를 URI에 표현해서 주고받을 정보에 대해 예측 가능
- /course/java 👉 자바 과정에 대한 정보
- /course/python 👉 자바 과정에 대한 정보
- URI에 동사 표현을 사용 X 👉👉 자원에 대한 행위에 대해서 HTTP method(CRUD) 사용!
- /course/member/append
- /course/member/remove
- 리소스를 URI에 표현해서 주고받을 정보에 대해 예측 가능
- 표현의 어려움이 있음
- 로그인 👉 POST /user 👉 회원가입같이 보임!
- 로그아웃 👉 DELETE /users/{id} 👉 회원탈퇴같이 보임!
- 예외적으로 /login, /logout으로 처리했다고 함
- 그렇다면 이 API는 REST의 원칙을 지키지 않았기 때문에 동작하지 않을까?
- 그건아님! REST에는 명확한 원칙이 있긴 하지만, 지키기 힘들때도 있음
[ REST의 규칙 ]
- URI는 명사를 사용한다.
- 슬래시로 계층 관계를 표현한다.
- URI의 마지막에는 슬래시를 붙이지 않는다.
- URI는 소문자로만 구성
- 가독성이 떨어지는 경우 하이픈을 사용
[ REST 아키텍쳐의 특징 ]
- Uniform Interface(일관된 인터페이스)
- Resource(URI)에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일을 의미
- 이것은 요청을 하는 Client가 플랫폼(Android, Ios, Jsp 등) 에 무관하며, 특정 언어나 기술에 종속받지 않는 특징을 의미
- Stateless(무상태성)
- 서버는 각각의 요청을 별개의 것으로 인식하고 처리해야하며, 이전 요청이 다음 요청에 연관되어서는 안됨
- 그래서 Rest API는 세션정보나 쿠키정보를 활용하여 작업을 위한 상태정보를 저장 및 관리하지 않음
- Cacheable(캐시 가능)
- Rest API는 결국 HTTP라는 기존의 웹표준을 그대로 사용하기 때문에 Rest API에서도 캐싱 기능을 적용할 수 있음
- Last-Modified Tag 또는 E-Tag를 이용하여 캐싱을 구현 가능
- 대량의 요청을 효울척으로 처리할 수 있게 도와줌
- 대량의 요청을 효울척으로 처리할 수 있게 도와줌
- Client-Server Architecture (서버-클라이언트 구조)
- Self-Descriptiveness(자체 표현)
- Rest API는 요청 메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있음
- 아래와 같은 JSON 형태의 Rest 메세지는 http://localhost:8080/board 로 게시글의 제목, 내용을 전달하고 있음
- HTTP POST , http://localhost:8080/board
{
"board":{
"title":"제목",
"content":"내용"
}
}
- Layered System(계층 구조)
- Rest API의 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 등을 위한 계층을 추가하여 구조를 변경할 수 있음
- 또한 Proxy, Gateway와 같은 네트워크 기반의 중간매체를 사용할 수 있게 해줌
- 하지만 클라이언트는 서버와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없음
[ Collection과 Document ]
- Collection
- Document들의 묶음
- 일반적으로 복수 형태의 단어를 사용
- Document
- 1개의 개체를 나타내는 것으로 객체 인스턴스, DB의 Record와 유사한 개념을 가짐
- 일반적으로 리소스의 집합 중 하나를 의미하며 Collection 뒤에 위치
- 예제
- http://localhost/members/{id}
- members가 Collections이고 {id}가 Document를 의미합니다.
[ REST의 장단점 ]
- 장점
- HTTP 프로토콜의 인프라를 그대로 사용
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능
- 의도하는 바를 쉽게 파악할 수 있음
- 단점
- 표준이 자체가 존재하지 않아 정의가 필요
- 사용할 수 있는 메소드가 4가지밖에 없음
_2. CORS란 무엇이며 이것에 대해서 설명해보세요.
[ SOP와 CORS ]
- 웹에는 우리가 가져오는 리소스들이 안전한지 검사하는 2가지 정책이 존재
- HTTP 요청에 대해서 어떤 요청을 하느냐에 따라 따르는 정책이 다름!
- HTML 👉 기본적으로 Cross-Origin 정책을 따름
- link 태그에서 다른 origin의 css 등의 리소스에 접근하는 것이 가능
- img 태그등에서 다른 리소스에 접근하는 것이 가능
- XMLHttpRequest, Fetch API 등 script 태그 내 👉 기본적으로 Same-Origin 정책을 따름
- 자바스크립트는 서로 다른 도메인에 대한 요청을 보안상 제한한다. (브라우저 기본 설정은 하나의 서버 연결만 허용)
- 이 정책을 Same-Origin-Policy라고 한다.
- HTML 👉 기본적으로 Cross-Origin 정책을 따름
[ 출처 (Origin) 이란? ]
- Origin = 프로토콜 + Host + Port
[ SOP ]
- "같은 출처에서만 리소스를 공유할 수 있다"라는 규칙을 가진 정책
- 출처를 비교하는 로직은 서버에 구현된 스펙이 아닌 브라우저에 구현된 스펙
- Origin (프로토콜 + Host + Port)이 동일한지 아닌지 확인하면 됨!
- 하나라도 일치하지 않으면 Cross Origin이라고 함!
- 다른 출처 (Origin)로써 Same-Origin Policy 정책을 어긋나기 때문에, 서버로부터 응답이 넘어올 때 브라우저에서 CORS Policy 오류를 발생시킨다.
- CORS Policy 에러란?
- CORS를 허용해서 아무런 탈 없이 다른 출처 리소스 공유를 해달라!
- 하나라도 일치하지 않으면 Cross Origin이라고 함!
[ CORS (Cross-Origin Resource Sharing) <교차&다른 출처 리소스 공유> ]
- 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
- CORS 기본 동작 과정
- 클라이언트에서 HTTP 요청의 헤더에 Origin을 담아 전달
- 다른 Origin의 리소스 요청시 클라이언트는 HTTP 요청 보냄
- 요청헤더의 ORigin 필드에 요청을 보내는 Origin 담아보냄
- 서버는 응답헤더에 Access-Control-Allow-Origin을 담아 클라이언트에 응답
- 서버가 허락하는 Origin을 클라이언트에 응답
- 클라이언트에서, 자신이 보냈던 요청의 Origin과 서버에서 보내준 Access-Control-Allow-Origin 비교
- 클라이언트에서 HTTP 요청의 헤더에 Origin을 담아 전달
_3. OSI7계층과 그 존재 이유, TCP/IP 4계층에 대해 설명해보세요.
출처
https://www.youtube.com/watch?v=NODVCBmyaXs
https://bamdule.tistory.com/146
https://mangkyu.tistory.com/46
'CS' 카테고리의 다른 글
자료구조에 대하여 - 2 (0) | 2022.07.06 |
---|---|
자료구조에 대하여 - 1 (0) | 2022.07.05 |
네트워크에 대하여 - 2 (0) | 2022.06.25 |
네트워크에 대하여 - 1 (0) | 2022.06.22 |
DB에 대하여 - 1 (0) | 2022.06.19 |