일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 라우터와 미들웨어
- useEffect clean up
- 아이디 중복체크기능
- 비동기파일업로드
- 세션으로 로그인 구현
- next 매개변수
- FormData()
- useContext
- express session
- 시퀄라이즈 기본설정
- 블록 만들기
- express router
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- JWT 로그인 기능 구현
- css기초
- mysql wsl
- JWT 만들어보기
- JWT 하드코딩
- javascript기초
- 라우터미들웨어 분리
- 라우터 분리
- express.static
- node.js path
- buffer.from
- express실행
- OAuth 카카오
- 라우트 매개변수
- nodejs파일업로드
- cookie-parser 만들어보기
- ws 라이브러리
- Today
- Total
즐코
express로 웹서버 역할 해보기 (응답하기) 본문
1/ 사용자,브라우저-서버 간의 역할 (요청과 응답)
2/ express 코드 작성 및 분석
(ft. 동기,비동기 / url)
1/ 사용자,브라우저-서버 간의 역할 (요청과 응답)
브라우저(사용자) <---> 서버
사용자가 브라우저를 통해 url을 줘서 필요한 정보를 요청하고,
웹서버가 html,css,js 코드를 전달 즉, 응답을 해주면
브라우저가 그 응답을 받아서 텍스트를 읽어서 렌더링 해주는 것
http : 통신규격, 규약, 통신 방법을 통해 요청과 응답이 이루어진다.
요청 들어온 텍스트를 읽어서 요청을 한사람에게 text를 보내는 행위, 응답을 하는 코드를 작성할 것이다(express로!)
2/ Express 코드 작성 및 분석
#1. 아래의 응답 헤더 부분을 express가 작성해주고,
브라우저 - 개발자 도구 - Network - Header 로 가보면, response header와 request header가 보여진다.
- Chrome : text로 안나오고 정리된 객체형태로 나온다.
- Firefox : text (원시형태)로도 볼수가 있다. 사실상 응답 시 그 원시형태의 text를 보내주는 것이다.
#2. 그 이후에 html/css/js를 작성해주는 형태이다.
브라우저 - 개발자 도구 - Network - Response 로 가보면, 작성된 html/css/js를 볼 수 있다!
브라우저는 이 response header를 먼저 읽고 --> 다음 response인 html/css/js를 해석해서 화면에 쏴주는 것이다.
** 동기 vs 비동기
여기서 교수님이 url로 요청하는 방법이 동기이고, 코드로 요청하는 방법이 비동기라고 했다.
들은 내용을 정리하자면,
url 요청/응답 : 화면에 렌더링 된 게 전부 바뀌는 경우이다.
응답 헤더부터 시작해서 실질적으로 화면에 보여지는 html/css(+js)파일까지 (처음부터 끝까지) 다 응답해주고,
브라우저가 그걸 차례대로 읽는 거다. 즉 동기적이다.
코드로 요청/응답 : 전체 화면이 다 바뀌는 게 아니라, 세부적인 요소들만 바꾸는 경우이다.
(탭을 누르면 전체 화면,틀은 그대로 인데 그 안의 누른 세부 항목만 렌더링되는 것)
세부적인 요소만 바꾸는데 굳이 응답 헤더부터 시작해서 전체 문서를 다 요청하고 응답하는것이 비효율적이니,
코드를 쪼개서 세부적인 부분을 바꿔주는 방법을 쓴다고 하는데,
차례대로 코드가 읽어지는 게 아니므로 비동기적인 부분이라고 볼 수 있다.
이런게 바로 Ajax라는데 나중에 배울 것 같다.
세세하게 express의 코드를 들여다보자
1/ require() 메소드 와 객체 형태의 app
const express = require ('express')
// node_modules (npm install express하고 나서 생긴 directory, 이 안에 express가 설치되있다)
const app = express()
// express 함수를 담은 app이라는 변수가 궁금하니 console.log를 찍어보았다.
console.log(app) // 객체 형태로 출력된다. 안에 수많은 함수들이 들어가 있다.
// 즉, express를 만든 개발자가 객체 형태로 함수를 꽉꽉 담아둔거다.
require() 메소드 : 다른 파일에 있는 내용을 가져올 때 쓰는 함수라고 기억하자. (모듈을 가져오는 함수!)
2/ app 객체 안의 메소드를 써서 server를 구동시켜보자
1- app.listen(port#,콜백함수)
첫번째 인자 : port (숫자 3000 또는 8000)
두번째 인자 : 콜백함수 작성하기
app.listen(3000,()=>{
console.log('웹서버 두근두근')
})
여기까지 코드 작성 및 저장하고 나서 node server 를 치면, 콜백함수가 실행되고 (웹서버 두근두근)
경로를 치는 커맨드실행창이 안뜨고, 어딘가에 들어와 있다.
즉, listen() 메소드로 인해 한번 시작하면 꺼지지 않는 프로그램이 된거다.
웹 서버를 구동한다는 건 꺼지지 않는 프로그램을 만든다는 거다.
우리가 인터넷을 쓸 때 시간이 정해져있지 않듯이 웹서버는 항상 준비가 되어 있어야 한다.
근데, 여기서 우린 꺼지지 않는 프로그램만 만들었지 응답을 주는 코드는 없다!
응답을 주는 코드를 이제 만들어보자.
2- app.get()
html 배울 때 나왔던 form 태그에서 method의 속성값으로 get 또는 post를 본적이 있다!
<form method = "get" action ="https://google.com"></form>
그 때 봤던 get이 지금 app의 메소드로 쓰는 이 get 이다!
요청이 get으로 들어왔는지 확인하고나서 get() 안의 코드가 실행되는 개념이다.
근데, 이 get 요청만으로 구분하기엔 너무 종류가 다양하니까 또 한가지 조건을 건다.
그게 바로 첫번째 인자값의 역할이다.
첫번째 인자값 : URI 작성 ( '/' )
/ 는 Path값 전까지 host, 즉 hostname + port 까지만을 나타낸다.
/ == localhost (local - 내컴퓨터 host - 자기자신의 도메인)
/ == localhost:8000 인 것이다.
URL의 구성을 살펴보자..
URL 을 parsing 해보면, 사람들마다 부르는 명칭이 조금씩 다르지만, 어쨌든 큰 틀은 같으므로 아래를 참고하자.
host 부분의 port는 url 상에는 생략되어 있다.
path는 경로를 나타낸다.
search-querystring은 ? 뒤부터 나타나는데, key=value 형태로 나타나는거라고만 알고있자..
두번째 인자 : (req,res)이라는 두 인자값을 가진 콜백함수
- req : 요청 / 요청 시 상대방이 데이터를 건내주면 저 요청 인자에 데이터가 쌓인다.
- res : 응답 / 내가 결과물을 다 처리하고 요청한 사람에게 데이터를 보내줄 때 .send() 라는 메소드를 사용한다.
.send() 메소드 안에는 위에서 본 응답 헤더 뒤에 오는 html 요소를 넣어서 보내주는 것이다.
app.get('/',(요청,응답){
응답.send('<h1>hello Express</h1>')
})
3 - server를 실행시켜보자
커맨드 창에 node server를 치고 listen함수가 꺼지지 않는 프로그램을 돌려주자.
브라우저에 http://localhost:3000 쳐서 들어가보자. 응답.send() 메소드 안에 넣은 html요소가 나온다!!
4 - URI 값 뒤에 path값을 넣어 보자. (메인 -> 다른 페이지로 넘어가보기)
즉, http://localhost:3000/node 페이지 만들어보기
add.get('/node',(요청,응답)=>{
응답.send('<h2>Hello, node</h2>')
})
이 때, 주의할 점이 있다. 그냥 저장하고 바로 해당 url인 http://localhost:3000/node를 치고 들어가면,
아래와 같이 cannot get이 뜬다.
따라서, 무조건 코드를 수정하게 되면 --> 저장하고 --> listen으로 인해 켜져있는 서버를 나갔다가 (ctrl+c)
--> 다시 node server 명령을 주고 url 접속을 해야 코드가 먹힌다
정리하자면,
get() 메소드를 통해
1- 너 혹시 요청 메소드가 get이니? 묻고
2- 너 근데 호스트가 어떻게 됨? / 면 아, path값이 없고 host값만 말하는구나 ㅇㅋ, 콜백함수 실행해줄게~
3- 콜백함수로 받은 요청값은 따로 데이터를 모으고, 응답.send()라는 메소드를 실행시켜서 html요소를 쏴준다.
터미널 창에서 url 의 요소를 출력해주는 curl 을 실행하면 모든 html 내용들이 출력된다는 것도 확인할 수 있다.
'NodeJS' 카테고리의 다른 글
Promise / async, await 맛보기 (0) | 2022.02.02 |
---|---|
require와 exports / JS 동작원리 / 콜백함수 (0) | 2022.01.28 |
CLI 접해보기 / linux 기본 명령어 (0) | 2022.01.26 |
nvm / npm / express 설치 (0) | 2022.01.26 |
Ubuntu - Node.js 설치 및 실행해보기 (0) | 2022.01.26 |