[Node.js MongoDB] 1-10강 정리

jiyseo·2022년 7월 28일

Node.js

목록 보기
1/5

1강 서버란?

서버 : 요청을 받으면 요청한 내용 보내주는 프로그램 / 요청을 처리할 수 있는 기계

HTTP 요청

  • 읽기(GET) : 나 이런 페이지 읽고싶음 이라는 요청
  • 쓰기(POST) : 댓글 작성, 블로그 포스트 작성
  • 수정(PUT) : 기존의 글, 댓글 수정
  • 삭제(DELETE) : 기존의 글, 댓글 삭제

→ 사용자는 GET / POST / PUT / DELETE 요청 가능

Node.js를 이용해서 JavaScript 문법으로 서버를 짠다

2-1강 NodeJS란?

HTML

  • 웹페이지에 글쓰고 그림을 넣는 언어
  • 특) 안움직임, 글넣고 그림넣고가 끝

JavaScript

  • HTML 페이지에 종속된 언어HTML을 조작하고 변경하기 위해 만들어진 언어
  • 웹페이지를 다이나믹하게 바꿔주기 가능
  • HTML 조작이 가능하기 때문

JavaScript 해석은 누가 하나?

크롬 브라우저 등의 브라우저가 담당

JavaScript에는 해석 엔진들이 있음

크롬 : V8(겁나좋음)

고질라 : SpiderMonkey

인터넷 익스플로럴 : Chakra

V8에 살을 붙여서 출시했는데 그게 바로 Node.js

브라우저 내에서 말고도 다른 환경에서도 JavaScript 실행할 수 있게 도와줌

쉽게 말하면 그냥 자바스크립트 실행창, 실행환경임 (= 런타임)

→ 브라우저 안켜도 Node.js 만 있으면 자바스크립트 문법 실행이 됨

→ Node.js 덕분에 JavaScript를 프로그래밍 언어처럼 사용하기 시작함

→ 서버도 만들 수 있음 (쉽게)

  • Non-blocking I/O 특징때문

2-2강 Node.js 특징

Event-driven

Non-blocking I/O

빨리빨리 되는것부터 처리함

Node.js 의 강점

  • SNS, 채팅 서비스의 경우 요청이 많거나 오래 걸리는 요청이 있어도 멈추거나 요청 대기시간이 없음
  • Non-blocking 덕분에 채팅 /SNS에 자주 사용
  • 코드가 매우 짧고 쉬워서 빠른 개발 가능 (Pivoting 잘됨)
  • 만들게 웹서비스가 아닌 경우는 좀 .. (이미지 처리 서버에는 좋지않음)

서버 스케일링 혹은 멀티쓰레딩을 이용해 일반 코드로도 Node.js 처럼 쓸 수 있음

3강 Node.js 설치

node -v 를 통해 설치 확인

var name = ‘김'; 이렇게 변수 만들기

console.log(안녕’)

VScode에서 express라는 라이브러리를 사용해서 서버를 만듦

VScode 터미널에서 npm init 입력해서 세팅 (npm은 라이브러리 설치를 도와주는 도구)

npm install express : express 라이브러리 설치하기

4강 GET 요청처리

server.js 에서 서버 관리

app.listen(8080, function(){
        console.log('listening on 8080'); //listening on 8080를 출력
    }); //내 컴퓨터에 서버를 열 수 있음 listen(서버를 띄울 포트 번호, 띄운 후 실행할 코드) 포트로 들어가려면 localhost:8080    
})

누군가가 /pet 으로 방문을 하면 pet 관련된 안내문을 띄워주자 /

app.get('/pet', function(req, res){ //app.get('/경로', function(요청, 응답) {응답.send('반갑습니다')
    res.send('펫용품 쇼핑할 수 있는 페이지입니다.')
});

client : 주소창에 URL을 입력해서 서버에 GET 요청을 할 수 있음
server : 누군가 /pet으로 들어오면 ~~를 보내주세요 라고 코드 짬

app.get('/', function(req, res){ //app.get('/경로', function(요청, 응답) {응답.send('반갑습니다')
    res.sendFile(__dirname + '/index.html') // .sendFile(보낼 파일 경로) -> html 파일을 보냄
});

5강 Nodemon 설치

