2020.07.06(월) Sprint 7. Server & Node

Park, Jinyong·2020년 7월 6일
0

Today I Learned

Chatterbox-server를 http 모듈을 이용해 구현했다.

fs 모듈을 이용해 서버에 파일을 저장하여 서버가 종료되어도 데이터가 남아있도록 구현했다.

const fs = require('fs');
const path = require('path');

// __dirname: node 프로세스를 실행하는 폴더 경로
const filePath = path.resolve(__dirname, 'File-Path');
const data = JSON.parse(fs.readFileSync(filePath)); // 파일을 읽는 동기 함수이다.

// data 수정

fs.writeFileSync(filePath, JSON.stringify(data)); // 파일을 쓰는 동기 함수이다.

MIME sniffling

브라우저가 파일을 읽을 때, 파일의 실제 내용과 content-type이 일치하지 않으면, 브라우저가 자체적으로 파일의 형식을 추측하여 실행한다. XSS 공격의 원인이 될 소지가 있다.


http 모듈은 Node.js에서 공식적으로 지원하는 모듈이지만 작성 시 if 문으로 도배되어 코드가 지저분해지고 작성해야 할 코드량도 많아진다. 그래서 내일 express로 리팩토링을 진행하며 추가로 client 측에 있던 html 코드나 js 파일을 server로 옮겨 http://127.0.0.1:{port}에서 실행될 수 있도록 수정할 예정이다. 또한 auto fetching 과정을 setInterval을 사용하는 것이 아닌 socket.io 모듈을 활용할 셈이다.

오늘 의문이 생겼다. cors에서 preflight request에 필요한 headers를 포함하여 응답했는데, 본 요청인 POST 요청에도 똑같은 headers를 포함해야만 에러없이 작동했다. preflight request에서 확인했으면 본 요청에서는 재확인이 필요 없을텐데 왜 다시 포함해서 응답해야 할까?

그리고, access-control-allow-methods 헤더는 지정하지 않아도 에러가 없었고 심지어 빈 문자열을 지정해도 정상적으로 동작했다. GET만 지정했지만 POST 또한 동작했다. 대체 왜일까...

0개의 댓글