Minzzi์ผ
[Next.js] ํ๋ก์ ํธ ์์ฑ
Next.js๋ ์๋ฒ์ฌ์ด๋๋ ๋๋ง์ ์ง์ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ ์ฅ์ ์ ์๋ ํฌ์คํ ์ ์ ๋ฆฌํด๋์๋ค. SSR์ ๊ฒฝํ์ ์๊ณ ์ถ์ด์ Next.js๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.2024.05.30 - [Front-end/React] - [React] ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ 4. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฃผ์ ์ ๋ฆฌ [React] ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ 4. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฃผ์ ์ ๋ฆฌ1. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด๋?์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ์์ธ SPA๋ ๋ ๋๋ง๊ณผ ๋ผ์ฐํ ์ ํ์ํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. SPAworld-developer.tistory.comํ๋ก์ ํธ ์์ฑํ๊ธฐnpx create-next-app@latest ๋ง์ฝ typescript๋ฅผ ์ฌ์ฉํ๊ณ ..
TypeError: Cannot destructure property '๋ณ์๋ช ' of 'req.body' as it is undefined.
request body์ ์ฌ๋ฐ๋ฅธ json ํ์์ผ๋ก ๊ฐ์ ๋ณด๋ด์คฌ์์๋ ๋ถ๊ตฌํ๊ณ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค.TypeError: Cannot destructure property 'user_id' of 'req.body' as it is undefined. ํด๋น ์ค๋ฅ๋ body๊ฐ์ ์๋ user_id๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ค๋ ์๋ฏธ์ธ๋ฐ, body๋ฅผ ํ์ฑํ ์ ์๋๋ก ๋ฏธ๋ค์จ์ด๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค. express๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์. const express = require('express')const app = express();app.use(express.json()); ํด๋น ์ค๋ฅ๋ app.use(express.json());์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ์ค๋ฅ์ด๋ค. app.use(express.json())..
[React] ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ๋ค์ด๋ธ 4. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฃผ์ ์ ๋ฆฌ
1. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด๋?์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ์์ธ SPA๋ ๋ ๋๋ง๊ณผ ๋ผ์ฐํ ์ ํ์ํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. SPA๋ ๋ง ๊ทธ๋๋ก ํ๋์ ํ์ด์ง๋ก ๊ตฌํ๋๋ฉฐ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฐ์์ค์ง ์๋๋ค. ์ต์ด์ ์ฒซ ํ์ด์ง์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์จ ์ดํ์ ํ์ด์ง ์ ํ ๋จ๊ณ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ธ๋ฌ์ฐ์ ์ history.pushState์ history.replaceState๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ HTML์ ๋ด๋ ค๋ฐ์ง ์๊ณ ํ๋์ ํ์ด์ง์์ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํ๋ค. SPA๋ ์ต์ด ์ฒซ ํ์ด์ง๋ฅผ ๋ฐ์ ๋๋ SSR์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ดํ์๋ CSR์ ์ด์ฉํ์ฌ ๋ ๋๋ง์ ์งํํด์ผ ํ๋ค. 1.1 SPA์์ ํ์ด์ง ์ ํ์ด ์ผ์ด๋๋ ๊ณผ์ ์ ์ค๋ช ํ์์คํ์ด์ง ์ ํ ์..
[React] SPA, CSR์ ๊ฐ์๊น ๋ค๋ฅผ๊น
๋ต๋ถํฐ ์ด์ผ๊ธฐ ํ์๋ฉด SPA, CSR์ ๊ฐ์ง ์๋ค. ์ ์ด์ ๋น๊ต ๋์์ด ์๋๋ค. CSR(Client Side Rendering)์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ์ ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋ ๋น HTML๋ง ๋ฐ์์ค๊ณ , ๋ฐ์ดํฐ๋ ์ฌ๋ฌ static ํ์ผ๋ค์ด ๋ก๋๋ ์ดํ์ ์์ฒญํด์ ๋ฐ์์ค๋ ๋ฐฉ์์ผ๋ก ์งํ๋จSSR(Server Side Rendering)CSR๊ณผ ๋ฐ๋๋ก ๋ฐ์ดํฐ๊น์ง ๋ชจ๋ ์ฝ์ ํ์ฌ ์์ฑ๋ HTML์ ๋ฐ์์ค๋ ๋ฐฉ์์ผ๋ก ์งํ๋จSPA(Single Page Application)์๋ฒ๋ก๋ถํฐ ์ฒซ ํ์ด์ง๋ง ๋ฐ์์ค๊ณ ์ดํ์๋ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ์ฌ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฐ์์ค์ง ์๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋งํจ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์กฐํํ ๋ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ ๋์ง ์๊ณ ๋ค๋ฅธ ํ์ด์ง๋ก ๋์ด๊ฐ์ง ์์MPA(Multiple Page Appl..
express์์ API ๊ตฌํ์ URL parameters ๋ฐ๋ ๋ฐฉ๋ฒ
๋ฌธ์ ํด๊ฒฐ ์์ฝURL parameters ๊ฐ์ ธ์ฌ๋๋ ์๋ ๋ฐฉ๋ฒ์ผ๋ก๋ง ๊ฐ์ ธ์์ผ ํ๋ค.API ์ฃผ์๋ /games/:gameId๋ก ํ๋ค.const id = req.params.gameId;const game_id = req.params.gameId;const {gameId} = req.params;API ๊ตฌํ ๊ณต๋ถ๋ฅผ ํ๋ค๊ฐ URL parameters์ ์ธ์ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์ฝ๋๊ฐ GET method๋ฅผ ์ฌ์ฉํ์ฌ gameId๋ฅผ ๊ฐ์ง ๊ฒ์์ ์์ธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๋ API ๊ตฌํ ์ฝ๋์ด๋ค. // games.jsconst express = require("express");const router = express.Router();const {gameDetail} = require('../control..
Node.js์์ .env ๋ณ์ ์๋ถ๋ฌ์์ง
express๋ฅผ ์ฌ์ฉํด์ ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋์ค port๋ฒํธ๋ env์ ์ ์ฅํด์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค.๊ทธ๋ฐ๋ฐ ๊ณ์ localhost:3000์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์คํํ๋ ์ฝ๋๋ ์๋์ ๊ฐ๋ค.// app.jsconst express = require("express");const app = express();const dotenv = require("dotenv");dotenv.config();app.listen(process.env.PORT);๋ฐ์ํ ์ ์๋ ์์ธ์ ์๋์ ๊ฐ๋ค.1. PORT๋ฒํธ ๋ค๋ฆ//.envPORT=3000ํฌํธ๋ฒํธ๋ ์ ๋ค์ด๊ฐ์ผ๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค. 2. ๋ชจ๋์ด ์ ์์ ์ผ๋ก ๋ค์ด๋ก๋๊ฐ ์๋จ//package.json{ "dependencies": { "dotenv": "^16.4.5", ..
๋๋๋ฆฌ๋ฉด ์ด๋ฆฌ๋๋ผ
์ทจ์ ์ค๋น๋ก ๊ณ ๋ฏผ๊ณผ ๊ฑฑ์ ์ด ๋ง์ ์๊ธฐ์ ํ๋1๊ธฐ ํ์ฅ๋์ด์ ํ์ข ์ค๋น ๋ ์ปคํผ์ฑ์ ํ ์ ์๋ ๊ธฐํ๊ฐ ์๊ฒผ๋ค. ์ปคํผ์ฑ์ ํด๋ณธ์ ์ด ์์ด์ ์ฝ๊ฐ์ ๋๋ ค์ด ๋ง์์ ๊ฐ์ง๊ณ ์ค๋น ์๊ฒ ์ง๋ฌธํ๊ณ ์ถ์ ๊ฒ์ ์ค๋นํด์ ๋๋ต 1์๊ฐ ์ ๋์ ์ปคํผ์ฑ์ ์ฐธ์ฌํ๋ค. ์์ผ๋ก์ ์ปค๋ฆฌ์ด์์ ์ฌ๋๋ค๊ณผ ๋ง๋๋ ์ผ๋ค์ด ๋ง์์งํ ๋ฐ ํ์ข ์ค๋น ์์ ์ปคํผ์ฑ์ด ์์ฃผ ์ข์ ์ฒซ ๋จ์ถ์๋ค๊ณ ์๊ฐํ๋ค. ์ค์ ๋ก ์ค๋น ๋ก๋ถํฐ ํผ๊ฐ๋๊ณ ์ด์ด๋๋ ์กฐ์ธ๋ง ๋ค์ ์ ์์๋ค. ๊ทธ๋ฆฌ๊ณ ์ข์ ์ฌ๋๋ค๋ ์ถ์ฒ์ ๋ฐ์ ์ ์์๋ค. ๊ทธ ์ค ํ ๋ถ์ด ๋ฅ๋ ฅ์๊ณ ์ค๋ ฅ ์ข์ผ์ CTO๋์ด์ ๋ฐ(์ผ๋ถ๋ฌ ์ฑํจ ์ธ๊ธ์ ์ํ๊ฒ ๋ค), ์ด๋ถ์ ๋ง๋๋ ค๋ฉด ์๋ 1์๊ฐ ๋น 30๋ง์์ ๋ด๊ณ ๋ง๋ ์ ์๋ ๋ถ์ด๊ณ ์ธ์ง๋๋ ๋์ผ์ จ๋ค. ๊ฐ๋ฐ์ ๋ํ ๊ฒฝํ๋ ๋ณ๋ก ์๋ ๋ด๊ฐ ๊ณผ์ฐ ์ด ๋ถ๊ป ์ปคํผ์ฑ ์ฐ๋ฝ์ ๋๋ฆฌ๋ ๊ฒ์ด ๊ฐ๋ฅํ ..
[Crop] ํ๋ก์ ํธ ํ์คํ์ด์ค ์์ฑ!
ํ๋ก์ ํธ ์์ ๊ณ๊ธฐSSR์ ๋ํด ๊ฒฝํ์ ์๊ณ ์ถ์ด์ Next.js๋ฅผ ์ฌ์ฉํด๋ด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค.๋, ๊ทธ๋ฅ "ํ๋ฉด์์ผ๋ก ํ์ํ๊ณ ์์ฑ!" ์ผ๋ก ๋๋ฌ๋ ์ด์ ํ๋ก์ ํธ์๋ ๋ค๋ฅด๊ฒ ๊ธ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋ค์ด์ฃผ๊ธฐ ์ํ ๋ ธ๋ ฅ์ ํด๋ณด๊ณ ์ถ์๋ค. ๋ ๋๋ง์ด ์ค๋๊ฑธ๋ฆฌ๋ ํ์ด์ง์์ ์๊ฐ์ ์ค์ฌ๋ณด๊ณ ์ถ์๊ณ ,,,๊ทธ๋๊น ๊ฒฐ๊ตญ ์ฑ๋ฅ ์ฌ๋ฆฌ๊ธฐ ์ํ ๊ฒฝํ์ ๊ฐ๊ธํจ์ด ์ปค์ ์ด๋ฅผ ์ค์ ์ผ๋ก ๋ ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ค. ๋ ํ๋์์ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ์ค๋ฅํด๊ฒฐ์ ๊ธฐ๋กํ ์๊ฐ์ด ์ ๋ง ๋ถ์กฑํด์ ํ๋ํ๋ ๋ค ๊ธฐ๋กํด๋์ง ๋ชปํ๋ค(์์ฃผ ํฐ ์ค์์๋ค)๊ทธ๋๋ก ๋ค์ ๋์๊ฐ ์ด๋ค ์ค๋ฅ๊ฐ ์์๋์ง ์ดํด๋ณด๋๊ฒ ๋ ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์ ํด๋น ํ๋ก์ ํธ๋ฅผ ํ์ฌ ์์ ์์ ๋ฆฌํฉํ ๋ง์ ์งํํ๋ ค๊ณ ํ๊ณ ,์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด์ ์ค๋ฅ์ ๋ํด ๊น๊ฒ ๊ณต๋ถํ๊ณ ๊ณ ๋ฏผํด์ ๊ธฐ๋กํด๋ณด๋ ค๊ณ ..
[ํ๊ณ ] ํ๋ก๊ทธ๋๋จธ์ค ํ์คํ ๋ฐ๋ธ์ฝ์ค ๋จ์ 1์ฐจ
ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค ๊ณผ์ ์ ์ฒซ ํ ๋ฌ์ด ๋๋ฌ๋ค.๋ฐ๋ธ์ฝ์ค๋ ์ ๋ฐ์ ์ผ๋ก ์์ฐฌ ๊ตฌ์ฑ์ผ๋ก ์ค๋น๋์๊ณ , ๋ฐ๋ผ๊ฐ๊ธฐ์ ๋ถ์กฑํจ์ ์์๋ค. 2์ฐจ ๋จ์๊ธฐ๊ฐ๋๋ ์ข ๋ ๋ฐ๋์๊ณ ์์ฐจ๊ฒ ๋ฐฐ์ด ๋ด์ฉ๋ค์ ๋จธ๋ฆฟ์์ ์ง์ด ๋ฃ์ ์ ์๊ธธ ๋ฐ๋ผ๋ ๋ง์์ผ๋ก ์งง๊ฒ ํ๊ณ ํด๋ณด๋ ค๊ณ ํ๋ค. ๊ฐ์ธ์ ์ผ๋ก ์๋์ค๋ฝ๊ฒ ์ฌ๊ธฐ๋ ๊ฒ๋ค๊ณผ ์์ฌ์์ด ๋จ๋ ๊ฒ๋ค์ด ์๋ ๊ฒ ๊ฐ๋ค.์๋์ค๋ฌ์ด ๊ฒ์ 2์ฐจ ๋จ์๊ธฐ๊ฐ๋๋ ์ข ๋ ํ๋ฐํ, ๊น๊ฒ ์งํํ๊ณ , ์์ฌ์์ด ๋จ๋ ๊ฒ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.์๋์ค๋ฝ๊ฒ ์ฌ๊ธฐ๋ ๊ฒ ๐ ๋คํธ์ํน : ๋ฐ๋ธ์ฝ์ค๊ฐ ๋๋ ๋์ฏค์๋ ์ ๋ง ๋ง์ ์ฌ๋๋ค์ด ๋จ์ ๊ฒ ๊ฐ๋ค. (๋ฌผ๋ก ๋ชจ๋ ๋ฌด์ฌํ ๋ค ์๋ฃํ๋ค๋ ๊ฐ์ ํ์) ํ ๋ฌ ๋์ ์จ๋ผ์ธ์์๋ ๋ถ๊ตฌํ๊ณ ๋ง์ ์ฌ๋๋ค๊ณผ ์ํตํ ์ ์์๋ค. ํนํ ์คํฐ๋์์ ๋ง๋ ์ฌ๋๋ค์ด ๊ธฐ์ต์ ๋จ๋๋ค. ๋ชจ๋ ๋ฆฌ์กํธ ..