All

    Text content did not match. Server: "x" Client: "o"

    ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๊ฐ„ํ—์ ์œผ๋กœ ๋ฐœ์ƒ. ๋ง ๊ทธ๋Œ€๋กœ ๋๋‹ค ์•ˆ๋๋‹ค ํ•ด์„œ.. ใ…Žใ…Žใ…Žใ…Žใ…Žใ…Ž ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋‹ค. ์˜ค๋ฅ˜ ์›์ธ Next.js ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ SSR ์„ ๋”ฐ๋ฆ„. ์œ„์˜ ์˜ค๋ฅ˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ Œ๋”๋ง ํ•œ HTML๊ณผ ์„œ๋ฒ„์˜ HTML ์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋‹ค๋Š” ์˜ค๋ฅ˜๋‹ค. ์‚ฌ์‹ค ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ดํ•ด๊ฐ€ ์•ˆ ๋จ.. ์„œ๋ฒ„์—์„œ ๋‹ค ๋งŒ๋“ค์–ด์„œ ๋ณด๋‚ด์ฃผ๋Š”๋ฐ ์™œ ๋ธŒ๋ผ์šฐ์ €๋ž‘ ๋น„๊ตํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค๋Š” ๊ฑฐ์ง€..? ๐Ÿ˜ญ ๊ทผ๋ฐ, ์ฐธ๊ณ ํ•œ ์ฒซ ๋ฒˆ์งธ ๋งํฌ๋ฅผ ๋ณด๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ DOM์„ ๋งŒ๋“ค๊ณ  Hydrate ํ•˜๋Š” ์ž‘์—…์—์„œ ๊ฐ์ž ๊ฐ€์ง€๊ณ  ์žˆ๋Š” HTML ์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ. ๋‚ด ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ ์ € Hey ๋’ค์— ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ x์™€ o๋ฅผ ๋žœ๋ค ํ•˜๊ฒŒ ๊ฐ–๋„๋ก ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ธŒ๋ผ์šฐ์ €๋ž‘ ์„œ๋ฒ„๊ฐ€ ๋‘˜ ๋‹ค ๊ฐ™์€ ์‚ฌ์šฉ์ž(๋‘˜ ๋‹ค x, ๋‘˜ ๋‹ค o) ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์•ˆ ๋‚˜๊ณ  ๋‹ค๋ฅด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฑฐ์˜€..

    Next.js์˜ Pre-Rendering(SSR vs SSG) ๊ณผ Hydrate

    Next.js์˜ Pre-Rendering(SSR vs SSG) ๊ณผ Hydrate

    Pre-Render ์™€ Hydrate Next.js ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ pre-renders ๋œ๋‹ค. ์ด ๋ง์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ํŽ˜์ด์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ํŽ˜์ด์ง€ ์š”์ฒญ์„ ๋ฐ›์„ ๋•Œ ์„œ๋ฒ„์—์„œ ๊ทธ ์š”์ฒญ๋ฐ›์€ ํŽ˜์ด์ง€๊ฐ€ ๋ฐ”๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ HTML ์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋“œ๋  ๋•Œ, ์ด ํŽ˜์ด์ง€์— ํ•„์š”ํ•œ JSํŒŒ์ผ์ด ์‹คํ–‰๋˜์–ด ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ interactive ํ•ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด ๊ณผ์ •์„ Hydrate๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, Hydrate๋Š” Server Side ๋‹จ์—์„œ ๋ Œ๋”๋ง ๋œ ์ •์  ํŽ˜์ด์ง€์™€ ๋ฒˆ๋“ค๋ง๋œ JSํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ ๋’ค, ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ HTML ์ฝ”๋“œ์™€ React์ธ JS์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋งค์นญ ์‹œํ‚ค๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ pre-render ๋œ HTML ์ด ..

    Next.js redirects ์™€ rewrites | API KEY ์ˆจ๊ธฐ๊ธฐ

    /** @type {import('next').NextConfig} */ const API_KEY = process.env.API_KEY; const nextConfig = { reactStrictMode: true, swcMinify: true, async redirects() { // ์œ ์ €๊ฐ€ ์•Œ ์ˆ˜ ์žˆ์Œ. ๊ฒฝ๋กœ๊ฐ€ ๋ฐ”๊นฅ์— ๋“œ๋Ÿฌ๋‚จ. return [ { source: "/old-blog/:path*", destination: "/new-sexy/:path*", // ์™ธ๋ถ€๋กœ๋„ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๊ฐ€๋Šฅ, * ๋ถ™์ด๋ฉด ๋’ค์˜ ๊ฒฝ๋กœ ๋ชจ๋‘ ์œ ์ง€๋˜๋ฉด์„œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ permanent: false, // status code => false: 307(์ž„์‹œ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ), true: 308(์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ) }, ]; }, async r..

    Context ์— Class ๋‹ด๊ธฐ

    wow.. ์•Œ๊ณ  ๋‚˜๋‹ˆ ์ •๋ง ๋‹น์—ฐํ•œ ๊ฑด๋ฐ, ํด๋ž˜์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๋„ค๋ฆญ์— ๋‹ด๊ณ  ์ดˆ๊ธฐ๊ฐ’์„ ์ค˜์•ผ ํ• ์ง€ 1์‹œ๊ฐ„ ๊ฐ€๊นŒ์ด ํ—ค๋งธ๋‹ค ใ… ใ… ใ… ใ…  ํœด ํƒ€์Šค๋Š” ์ต์ˆ™ํ•ด์ง€๋ ค๊ณ  ํ•˜๋ฉด ์–ด๋Š ์„ผ๊ฐ€ ์ € ๋ฉ€๋ฆฌ ์žˆ์–ด.. import React, { createContext, useContext } from 'react'; import Youtube from '../apis/youtube'; export const youtube = new Youtube(); const YoutubeApiContext = createContext({ youtube }); interface Props { children: React.ReactElement; } export function YoutubeApiProvider({ children }: Props) { r..

    ์›นํŒฉ์ด ๋ญ”๊ฐ€์š”?

    ์ด ๊ธ€์€ ์›นํŒฉ ํ•ธ๋“œ๋ถ์„ ๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค ๐Ÿ˜… ์‚ฌ์‹ค ํ”„๋ก ํŠธ์—”๋“œ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ๋“œ๋ฌธ ๋“œ๋ฌธ ์›นํŒฉ์ด๋ž€ ๋‹จ์–ด๋ฅผ ๋ณด์•˜์ง€๋งŒ, ๋‹น์žฅ ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋ผ ํŒ๋‹จ๋˜์–ด ๊ณต๋ถ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ธ๋“œ๋ถ์„ ๋ณด๋ฉฐ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ž‘ ์กฐ๊ธˆ ๋” ์นœ์ˆ™ํ•ด์ง„ ๊ฒƒ ๊ฐ™์•„ ๊ธฐ๋ถ„์ด ์ข‹์Šต๋‹ˆ๋‹ค! ์›นํŒฉ ์›นํŒฉ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๋ž€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž์› ((HTML, CSS, Javscript, Images ๋“ฑ)์„ ๋ชจ๋‘ ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ๋กœ ๋ณด๊ณ  ์ด๋ฅผ ์กฐํ•ฉํ•ด์„œ ๋ณ‘ํ•ฉ๋œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“œ๋Š” ๋„๊ตฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์„ฑ๊ฒฉ์ด ๋น„์Šทํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์˜ ์˜๋ฏธ ์žˆ๋Š” ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ๋ชจ๋“ˆ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋ง ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช‡์‹ญ, ๋ช‡๋ฐฑ ๊ฐœ์˜ ์ž์›๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉ ๋ฐ ์••์ถ•ํ•ด์ฃผ๋Š” ๋™์ž‘์„ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋ง์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ..

    Github Action test ๊ฐ€ ๋๋‚˜์ง€ ์•Š๋Š”๋‹ค..

    Github Action์œผ๋กœ CICD ์ ์šฉํ•˜๋ ค๋Š”๋ฐ, test ๊ฐ€ ๊ณ„์† ๋Œ์•„๊ฐ€๋ฉฐ ๋๋‚˜์ง€ ์•Š์•˜๋‹ค. 39๋ถ„ ๊ฑธ๋ฆฐ ๊ฒƒ๋„ ๋‚ด๊ฐ€ ์ค‘๊ฐ„์— ์ทจ์†Œํ•ด์„œ ์ € ์ •๋„.. test ๊ฐ€ ๋กœ์ปฌ์—์„  ์„ฑ๊ณตํ–ˆ๊ณ , action์—์„œ๋„ ์„ฑ๊ณต์€ ํ•จ! ๊ทผ๋ฐ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€์ง€๋Š” ์•Š์•˜๋‹ค. ๐Ÿฅฒ ๊ทธ๋ž˜์„œ yarn ์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค๊ฐ€ env: CI=true๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ฐ€ ๋‚œ๋ฆฌ ์น˜๋‹ค๊ฐ€ ๊ฒฐ๊ตญ ์ฐพ์•„๋ƒ„. package.json์˜ script์˜ test์— --watchAll ์˜ต์…˜์„ ์ค€ ๊ฒƒ์„ ์‚ญ์ œํ–ˆ๋”๋‹ˆ ๋๋‹ค! ๊ทธ ์˜ต์…˜ ๋•Œ๋ฌธ์— ๊ณ„์† ํ…Œ์ŠคํŠธ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ฑฐ์˜€๋‹ค.. ์ €๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  2์‹œ๊ฐ„ ๊ฐ€๊นŒ์ด ์‚ฝ์งˆํ–ˆ๋‹ค ๐Ÿ˜ญ ์•„๋ž˜ ์ฒ˜๋Ÿผ ์ง€์›Œ์ฃผ์—ˆ๋”๋‹ˆ ์ž˜ ๋œ๋‹ค! ์ฐธ๊ณ  https://github.com/orgs/community/discussions/25250

    Husky pre-commit fails with code 1 (error)

    yml ํŒŒ์ผ์— ๋ฌธ๋ฒ•์ด ํ‹€๋ฆฐ ๊ณณ์ด ์—†๋Š”๋ฐ ์ปค๋ฐ‹ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ณ„์† ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์€ eslint ๋ฌด์‹œํ•œ๋‹ค๊ณ  ๋ช…์‹œ๋ฅผ ํ•ด์ค˜๋„ ๊ณ„์† ์ปค๋ฐ‹์ด ์•ˆ๋จ. git commit -m "message" --no-verify ์ปค๋ฐ‹ํ•  ๋•Œ ์ด๋ ‡๊ฒŒ ๋ช…์‹œํ•˜์—ฌ ํ•ด๊ฒฐํ•จ! ์ฐธ๊ณ  https://github.com/typicode/husky/issues/1014

    AWS S3 ์ •์ฑ…

    AWS S3 ๋ฐฐํฌ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ •์ฑ… ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. { "Version": "2012-10-17", // 2012-10-17 ๋ฐœํ‘œ๋œ ์ •์ฑ…์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ฒ ๋‹ค. "Statement": [ { "Sid": "PublicReadGetObject", // ๋‚ด๊ฐ€ ๊ถŒํ•œ์— ๋ถ€์—ฌํ•œ ์ด๋ฆ„ "Effect": "Allow", // ์ด ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๋œป "Principal": "*", // ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก * ๋กœ ํ‘œํ˜„ "Action": "s3:GetObject", // s3 object ๊ฐ€์ ธ๊ฐ€๋ผ๋Š” ๋œป "Resource": "arn:aws:s3:::todots/*" // ๋ฒ„ํ‚ทARN(์ œ ๋ฒ„ํ‚ท๋ช…์€ todots ์ž…๋‹ˆ๋‹ค)/* } ] }

    [์žฌ๋ฃŒ ์ œ๋กœ์›จ์ด์ŠคํŠธ] Refactoring : Context ํ™œ์šฉํ•˜์—ฌ props drilling ์ •๋ฆฌ

    [์žฌ๋ฃŒ ์ œ๋กœ์›จ์ด์ŠคํŠธ] Refactoring : Context ํ™œ์šฉํ•˜์—ฌ props drilling ์ •๋ฆฌ

    ํ˜„ ํ”„๋กœ์ ํŠธ์—์„œ props drilling ๊ฐ€์žฅ ์‹ฌํ•œ ๊ณณ์€ Detail ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด, ์ตœ์ƒ์œ„ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ตœํ•˜์œ„ SwiperRecipeItem ๊นŒ์ง€ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ์ ˆ๋ฐ˜์ด ๋„˜์œผ๋ฏ€๋กœ ๋ถˆํ•„์š”ํ•œ props drilling์ด๋ผ ํŒ๋‹จํ–ˆ๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด context ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด context ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ props drilling ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๋ฉด ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์„ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €ํฌ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ Detail ์ปดํฌ๋„ŒํŠธ์— ํ•œํ•ด์„œ๋งŒ context๋ฅผ ์ ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. Detail page ์ปดํฌ๋„ŒํŠธ์—..

    [์žฌ๋ฃŒ ์ œ๋กœ์›จ์ด์ŠคํŠธ] axios interceptors ์‚ฌ์šฉ ์ด์œ 

    axios interceptors ์‚ฌ์šฉ ์ด์œ  1) base url ์ค‘๋ณต ๋ฐฉ์ง€ 2) ์š”์ฒญ๋งˆ๋‹ค ๋™์ผํ•œ content-type , token ๊ฐ™์€ ํ—ค๋”๊ฐ’ ์ฒ˜๋ฆฌ 3) ์‘๋‹ต ๋ฆฌํ„ด๊ฐ’ ์„ค์ •๊ณผ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ export const instance = axios.create({ baseURL: process.env.REACT_APP_API, headers: { "Content-Type": "application/json", withCredentials: true, }, }); instance.interceptors.request.use( function (config) { const accessToken = getCookie("accessToken"); const refreshToken = getCookie("..

    221016~221022 12์ฃผ์ฐจ [์‹ค์ „ ํ”„๋กœ์ ํŠธ 5์ฃผ์ฐจ + ํ”ผ๋“œ๋ฐฑ ๋ฐ›์€ ์†Œ๊ฐ]

    โœ… ๋กœ๊ณ  ์ˆ˜์ • โœ… ์˜จ๋ณด๋”ฉ ํŽ˜์ด์ง€ ์ถ”๊ฐ€ โœ… ๋ธŒ๋ผ์šฐ์ € ๋Œ€์‘ ํ™”๋ฉด ์ˆ˜์ • โœ… ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋ ˆ์‹œํ”ผ ๋ณด๋Š” ๋ฐฉ๋ฒ• ์ˆ˜์ • โœ… ๋ฒ„๊ทธ ์ˆ˜์ • โœ… ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—… ์ค‘... ์„œ๋น„์Šค ๋Ÿฐ์นญ ํ›„ ์•ฝ 60๊ฐœ ์ •๋„์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค! ๋ถˆํŽธ์‚ฌํ•ญ, ๊ฐœ์„ ์‚ฌํ•ญ, ๋ฒ„๊ทธ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ์ •๋ฆฌํ–ˆ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ์ƒ์„ธํ•˜๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์„œ ์ •๋ง ๊ฐ์‚ฌํ–ˆ๋‹ค ๐Ÿฅน ๋ฒ„๊ทธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ์ˆ˜์ •ํ–ˆ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ถˆํŽธ์‚ฌํ•ญ์œผ๋กœ ์ ์–ด์ค€ ๊ฒƒ๋“ค์„ ๋จผ์ € ์ˆ˜์ •ํ–ˆ๋‹ค! ๋Œ€๋ถ€๋ถ„์ด UX ๊ด€๋ จ ํ”ผ๋“œ๋ฐฑ์ด์—ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ์‚ฌ์ดํŠธ์ด๊ธฐ์— ๋‚˜๋Š” ์ต์ˆ™ํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ฒ˜์Œ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•œ ์‚ฌ์šฉ์ž๋Š” ํ—ท๊ฐˆ๋ คํ–ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”์ธ ํŽ˜์ด์ง€์˜ ๊ฐ€๋กœ ์Šคํฌ๋กค ๊ธฐ๋Šฅ. ๊ฒ€์ƒ‰ ๋ฐ ์ž‘์„ฑ์„ ์œ„ํ•ด ์žฌ๋ฃŒ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์ด ์žˆ์—ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ์‹œ๊ฐ„์ด ๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค..

    [์žฌ๋ฃŒ ์ œ๋กœ์›จ์ด์ŠคํŠธ] Refactoring : ์†Œ์…œ ๋กœ๊ทธ์ธ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ

    [์žฌ๋ฃŒ ์ œ๋กœ์›จ์ด์ŠคํŠธ] Refactoring : ์†Œ์…œ ๋กœ๊ทธ์ธ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ

    ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์„ธ ์ข…๋ฅ˜์˜ ์†Œ์…œ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. ๊ฐ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ๊ณผ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ํŽ˜์ด์ง€๋กœ ๋ณด๋‚ด๋Š” ์ปดํฌ๋„ŒํŠธ (3๊ฐœ) ๊ฐ€ ์žˆ๊ณ  ๋กœ๊ทธ์ธ api ์š”์ฒญํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ (3๊ฐœ) ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋Š” ๋ถ€๋ถ„์„ util ํ•จ์ˆ˜๋กœ ๋”ฐ๋กœ ๋นผ๊ณ  ๊ทธ ์™ธ ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„๋“ค๋„ ์ •๋ฆฌํ•ด์„œ 2๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ์ „ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ ํ›„ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐํ•˜๊ณ  ์ฟ ํ‚ค๋ฅผ ์„ธํŒ…ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋บ๋”๋‹ˆ ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ง€๊ณ  ์ฝ”๋“œ๋„ ๊น”๋”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค! ๋กœ๊ทธ์ธ api ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ๋„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฐฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ request.js ์—์„œ ์ž‘์—…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๊น”๋”ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ข‹์ง€๋งŒ, ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ๊ธฐ๋Šฅ ..

    Netlify ๋ฐฐํฌ process.env.CI = true ์˜ค๋ฅ˜ / Preview ๊ธฐ๋Šฅ ์ด์šฉํ•˜๊ธฐ

    Netlify ๋ฐฐํฌ process.env.CI = true ์˜ค๋ฅ˜ / Preview ๊ธฐ๋Šฅ ์ด์šฉํ•˜๊ธฐ

    Netlify ๋ฐฐํฌ๋Š” ๊ต‰์žฅํžˆ ์‰ฝ๋‹ค! vercel ๋งŒํผ ์‰ฌ์›€. ๊นƒํ—™์„ ์—ฐ๊ฒฐํ•˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋„ฃ์–ด์ฃผ๋ฉด ๋! ๊ทผ๋ฐ ๋ฐฐํฌํ•˜๋‹ค๊ฐ€ ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. ๋ณ€์ˆ˜๊ฐ€ true ๋กœ ๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๋žฌ๋‹ค. ๋ฐฐํฌ ์„ธํŒ…์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๋นŒ๋“œ ์„ธํŒ… ๋ถ€๋ถ„์—์„œ CI=false ๋ฅผ yarn build ์•ž์— ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค! ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‹ค! ๐Ÿคญ Netlify ์‚ฌ์šฉ ์ด์œ ! ํ˜„ ํ”„๋กœ์ ํŠธ๋Š” ๋ชจ๋ฐ”์ผ ๊ธฐ์ค€์ด๋ผ ํ•„์ˆ˜์ ์œผ๋กœ ๋ชจ๋ฐ”์ผ๋กœ UIUX ๋ฅผ ์ฒดํฌํ•ด์•ผ ํ•œ๋‹ค. ๋•Œ๋ฌธ์— main ์— ํ•ฉ์น˜๊ธฐ ์ „, ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•œ ๊ฒƒ์ด ๋ชจ๋ฐ”์ผ์—์„œ๋„ ์›ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”์ง€ ์ˆ˜์‹œ๋กœ ํ™•์ธ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด๋Ÿด ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ด๋Š” Netlify ์˜ ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ!!!!! ์ด๊ฑธ ์ด์ œ์„œ๋ผ๋„ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์— ์ •๋ง ๊ฐ์‚ฌํ•˜๋‹ค ใ… ใ…  dev ์— pr ์„ ๋ณด๋‚ด๊ณ  merge ๊ฐ€ ๋˜..

    ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”์Šค ํ•ฉ๊ฒฉ ๐ŸŽ‰

    ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”์Šค ํ•ฉ๊ฒฉ ๐ŸŽ‰

    ์„œ๋น„์Šค ๋Ÿฐ์นญ 3์ผ ์ „, ์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์„ ์•Œ๊ฒŒ ๋˜์–ด ๋ถ€๋žด ๋ถ€๋žด ์„ ๋ฐœ ๊ณผ์ œ๋ฅผ ํ–ˆ๋‹ค. ํ˜„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋†“์„ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๊ณ„์† ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๊ณผ์ œ ์ œ์ถœ ๋งˆ๊ฐ 2์ผ ์ „, ์ƒˆ๋ฒฝ 4์‹œ๊นŒ์ง€ ์ž‘์—…ํ•ด์„œ ์ œ์ถœ ์™„-๋ฃŒ! ์‚ฌ์‹ค 80๋ช…์ด๋‚˜ ๋ฝ‘๊ณ  ์ง€์›์ž๊ฐ€ ๋งŽ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„ ๊ฐ„์ ˆํ•จ์ด ๋œํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทผ๋ฐ ๋ง‰์ƒ ์ œ์ถœํ•˜๊ณ  ๋‚˜๋‹ˆ ์—„์ฒญ ํ•˜๊ณ  ์‹ถ์–ด์ ธ์„œ ๋ง‰ ํ›„๊ธฐ ์ฐพ์•„๋ณด๊ณ  ์ง€์›ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ๊นƒํ—™ ๋’ค์ ธ์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ๋‚ด ์ฝ”๋“œ๋ž‘ ๋น„๊ตํ•˜๊ณ  ๋‚œ๋ฆฌ๋ถ€๋ฅด์Šค ์ณค๋‹ค ใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Žใ…Ž ๋นจ๋ฆฌ ์ œ์ถœํ•œ ์ง€์›์ž๋“ค์—๊ฒŒ ๊ฐ€์‚ฐ์ ์ด ์žˆ๋Š” ๊ฒƒ๋„ ์—„์ฒญ ํฐ ์ฐจ์ด๋กœ ๋Š๊ปด์ ธ์„œ ๋–จ์–ด์ ธ๋„ ๋„ˆ๋ฌด ์‹ค๋งํ•˜์ง€ ๋ง์ž๊ณ  ์Šค์Šค๋กœ๋ฅผ ์œ„๋กœํ–ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ด๋ฒˆ ์ฃผ ๊ธˆ์š”์ผ 12์‹œ์— ๋‚˜์˜จ๋‹ค๊ณ  ํ•ด์„œ ๋งˆ์Œ ์กธ์ด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์˜ค๋Š˜(๋ชฉ) ๋‚ฎ์— ๊ธ‰ ๋ฌธ์ž๊ฐ€ ์™”๋‹ค. ๐ŸŽ‰ ํ•ฉ๊ฒฉ ๐ŸŽ‰ ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€ํŠธ์บ ํ”„์™€ ..

    221009~221015 11์ฃผ์ฐจ [์‹ค์ „ ํ”„๋กœ์ ํŠธ 4์ฃผ์ฐจ + ์„œ๋น„์Šค ๋Ÿฐ์นญ ํšŒ๊ณ ]

    221009~221015 11์ฃผ์ฐจ [์‹ค์ „ ํ”„๋กœ์ ํŠธ 4์ฃผ์ฐจ + ์„œ๋น„์Šค ๋Ÿฐ์นญ ํšŒ๊ณ ]

    โœ… ์ฑ„ํŒ… ๊ธฐ๋Šฅ ๊ตฌํ˜„ - ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ, ์ƒˆ๋กœ์šด ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ˆ˜์‹  ์—ฌ๋ถ€ ๋ฉ”์ธ์—์„œ ์•„์ด์ฝ˜์œผ๋กœ ํ‘œ์‹œํ•˜๊ธฐ โœ… ๋ฌดํ•œ ์Šคํฌ๋กค - ๋ฉ”์ธ ํŽ˜์ด์ง€, ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ โœ… ์„œ๋ฒ„ ์š”์ฒญ ์ฟผ๋ฆฌ React-Query๋กœ ๋ชจ๋‘ ๋ณ€๊ฒฝ โœ… AWS S3 + Cloud Front ๋ฐฐํฌ, ๊ฐ€๋น„์•„์—์„œ ๋„๋ฉ”์ธ ๊ตฌ๋งค โœ… ์ž์ž˜ํ•œ ๋ฒ„๊ทธ๋“ค ์ˆ˜์‹œ๋กœ ์ˆ˜์ •.. ๐ŸŽ‰ 10์›” 19์ผ ์„œ๋น„์Šค ๋Ÿฐ์นญ ๐ŸŽ‰ 4์ฃผ๊ฐ„์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚˜๊ณ  ์„œ๋น„์Šค๋ฅผ ๋Ÿฐ์นญํ–ˆ๋‹ค. ๐ŸŽ‰๊ฒฝ์ถ•๐ŸŽ‰ ์„œ๋น„์Šค ๋Ÿฐ์นญ๊นŒ์ง€ ์ผ์ฃผ์ผ๋ฐ–์— ์•ˆ ๋‚จ์€ ์‹œ์ ์—์„œ ์„œ๋ฒ„ ์š”์ฒญ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ React-Query๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜๊ณ  ์ ์šฉํ•˜๋Š๋ผ ์ •์‹ ์—†์ด ์‹œ๊ฐ„์ด ์ง€๋‚˜๊ฐ”๋‹ค. ๋˜ํ•œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฌดํ•œ ์Šคํฌ๋กค๋„ ์ ์šฉํ–ˆ๋‹ค. ๋ฐฐํฌ๋Š” ์‰ฝ๊ฒŒ ๋˜๋Š” ๋“ฏํ–ˆ์œผ๋‚˜.. ๊นƒํ—™ ์•ก์…˜์œผ๋กœ ์ž๋™ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์— ์‹คํŒจํ•ด์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋‚ ๋ ค ๋จน์—ˆ๋‹ค..๐Ÿ˜ญ ๊ฒฐ๊ตญ์€ CLI๋กœ..

    ๋ฆฌ์•กํŠธ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ..

    ๐Ÿค” ํฌ์ŠคํŒ… ์ด์œ  ๋งค์ฃผ ๊ธฐ์ˆ  ๋ฉ˜ํ† ๋‹˜์—๊ฒŒ ํ”„๋กœ์ ํŠธ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์žˆ๋Š”๋ฐ, ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค. ์•„ํ† ๋ฏน ํŒจํ„ด.. ๋ฌด์Šจ ๋ฌด์Šจ ํŒจํ„ด.. ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด์ฃผ์…จ๋Š”๋ฐ, ๊ธฐ์ˆ  ๊ตฌํ˜„์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๋Š๋ผ ๊ณต๋ถ€๋ฅผ ๋ฏธ๋ค˜๋‹ค๊ฐ€ ์˜ค๋Š˜์—์„œ์•ผ ์ฐพ์•„๋ณธ๋‹ค! ๐Ÿฅฒ ๊ณต๋ถ€ ํ›„ ๊ฒฐ๋ก  ํ˜„ ํ”„๋กœ์ ํŠธ์˜ ๋Œ€๋ถ€๋ถ„์€ Presentational and Container Component Pattern (์ดํ•˜ PCC) ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๊ณ  Pages ์—์„œ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์€ Atomic Design Pattern (์ดํ•˜ Atom) ๊ณผ ๋น„์Šทํ–ˆ๋‹ค. PCC ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ์ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ์ง ๋ถ€๋ถ„๊ณผ UI ๋ถ„๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ props ๋“œ๋ฆด๋ง์ด ๋งŽ์ด ์ƒ๊ฒจ์„œ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ๋…๋ฆฝ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. Atom ์„ ์“ฐ๋ฉด ์ปดํฌ๋„Œ..

    220925~221008 9,10์ฃผ์ฐจ [์‹ค์ „ ํ”„๋กœ์ ํŠธ 2,3์ฃผ์ฐจ ํšŒ๊ณ ]

    ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… โœ… ์†Œ์…œ ๋กœ๊ทธ์ธ ํ†ตํ•ฉ->ํ†ตํ•ฉ ์•ˆ ํ•จ์œผ๋กœ ์ˆ˜์ • โœ… ๋กœ๊ทธ์•„์›ƒ, ํšŒ์›๊ฐ€์ž…, ํšŒ์›ํƒˆํ‡ด ๊ณตํ†ต โœ… ๋ ˆ์‹œํ”ผ ์ข‹์•„์š” ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌ โœ… ํ’‹ํ„ฐ์˜ [ # ]๋ฒ„ํŠผ ํด๋ฆญ ์‹œ Best Tag List ์กฐํšŒ ๋ฐ ํƒœ๊ทธ ์„ ํƒํ•ด์„œ ๊ฒ€์ƒ‰ ๋ฉ”์ธ ํŽ˜์ด์ง€ โœ… ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€, ํŒ”๋กœ์šฐํ•œ ์œ ์ € ์œ ๋ฌด์— ๋”ฐ๋ผ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด ๋ณ€๊ฒฝ โœ… ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ (ํƒœ๊ทธ ์ตœ๋Œ€ 5๊ฐœ, ์ œ๋ชฉ, ๋‹‰๋„ค์ž„) ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ โœ… ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€ ๋ ˆ์‹œํ”ผ ๊ด€๋ จ ํŽ˜์ด์ง€ โœ… ๋ ˆ์‹œํ”ผ ์ƒ์„ธ ํŽ˜์ด์ง€ Swiper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ์ž‘ ๋ฐ ์ž‘์„ฑ์ž ์œ ๋ฌด์— ๋”ฐ๋ฅธ ๋ฒ„ํŠผ ๋ณ€๊ฒฝ โœ… ๋ ˆ์‹œํ”ผ ์ˆ˜์ • ํŽ˜์ด์ง€ Swiper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ์ž‘ 2์ฃผ ๋ฐ€๋ฆฐ WIL .. ๐Ÿฅฒ ๊ทธ๋™์•ˆ ์—„์ฒญ ์‹œ๊ฐ„์ด ๋นจ๋ฆฌ ๊ฐ”๋‹ค. ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋• ์—ฌ์œ ๊ฐ€ ๋„˜์ณค๋Š”๋ฐ, ์ƒ๊ฐ๋Œ€๋กœ ์ž˜ ์•ˆ ํ’€๋ฆฐ ๋ถ€๋ถ„๋“ค๋„ ์žˆ์—ˆ๊ณ  ํ•˜๋‹ค ๋ณด๋‹ˆ ์ „..

    AWS Cloud Front ๋ž€?

    AWS Cloud Front ๋ž€?

    https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-CloudFront-%EA%B0%9C%EB%85%90-%EC%9B%90%EB%A6%AC-%EC%82%AC%EC%9A%A9-%EC%84%B8%ED%8C%85-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC ์œ„ ๋งํฌ ๋‚ด์šฉ์„ ์Šคํฌ๋žฉ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. CDN ์ด๋ž€? CDN(Content Delivery Network or Content Distribution Network, ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ) ์€ ์ฝ˜ํ…์ธ ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๋„คํŠธ์›Œํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค. CDN ํŠน์ง• ์›น ํŽ˜์ด์ง€, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์˜ ์ปจํ…์ธ ๋ฅผ ๋ณธ๋ž˜ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€ ์บ์‹ฑ ํ•ด๋‹น ์ปจํ…์ธ ์— ๋Œ€ํ•œ ์š”์ฒญ์ด ..

    ๋ Œ๋”๋ง์ด 3๋ฒˆ ๋œ๋‹ค..

    ๋ Œ๋”๋ง์ด 3๋ฒˆ ๋œ๋‹ค..

    ๋ฆฌ์•กํŠธ์—์„œ ๋ Œ๋”๋ง ๋˜๋Š” ์ด์œ . 1. state ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ 2. ์ƒˆ๋กœ์šด props ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ(props ์—…๋ฐ์ดํŠธ) 3. ๋ถ€๋ชจ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ 4. forceUpdate ๊ฐ€ ์‹คํ–‰๋  ๋•Œ. ๋ฌธ์ œ ์›์ธ 1. ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ editForm ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด setState๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์˜ state๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ž์‹์˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์ธ TagList ๋„ ์žฌ๋ Œ๋”๋ง ๋จ. 2. TagList ์ปดํฌ๋„ŒํŠธ์˜ tagList state ๋Š” ์ตœ์ดˆ์— ๋ณ€๊ฒฝ๋˜๊ณ  ๊ทธ๋‹ค์Œ ๋ Œ๋”๋ง๋ถ€ํ„ฐ๋Š” ๋ณ€๊ฒฝ์œผ๋กœ ์ธ์ง€๋˜์ง€ ์•Š์•„ useEffect ์•ˆ์˜ editForm ์ด ์‹คํ–‰๋˜์ง€ ์•Š์Œ. 3. ๋•Œ๋ฌธ์— ๋ถ€๋ชจ editForm ํ•จ์ˆ˜์—” ๊ฐ€์žฅ ์ฒ˜์Œ์—” ์ˆ˜์ •๋œ ์ •๋ณด๋กœ ๋‚˜์˜ค๊ณ  ๊ทธ ํ›„์—” ๊ณ„์† ์ดˆ๊ธฐ ์ง€์ • ๊ฐ’์œผ๋กœ ๋‚˜์˜ด. ๋ฌธ์ œ ํ•ด๊ฒฐ 1. editForm ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ta..

    React ์ƒํƒœ ๊ด€๋ฆฌ ๋น„๊ต Redux & React Query & SWR

    ์ƒํƒœ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ ํ”„๋กœ์ ํŠธ์˜ ๋Œ“๊ธ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋˜ ์ค‘, ์Šต๊ด€์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฆฌ๋•์Šค ์ฝ”๋“œ๋ฅผ ๊ฑท์–ด๋‚ด๊ณ  ๋‚˜๋‹ˆ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์ ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ“๊ธ€ ์ƒ์„ฑ, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ์‹œ ์„œ๋ฒ„์— API ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต ๊ฐ’์„ ๋ฐ›์•„ ์˜ค๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ๊ฝค๋‚˜(?) ๊ธธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‘๋‹ต๊ฐ’์— ๋”ฐ๋ผ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ณ  ์ถ”๊ฐ€(์ˆ˜์ •,์‚ญ์ œ) ๋œ ๋Œ“๊ธ€์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์€ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ๋ถ€๋ถ„์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์ง€๋งŒ..? ์ˆœ๊ฐ„, ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์€ ์–ด๋–ป๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์‘ํ•˜์ง€?! ๋ผ๋Š” ์˜๋ฌธ์ ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐพ์•„ ๋ณด๋‹ˆ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์„ ๊ฒƒ์ด๋ผ ์˜ˆ์ƒํ•˜๊ณ  ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณด์—ฌ์ฃผ๊ณ ! ๊ทธ ๋‹ค์Œ ์„œ๋ฒ„์—์„œ ์‘๋‹ต ๊ฐ’์„ ๋ฐ›์•˜์„ ๋•Œ, ์‹คํŒจํ–ˆ๋‹ค๋ฉด ๊ฐ’์„ ๊ฑฐ๋‘ฌ ๋“ค์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ  ํ˜„ ํ”„๋กœ์ ํŠธ์— ์ž˜..

    220918~220924 8์ฃผ์ฐจ [์‹ค์ „ ํ”„๋กœ์ ํŠธ 1์ฃผ์ฐจ ํšŒ๊ณ ]

    โœ… ๋ฉ”์ธ ํŽ˜์ด์ง€(๋ฒ ์ŠคํŠธ ๋ ˆ์‹œํ”ผ, ์ตœ์‹  ๋ ˆ์‹œํ”ผ ์กฐํšŒ) โœ… ๋Œ“๊ธ€ CRUD โœ… ๋ ˆ์ด์•„์›ƒ, ํƒœ๊ทธ, ๋ ˆ์‹œํ”ผ ์ปดํฌ๋„ŒํŠธ ์ œ์ž‘ โœ… ์นด์นด์˜ค ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… โœ… ์ด์Šˆ, PR ๋กœ ํ˜‘์—…ํ•˜๊ธฐ ์ผ์ฃผ์ผ ๋‹จ์œ„๋กœ ๊ณ„์† ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค ๋ณด๋‹ˆ, ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„์€ ๋น ๋ฅด๊ฒŒ ์™„๋ฃŒํ–ˆ๋‹ค. ๋ฌผ๋ก  UX ๋ถ€๋ถ„์ด ์•„์ง ๋ถ€์กฑํ•˜๊ณ , ๋ฌดํ•œ ์Šคํฌ๋กค, ์Šค์ผˆ๋ ˆํ†ค, ์•Œ๋Ÿฟ์ฐฝ ๋Œ€์‹  ์Šค๋‚ต๋ฐ” ์‚ฌ์šฉ ๋“ฑ๋“ฑ์€ ๋‚จ์•„ ์žˆ๋‹ค. ์‹ค์ „ ํ”„๋กœ์ ํŠธ์ธ ๋งŒํผ ๊ทธ๋™์•ˆ ํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ, ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด์„œ ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ํ•ด๋ณผ ์ƒ๊ฐ์ด๋‹ค. ๋˜ํ•œ ๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์œ ์ง€ ๋ณด์ˆ˜์„ฑ, ๊ฐ€๋…์„ฑ, ์ตœ์ ํ™” ๋“ฑ๋“ฑ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค. ์‹ค์ „ ํ”„๋กœ์ ํŠธ 1์ฃผ์ฐจ ํšŒ๊ณ  1. ๋ฆฌ๋•์Šค๋ฅผ ๊ผญ ์จ์•ผํ• ๊นŒ? ์ „์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ๋•์Šค. ํ˜„ ํ”„๋กœ์ ํŠธ์—์„œ ์ •๋ง ํ•„์š”ํ• ๊นŒ? ๋ผ๋Š” ์˜๋ฌธ์ด ๋“ ..

    220911~220917 7์ฃผ์ฐจ

    โœ… ์˜ค์„ค๋ก ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ ๋งˆ๋ฌด๋ฆฌ โœ… ๊นƒํ—™ ๋ฆฌ๋“œ๋ฏธ ์ž‘์„ฑ โœ… ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ ๊ฐœ๋ฐœ ์œ ์˜์  ์ž๋ฃŒ ์ˆ˜์ง‘ [ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ ๋งˆ๋ฌด๋ฆฌ] ์ฒ˜์Œ ๊ณ„ํšํ–ˆ๋˜ ๊ธฐ๋Šฅ๋“ค ๋ชจ๋‘ ๊ตฌํ˜„ํ•˜๊ณ  ์˜ค๋ฅ˜ ์—†์ด ๋ฐฐํฌ๊นŒ์ง€ ์™„๋ฃŒํ•œ ์ฒซ ํ”„๋กœ์ ํŠธ๋‹ค. ์ด์ œ๊นŒ์ง€ ๋ญ๊ฐ€ ํ•˜๋‚˜์”ฉ ์•„์‰ฝ๊ณ  ๋ถ€์กฑํ–ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—” ๋งŒ์กฑ์Šค๋Ÿฝ๊ฒŒ ๋๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ฌ์œ ๊ฐ€ ์žˆ์–ด์„œ ๋ฆฌ๋“œ๋ฏธ ์ž‘์„ฑ๋„ ์ •์„ฑ๊ป ํ–ˆ๋‹ค. ์•„์‰ฌ์› ๋˜ ์ ์€ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ๊ธฐ๋กํ•˜์ง€ ์•Š์•„์„œ ์ ๊ธฐ ์–ด๋ ค์› ๋‹ค๋Š” ๊ฒƒ. ์ด์Šˆ๋กœ ๊ธฐ๋กํ•˜๋Š” ์Šต๊ด€์„ ๊ฐ€์ง€๋„๋ก ํ•˜์ž! [์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘] ๊ธˆ์š”์ผ๋ถ€ํ„ฐ ์‹ค์ „ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋๋‹ค. 6์ฃผ๋ผ๋Š” ๊ธด ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง„ ๋งŒํผ ์š•์‹ฌ์ด ๋งŽ์ด ์ƒ๊ฒผ๋‹ค. ์–ผ๊ฒฐ์— ๋ถ€๋ฆฌ๋”๊ฐ€ ๋˜์–ด์„œ ๋ถ€๋‹ด๊ฐ์ด ๋” ํฌ๋‹ค. ๋จผ์ € ํ”„๋กœ์ ํŠธ ์ฃผ์ œ๋ฅผ ์ •ํ•˜๊ณ  ์ตœ์†Œ ๊ธฐ๋Šฅ ๊ตฌํ˜„๋ถ€ํ„ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„๊นŒ์ง€ ๋‚˜๋ˆ ์„œ ๊ณ„ํšํ–ˆ๋‹ค. ๊ทธ ํ›„, ํ™”๋ฉด ์„ค๊ณ„, api ์„ค๊ณ„๋ฅผ ํ–ˆ๋‹ค..

    220904~220910 6์ฃผ์ฐจ ํ˜ผ์ž์„œ ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ ๐Ÿฅน

    โœ… [์‹๋ฌผ์ผ๊ธฐ] ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ. ๊ฒŒ์‹œ๊ธ€ CRUD, ๋Œ“๊ธ€ CRUD, ๋กœ๊ทธ์ธ(JWT), ํšŒ์›๊ฐ€์ž…, ๋งˆ์ดํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ โœ… MUI ํ™œ์šฉ. โœ… [์˜ค์„ค๋ก] ํด๋ก  ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘. PostCss Module ํ™œ์šฉ. ๋ฉ”์ธ ํŽ˜์ด์ง€ ์™„๋ฃŒ. โœ๏ธ axios intercepter ๊ณต๋ถ€์ค‘.. https://axios-http.com/kr/docs/interceptors โœ๏ธ react ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ธ๊ฐ• ์‹œ์ž‘ โœ๏ธ ๋ฐ˜์‘ํ˜• ์‚ฌ์ดํŠธ ๋งŒ๋“œ๋Š” ๋ฒ• ์ด๋ฒˆ ์ฃผ๋Š” ์ •๋ง ์ •์‹ ์ด ์—†์—ˆ๋‹ค. ์‹๋ฌผ์ผ๊ธฐ ํ”„๋กœ์ ํŠธ์˜ ํ”„๋ก ํŠธ ๋ถ€๋ถ„์„ ํ˜ผ์ž ๋งก์•„์„œ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋ฅธ ์กฐ๋“ค์€ 2-3๋ช…์˜ ํ”„๋ก ํŠธ ๋‹ด๋‹น์ž๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ, ์šฐ๋ฆฌ ์กฐ๋Š” ํ”„๋ก ํŠธ ํŒ€์›์ด ๊ฐ‘์ž๊ธฐ ์ž…์›์„ ํ•˜๋Š” ๋ฐ”๋žŒ์— ๋‚˜ ํ˜ผ์ž ํ”„๋ก ํŠธ ์ „๋ฐ˜์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทผ๋ฐ ์ •๋ง ๋†€๋ž๊ฒŒ๋„! ๋‚˜ ํ˜ผ์ž์„œ ๋‹ค ํ•  ์ˆ˜ ์žˆ์—ˆ..

    220828~220903 5์ฃผ์ฐจ

    โœ… ํŒ€ ๊ณผ์ œ ๋! (+๊ฒŒ์‹œ๊ธ€ ์ตœ์‹  ์ˆœ, ์˜ค๋ž˜๋œ ์ˆœ ์„ ํƒ ์ •๋ ฌ, ํ—ค๋” ๋ฒ„ํŠผ ์ˆ˜์ •) โœ… axios ๊ณต๋ถ€ ๋ฐ ์‹ค์Šต. โœ… heroku ๋ฐฐํฌ ์‹ค์Šต. โœ… redux-toolkit ์ •๋ฆฌ, ์‚ฌ์šฉ์€ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์ง„ ์•Š์•˜๋‹ค. https://lazygay.tistory.com/37 6์ฃผ์ฐจ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘! โœ… material ui ํ™œ์šฉํ•ด์„œ ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด ์ž‘์—…! + ์ •๊ทœํ™” ํ‘œํ˜„์‹์„ ์ด์šฉํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ. ๐Ÿ” ๋กœ๊ทธ์ธ ์™„๋ฃŒ์‹œ ํ† ํฐ ์ €์žฅ ๋ฐ ํ™œ์šฉ๋ฒ• ๊ณต๋ถ€์ค‘... 5์ฃผ์ฐจ ํ”„๋กœ์ ํŠธ๋Š” ํ”„๋ก ํŠธ ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ํ–ˆ๋‹ค๋ฉด, 6์ฃผ์ฐจ๋ถ€ํ„ฐ๋Š” ํ”„๋ก ํŠธ 2๋ช…, ๋ฐฑ 2๋ช…์ด ํ•œ ํŒ€์ด ๋˜์–ด์„œ ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋๋‹ค. ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ† ํฐ์„ ๋ฐ›์•„์˜ค๋Š”๋ฐ, ์ด ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์„œ ๋กœ๊ทธ์ธ ์œ ๋ฌด๋ฅผ ํŒ๋‹จํ•˜๋Š”์ง€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ..

    React Redux Toolkit ์‚ฌ์šฉํ•˜๊ธฐ

    React Redux Toolkit ์‚ฌ์šฉํ•˜๊ธฐ

    Redux Toolkit ์€ Redux ๋ฅผ ๋” ํŽธํ•˜๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์€ ๊ฐ™์œผ๋‚˜ Module ํŒŒ์ผ์ด ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. 1. ํˆดํ‚ท ์„ค์น˜ํ•˜๊ธฐ CRA ๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  yarn ์„ ํ†ตํ•ด์„œ ์•„๋ž˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ yarn add react-redux @reduxjs/toolkit 2. Redux ์™€ Redux Toolkit ์˜ ์ฐจ์ด์  ํฐ ์ฐจ์ด์ ์€ Action Value์™€ Action Creator๋ฅผ ์ด์ œ ์ง์ ‘ ์ƒ์„ฑํ•ด์ฃผ์ง€ ์•Š๊ณ  Action Value, Action Creator, Reducer ๊ฐ€ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์กŒ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋กœ ํ•ฉ์น ๋•Œ Slice ๋ผ๋Š” API ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด Slice ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํ•œ ๋ฒˆ์— 3๊ฐœ๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. 3. Redux Toolkit ์‚ฌ์šฉ..

    220821~220827 4์ฃผ์ฐจ

    220821~220827 4์ฃผ์ฐจ

    ํ•œ ์ฃผ ๋Œ์•„๋ณด๊ธฐ. โœ… ๊ฐœ์ธ ๊ณผ์ œ To-Do List ์™„๋ฃŒ (Redux, Router ์ด์šฉ) + GitHub Pages ๋กœ ๋ฐฐํฌ ๋ฐฐํฌ์‹œ ํฐ ํ™”๋ฉด๋งŒ ๋ณด์ด๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ! ํ•ด๊ฒฐ -> https://lazygay.tistory.com/29 โœ… ๋Š˜ ํ—ท๊ฐˆ๋ฆฌ๋˜ ์šฉ์–ด ์ •๋ฆฌ MPA SSR SPA CSR ์šฉ์–ด ์ •๋ฆฌ -> https://lazygay.tistory.com/32 โœ… Life Cycle ๊ฐœ๋… ์ •๋ฆฌ -> https://lazygay.tistory.com/34 โœ… Hook ์ƒ๊ธด ์ด์œ ์™€ ์ข…๋ฅ˜ -> https://lazygay.tistory.com/35 โœ… Styled Component ์‚ฌ์šฉ๋ฒ• ์ตํ˜€์„œ ํŒ€ํ”Œ์—์„œ ์‚ฌ์šฉ ์ค‘. โœ… ํŒ€ ํ”„๋กœ์ ํŠธ [์œ ๋จธ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ] - ํ—ค๋”, ๋ฉ”์ธ ํŽ˜์ด์ง€ (์ „์ฒด ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ), ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„..

    React Hook ์ด๋ž€ ?

    React Hook ์ด๋ž€ ?

    Hook ์ •์˜ React ๊ณต์‹ ๋ฌธ์„œ์˜ Hook ์˜ ์ •์˜์ž…๋‹ˆ๋‹ค. Hook ์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ํ™œ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ๋ณต์žกํ•œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. Hook ์„ ํ”„๋กœ์ ํŠธ์— ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ class ํ˜• ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ˆ˜์ •ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๋“ฏ์ด ์ ์ง„์ ์œผ๋กœ ์ ์šฉ ํ•ด๋‚˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. Hook ์ข…๋ฅ˜ ๋ฆฌ์•กํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” Hook ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋“ค์ด ํ•„์š”ํ•œ Hook ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ Custom Hook ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๊ฐœ์ธ๋“ค์ด ๋งŒ๋“  ์œ ์šฉํ•œ Hook ๋“ค์€ npm ์„ ํ†ตํ•ด ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€ ์žˆ๋Š” H..

    React Life Cycle [ Class component ์™€ Function component ]

    React Life Cycle [ Class component ์™€ Function component ]

    React Life Cycle ์ด๋ž€? LifeCycle ์€ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์ƒ์— ๋‚˜ํƒ€๋‚˜๊ณ , ์—…๋ฐ์ดํŠธ๋˜๊ณ , ์‚ฌ๋ผ์งˆ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋“ค์„ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” Class component ์™€ function component ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Class Component Life Cycle Class Component ์—์„œ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด์— ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ˆœ๊ฐ„์— ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด, ์ •ํ•ด์ง„ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ function component ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” hook ์„ ํ†ตํ•ด์„œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ์ฐธ๊ณ ํ–ˆ์ง€๋งŒ ์„ธ๋ถ€์ ์ธ ๋ฉ”์„œ๋“œ๋ช…์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค...

    React Ref ์™€ Dom

    Ref๋Š” render ๋ฉ”์„œ๋“œ์—์„œ ์ƒ์„ฑ๋œ DOM ๋…ธ๋“œ๋‚˜ React ์—˜๋ฆฌ๋จผํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ง์ ‘์ ์œผ๋กœ ์ž์‹์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ž์‹์€ React ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค ํ˜น์€ Dom ์—˜๋ฆฌ๋จผํŠธ ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Ref ๋Š” ๋‚จ์šฉํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Ref๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ - ํฌ์ปค์Šค, ํ…์ŠคํŠธ ์„ ํƒ์˜์—ญ, ํ˜น์€ ๋ฏธ๋””์–ด์˜ ์žฌ์ƒ์„ ๊ด€๋ฆฌํ•  ๋•Œ. - ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ง์ ‘์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ. - ์„œ๋“œ ํŒŒํ‹ฐ DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ React์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๋•Œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์™€ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ref ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์— ref ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์‚ฌ์šฉํ•  ..

    ๐Ÿค” MPA SSR SPA CSR ์šฉ์–ด ์ •๋ฆฌ

    MPA (Multiple Page Application) ๋‘ ๊ฐœ ์ด์ƒ์˜ Page ๋กœ ๊ตฌ์„ฑ๋œ Application ์ž…๋‹ˆ๋‹ค. MPA ๋Š” SSR (Server Side Application) ๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค. SSR (Server Side Application) ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง ๋œ ์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. SSR ์€ ์•„๋ž˜์˜ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ(ํด๋ผ์ด์–ธํŠธ) ์ ‘์† ๐Ÿ‘‰ ์„œ๋ฒ„๋Š” ์ž˜ ๋งŒ๋“ค์–ด์ง„ (HTML, CSS, JS ๊ฐ€ ๋“ค์–ด ์žˆ๋Š”) index.html ์„ ์‘๋‹ต ๐Ÿ‘‰ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  JS ํŒŒ์ผ์„ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ ๐Ÿ‘‰ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  JS ํŒŒ์ผ ์‘๋‹ต ๐Ÿ‘‰ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์ดํŠธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๐Ÿ‘‰ ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ A ๋ถ€๋ถ„ ์ˆ˜์ •์„ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ..