[Back-end] 1주차 정리

Soozynn·2022년 1월 1일
0

<다시한번 더 정리>

  • promise(약속) / async(비동기), await(기다리다)

    -> promise비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있다.
    다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 '약속'(프로미스)을 반환한다.

    -> Async를 함수와 같이 사용하면 결과를 직접 반환하는게 아니라 Promise를 반환한다는 것을 잊지말자.

    -> await: 어떠한 Promise기반 함수(비동기함수) 앞에 놓을 수 있다.
    우리의 코드의 Promise가 fulfil될 때 까지 잠시 중단하고, 결과를 반환한다. 그리고 실행을 기다리는 다른 코드들을 중지시키지 않고 그대로 실행되게 한다.

    -> 고로 await 뒤의 값은 무조건 promise 인스턴스

    - 대기(pending): 이행하지도, 거부하지도 않은 초기 상태.
    - 이행(fulfilled): 연산이 성공적으로 완료됨.
    - 거부(rejected): 연산이 실패함.

  • try...catch 참고하면 좋을 사이트 & 바닐라코딩 노션도 다시 참고하기

    간략하게 줄어보자면,
    try...catch동기 코드에서 에러핸들링을 할 때에 활용하였는데,
    Promise의 장점은 코드의 비동기 흐름을 동기스럽게 제어할 수 있는 것이었으므로 이를 더 업그레이드 시킨 Async Await을 이용하여도 try~catch 구문을 사용할 수 있다.

  • new 연산자를 이용한 객체 생성 vs 객체 리터럴({})로 객체를 생성


<추가>

  • dotenv 문서 다시 잘 읽어보기
  • res.send vs res.json vs res.end차이점 찾아보기
  • mongoose.Schema 디테일한 사용법 찾아보기
  • require vs import
  • ODM, ORM?
  • json? package.json?
  • buffer?
  • queryString?
  • ODM, ORM?

node.js

What is Node.js?

-> 노드(Node.js)란 브라우저 이외의 곳(ex 컴퓨터 OS)에서 자바스크립트가 사용될 수 있도록 만들어진 자바스크립트 환경이다.

이전에는 자바스크립트 엔진이 내장되어 있던 브라우저 외에 곳에서는 자바스크립트를 실행시킬 수 없었다. 때문에 이러한 불편함을 느낀 Ryan dahl이라는 사람이 크롬의 V8 엔진을 이용하여 브라우저 이외의 환경에서도 자바스크립트를 실행시킬 수 있는 환경을 구축했는데, 그것이 바로 Node.js라고 한다.
(크롬의 V8 엔진은 오픈 소스 프로젝트이기 때문에 이를 이용하여 만들 수 있었다.)

노드는 파일 시스템 관리를 할 수 있고 네트워크 요청을 할 수 있는 기능도 있다.
그렇기에 노드를 이용해 백엔드 서버도 구현할 수 있다.. 🤭

❓ 그렇다면 우리가 평소에 터미널에서 흔하게 쓰는 npm 은 무엇일까?🤔

npmNode Package Manager 약자이다.
여기서 말하는 node는 곧 nodejs를 뜻하는 것을 유추해 볼 수 있고,
이를 이용하여 만든 패키지라는 걸 알 수 있다.

package모듈이라고도 불리는데 패키지나 모듈은 프로그램보다는 조금 작은 단위의 기능들을 의미하고, Manager는 뜻 그대로 관리자를 의미한다.

따라서 이를 통해 npmNode.js로 만들어진 pakage(module)을 관리해주는 툴이라는 것을 알 수 있다..

그렇다면, 위에서 말했듯 nodejs를 이용하여 서버를 만들 수 있다고 하였는데,
서버를 만들어서 클라이언트 / browser 에게 어떤 것들을 할 수 있지 않을까?

-> 아! 우리가 흔하게 인터넷으로 많이 하고 있는 인터넷쇼핑과 같이 클라이언트의 정보를 받아 회원가입을 시키고 어떠한 물건을 사고 싶은지에 대한 정보도 받을 수 있을 것이고, 이 외의 다양한 웹사이트와 같이 클라이언트의 정보를 받아 무언가 할 수 있겠구나!
또 그렇다면 그에 대한 응답 또한 클라이언트에게 보여주어야 서로에게 의사 소통을 하며 무언가를 할 수 있지 않을까?

