될때까지

((기업협업2)) node야 친하게 지내자... 기본 개념정리 본문

프로젝트/wecode : 기업협업

((기업협업2)) node야 친하게 지내자... 기본 개념정리

랖니 2022. 8. 18. 01:58
728x90

port

포트는 서버 내에서 프로세스를 구분하는 번호.

다른 포트로 데이터베이스나 다른 서버 동시에 연결이 가능하다.

 

localhost

localhost는 컴퓨터 내부 주소로 외부에서는 접근이 불가능하다.

 

HTTP 요청 메소드

  • GET : 서버 자원을 가져오려고 할 때 사용
  • POST : 서버에 자원을 새로 등록하고자 할 때 사용
  • PUT : 서버의 자원을 요청에 들어있는 자원으로 치환하고자 할 때 사용
  • PATCH : 서버 자원의 일부만 수정하고자 할 때 사용
  • DELETE : 서버의 자원을 삭제하고자 할 때 사용

 

 

package.json

현재 프로젝트에 대한 정보와 사용중인 패키지에 대한 정보를 담은 파일이다.

같은 패키지라도 버전별로 기능이 다를 수 있으므로 버전을 기록해둬야한다.

동일한 버전을 설치하지 않으면 문제가 생길 수 있다.

노드 프로젝트 시작 전에 npm init이라는 명령어로 package.json부터 만들고 시작해야한다.

npm init or npm init -y하면 아래처럼 package.json 파일이 생성된다.

{
  "name": "node-test2",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1"
  }
}

scripts는 터미널에 쳐야하는 명령어를 간략하게 해주는 역할이랄까?

start는 npm run start로 실행할 수 있다. (npm start로도 가능) 그럼 옆의 코드가 실행됨.

npm i express

express를 설치하면 dependencies에 기록된다.

npm i -D nodemon

-D를 사용하면 devDependencies에 추가가 되는데, 개발할때만 쓰이는 패키지들을 저장한다.

(nodemon은 개발을 편리하게 도와주는 패키지임)

 

node_modules는 배포할 때 지워서 배포한다. (무거움)

npm i를 하면 다시 설치가 되기 때문이다.

 

npm i -g의 g는 global은 전역설치를 말하는데, dependencies에 기록이 안된다.

터미널에서 명령어처럼 사용하고 싶을 때 전역설치를 주로 한다.

글로설 설치하면 dependencies에 기록이 안되니까 다른 관리자가 무엇을 설치해야하는지 알 수가 없다.

따라서 요새는 npm i 설치할패키지 -D로 개발전용 패키지에 기록을 해주고

터미널에서 명령어를 사용하고 싶다면 npx를 앞에 붙여서 사용해주면 된다.

npm i rimraf -D
npx rimraf node_modules

npx는 node package execute의 약자로 노드 패키지 실행을 담당한다.

 

package-lock.json

정확한 버전들을 기록해두기 때문에 버전문제를 사전에 방지한다.

버전들은 세자리 수. 0.0.0 => 노드 패키지의 버전은 SemVer(유의적 버저닝) 방식을 따른다.

Major.Minor.Patch    ->  주 버전.부 버전.수 버전

노드에서는 배포를 할 때 항상 버전을 올려야한다.

  • Major는 하위버전과 호환되지 않는 수정사항이 생겼을 때 올린다.
  • Minor는 하위 버전과 호환되는 수정사항이 생겼을 때 올린다.
  • Patch는 기능에 버그를 해결했을 때 올린다.

 

  • ^1.1.1 : 패키지 업데이트 시 minor 버전까지만 업데이트 됨(2.0.0버전은 안된다)
  • ~1.1.1 : 패키지 업데이트 시 patch 버전까지만 업데이트 됨(1.2.0버전은 안됨)

 

미들웨어

미들웨어는 next()를 호출해야 다음 미들웨어로 넘어간다.

next에 인수로 값을 넣으면 에러 핸들러로 넘어간다.

 

morgan

요청과 응답에 대한 정보를 콘솔에 보여주는 패키지

개발시에는 app.use(morgan('dev')); 배포시에는 app.use(morgan('combined')); => combined가 더 자세하게 나타내줌

 

body-parser

body의 데이터 값을 읽을 수 있게끔 도와주는 미들웨어

express 4.16버전 이후부터는 express내부에 body-parser가 포함되어있어서 따로 설치할 필요가 없다.

const express = require('express');

app.use(express.urlencoded({ extended: true }));

app.use(express.json());
  • express.json() : 클라이언트에서 JSON형식의 데이터를 보내면 그 데이터를 파싱해서 request의 body에 저장된다.
  • express.urlencoded : 클라이언트에서 폼을 보낼 때 폼을 파싱해서 body에 저장한다. (url-encoded 형식) 'color=red&size=s'로 값이 전달되면 {'color':'red', 'size':'s'}형태로 변형되서 저장된다.
  • 클라이언트에서 이미지나 파일 보내는 경우는 urlencoded로 처리가 안됨 주의!! 월터?사용한다고 함
  • extended:true는 true사용시 qs를 사용하고(좀 더 확장된 아이) false면 querystring을 사용하니까 true로 하는거 권장

 

 

와일드카드

/:name처럼 범위가 넓은 라우터는 하단에 작성해야한다.

 

err

에러는 4가지 매개변수가 필수임 (err, req, res, next)

try/catch로 error를 핸들링하면 next(error)적어준다.

빈 next()는 다음 미들웨어로 넘어감.

next()안에 error를 적어주면 바로 error처리 미들웨어로 코드가 넘어감.

 

res

res.json() 응답 보내기

res.json()은 리턴이 아니기 때문에 뒤에 console로그쓰면 찍힌다.

 

 

728x90