<< 학습 목표 >>
1. 노드 제이에스 서버를 설치할 수 있다.
2. 노드 제이에스 서버를 실행시킬 수 있다.
3. 노드 제이에스 서버에 컨트롤러를 만들 수 있다.
4. 노드 제이에스 서버가 클라이언트에게 쿠키를 보낼 수 있다.
5. 노드 제이에스 서버가 세션에 데이터를 저장할 수 있다.
이번 Chapter에서는 Cookie, Session, Axios, File Upload / Download 를 배울 것임
이러한 내용들을 배우려면 서버가 필요함
가장 빠르게 배워 간단하게 사용할 수 있는 서버가 node.js ( 이하 노드 제이에스 라 칭함 ) 이므로 이번 Chapter 를 시작하기 전 노드 제이에스를 간략하게 배우자
단, 여기서는 Cookie, Session, Axios 를 배우기 위해 노드 제이에스의 최소한만 배우는 것이니 노드 제이에스 서버와 관련된 지식을 쌓을 순 없음
또한 여기서 사용하고 있는 용어가 이해되지 않는다면 그냥 따라오기만 해도됨
꼭 이해하고 싶다면 별도로 JSP/Servlet 관련 서적을 보고 우선 서버를 공부하고 오자
노드 제이에스 외에 Servlet, Spring, Spring Boot 등으로 서버를 구축할 수 있다면 이번 글은 넘어가도 됨
노드 제이에스로 서버를 구축하기 위해 프로젝트를 만들자
우선은 빈 프로젝트를 만들고 그 안에 노드 제이에스를 설치하는 과정임
<< 빈 프로젝트 생성 >>
(1). vs code -> [ 탐색기 ] 내 빈 영역 우클릭 -> [ 새 폴더 ]
(2). 폴더 이름은 임의로 지정 / 여기서는 node_server 로 했음

<< 노드 제이에스 설치 >>
방금 생성한 빈 프로젝트에 노드 제이에스를 설치하자
(1). vs code 터미널 창에서 빈 프로젝트로 이동
빈 프로젝트로 이동하기 위한 명령 : cd (프로젝트명)
(2). 노드 제이에스 서버 설치
노드 제이에스 서버 설치 명령 : npm install express

이제 빈 프로젝트에 클라이언트의 요청을 받을 수 있도록 컨트롤러를 추가하자
<< 파일 추가 >>
(1). 노드 제이에스 서버를 설치한 프로젝트 명 우클릭 -> [ 새 파일 ]
(2). 파일 이름을 임의로 짓고 파일의 확장자는 반드시 js 어야함 / 여기선 app.js 로 만듬

<< 컨트롤러 코드 추가 >>
방금 추가한 파일에 아래 코드 추가
const express = require('express');
const app = express();
const port = 3001;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
<< 코드 설명 >>

(1). 서버의 포트는 3001 번으로 지정
(2). 클라이언트가 GET 방식으로 http://localhost:3001/ 에 접근했을 경우 'Hello World!' 를 응답
여기까지 클라이언트의 요청을 받을 수 있는 준비가 다 됐음
이제 서버를 실행시키자
서버를 실행 시킬 때는 터미널 창에서 node (컨트롤러파일명) 명령을 입력하면 됨(1)