❗️ 서버는 클라이언트 또는 브라우저에게 요청을 받으면, 그에 대한 요청을 처리하고 응답을 해주어야 하고, 응답을 해줄때는 반드시 응답 코드가 포함되어야 한다.
우리가 흔하게 겪었던 404 에러를 예로 들 수 있는데, 그 숫자가 바로 서버가 보낸 응답 코드인 셈이다.

그러면 이제 nodejs를 이용하여 form을 처리해보자.

아래 코드는 nodejs를 이용하여 서버를 만들었다고 가정하고,
그 안에서 form을 처리하기 위한 코드이다.

주로 쓰이는 코드 용어를 보자면,
req 는 클라이언트가 서버에게 보낸 request(요청)을 뜻하고 res는 서버가 클라이언트에게 보내는 response(응답)을 뜻한다.

따라서, 아래 코드를 서버인 nodejs 입장에서 해석해보자면,
클라이언트가 요청한 메서드가 "GET"이고, 요청한 url이 "/signup"일 경우,
아래의 코드를 실행해달라는 것이다.

메서드는 주로 4가지가 존재한다.

  • POST: 서버에 데이터를 생성해달라고 요청
  • GET: 서버에 데이터를 찾아달라고 요청
  • PUT: 서버에 데이터를 수정해달라고 요청
  • DELETE: 서버에 데이터를 삭제해달라고 요청

그렇다면, fs.readFile 이란 무엇일까?
fs 모듈은 FileSystem의 약자로 파일 처리와 관련된 모듈이다.
대표적으로 파일 읽기, 파일 쓰기를 할 수 있다.

readFile도 뜻 그대로 파일을 읽어달라는 메서드인데,
이러한 메서드의 쓰임은 공식문서를 통해 확인하면서 사용해 볼 수 있겠다.

const { readFile } = require("fs/promises");
  
if (req.method === "GET" && req.url === "/signup") {
  return fs.readFile(path.join(__dirname, "/static/index.html"), function(
    err,
    template
  ) {
    if (err) {
      return res.end("Error :(");
    }
    
    res.end(template);
  });
}

위의 코드를 간략하게 설명해보자면, "/static/index.html" 경로의 파일을 읽어주고 만약 에러가 있다면 "Error :("를 클라이언트에게 응답해주고, 그게 아니라면 template를 반환하라는 것이다.

[express]

위와 같이 nodejs만으로 서버를 관리하기에는 손이 많이 가므로 프레임워크나 라이브러리를 nodejs와 같이 많이 사용하는데, express는 그 중에서도 가장 대표적인 서버 쪽 프레임워크이다.

  • Express routing

[mongoDB]


[mongoose] -express 서버와 mongoDB를 연결시켜주는 중간다리 역할의 라이브러리

Mongoose 설정

이제 Express 서버에 MongoDB와 연결하도록 설정하는 코드를 작성해야 합니다. mongoose 라이브러리를 이용해 연결하도록 하겠습니다.

const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost:27017/${DB_NAME}", {
  useNewUrlParser: true
});

const db = mongoose.connection;

db.on("error", console.error.bind(console, "connection error:"));
db.once("open", console.log.bind(console, "Connected to database.."););

mongoose 라이브러리는 MongoDB의 자료를 다룰때 주로 사용되는 Object Document Mapping(ODM) 라이브러리입니다. 필수는 아니지만, 많은 개발자들이 사용하는 프로그램입니다.

mongoose의 핵심 역할 3가지.

1. 자료 간의 관계 관리
2. 자료 스키마 유효성 검사 제공
3. MongoDB의 자료를 객체 지향적인 관점을 가진 코드로 다룰 수 있는 기능 제공

리뷰 내용 중) -> mongoose schema (스키마)에서 최종적으로 에러가 발생하겠지만 몽구스 스키마는 단순히 타입만 검사하기 때문에 이외의 검사는 스스로 작성해야 합니다.

0개의 댓글