web server 3 (node.js)

Ethan KIM·2022년 8월 12일
0

node.js

목록 보기
3/3

Node.js 를 들어가기전에 먼저 3 tier Architecture에 대해서 심도있게 이해해야 한다.

이 3티어 아키텍쳐라는것이, 중요한 이유는 우리가 백엔드 프로젝트를 만들때, 이 3티어 아키택쳐의 구조 아래에 프로젝트를 만들어야 하기 때문이다.

Presentation tier (client application) = Angular.js, React.js, Vue.js, Vanilla Js

Logic tier (application server) = Node.js, Nginx, Java, Python

Data tier (database server) = MongoDB, MySql

3tier 이외에도 필요하다면 n-Tier Architecture 을 이용할 수 도 있다.

Node.js Chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경으로 주로 서버사이드 어플리케이션 개발에 사용되는 소프트웨어 플랫폼이다.

Node.js는 브라우저 외부 환경에서 자바스크립트 어플리케이션 개발에 사용되며 이에 필요한 모듈, 파일 시스템, HTTP 등 Built-in Api 를 제공한다.

Node.js의 모든 API는 비동기방식으로 동작하여, Non-blocking I/O가 가능함. 이벤트 루프 모델을 사용하여 보다 가벼운 환경에서도 높은 request 처리 성능을 가짐.




CORS = Cross Origin Resource Sharing.

추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 어플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제.

CORS의 request는 3가지로 나뉜다.

1. Simple request

사용 조건.

GET HEAD POST 메소드만 사용가능함.
자동적으로 부여되는 header 외에 다른 headers가 추가되면 안됨.
정해진 Content-type header를 작성해야함.


위의 3가지 조건이 다 충족 되어야 simple request가 실행될 수 있다.


아래와 같은 요청이 주어졌을떄, CORS는 밑에 그림과 같이 작동한다.

const xhr = new XMLHttpRequest();
const url = 'https://bar.other/resources/public-data/' 
//bar.other에서 리소스를 요청.
xhr.open('GET', url);
xhr.onreadystatechange = someHandler;
xhr.send();

정상적인 Simple request의 성공 사례이고, Oringin 이 foo.example 즉 https:// foo.example 에서 요청을 보낸것이다.


그리고 응답 헤더엔 Access-Control-Alow-Origin 내장 headers가 포함된 응답을 전해줌.

2. Preflight request

preflight request는 HTTP 메소드중 OPTIONS 메소드에 의해 전달됨.

사용 조건

PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH를 할떄만 사용.
위의 simple request 와는 다르게 자동 저장되는 헤더를 제외한 원하는 헤더를 추가 할 수도 있고,
Content-type 또한 자유롭게 사용할 수 있음. simple request 의 헤더가 아닌 Content-type 이 나오면 Preflight 처리가 되어야함 ex> Content-type = JSON.


웹 브라우저에서 해당 정보를 읽는 것이 허용된 출처를 서버에서 설명할 수 있는 새로운 HTTP 헤더를 추가함으로써 동작한다.

예를 들어 read only 인 GET 을 제외한 HTTP 메서드 에 대해, CORS 명세는 브라우저가 요청을 OPTIONS 메서드로 preflight(사전전달) 하여 지원하는 메서드를 요청하고, 서버의 'permission'이 떨어지면 실제 요청을 보내도록 요구하고 있다.

3. Requests with credentials

서버에 요청을 할 때, 쿠키도 같이 보낼거냐? 라고 물어보는것.
이건 서버에서 클라이언트 브라우저에 쿠키 세션토큰을 넣어줄 때 사용됨.
ex) 로그인도 하지 않았는데 쇼핑몰 장바구니 목록에 상품을 추가한다거나,
로그인도 하지 않았는데, 추천 상품이 뜬다거나 등등 쿠키 세션을 이용한 상호작용을 할때 사용.

출처 https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

profile
좋아하는것만 함

0개의 댓글