서버를 자동으로 껐다켜는 거 : npm install -g nodemon 나는 sudo 써야됨 에러 존나나서 개빡쳤네 진짜 ㅡㅡ

6강 Bootstrap설치

Navbar

7강 폼에 입력한 데이터를 서버에 전송하는 법 (POST요청)

// 꼭 있어야하는 2개 속성

→ add 경로로 POST 요청함

8강 REST API

API

  • Application Programming Interface
  • 웹서버와 고객간의 소통방법 (웹개발시)
  • 내 서버랑 통신할 수 있는 방법 ex) ‘/write’
    app.get('/write', function(req, res){ 
        res.sendFile(__dirname + '/write.html')
    • res.sendFile(__dirname + '/write.ejs') // .sendFile(보낼 파일 경로) -> html 파일을 보냄
    • 함수안에 함수 (function(){}) = 콜백함수 -> 순차적으로 실행하고싶을 때 사용
    • .get('경로', function(요청내용, 응답할 방법){})
    • 신문법 -> .get('경로, (요청내용, 응답할 방법) => {})

REST 원칙 6개

  • Uniform interface : 하나의 자료는 하나의 URL로
    • 하나의 URL로는 하나의 데이터를 가져와야함 (하나를 가져오기 위한 두개의 URL을 만들지 말자)
    • 간결하고 예측가능하게 짜세요 (URL 하나를 알면 둘을 알게)
    • URL 이름짓기 관습을 잘 따라주세요
  • Client-Server 역할 구분
    • 고객들은 그냥 URL 하나만 알면 서버에 있는 자료를 갖다쓸 수 있습니다.
    • 고객에게 서버역할을 맡기거나
    • 고객에게 DB에 있는 자료를 직접 꺼내라고 하든지 그런 식으로 코드를 짜시면 안됩니다.
  • Stateless
    • 요청들은 각각 독립적으로 처리되어야합니다.
    • 요청1이 성공해야 요청2를 보내주고 그런 식으로 요청간의 의존성이 존재하는 코드를 짜시면 안됩니다.
    • 다르게 말하면 요청하나 만으로 자료를 가져오기 충분하도록 요청에 필요한 모든 정보들을 실어 보내는게 좋다는 뜻이겠죠?
  • Cacheable
    • 서버에서 보내주는 정보들은 캐싱이 가능해야함
  • Layered System
    • 요청처리하는곳, DB에 저장하는곳 이런 여러가지 단계를 거쳐서 요청을 처리해도 됩니다.
    • 멋있게 말하면 여러개의 레이어를 거쳐서 요청을 처리하게 만들어도 된다고 합니다. 우리도 그렇게 할 것입니다.
  • Code on Demand
    • 서버는 고객에게 실제 실행가능한 코드를 전송해줄 수도 있습니다.

REST API

이름짓기 원칙

  • 명사로 작성
  • 하위문서를 나타낼 땐 /

9강 MongoDB

웹사이트 기능 만들기 기본

  1. 서버로 데이터 전송할 수 있는 UI 만들고
  2. 서버에서 원하는대로 정보를 처리해주면 됨

DB 종류

  1. 관계형 - 2차형 데이터 (대부분 SQL 언어 사용) 빠르고 효율적

    MySQL, MariaDB, Oracle, MS SQL Server

  2. NoSQL - Object 자료형으로 입출력 가능

    Dynamo, Oracle NoSQL, MongoDB, Redis, Cassandra

MongoDB 호스팅을 해서 쓰자 - mongodb atlas

10강 DataBase 자료 저장

collection 생성

todoapp → database(폴더)

post → collection (파일)

자료저장 시 _id 꼭 작성해야함

안적으면 하나 강제로 부여해줌

  • 숙제

어떤 사람이 /add 라는 경로로 post 요청을 하면, 데이터 2개(날짜, 제목)을 보내주는데, 이때 ‘post’라는 이름을 가진 collection에 두개 데이터를 저장하기

{제목 : ‘어쩌구', 날짜 : ‘어쩌구’}

db.collection('post').insertOne({_id : 100, title : req.body.title, date : req.body.date}, function(error, res){ // Object 자료형
        console.log('save complete')
    })

위의 코드처럼 사용하면 실행이 되지 않았는데 _id를 빼니 실행됨

id 당 하나의 정보들만 저장할 수 있어서 그런거였음

0개의 댓글