์ „์ฒด ๊ธ€

์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘ ์ž…๋‹ˆ๋‹ค
๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„ ํ”ผ๊ทธ๋งˆ์—์„œ ๊ฐ€์ ธ์™”๋‹ค. ์œ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํŽ˜์ด์ง€๊ฐ€ ์ตœ๋Œ€ 7๊ฐœ๋งŒ ๋ณด์—ฌ์ ธ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์„ ํƒ๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์šด๋ฐ์— ์˜ค๋„๋ก ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ตฌํ˜„ export default function Pagination({ currentPage, setCurrentPage, allDataCount, perPageDataCount }: Props) { const pageCount = Math.ceil(allDataCount / perPageDataCount); const pageNumberList = createPageNumberList(currentPage, pageCount); return ( {pageCount > PAGE_LIMIT && ( setCurrentPage(current..
์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ ์กฐ์œจ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ์ œ๋Œ€๋กœ ๋งž์ถ”์–ด ๋ณธ ์ ์ด ์—†์—ˆ๋‹ค. ์ด๋ฒˆ์— ์Šคํ”„๋ฆฐํŠธ์—์„œ ์ค‘๊ธ‰ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ํ™•์‹คํ•˜๊ฒŒ ์ •ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋ฅผ ์ž˜ ์ง€ํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ๋Œ€์ถฉ ์ด์ •๋„๋กœ ์ •ํ–ˆ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” airbnb ๋ฃฐ์—์„œ ์–ด๋Š์ •๋„ ์ปจ๋ฒค์…˜์„ ํ†ต์ผ์‹œ์ผœ์ฃผ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ธ์„ธํ•˜๊ฒŒ ์žก๊ณ  ๊ฐ€๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์—†์œผ๋ฏ€๋กœ ๋‚˜๋จธ์ง€ ์ปจ๋ฒค์…˜์€ ์ถ”ํ›„ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์—ญํ• ๋ถ„๋ฐฐ ์ด์ „์— ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ž‘์—… ๋ถ„๋ฐฐ ๋‚˜๋Š” ์ถ”ํ›„์— ์ด ํ”„๋กœ์ ํŠธ์—์„œ ๊ณต๊ณ  ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์บ์‹ฑํ•˜๋Š” ์ž‘์—…(ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ด์šฉ)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์—์„œ pagination์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๊ณ  ํŒ€์›๋“ค์—๊ฒŒ ์–ดํ•„์„ ํ•˜์˜€๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๋‚ด ์˜๊ฒฌ์„ ๋ฐ›์•„๋“ค์—ฌ์ฃผ์…”์„œ pagination ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜..
eslint ์„ค์ • airbnb๋ฃฐ์„ ๋”ฐ๋ฅด๊ธฐ๋กœ ํ–ˆ๋‹ค. yarn add -D eslint-config-airbnb eslint-config-airbnb-typescript yarn add -D eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks @typescript-eslint/eslint-plugin yarn add -D @typescript-eslint/parser yarn add -D prettier eslint-config-prettier eslint-plugin-prettier ์œ„ ๊ฐ™์ด ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ›„, { "env": { "browser": true, "es6": true }, "extends..
์ž…์‚ฌ๊ณผ์ œ๋ฅผ ๋ฐ›๋‹ค..! ์ง€์ธ ์ถ”์ฒœ์„ ํ†ตํ•ด ์ž‘์€ ์Šคํƒ€ํŠธ์—…์—์„œ Next.js์™€ ts๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์ง๋ฌด์— ์ฑ„์šฉ๋  ๊ธฐํšŒ๋ฅผ ์–ป์—ˆ์—ˆ๋‹ค. ์—ฐ๋ฝํ•œ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์•„ ์ž…์‚ฌ๊ณผ์ œ๋ฅผ ๋ฐ›๊ฒŒ ๋˜์—ˆ๋‹ค ์ผ์„ ํ‚ค์šฐ๋‹ค ์ž…์‚ฌ๊ณผ์ œ๋Š” ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ ๊ฐ„๋‹จํ•œ ๊ณผ์ œ์ด์ง€๋งŒ ๋””์ž์ธ ์‹œ์•ˆ์ด ์ฃผ์–ด์ง€์ง€ ์•Š๊ณ  ํ‰๊ฐ€ํ•ญ๋ชฉ์—๋Š” ์ฐฝ์˜์„ฑ์„ ๊ฐ•์กฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ถฉ ๋งŒ๋“ค๋‹ค๊ฐ€๋Š” ๋ˆˆ์— ๋„์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด ๋‚˜๋ฆ„๋Œ€๋กœ ๊ณผ์ œ์˜ ์Šค์ผ€์ผ์„ ํ‚ค์›Œ์„œ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ฒ˜์Œ ์จ๋ณด๋Š” ๊ธฐ์ˆ ๋“ค์„ (graphql, supabase)๋ฅผ ์ ์šฉํ•˜๋ฉฐ ๊ณผ์ œ๋ฅผ ๋งŒ๋“œ๋Š” ์ค‘์— ์ผ์ฃผ์ผ๋กœ๋Š” ๋ฌด๋ฆฌ์ผ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋˜ ํ˜„์žฌ ์Šคํ”„๋ฆฐํŠธ๋ผ๋Š” ๋ถ€ํŠธ์บ ํ”„์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๊ณ  ํšŒ์‚ฌ์™€ ๋ถ€ํŠธ์บ ํ”„์˜ ๋ณ‘ํ–‰์€ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ๋ง๋™์•ˆ ์ •๋ง ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ–ˆ๋‹ค. ์•„์ง ์ค‘๊ธ‰ ํ”„๋กœ์ ํŠธ์™€ ์‹ฌ..
๋ฌธ์ œ์  ์š”๊ตฌ์‚ฌํ•ญ ์œ„์ฒ˜๋Ÿผ 6๊ฐœ์˜ ๋ชจ๋‹ฌ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ชจ๋‹ฌ์„ ๋งŒ๋“  ๋ฐฉ๋ฒ• export const Modal = ({ modalRef, openModal, handleModalClose, children, }: Props) => { if (!openModal) { return ; } return ( . {children} ); }; ์œ„์˜ modal์€ ์—ฌ๋Ÿฌ ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ชจ๋‹ฌ์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ๋„ฃ์–ด๋†“์•˜๋‹ค. ๋ชจ๋‹ฌ์„ ์—ฌ๋Š” ํ•จ์ˆ˜(openModal์„ true๋กœ ๋ฐ”๊พธ๋Š” ํ•จ์ˆ˜)์˜ ๊ฒฝ์šฐ๋Š” ๋ชจ๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ–ˆ๋‹ค. ๋ชจ๋‹ฌ์„ ๋‹ซ๋Š” ํ•จ์ˆ˜ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€์˜€๊ณ , ์ด๊ฒƒ๋“ค์„ ๋ชจ๋‹ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ์ผ์ผ์ด state๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ํ›…์„ ๋งŒ๋“ค์—ˆ๋‹ค. import {..
์ข‹์•˜๋˜ ์  React-hook-form์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ปค์Šคํ…€ ํ›…์„ ์ด์šฉํ•˜๋ฉด ์ •๋ง ๊ฐ„ํŽธํžˆ ํผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์œ„์ฒ˜๋Ÿผ ์ ๊ณ  ์ด๋ฅผ input์— ๋„ฃ์–ด์ค€๋‹ค๋ฉด ์ด๋ฉ”์ผ์ด ๋น„์—ˆ์„ ๋•Œ, ์ •๊ทœ์‹์— ๋งž์ง€ ์•Š์„๋•Œ, checkIsDuplicated๋ผ๋Š” ๋น„๋™๊ธฐ ํ•จ์ˆ˜์—์„œ true๊ฐ€ ์•„๋‹Œ ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•  ๋•Œ ๊ฐ๊ฐ ์•Œ๋งž์€ error๋ฅผ ์„ธํŒ…ํ•ด์ค€๋‹ค. ์ฝ”๋“œ๋„ ๊ฝค๋‚˜ ๊น”๋”ํ•˜๊ฒŒ ์งค ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋„ˆ๋ฌด ๋งˆ์Œ์— ๋“ค์—ˆ๋‹ค. ๋ณ„๋กœ ์˜€๋˜์  ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ์ œ์ถœ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด react-hook-form์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์ธ handleSubmit์„ ์‹คํ–‰์‹œ์ผœ error๊ฐ€ ์žˆ์„์‹œ์— api request๋ฅผ ๋ณด๋‚ด์ง€ ์•Š๋„๋ก ํ•˜์˜€๋‹ค. ๋ฌธ์ œ๋Š” ์ด handleSubmit์„ ์‹คํ–‰ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด ์ž๋™์œผ๋กœ focusing์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.(์—๋Ÿฌ๊ฐ€ ๋ณด์—ฌ์•ผ ํ•˜๋Š”๋ฐ ..
์ด๋ฏธ์ง€ ์ด์Šˆ Using `` could result in slower LCP and higher bandwidth. Consider using `` from `next/image` to automatically optimize images. ์™ธ๋ถ€ url์—์„œ ๋ฐ›์•„์˜ค๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ๋Š” next/Image๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— ์™ธ๋ถ€์—์„œ ๋ฐ›์•„์˜ค๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„ ์ž์ฒด, ์ฆ‰ ํ”„๋กœ์ ํŠธ assets์— ์žˆ๋Š” ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ๋Š” Image๋ฅผ ์ ์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด ๋ณด์ด์ง€๊ฐ€ ์•Š์•˜๋‹ค. ์„œ๋ฒ„ ๋‚ด์— ์กด์žฌํ•˜๋Š” ์ด๋ฏธ์ง€๋Š” Image ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์•ผ ์ด๋ฏธ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ๋œจ์ง€๋งŒ next.config.js ์„ค์ •์„ ๋ณ„๋„๋กœ ํ•ด์ฃผ์ง€ ์•Š์•˜๊ธฐ์— link[imageSource] ๋ถ€๋ถ„ ๋•Œ๋ฌธ์— Image ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•  ..
ํšŒ๊ณ  ์ž‘์„ฑ ์ด์œ  ์œ„๊ฐ™์ด ๋ฉ”์„ธ์ง€๊ฐ€ ์™”๋‹ค ๊ทธ๋ž˜์„œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค ๋‚˜๋Š” ๋ฌด์—‡์„ ์ž˜ํ–ˆ๋Š”๊ฐ€? ํŒŒํŠธ2 ํŒ€์› ์ค‘์— ์—ด์ •์ด ์ข‹๊ณ  ์ดํ•ด๋ ฅ๋„ ์ข‹์œผ์‹  ๋ถ„์ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋ž˜๋„ ๊ทธ ๋ถ„์€ ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•œ์ง€ ์–ผ๋งˆ ์•ˆ ๋˜์—ˆ๋‹ค ๋ณด๋‹ˆ ๋„์›€์ด ํ•„์š”ํ•˜์˜€๊ณ  ๋„์›€์„ ์š”์ฒญ ๋ฐ›์•˜์„๋•Œ ์ž˜ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์„ค๋ช…์„ ์ž˜ํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ๊ทธ๋ถ„์˜ ์ดํ•ด๋ ฅ์ด ์ข‹์œผ์…จ๋‹ค. ๊ทธ๋ถ„์ด ํ—ท๊ฐˆ๋ คํ•˜์‹œ๋Š” ๊ฑธ ๋„์›€์„ ๋“œ๋ฆฌ๋ฉด ์ดํ•ดํ•˜์‹œ๊ณ  ์ข‹์•„ํ•˜๋Š” ๋ชจ์Šต์„ ๋ณผ๋•Œ ์ •๋ง ๋ฟŒ๋“ฏํ–ˆ๋‹ค. ๋•๋ถ„์— ์„ค๋ช…ํ•˜๋Š” ๋Šฅ๋ ฅ๋„ ์กฐ๊ธˆ์€ ๋‚˜์•„์ง„ ๊ฒƒ ๊ฐ™๊ณ , ์ด๋Ÿฐ ์ผ์„ ํ–ˆ๋‹ค๋Š” ๊ฑฐ ์ž์ฒด๊ฐ€ ํŒ€์— ๋„์›€์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ๋‚˜๋Š” ๋Š˜ ๋งˆ๊ฐ์ด ์•„์‰ฝ๋‹ค. ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ด๋ฅผ ๋นจ๋ฆฌ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ ํ’ˆ์งˆ์ด ๋„ˆ๋ฌด ์•ˆ ์ข‹์•„์กŒ๊ณ , ๊ทธ ์ดํ›„์—..
๊น€ํƒœ์ง„
My Dev History๐Ÿ’ป