
{a : "a", b : "b"} 객체 데이터에 c : "c"를 추가해줄 것이다.
그 다음에 페이지를 리프레쉬 했을 때 추가한 값이 들어갈 수 있도록 해줄 것이다.
데이터를 추가할 때는 fetch 메소드를 사용하여 POST 요청을 보내준다.(Client에서)
그렇게 c : "c" 값을 추가해주는 요청을 보내고, 이 요청을 받아주는 부분이 있어야 한다.
request.method : 요청 메소드를 반환한다.
위쪽에 reqest.method === "POST" && reqest.url === "/home" 조건의 if문을 하나 더 작성해준다.
조건에 부합할 때 request.on() 메소드를 실행한다.
=> 특정 event를 listen 할 수 있게 해주는 기능을 가지는데,
여기서 인자로 'data'와 콜백 함수를 넣어줌으로써 'data event'가 발생할 때마다 해당 함수를 수행한다.
on의 인자로 들어가는 콜백 함수에서 데이터 chunk를 인자로 받아서, 만들어놓은 배열에 저장한다.
const body=[];
req.on('data', (chunk)=>{
console.log(chunk);
body.push(chunk); //body에 chunk 데이터를 넣는다.
});
const http = require("http");
const port = 3000;
const dataObject = { a: "a", b: "b" };
const server = http.createServer((req, res) => {
// writeHead는 한 번만 호출되어야 하며 end()가 호출되기 전에 호출되어야 한다.
// status와 response headers를 Client에 보낸다.
if (req.method === "POST" && req.url === "/home") {
req.on("data", (data) => {
console.log("data", data);
// {c : "c"}
const stringfiedData = data.toString();
console.log("stringfiedData", stringfiedData);
// Object.assign(target, source) => target에 source를 복사해서 넣는다. source의 기존 값은 변하지 않음.
Object.assign(dataObject, JSON.parse(stringfiedData));
});
} else {
if (req.url === "/home") {
res.writeHead(200, {
// "Content-Type": "text/plain",
// Javascript object를 보내려면?
"Content-Type": "application/json",
});
// 데이터가 로드되었음을 Server에 알림
res.end(
JSON.stringify(dataObject)
);
} else if (req.url === "/about") {
res.setHeader("Content-Type", "text/html");
res.write("<html>");
res.write("<body>");
res.write("<h1>About Page</h1>");
res.write("</body>");
res.write("</html>");
res.end();
} else {
res.statusCode = 404;
res.end();
}
}
});
// port 수신
server.listen(port, () => {
console.log(`Listening on port ${port}`);
});
- Yarn이란?
yarn은 페이스북에서 만든 package manager 이다.
npm을 사용할 수도 있지만 yarn을 사용해서 package를 관리할 수도 있다.
npm의 경우 node.js를 설치할 때 같이 설치되어서 따로 설치하지 않아도 되지만
yarn은 따로 설치를 해줘야 한다.
npm을 사용하여 yarn을 설치해줄 수 있다.
npm install yarn
- Yarn VS NPM
원래는 npm 만을 사용하면서 package 관리를 했지만,
프로젝트가 커질 수록 npm의 단점들(보안 및 성능 문제)에 대응하기 위하여
새로운 package manager인 yarn을 개발하게 되었다.
그러니 yarn은 같은 package manager지만 속도와 보안적인 면에서 더 향상된 성능을 가지고 있다.
- Yarn의 특징
1. package 병렬 설치
npm은 package를 설치할 때 설치하는 package를 다 설치한 후에 다른 package를 순차적으로 설치한다.
하지만 yarn은 병렬로 package를 설치하기 때문에 더 빠르게 설치할 수 있다.
2. lock 파일 생성
npm이 package-lock.json 파일을 생성하듯이
yarn 역시 yarn.lock 파일을 생성한다.
yarn.lock 파일 역시 최초 package 추가 시에 버전이 들어 있다.
그렇기 때문에 yarn.lock 파일이 있다면 레지스트리에 package의 더 최신 버전이 있어도
yarn install로 package를 설치할 때 yarn.lock에 있는 버전을 사용하게 된다.
3. 향상된 보안
yarn은 package를 다운로드하는 동안 background process로 보안 검사를 수행한다.
package license 정보를 사용하여 악성 스크립트를 다운로드하거나 종속성 충돌을 일으키지 않도록 한다.
비록 이렇게 yarn이 더 향상된 보안과 성능을 가지고 있지만
npm도 yarn이 나온 이후로 많은 버전 업데이트로 예전보다는 빠른 성능과 더 나은 보안을 가지게 되었다.
npm 보안이 큰 문제였지만, 버전 6부터 package를 설치할 때마다 보안 검사를 수행한다.
또한, npm audit 명령어를 사용하여 수동 감사를 실행할 수도 있다.
취약점 발견시 audit fix를 사용하여 문제를 해결할 수 있다.
- yarn 명령어
yarn init | package.json 파일 생성 |
yarn install | yarn 혹은 yarn install 명령어로 package.json 파일에 명시된 dependencies를 설치 |
yarn install --force | 강제로 모든 package 추가 |
yarn add | package 설치 - yarn add [package] - yarn add [package]@[version] - yarn add [package]@[tag] |
yarn add --dev | devDependencies에 package 추가 |
yarn global add (yarn global remove) |
전역으로 package를 설치하여 다른 프로젝트에서도 해당 package를 사용 또는, 전역으로 package 삭제 |
yarn upgrade | 모든 의존 package(dependencies)를 package.json에 정의한 버전의 범위에서 업데이트 그렇지만 모든 package를 일괄적으로 업그레이드 시키면 호환성 문제로 충돌이 발생할 수 있다. 그래서 아래처럼 하나씩 설치해줄 수 있다. $ yarn upgrade axios@^1.1.2 |
yarn run [script] | script에 지정해준 명령어를 이용해서 실행 "scripts" : { "start" : "react-scripts start", "build" : "react-scripts build", "test" : "react-scripts test", "eject" : "react-scripts eject" } |
yarn remove | 특정 package를 삭제 이렇게 해서 package.json과 yarn.lock에서 동시에 제거 |
- 주의 사항
package 관리를 위해서 yarn과 npm 두 개를
하나의 프로젝트애서 혼합해서 사용하면 package 충돌 오류가 날 수 있기 때문에
하나의 프로젝트에서는 하나의 package manager를 지정해서 사용하는게 좋다.
'Backend > Node.js' 카테고리의 다른 글
Node.js Runtime(런타임) (0) | 2024.12.06 |
---|---|
자바스크립트 엔진 (0) | 2024.12.05 |
HTTP Routing (0) | 2024.08.30 |
웹 서버 생성하기 (0) | 2024.08.29 |
HTTP Status Codes (0) | 2024.08.29 |
github : https://github.com/dnjfht
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!