NodeJS 세팅, 요청

🪐 C:on·2021년 9월 6일
0
post-thumbnail

🐱‍🚀 코드는 깃허브 레포지티에 업로드

스케줄앱 강의를 들으면서 개념과 코드를 정리해보려 한다.

NodeJS로 백엔드를 설계하고 프론트엔드는 최대한 간단하게 구현하기 위해 부트스트랩을 활용한다

DB는 비교적 이해하기 쉬운 NoSQL 중 monogoDB를 사용한다.


👉 서버

서버란 내가 주문한 것을 가져다 주는 기계이다.

주소창에 URL을 입력해서 무언가를 요구하면 서버는 그 URL을 확인하고 내가 주문한 것을 데이터베이스에서 찾아서 다시 나에게 가져다 준다.

👉 NodeJS

자바스크립트는 html을 조작하기 위해 태어났다.

자바스크립트가 동작하기 위한 엔진은 각 브라우저에 설치되어 있는데 크롬의 엔진이 너무 좋다보니 이 엔진만 떼어내서 자바스크립트를 PC에서 사용할 수 있게 해준 것NodeJS이다.
자바스크립트가 프로그래밍 언어가 되면서 웹 서버까지 만들 수 있게 된다.

이곳에서 nodeJS를 설치해준다.

장점

  • non-blocking
    • 다른 언어로 서버를 설계하면 요청을 순서대로 받고 그것에 대한 처리가 끝나야지만 다음 요청을 받는다.
    • 반면 NodeJS는 일단 모든 요청을 받고 처리를 맡고있는 백그라운드에 작업을 넘겨준다.

설치

노드JS설치하면서 npm이 같이 설치된다.
npm init을 터미널에 입력하면 package.json이 만들어지는데 이는 설치한 라이브러리 목록을 자동으로 기록해주는 파일이다.
이 기록파일을 통해서 다른 컴퓨터에서 동일한 서버를 구동시키기 위해 필요한 모듈을 하나하나 설치할 필요없이 npm i만 입력하면 기록파일을 참고하여 자동으로 설치를 해준다.

npm install express를 입력하면 express 라이브러리가 설치된다.
express는 NodeJS로 서버를 아주아주 쉽게 짤 수 있도록 도와주는 모듈이다.

설정

생성된 package.json에 들어가서 script:"type" : "module",을 추가해준다.

👉 express 서버 설계

서버를 구축할 폴더에 app.js파일을 만든다.
파일안에 express 객체를 만들고 listen함수로 서버를 오픈할 수 있다.

import express from {express}

const app = express()
app.listen(8080)

다시 객체의 get함수를 쓰면 get요청이 왔을 때 반응하도록 설계할 수 있다.
두 번째 파라미터는 콜백함수라는 것으로 함수에게 전달해주는 함수이다.

app.get('/', ()=>{
  res.send("hello, world")
})

콜백함수는 요청과 응답이라는 객체가 들어가기 때문에 인자를 적어서 받아줘야 한다.
나는 reqres를 적어서 req은 요청내용이 담을 것이고, res은 응답할 방법들을 담을 것이다.

👉 nodemon 사용

nodemon을 사용하면 수정할 때 마다 서버를 껐다가 다시 켜야 하는 불편함을 해결할 수 있다.

npm install -g nodemon으로 nodemon을 설치한다.

nodemon app.js를 터미널에 입력해서 실행시킨다.

이제부턴 수정 후 ctrl+s를 누를 때 마다 서버가 자동으로 재실행 된다.

👉 POST

클라이언트에서 서버에게 데이터를 form전송하면 서버는 이를 req 안에 저장한다.

app.post('/add', function(요청, 응답){
  console.log(요청.body);
});

보통 body에 데이터를 담아서 보내는 post요청은 req.body를 통해 body의 값을 꺼낼 수 있다.
하지만 html에서는 보내는 form요청은 동일하게 body에 값이 있지만 특별한 코드를 작성하지 않으면 값을 꺼낼 수가 없다.

html form요청의 body를 보기 위해선 app.use(express.urlencoded({extended: true}))를 추가해주어야 한다.

👉 RestAPI

REST API는 API규약의 한 종류이다.

RestAPI의 원칙

  1. 인터페이스 일관성
    • 하나의 URL은 하나의 데이터를 가져온다. 하나의 데이터를 가져오기 위한 두개의 URL이 만들어져서는 안된다.
  2. 클라이언트와 서버의 독립
    • 클라이언트는 URL하나만으로 서버의 자료를 가져갈 수 있어야 한다.
  3. 요청 독립성
    • 첫번째 요청이 통과되면 두번째 요청을 처리해주는 코드가 짜여져서는 안된다.
  4. 캐셔블
    • 요청을 통해 보내는 자료들에 캐싱에 대한 정보를 설정해줘야 한다.
  5. 레이어드 시스템
    • 여러개의 레이어를 거쳐 요청을 처리하게 만들 수 있다.
  6. 코드 온 디맨드
    • 서버는 고객에게 실제 실행가능한 코드를 전송해줄 수 있다.

0개의 댓글