Web Server 기초 express 및 http 로 간단한 서버 만들기 회고
개인적으로는,,, 토악질 나게 이해도 안됫고 어려웠다.
특히 빈 도화지에 그리려고 하는데 나만 이해 못하고 뒤쳐지는 느낌이 들어서 더 괴로웠다.
두 번다시 이런 감정이 들기 싫으니 회고라도 잘 해보자.
1. SOP 란 무엇인가?
SOP 는 Source origin(protocol + host + port) poliy 의 준말로
같은 origin 이 아니면 source 를 제공해 주지 않는다는 브라우저의 기본 정책이다.
2. CORS 란 무엇인가?
CORS 란 Cross Origin Resource Sharing 의 준말로
서로 다른 origin 끼리 resource 를 공유 할 수 있는 방법을 말한다.
3. CORS 의 동작 방식은 무엇인가?
4가지가 있는데 그 중 한가지는 바로 pre-filght 방식이다.
본 요청을 보내기 전에 먼가 CORS 요청을 보내고 200응답이 오면 본 요청을 보낸다.
이하로 바로 전 정리글을 보면 나머지 3부분을 확인 할 수 있다.
4. CORS 의 설정 방법은?
node 서버와 express 서버 두가지를 설명하자면,
4-1. node server
const http = require('http')
const server = http.createServer((request,response)=>{
response.setHeader("Access-Control-Allow-Origin","*")
// 모든 도메인에 관하여 허용
response.setHeader("Access-Control-Allow-Origin","http://localhost:3000")
// 특정 도메인에 관하여 허용
response.setHeader("Access-Control-Allow-Origin","true")
// 인증 정보를 포함한 요청을 받을 경우
}
createServer 메서드 ( http.createServer([options][, requestListener]) )
HTTP 서버 객체로 생성한다.
HTTP 서버 개체는 컴퓨터의 포트를 수신 대기하고 요청이 만들어 질때 마다 requestListener 기능을 실행 할 수 있다.
( 내가 이해하기로는,, 요청보내면,, 두번째 매개변수가 요청에 관해서 어떤 기능을 실행 할 수 있다? 라고 이해함 )
4-2. express server
const cors = require("cors");
const app = express();
//모든 도메인
app.use(cors());
//특정 도메인
const options = {
origin: "https://codestates.com", // 접근 권한을 부여하는 도메인
credentials: true, // 응답 헤더에 Access-Control-Allow-Credentials 추가
optionsSuccessStatus: 200, // 응답 상태 200으로 설정
};
app(cors(options));
//특정 요청
app.get("/example/:id",cors(),function(req,res){
res.json(msg:"example")
}
);
5. 미들웨어는 무엇인가?
요청과 응답을 하는데 특정 일을 하고 오류가 난 부분을 찾기도 하는, 컴베어 밸트에서 특정 역할을 한다고 이해할 수 있다.
6. 미들웨어를 어떻게 사용하나?
app.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next();
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
위 코드를 예시로 이해를 해보겠다.
use 메서드? 는 여러개의 인자를 받을 수 있다. 이는 다 미들웨어를 실행함에 있어 몇개가 필요한지는
사용자가 판단 할 수 있다.
첫번째 인자는 일종의 breakPoint 로 '/user/:id 요청에 대한 처리를 뜻한다.
두번째 인자는 콜백함수는 3개의 인자를 받는다.
( 요청, 응답, 미들웨어? )
두번째 인자인 콜백함수를 보면 응답과 요청이 없다는 것을 볼 수 있다.
이렇게 될 경우 함수를 실행하였으나 응답과 요청이 없으니 계속 방치된 채로 있게된다.
하지만 우리는 필요없이 그냥 넘어가야 하는 경우가 있을 것이다. 이때 필요한게 바로 3번째 인자인 next() 이다.
next() 는 응답없이도 다음 미들웨어를 실행하라는 명령어 같은 것이다.
이어서 세번째 매개변수도 콜백함수이다. 똑같이 미들웨어이며
두번째 함수랑 같이 응답이 없으나 next()로 다음 미들웨어가 실행할 수 있게 해준다.