package.json = npm init -y
express 설치 = npm i express
const express = require("express");
const jwt = require("jsonwebtoken") = jwt 모듈 가져오기
const dot = require("dotenv").config();
// dotenv 모듈 가져오기 가져오면서 config 메소드 실행
// .env 파일을 읽어서 적용
const KEY = process.env.KEY //process.env 객체에 우리가 .env 파일에 설정한 이름으로 키값이 들어왔다.
const app = express();
이 코드는 Express.js를 이용해 새로운 애플리케이션 인스턴스를 만드는 것입니다.
Express.js는 Node.js를 위한 웹 프레임워크로, 라우팅, 미들웨어, HTTP 요청 및 응답 처리 등의 기능을 제공합니다. 이를 이용하여 웹 서버를 만들 수 있습니다.
위 코드에서 app 변수는 Express.js의 인스턴스로, 여기에는 애플리케이션의 구성을 위한 메서드들이 포함되어 있습니다. 이 인스턴스를 이용하여 서버를 시작하고 요청을 처리하는 등의 작업을 할 수 있습니다.
app.set("views",path.join(__dirname,"page"));
이 코드는 현재 파일이 위치한 폴더와 page 폴더를 합쳐서 views 폴더의 경로로 설정하는 역할을 한다.
app.set("view engine","ejs");
사용할 view 엔진은 ejs
app.use(express.urlencoded({extended: false}));
http 요청의 body에서 key-value 형태의 데이터를 추출하기 위한 미들웨어 함수이다.
옵션이 false이먄 { a : 'b' } 형태로 전달된 쿼리스트링은 { 'a' : 'b'} 로 해석이되고
만약 true로 설정하면 { 'a' : ['b'] }로 해석된다.
app.get("/",(req,res)=>{res.render("main");})
app.post("/login", (req, res)=>{
// 로그인을 정상적으로 했다 가정하고
// 토큰을 발급
// 유저 정보는 변수로 만들어 주자.
const name = "user1";
const KEY = process.env.KEY;
// sign 메서드 JWT 토큰을 생성
// 첫번째 매개변수 header 객체
// 두번째 매개변수 비밀키
// 세번째 매개변수 payload 객체
let token = jwt.sign({
// 타입은 JWT
type : "JWT",
// 유저 이름
name : name
},KEY,{
// 토큰을 유지 시킬 유효시간 만료시간
// 5분 유지 시킬 토큰
expiresIn : "5m",
// 토큰 발급한 사람
issuer : "user1"
})
res.send(JSON.stringify(token));
// 점으로 구분해서
// header : eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
// payload : eyJ0eXBlIjoiSldUIiwibmFtZSI6InVzZXIxIiwiaWF0IjoxNjgzODU4NTcyLCJleHAiOjE2ODM4NTg4NzIsImlzcyI6InVzZXIxIn0
// 서명 : ybaJ2RJEbJ8YsXLHHLGvAGhxn8FP-1ozqSuhKL_0kpw
// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoiSldUIiwibmFtZSI6InVzZXIxIiwiaWF0IjoxNjgzODU4NTcyLCJleHAiOjE2ODM4NTg4NzIsImlzcyI6InVzZXIxIn0.ybaJ2RJEbJ8YsXLHHLGvAGhxn8FP-1ozqSuhKL_0kpw"
})
app.listen(8080, ()=>{
console.log("server 열림~")
});
-----------------------------------------------처음 보는 내용들 정리
dotenv 모듈
dotenv 모듈은 env 파일에서 환경변수를 로드하기 위한 모듈
env 파일에는 프로젝트에서 사용되는 환경 변수들이 저장되어 있다. 예를 들어 데이터베이스 연결 정보,API키 비밀번호 등이 있을 수 있다.
이 모듈을 사용하면 환경변수를 설정하는 데 필요한 모든 작업을 단순화 가능하다.
config() 메소드를 사용하여 env 파일의 환경변수를 로드하고
process.env 객체를 사용하여 환경변수에 엑세스 가능하다.
path 모듈
path 모듈은 Node.js에서 파일 경로를 다룰 때 유용한 메소드들을 제공합니다. path 모듈은 Node.js에 기본적으로 내장되어 있으므로 별도의 설치 없이 사용할 수 있습니다.
path 모듈에서 제공하는 주요 메소드들은 다음과 같습니다.
path.join([...paths]): 인자로 전달된 경로들을 이어 붙인 후, 정규화된 경로를 반환합니다.
path.resolve([...paths]): 인자로 전달된 경로들을 이어 붙인 후, 절대 경로를 반환합니다.
path.dirname(path): 인자로 전달된 파일 경로의 디렉토리 경로를 반환합니다.
path.basename(path[, ext]): 인자로 전달된 파일 경로의 파일 이름을 반환합니다. ext 매개변수를 지정하면 파일 확장자를 제거한 파일 이름을 반환합니다.
path.extname(path): 인자로 전달된 파일 경로의 확장자를 반환합니다.
위에서 사용된 path 모듈의 require 구문은 path 모듈을 불러오기 위해 사용됩니다.
view 엔진
View 엔진(View Engine)은 서버 측에서 HTML을 동적으로 생성하기 위한 템플릿 엔진(Template Engine)이라고도 불리는 소프트웨어입니다. 클라이언트의 요청에 대한 응답으로 HTML을 생성해야 할 때, View 엔진을 사용하면 HTML을 동적으로 생성할 수 있습니다.
---------------------------------------
----------------------------------- 처음 보는 내용들 정리
// 로그인 할때 JWT 토큰을 사용한다. JWT이란?
(JSON WEB TOKEN)이라는 표준 방식을 따르는 웹 토큰의 생성과 검증을 지원하는 모듈이다.
JWT는 클라이언트와 서버 간에 데이터를 안전하게 전송하기 위한 방법 중 하나로 JSON 형태로 인코딩된 토큰을 사용
// let header = {
// // 사용하는 해싱 알고리즘
// alg : "SHA256",
// // 토큰의 타입
// type : "JWT"
// }
// let payload={
// // 토큰의 이름 제목
// sub : "546534",
// // 유저의 이름 (유저 프로필)
// name : "fljsiejfli",
// // 토큰 발급된 시간 발급 된지 얼마나 지났는지
// lat : "1231515615"
// }
해싱 알고리즘은 다양한 목적으로 사용된다. 예를 들어 데이터베이스에서 비밀번호를 저장할때
실제 비밀번호 대신 해싱된 비밀번호를 저장하여 보안을 강화할수 있다.
또한 블록체인에서는 해싱 알고리즘이 트랜잭션의 무결성을 검증하는 데 사용된다.
express-session 이란?
express-session은 Node.js의 Express 프레임워크에서 세션을 관리하기 위한 미들웨어이다.
세션이란, 서버와 클라이언트 간에 데이터를 주고받기 위한 수단으로,
쿠키(Cookie)를 사용한다. 하지만 쿠키는 클라이언트의 브라우저에 저장되기 때문에 보안에 취약하다.
따라서 express-session을 사용하여 서버 측에서 세션을 관리할 수 있다.
express-session은 클라이언트로부터 요청이 들어올 때마다,
세션 ID를 생성하여 쿠키로 클라이언트에게 전송한다.
이후 클라이언트는 요청 시마다 쿠키에 저장된 세션 ID를 서버에 전달하며,
서버는 해당 세션 ID에 대응하는 세션 정보를 찾아서 사용한다.
이를 통해 로그인 상태나 사용자 정보 등을 서버에 안전하게 보관할 수 있다.
---------------------------------------본 내용이지만 잘 모르는 내용 정리
json 형식은 객체(object)와 배열(array)을 사용하여 데이터를 사용한다.
ex)
{
"name": "John",
"age": 30,
"address": {
"city": "New York",
"state": "NY"
},
"phone_numbers": ["555-1234", "555-5678"]
}
위의 데이터는 "name","age","phone.numbers"라는 키와 이에 해당하는 값으로 구성되어 있다.
라우팅이란?
라우팅(Routing)은 클라이언트 요청에 대해 해당하는 콘텐츠(데이터)를 제공하는 것을 말합니다.
웹 애플리케이션에서 클라이언트는 URL을 요청하고,
서버는 해당하는 URL 요청에 대해 적절한 응답(HTML, CSS, JavaScript, JSON 등)을 제공합니다.
이때 클라이언트의 URL 요청과 서버의 응답을 매핑시키는 것이 라우팅입니다.
라우팅은 HTTP 요청 메소드(GET, POST, PUT, DELETE 등)와 URL 주소에 따라
적절한 핸들러 함수를 호출하는 역할을 합니다.
핸들러 함수는 클라이언트 요청에 대해 적절한 처리를 하고,
클라이언트에게 응답을 반환합니다.
따라서 라우팅은 웹 애플리케이션에서 중요한 역할을 담당하고 있습니다.
--------------------------------------
'node.js' 카테고리의 다른 글
node.js의 crypto 모듈(암호화) ,(해시,솔트) 등등 (0) | 2023.05.16 |
---|---|
node.js 접근 토큰과 갱신 토큰 발급 (0) | 2023.05.15 |
개인 nodejs 프로젝트 중에 게시글 목록이나 수정 과정 (0) | 2023.05.09 |
개인 nodejs 프로젝트 (0) | 2023.05.09 |
20230508 데이터베이스 게시글 추가 및 삭제 (0) | 2023.05.08 |