SASS ๊ธฐ์กด ์นํ์ด์ง์ ์คํ์ผ์ ์ ์ฉํ๊ธฐ ์ํด์๋ CSS๋ก ํ๋ํ๋ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค. ์ด ๊ฐ์ CSS์ ๊ฐ๋ฐ ํธ์์ฑ์ ๋์ด๊ธฐ ์ํด ๋ฑ์ฅํ SASS, ํ๋ฆฌํ๋ก์ธ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ด๋ค. CSS์ ๊ฒฝ์ฐ HTMLํ๊ฒฝ์ style ํ๊ทธ๋ง ์ง์ ํด์ฃผ๋ฉด ๋ฐ๋ก ๋ก๋๊ฐ ๋๋๋ฐ ์ด SASS๋ ๋
์์ ๊ทธ๋ ์ง๊ฐ ์๋ค. ์ฌ์ฉํ๊ธฐ ์ ์ CSS๋ก ์ปดํ์ผํ๋ ๊ณผ์ ์ด ํ์๋ค. ๊ทธ๋์ ๋ณดํต ์นํฉ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค. 1. ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น npm i webpack webpack-cli sass sass-loader style-loader mini-css-extract-plugin css-loader ์ค์น๋ฅผ ์๋ฃํด์ฃผ๋ฉด ์นํฉ ์ค์ ํ์ผ์ ๋ง๋ค์ด์ค๋ค. 2. webpack.config.js import MiniCssExtract..
๐ป๊ธฐ์ /NodeJS
winston ์ค์น ๋ฐ ์ค์ ์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ ์ค์นํด์ค๋๋ค. npm i winston ์ฝ๋ ์ค์ import winston from 'winston'; import dayjs from 'dayjs'; const messageSymbol = Symbol.for('message'); const colorset = { "INFO": "\x1b[34m[ %s ]\x1b[0m", "ERROR": "\x1b[31m[ %s ]\x1b[0m", "WARN": "\x1b[33m[ %s ]\x1b[0m" } export async function init () { winston.configure({ level: 'info', format: winston.format.combine( winston.format(func..
โ๏ธ ๊ธฐ๋ณธ ์ค์ ๋ค์๊ณผ ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํด์ ๊ฐ๋ฐํฉ๋๋ค. Es6 ๋ฌธ๋ฒ webpack5 nodejs v17.5.0 ๐ ํ๋ก์ ํธ ์ธํ
์นํฉ 5์ javascript-obfuscator ๋ชจ๋์ ํ์ฉํ๊ฒ ์ต๋๋ค. ๋จผ์ npm ๋ชจ๋์ ์ค์นํฉ๋๋ค. npm install --save-dev webpack-cli javascript-obfuscator webpack-obfuscator package.json ์์ ๋ฒ๋ค๋ง ๊ตฌ๋ฌธ์ ์ค์ ํด์ค๋๋ค. { ... "scripts": { "start": "node app.js", "bundle:development": "webpack --mode=development", "bundle:production": "webpack --mode=production" }, ... } ๐ Web..
I. ๋ผ์ฐํ
์๊ฐ ๋ผ์ฐํ
์ URI์ ์ ์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋ตํ๋ ํํ ๋ฐฉ์์ ๋งํ๋ค. ๋ผ์ฐํ
์ ์ ์ฌ์ฉํ๋ฉด ๊ฒฌ๊ณ ํ ํ๋ก์ ํธ์ ๊ฐ๋ฐ ์์ฐ์ฑ์ด ํฅ์๋ ์ ์๋ค. ์ด ๊ธ์์๋ ๋ค์ค ๋ผ์ฐํ
์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋ ค ํ๋ค. ๊ธฐ๋ณธ ๋๋ ํ ๋ฆฌ/ํ์ผ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค app.js - api/ - api.js - routes/ - users.js II. ์ค์ ๋ฐฉ๋ฒ ๋ผ์ฐํ
์ ์ฌ์ฉํด์ ์๋์ ๊ฐ์ด ์์ฒญ์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น. GET /api/users/1 router.get('/api/users/:user_id', users.load); ์์ ๊ฐ์ด ๋ฌด์ํ๊ฒ ํ ์ ๋ ์์ง๋ง ๋ผ์ฐํ
์ผ๋ก ๋ถ๋ฆฌํ์ฌ ๊ฐ ํ์ผ๋ณ๋ก ๊ธฐ๋ฅ์ ๋๋ ํ์๊ฐ ์๋ค. app.js const express = require('expre..
๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค. #002 "๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค" ์๋ฆฌ์ฆ์ ๋ ๋ฒ์งธ ๊ฐ์ข์
๋๋ค. ์ฒซ๋ฒ์งธ ๊ฐ์ข์ ์ด์ด์ง๋๋ค. https://devent.tistory.com/36 [ ์ฝ๋๋ณด๋ฉฐ ๋ฐฐ์ฐ๋ NodeJS ] ์ด๊ธฐ ์ฝ๋ ์ธํ
๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค. #001 "๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค" ์๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๊ฐ์ข์
๋๋ค. ๋ค๋ฅธ ๊ฐ์ข์๋ ๋ค๋ฅด๊ฒ ์ฝ๋๋ง ๋ณด์ฌ์ฃผ๊ณ ๋๋ฉ๋๋ค. ์ค๋ช
์ด ์๋ค๊ณ ์? ํํ, ์ด ๊ฐ์ข๋ ์ด๋ก ๋ฐ์ ์น์ด๋จน์ต๋๋ค. ์ด๋ก ์ ๋๋ฆฌ.. devent.tistory.com views, pub 2๊ฐ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํด ์ค๋๋ค. views : ejs ํ
ํ๋ฆฟ์ด ์ฌ๋ผ๊ฐ๋ ๋๋ ํ ๋ฆฌ์
๋๋ค. pub : bootstrap ๊ณผ ๊ฐ์ css, js ๋ฑ๊ณผ ๊ฐ์ด ๊ณต๊ฐ๋๋ ํ์ผ ์
๋๋ค. ejs ์ค์น๋ npm install ejs ..
๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค. #001 "๊ธฐ๋ค๋ฆด ์๊ฐ๋ ์์ต๋๋ค" ์๋ฆฌ์ฆ์ ์ฒซ ๋ฒ์งธ ๊ฐ์ข์
๋๋ค. ๋ค๋ฅธ ๊ฐ์ข์๋ ๋ค๋ฅด๊ฒ ์ฝ๋๋ง ๋ณด์ฌ์ฃผ๊ณ ๋๋ฉ๋๋ค. ์ค๋ช
์ด ์๋ค๊ณ ์? ํํ, ์ด ๊ฐ์ข๋ ์ด๋ก ๋ฐ์ ์น์ด๋จน์ต๋๋ค. ์ด๋ก ์ ๋๋ฆฌ๊ณ ๋๋ ธ์ผ๋ ์ง๊ธ ๋ฐ๋ก ์์ํฉ๋๋ค. (๊ตฌ๊ธ๋ง ์กฐ๊ธ๋ง ํ์๋ฉด NodeJS ์ค์นํ๋๊ฑด ๊ธ๋ฐฉ ๋์ต๋๋ค) ์ฒ์์๋ npm install express ๋ฅผ NodeJS ์ปค๋ฉ๋ ์ฐฝ์ ์
๋ ฅํฉ๋๋ค. var express = require('express'); var http = require('http'); var app = express(); var server = http.createServer(app); app.get('/', function(req, res) { res.send("Hello World")..
์๋
ํ์ธ์ Dipokal HHJ ์
๋๋ค. ์ต๊ทผ ๋ฉฐ์น ๋์ NodeJS ์ ๋น ์ ธ ์ฌ๋ฌ๊ฐ์ง ์์ฉ ์๋น์ค๋ค์ ๊ตฌํํด๊ฐ๋ฉฐ ๋ ์๊ฐ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ๋ ์คํ์ ์
๋๋ค. PHP ์ฐ๋ค๊ฐ NodeJS ๊ฐ ์ข์๋ณด์ฌ์ ์๊ฐ์ ์ ๋ฆฌํ๋ ค๊ณ ์ด ๊ธ์์ ์๋ ค๋๋ฆฝ๋๋ค..! NodeJS ์ ์ฅ์ PHP ์ฐ๋ค๊ฐ NodeJS ๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด๋ ์ ์
์ฅ์์๋ ์ ๋ง ์๋ก์ด ์ธ๊ณ๋ฅผ ๋ง๋ ๊ธฐ๋ถ์ด์์ต๋๋ค. ํ์ผ ์
๋ก๋ ๋ถํฐ ์์ํด์, ๋ก๊ทธ์ธ, ๋ณด์.. ๊ทธ์ผ๋ง๋ก ์ ์ธ๊ณ์๋ค๊ณ ํํํ ์ ์์๊ฒ ๊ฐ์ต๋๋ค. PHP ์์๋ .php ํ์ผ๋ด์ html ์ฝ๋์ php ์ฝ๋๋ฅผ ๋ณํฉํด์ ์ฌ์ฉํด์ผ ํ๋๋ฐ, NodeJS ๋ EJS ๊ฐ ์์ด์ ๋๋ ํ ๋ฆฌ ๊ด๋ฆฌ, ํ์ผ๊ด๋ฆฌ๊ฐ ์ ์ฉํ์ต๋๋ค. ํ์ผ ์
๋ก๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค ๋๋์ ์ ๋ณด์ ์
๋๋ค. PHP ์ฒ๋ผ ๊ทธ๋ฅ ..