01. Node.js
node - html과 인터넷이 무엇인지
1. 탄생 배경
1990 - html의 탄생
종이로부터의 엑소더스의 시작
종이로 담겨져있던 정보들이 웹페이지로 이동.
웹이 등장한 직후에 수많은 불만이 쏟아져나옴
개발자 사람이 html 코딩해서 하나 하나 수정해야 했음
방문자들이 직접 글을 올리도록 하고 싶었지만, 웹페이지가 담긴 파일을 마음대로 수정하게 하기는 너무 위험
JS에 익숙한 웹개발자들이 활용할 수 있는 자동으로 웹페이지를 만드는 서버사이드앱을 만들다
1995 - Netscape의 브랜든 아이크가 JS를 개발을 의뢰받음
2008 -
구글 크롬 브라우저 V8 엔진 개발 및 오픈소스로 공개
node.js - v8 엔진을 기반으로 개발
JS를 이용해 웹브라우저가 아닌 컴퓨터 자체를 제어
JS의 인생역전
html 코딩은 컴퓨터에게, 컨텐츠를 생산하는 창의적인 일은 인간에게
2. 공부방법
node js 앱 만들기 ← 노드 js runtime : 노드 js 가 가진 기능을 활용하기 ← JS 문법 알기
3. 웹 서버 만들기
웹 브라우저와 웹서버의 관계
웹 브라우저
주소를 입력해서 요청한다.
웹 서버
요청에 따른 정보를 찾아서 응답해주는 관계
1.html, 2.html … 등등이 있는 폴더에서 server.js파일을 만들고 노드로 실행시키면
4. URL 이해하기
http://opentutorials.org:3000/main?id=HTML&page=12
protocol
통신 규칙
사용자가 서버에 접속할 때 어떤 방식으로 소통할 것인지
Hyper Text Transfer Protocol: 웹 브라우저와 웹서버가 데이터를 주고받기 위해서 만든 통신 규칙
host(domain name)
인터넷에 접속되어 있는 각각의 컴퓨터를 가리키는 주소
port 번호
한 대의 컴퓨터 안에 여러 대의 서버가 있을 수 있어요.
클라이언트가 접속했을 때 그 중에 어떤 서버와 통신할 지 애매해요.
접속할 때 3000 이라고 하면 3000에 연결된 서버와 통신하게 되는거예요.
3000 포트에 우리의 노드 js 웹서버를 실행시킨 것이기 때문에 3000으로 해야돼
웹 서버는 80 번 포트를 쓴다고 전세계적으로 약속되어있음 포트번호를 생략하면 80에 접속하게됨
path
컴퓨터 안에 있는 어떤 폴더의 어떤 파일인지를 가리킴
쿼리스트링
쿼리스트링의 값을 변경하면 앞에잇는 웹서버에게 데이터를 전달할 수 있어요
위의 예시의 경우 내가 읽고 싶은 정보는 html 이고 12 페이지다
약속
쿼리스트링의 시작은 ?
값과 값은 &로 구분
값의 이름과 값은 =으로 구분
5. URL에 따라 다르게 동작하는 웹앱 만들기
5-1. URL 파싱하기
<aside> 💡 http://localhost:3000/main?id=HTML&page=12
이라는 url 이 있을 때
main?id=HTML&page=12
(queryString) 을 어떻게 활용할 수 있을까?
</aside>
url
모듈을 임포트var url = require("url");
queryData
추출하기url.parse(request로받은url, true).query
queryData
에서 값의 이름으로 값을 추출하기qureyData.값의이름
위의 예시에서는
queryData.id == “HTML”
,queryData.page == “12”
5-2. response 동적으로 변경하기
파일 → text
전체 코드
response로 넘겨주던 파일을 template으로 활용
내가 필요한 부분만 literal로 포함시키기
Node.js로 CRUD 구현하기
전체 코드
파일을 읽어오는 방법
Node.js로 cli에서 입력값을 받아오기
실행시킬 때 뒤에 문자열 입력
var args = process.argv;
전체 코드
폴더의 변경사항 받아오기
readdir.js
받아온 list를 토대로 <li> 태그 만들기
6. Node.js에서의 동기와 비동기
6-1. Sync 적용해서 리팩토링하기
7. Package Manager
PM2
node js를 껐다 다시 실행시키는 과정을 자동화
수정할 때마다 알아서 껐다 켜줌
npm i pm2 -g
: -g = 독립적인 프로그램이라서 컴퓨터 어디서든 실행 가능해야한다
8. App 제작 - 글 생성 UI 만들기
get 해올때는 url의 queryString으로 접근해도 되지만
그 외에 post, put, delete (create, update, delete)할 때는 절대 url의 query string으로 해서는 안됩니다.
왜냐하면 맥락없이 url로 접근한 사람이 우리 서버의 파일을 조작할 위험이 있기 때문이에요
대신에 사람눈에 보이지 않는 데이터로 무한히 긴 데이터를 보낼 수 있는 방법이 있어용
form 태그의 method를 post로 바꾸기
action = form data를 submit 할 url
submit 을 수행하면, (e.preventDefault()하지 않으면 생기는일)
action의 url로 옮겨간다.
해당 url에서 evnet를 감지한다.
request.on(”data”, () ⇒ {}) : 여기 콜백함수에서 post 로 받아오는 데이터가 많을 경우를 대비해서 조각조각 받아노는 데이터들을 수신하고, 조각을 수신할 때마다 콜백함수를 호출하도록 약속되어있음
위의 작업이 끝나면 “end” 이벤트가 발생하고
이를 다음의 함수로 감지할 수 있다.
request.on(”end”, ()⇒{}) : 이벤트가 감지되면 콜백함수가 실행되고 여기서 querystring모듈을 활용해서 body내용을 parsing한다.
form에서 설정했던 name이 key이고 사용자가 입력한 내용이 value로 합쳐진 하나의 객체가 반환된다!
Last updated