immersive TIL #12

paxkk·2020년 8월 13일
0

Cross-Origin Resource Sharing (cors)

cors의 등장 이유

옛날 방식의 서버 클라이언트는 유저가 요청하면
서버안에 있는 자체적인 클라이언트를 유저가 받아가서
통신을 하거나 그 클라이언트를 데이터를 일방적으로 봤기때문에
서버에서 내려준 클라이언트는 무조건 같은 origin이므로 서버는 요청을 막을필요가 없었지만

최근에 들어서 web application이 점점 고도화 되면서
다른 서버에있는 리소스를 필요로 하기때문에 (예를 들어 slack에서 유튜브 , 깃허브를 사용하는 것처럼)
same origin이 아닌 다른서버에 있는 리소스 자원을 요청하기위해서 cors가 필요하게 되었다.

그러나 보안상의 이유로 cors 요청을 제한 했었는데
그이유는 자신의 서버에서 내려준 클라이언트가 아닌데 자신의 서버에 어떤 요청을 할지 모르는상태에서
그 요청을 제한하지않고 무조건 오픈해놓으면
서버에 어떤 리소스를 생성할 지 확인 할 수 없기때문에 처음에는 막아 놓았지만
개발자들이 웹 애플리케이션을 조금 더 고도화 시키기위해
브라우저 회사에게 제한을 풀어달라고 요청했고 이에 서버가 허용한 범위내에서 cors가 가능하도록 바뀌었다.

const defaultCorsHeader = {
  access-control-allow-origin: '*',   // 모든 도메인을 허용한다.(*)
  access-control-allow-methods:'GET,POST,PUT,DELETE,OPTION', // 사용가능한 메소드
  access-control-allow-headers:'content-type, accept',  // 헤더에는 컨텐트 타입,accept 만 쓸 수 있다.
  access-control-max-age:10 //seconds preflight는 10초동안 허용된다.
}

node.js

javascript를 기계어로 컴파일 해주는 엔진으로 빌드되어있는 javascript가 구동중인 환경이다

node.js는 이벤트 기반의 논블로킹 I/O모델이다.

이벤트
-> 유저의 버튼클릭이나 네트워크의 리소스요청
논블로킹
-> 다음 함수의 실행이 현재함수의 종료를 기다리지 않는다(비동기적) // 블로킹 ->현재함수가 종료되어야지 다음 함수가 실행
I/O모델
->input을 주면 output을 주는 모델 (request , response)

즉, 유저의 클릭이나 네트워크에 리소스를 요청 하는 이벤트가 논블로킹으로 이루어지는 Input Output model이라고 정의할 수 있다.

express

Express.js는 Node.js 환경에서 웹 어플리케이션 혹은 API를 제작하기 위해 사용되는 인기있는 프레임워크이다.
Node.js의 핵심모듈인 http와 커넥트 컴포넌트 기반이며, 이러한 컴포넌트를 '미들웨어(Middleware)'라고 한다.

미들웨어는 요청을 서버로 보낼 때 가공시키기 위한것이라고 볼 수 있다.
next()를 호출하여 그 다음 미들웨어 함수에 제어를 전달해야 한다.
res.send()는 미들웨어에서 바로 서버로 전달한다.

express공식문서 참고하여 설치 할 수 있다.
자체 라우팅을 가지고 있어서 편리하게 사용 할 수 있는것같다.
라우팅은 엔드 포인트 (URI)에 따라서 분기점을 나눠서 처리해주는것을 뜻한다.
공식문서에 안내서를 참고하자면


// GET method route
app.get('/', function (req, res) {
  res.send('GET request to the homepage');
});

// POST method route
app.post('/', function (req, res) {
  res.send('POST request to the homepage');
});
profile
꾸준하게 성장하자

0개의 댓글