이제 브라우저를 열어 주소창에 http://localhost:3001/ 을 입력해 접근해보자
화면에 Hello World! 가 출력됐다면 노드 제이에스 서버가 제대로 실행된 것이고 그렇지 않다면 다시 이 글을 따라 올 것
이 글대로 따라오는데 되지 않는다면 따로 인터넷에 찾아보길
<< 클라이언트가 보낸 데이터 꺼내기 >>
클라이언트가 서버의 / 경로로 GET 방식으로 요청을 보낸다고 상상해보자
이때 클라이언트가 name=홍길동, age=20, tel=010-1111-1111 파라미터를 함께 보내는 상황임
클라이언트가 보낸 데이터를 꺼낼 때는 다음과 같음
아래 코드를 컨트롤러 파일에 덮어 씌우자
const express = require('express');
const app = express();
const port = 3001;
app.get('/', (req, res) => {
const name = req.query.name;
const age = req.query.age;
const tel = req.query.tel;
console.log("<< 클라이언트가 보낸 데이터 >>");
console.log("name => " + name);
console.log("age => " + age);
console.log("tel => " + tel);
res.sendStatus(200);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
<< 코드 설명 >>

(1). 클라이언트가 보낸 데이터는 req.query.(name) 으로 꺼낼 수 있음
컨트롤러 코드가 변경 됐으니 노드 서버를 종료 시키고 다시 실행시키자
노드 서버를 종료 시킬 때는 터미널 창을 한번 클릭 한 후 Ctrl + C 를 누르면 됨
그 후 다시 노드 서버를 실행시키는 명령 ( node (컨트롤러 파일명) ) 을 입력하면 됨
브라우저의 주소창에 localhost:3001/?name=홍길동&age=20&tel=010-1111-1111 다음과 같이 입력해 클라이언트가 보낸 값이 제대로 꺼내지는지 확인해보자
노드 서버에서 console.log 로 출력하면 터미널 창에 출력되니 브라우저에서 위 URL을 입력해 요청을 보낸 뒤 터미널 창을 보면 클라이언트가 보낸 값이 출력될 것

<< 클라이언트에게 쿠키 보내기 >>
클라이언트에게 쿠키를 보낼 때는 다음과 같이 함
아래 코드를 컨트롤러에 덮어 씌우자
const express = require('express');
const app = express();
const port = 3001;
app.get('/', (req, res) => {
const cookieOptions = {
expires: new Date(Date.now() + 3600000)
};
res.cookie('myCookie', '12345', cookieOptions);
res.sendStatus(200);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
<< 코드 설명 >>

(1). 이름이 myCookie인 쿠키를 생성해 그 안에 12345 를 저장
(2). 쿠키의 옵션으로 만료 시간 지정
만료 시간은 밀리초 단위로 여기서 설정한 만료 시간은 1시간(60 * 60 * 1000) 뒤 임
노드 제이에스 서버를 재시작 한 후 브라우저의 주소창에 http://localhost:3001/ 를 입력해 접근해보자
쿠키는 당연히 눈에 보이지 않으니 개발자 도구로 확인해야함
브라우저 내 개발자 도구 -> 응용 프로그램(1) -> 쿠키(2) 를 확인해보자

<< 세션에 데이터 저장하기 >>
노드 제이에스 서버에서 세션을 사용하려면 세션 라이브러리를 설치해야함
서버를 중지 시키고 세션 라이브러리를 설치하자

(1). 세션 라이브러리를 설치하는 명령
이제 컨트롤러 파일에 아래 코드를 덮어 씌우자
const express = require('express');
const session = require('express-session');
const app = express();
const port = 3001;
app.use(session({
secret: 'key',
resave: false,
saveUninitialized: true
}));
app.get('/', (req, res) => {
if(req.session.userId === undefined) {
req.session.userId = 12345;
} else {
console.log(req.session.userId);
}
res.sendStatus(200);
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
<< 코드 설명 >>

(1). 세션을 사용하기 위한 import
(2). 세션의 보안 관련 설정
(3). 세션이 제대로 동작하는지 확인하기 위한 if문으로 세션이 제대로 동작한다면 두 번째 접근 부터는 터미널에 userId에 저장해둔 값인 12345 가 출력될 것
이제 서버를 재시작하고 브라우저의 주소창에 http://localhost:3001/ 를 입력해 접근해보자
여기까지 이번 Chapter에서 배울 내용을 위한 최소한의 노드 제이에스 서버 관련된 것들을 배웠음
이 글에 있는 내용을 이해하고 싶다면 별도로 노드 제이에스 또는 JSP/Servlet 관련 서적으로 서버에 대한 내용을 깊게 배우면 됨
'JS + React > React-Chapter05' 카테고리의 다른 글
| Chapter05. 리엑트 파일 업로드 / 다운로드 (0) | 2023.04.04 |
|---|---|
| Chapter05. 리엑트 쿠키 ( Cookie ) / useCookies 훅 (0) | 2023.04.04 |
| Chapter05. 리엑트 Axios / 서버로 요청 보내기 (0) | 2023.04.04 |