회고

Web Server 기초 express 및 http 로 간단한 서버 만들기 회고

JJ_hyun 2022. 6. 20. 20:46

개인적으로는,,, 토악질 나게 이해도 안됫고 어려웠다. 

특히 빈 도화지에 그리려고 하는데 나만 이해 못하고 뒤쳐지는 느낌이 들어서 더 괴로웠다. 

두 번다시 이런 감정이 들기 싫으니 회고라도 잘 해보자. 

 

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()로 다음 미들웨어가 실행할 수 있게 해준다.