
์์์์ฑ ํ๋ก์ ํธ ๋ฏธ๋ฆฌ๋ณด๊ธฐhttps://velog.io/@yeahzzl/TIL231205https://velog.io/@h0ngwon/%EB%82%B4%EB%B0%B0%EC%BA%A0-%EC%95%84%EC%9B%83%EC%86%8C%EC%8B%B1-
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject

ํด๋ผ์ด์ธํธ ์ํ : UI ๊ด๋ จ ์ผ์์ ๋ฐ์ดํฐ(e.g ํผ ์ ๋ ฅ๊ฐ)๊ฐ ์๋,์๋ฒ ์ํ: ์๋ฒ์์ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ(e.g API ์๋ต๊ฐ)๋ก์บ์ฑ, ๋๊ธฐํ, ์ฌ๊ฒ์ฆ ๋ฑ์ด ํ์ํ๋ฐ ์ด๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ๊ฐ Tanstack Query!

https://developer.mozilla.org/ko/docs/Web/API/AbortController(์คํ์ ๊ธฐ๋ฅ์ด๋ฏ๋ก ํธํ์ฑ ํ์ธ ํ์)AbortController ์ธํฐํ์ด์ค๋ ํ๋ ์ด์์ HTTP ์์ฒญ์ ์ทจ์ํ ์ ์๊ฒ ํด์ฃผ๋ API๋ก signal

๋ด๊ฐ ๊ณต๋ถ๋์ด ๋ง์์ ์ด์ํด์ง๋ ๊ฑด ์๋ ํ ๋ฐ...ํ์์์ด ๋๋ฌด ๋์ ๊น๊น~!!!
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString
TanstackQueryqueryFunctionContext

ํ์ ์คํฌ๋ฆฝํธ์ผ ์๋ ์ ์ถ๋ฐ์ ์ธ์ ๋ ๊ฒฝ์พํจ์ด๋ผ๋ ํ๊ฐ์ ์ ์ฌํ์ง\~~
. Student ์ธํฐํ์ด์ค ์ ์ธtypescript์ฝ๋ ๋ณต์ฌinterface Student { name: string; age: number; scores: { korean: number; math: number; society: number;

type๊ณผ interface์ ์ฐจ์ด์ ์ ๋ชจ๋ฅด๊ฒ ๋ ์ํ๋ก ์ฟก๋ถ ๊ฐ์ ๋ณด๋ ์ค!
https://www.typescriptlang.org/docs/handbook/type-compatibility.html

TypeScript ์ด๊ธฐ์ ์ https://www.typescriptlang.org/docs/handbook/type-compatibility.htmlyarn create vite my-vue-app --template react-tsVS Code ์ด๊ณ ํด๋ ์ด

npx create๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ์ค๋ฅ๊ฐ ๋๋ค. ์ ๋ฒ์๋ GPTํํ ๋ฌผ์ด๋ด์ force๊ฐ ๋ค์ด๊ฐ๋ ๋ช ๋ น์ด๋ก ์บ์๋ฅผ ์ญ์ ํด ํด๊ฒฐํ ์ ์์์ง๋ง, ๋งค๋ฒ ์ด๋ด ์๋ ์๋ค. yarn์ ๋ช ๋ น์ด๋ง ์ ์ฐ๋ฉด ๋ฌธ์ ์๋ ๋ฏ? ์ฐ์ yarn ์ฌ์ฉํ ๊ฒ์ฌ..

React Router Dom์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ,Next.js๋ ํ๋ ์์ํฌ๋ก์ ์ด๋ป๊ฒ ๋ผ์ฐํ ์ ์ฒ๋ฆฌํ๋๊ฐ?

๋๋ํ ๋๋ฌด ์ ๋ ์์ ์๋ ๊ฑฐ ์๋์์?

Today I Learned that๋ ธํธ๋ถ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฌ๋ถํ ํด์ผ ํฉ๋๋ค.D๋๋ผ์ด๋ธ๋ ์ ํ์ฉํฉ์๋ค.์ธ์ฅํ๋์ ๋ฐฑ์ ์ ํ๋ฉด ๋ ์ข์ต๋๋ค.์๊ฐ์ ์์ด๊ฐ์ด ํ๋ฆ ๋๋ค.

ํ์ฌ ์คํ 4:35๋ํ ์ผ ํ์ด์ง ์ ๊น์ง ์ด์ ฏ๋ฐค์ ํ๊ณ ์ค๋๋ฐ์์ง๋ ๋ํ ์ผ ํ์ด์ง ์ง์ ๋ชป ํ๊ณ ์๋ ๊ฒ ๋๋๋ค.๋ช ๊ฐ ๋์ง๋ ์๋ ๊ฒฝ๋ก๊ฐ ๊ณ์ ํท๊ฐ๋ฆฌ๊ณ ๋ฐ์ ์ค๋ช ๊ณผ ๊ฐ์ ์ค๋ช ์ด ๋ค๋ฅธ ๊ฑด์ง ๋ด๊ฐ ์ ์ ์ด ๋๊ฐ ๊ฑด์ง์ฝ์ง์ ๋ฌดํ๋ฐ๋ณต..!๊ทธ๋์ ์๋ก์ด ์๋ฌ๊ฐ ๋ฌ ๊ฒ ์คํ๋ ค ๋ฐ๊ฐ๋ค

Next.js ๊ณผ์ ์ฝ๋ ๋ฆฌ๋ทฐ

1\. ์ด๊ฒ ๋ญ์ง? < Card >๋ ์๋ง๋ ๋ณ๋๋ก ์ ์๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค. < div >๋ ์ผ๋ฐ์ ์ธ HTML ์์์ ๋๋ค.{styles.post}๋ CSS ๋ชจ๋ ๋ฌธ๋ฒ์ ๋๋ค.styles๋ CSS ๋ชจ๋ ํ์ผ์ importํ์ฌ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ,

: ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ ์์ ์ฅ์.๊ณต๊ฐ์ ํฌ๊ธฐ๋ ์์ง๋ง, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์๋๊ฐ ๋น ๋ฅธ ๊ฒ์ด ์ฅ์ .์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋๋ฅผ ๋์ด๊ณ ๋คํธ์ํฌ ๋น์ฉ์ ์๋ผ๊ธฐ ์ํด ์ฌ์ฉ.์๋ฒ์ ๋งค๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฌ์์ฒญํ๋ ๋์ ์ ์ฅํด๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ, ์ด๋ ๊ฒ ์บ์๋ฅผ ์ฌ์ฉํ
https://velog.io/@nab5m/Next-js-API-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0
[Lighthouse] https://teamsparta.notion.site/React-5-Lighthouse-aca54b0d3c644d4daeea08503ab79515

https://tanstack.com/query/latest/docs/framework/react/guides/advanced-ssr์๋ ์ค์ ์ ์ ํ๋ฉด ์ !๋! ์ ๋๋ค๊ณ ํฉ๋๋น.
https://verysoyoung.tistory.com/10https://w-world.tistory.com/316https://velog.io/@fo_rdang/React.DispatchReact.SetStateActionstring
https://www.redhat.com/ko/topics/devops/what-is-ci-cdhttps://velog.io/@yu00hun/npm-ci
ํ์ ์์ ๊ธฐํ์ ์๋ ์ผ์ ์๋ค์ง๋ง ํ์์ , ๋งค์ฐ ์ค์ฐจ๋ํ ๋ฌธ์ ๋ค.๊ธฐ๋ฅ ๊ตฌํ์ ๋ํ ๊ณ ๋ฏผ๊ณผ ํจ๊ป ์ปจ์ /๋ฐฉํฅ์ฑ์ ์์ด์ ์ ๋๋ค.UI/UX ๊ด์ ์์ ๋ด ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด ๊ธธ์ด ๋ณด์ผ ์๋ ์๋ค.๋๋์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒ์์ ์ด๋ป๊ฒ ํด์ผ ์ํ๋ ๊ฑฐ์ง?3-1. ์๋๋ฉด ๋ฌธ๊ตฌ/
1\. ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ (Micro Frontends)๋ง์ดํฌ๋ก ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋์ ํ๋ ์์ํฌ๋ก ๊ฐ๋ฐํ ํ, ์ด๋ฅผ ๋จ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ํตํฉํ ์ ์์ต๋๋ค.์๋ฅผ ๋ค์ด, Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ ํ์ด์ง๋ Reac
https://www.youtube.com/watch?v=Y1FbowQRcmI
์์ฑ์ ์๋์ง๋ง ์๋ฃ๋ ๋์ด๋ฒ๋ฆฐ ์ต์ข ํ๋ก์ ํธ.์ฒ์ ์บ ํ์ ํฉ๋ฅํ๊ณ , ์ด ๊ณผ์ ์ ํตํด ์์คํ ๋๊ธฐ๋ค์ ์ป์ด๊ฐ๊ฒ ๋ ๊ฑฐ๋ผ๋ ๋ง์ ๋ค์์ ๋๋, ์ ํํํ ๋ถ์๊ธฐ ๋ง๋ค๊ณ ์ถ์ผ์ ๊ฐ ๋ณด๋ค ํ๋๋ฐ ๊ทธ๊ฒ ์ฐ์ด์๋ค ์ฐ์ฐ์ฐ!์ค๋ช ์ ์ธ๊ธํ๋ ค๋๊น ๊ฐ์๊ธฐ ์กฐ์ฌ์ค๋ฌ์ด ๋ง์์ด ๋ ๋ค.๋ชจ๋๋ชจ๋๋ชจ๋

๋ ธ๋ ๊ฒ ์ ์ผ ์ข์...ํ๋ง ํ๋ น ์กฐ๊ธ ๋ปํ์ง๋ง ์ด๋ฒ์๋ ์ง์ง ์น์ ๋์ด์ ๋์์๋ค!
https://inpa.tistory.com/entry/OOP-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EA%B0%9C%EB%85%90%EA%B3%B
[Advanced Server Rendering] https://ifelseif.tistory.com/164 [Supabase Type ๋ช ๋ น์ด ์๋ ํ ์ค ์์ฑ] https://inblog.ai/luke/supabase-typescript-%EC%82%AC%EC%9
https://medium.com/humanscape-tech/type-vs-interface-%EC%96%B8%EC%A0%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-f36499b0de50https://www.totaltypescript.

8/13 TIL ์ฝ๋ ๋ฆฌ๋ทฐ
Type Alias์ Interface๋ฅผ ๋น๊ตํ๋ค๊ฐ,๊ธฐ๋ณธ ๊ฐ๋ ๋ ์ ์ ์กํ์๋๋ฐ ํผ๋๋ง ๊ฐ์ค์ํค๊ณ ์๋ ๊ฒ ๊ฐ์์ฐ์ ๊ฐ์๋ฅผ ๋ฃ๊ธฐ๋ก ํ๋ค!https://www.typescriptlang.org/docs/handbook/generics.html์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ
๊ทธ๋ฌ๋๊น interface๋ extends ๊ฐ๋ฅํ๊ณ ๋๋ช ์ ์ธํฐํ์ด์ค๋ฅผ mergeํ ์ ์๋๋ฐ,https://www.totaltypescript.com/type-vs-interface-which-should-you-use ์์ ๋ํดํธ๋ก type์ ์ฐ๋ exten
์ธ์ ํจ์ ๊ณต๋ถ๋ก ์นํ์ํฌ ์ ์๋?๋๋ ๊ทธ์ ๊ฒ์ผ๋ฅด๊ฒ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ์ ํ๊ณ๋ก ์ฐ์ธ์ ์ด์ฉํ๊ณ ์๋?๊ธฐ๋ถ์ ์๊ด ์์ด ํ ์ผ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ธ๊ฐ?๋ฐ๋ณต๋ ์ข์ ์ ๊ฒฝํ์ ๋๊ณ ์ผ์ด๋,๊ทธ๋ผ์๋ ๋ชฉํ์์์ ๊ฐ์ง๊ณ ์ ์งํ๋ ์ฌ๋์ด ๋๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ๋?๋๊ทธ๋๊ฒ ๋ปฅ ๋ซ๋ฆฐ
https://github.com/gyoogle/tech-interview-for-developerCS ์ ๋ณด ์ฐธ๊ณ ํ๊ธฐ!
is fetching data inside useEffect an anti pattern?
๊ณต์๋ฌธ์์ ๋ค ๋์์๋๋ฐ ์ฝ์ง๋ ์๊ณ ๋ฌด์ง์ฑ์ผ๋ก ์ฝ๋ ์ง ๋... ์น์ ํ๊ฒ ์๋ ค์ฃผ์ ํ์ ๊ฐ๋ฐ์๋์ ์๋น...https://ko.react.dev/reference/react/useEffectEffect์์ ์ง์ ๋ฐ์ดํฐ ํ์นญ ๋ก์ง์ ์์ฑํ๋ฉด ๋์ค์ ์บ์ฑ ๊ธฐ๋ฅ์ด
๐ฅน ํ ์ผ ๋ฆฌ์คํธ๋ฅผ ์ฐ๋ ๊ฒ โ ์ค์ ๋ก ๊ทธ ์ผ์ ํ๋ ๊ฒโ๏ธ useQuery vs useEffect ์ฝ๋ ๋น๊ตuseQuery ๊ณต๋ถ
https://stackoverflow.com/questions/29312123/how-does-the-double-exclamation-work-in-javascript๊ฐ์ด true์ผ ๋ !!true๋ true,๊ฐ์ด false์ผ ๋ !!false๋ false
โก๏ธ 'users' ํ ์ด๋ธ์์ โก๏ธ 'nickname' ์ปฌ๋ผ์ ์ ํํ๊ณ โก๏ธ 'id' ์ปฌ๋ผ์ด userId์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ โก๏ธ ํ๋์ ๋ ์ฝ๋ ๋ฐํ์ฌ๊ธฐ์ ๋ด๊ฐ ์๋ฌด ์๊ฐ ์์ด ์จ์ค๋ค๊ฐ ๊ถ๊ธํด์ง ๊ฑด eq์ ์ ํํ ์๋ฏธ.eq๋ Supabase ์ฟผ๋ฆฌ์์ ํน์ ์กฐ๊ฑด์ ์ค
๐จ ์ค๋ณต ํ์นญ ๋ฌธ์ (FetchUserData.tsx ์คํจ์ฑ X)๐จ provider๋ก children์ ๊ฐ์ธ์๐จ useContext vs ์ปดํฌ๋ํธ ํธ๋ฆฌ ํ๋กญ์ค ์ ๋ฌ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ๋งค๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์๊ณ ,FetchUserData.tsx๋

ํ ๊ฒ ์๋๋ฐ ๋ด์ผ์ด ์์์ผ์ด์ด์ ์ด์กฐํ ๊ฑด์ ๊ดํ์ฌ ํ ๊ฒ ์ ํ ์๋ ๊ฒ์ ์๋๋ค. ์ ์ด๋ ๋ญ๋ฅผ ๋ชจ๋ฅด๋์ง๋ ์๋ ์ํ๋ก ๋ฐ์ ํ๋ค. ์ผ์์ ์์ผ๊ฑฐ๋ฆฌ๋ค์ ๋ฏธ๋ฃจ์ง ๋ง์. ๊ธฐ๋ถ์ด ๋ ๋๋น ์ง๋ค. ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ํ๋์ฉ ์ง์๋๊ฐ๋ฉด ๋๋ค. ๋์์ ์์ ํธ์ง์ ์กฐ๊ธ์ด๋ผ๋ ํ๋ฉด ๊ต์ฅํ
๋ช ์์ ์ผ๋ก ํ์ ์ง์ as๋ก ํ์ ๋จ์ธ

1\. FetchUserData.tsxuseQuery์ ์ ์ ํ ์ฌ์ฉuseContext vs ์ปดํฌ๋ํธ ํธ๋ฆฌ ๊ตฌ์กฐ (์ฐ์ ์ ํ์ ์ ํ)์ ์ฒด์ ๋ณด ๋ค ๋ ๋๋งํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ ํ์นญ ํ ๋๋ค์๋ง ๋ ๋๋งํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ ๊ฐ๋ณ ์ ๋ณด ํ์นญ ํ ๋ ๋ฒจ๋ค์๋ง ๋ ๋๋งํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ํ
๊ณต์๋ฌธ์ ์ ๋ ๋ฐ ๋ฒ์ญhttps://ko.redux.js.org/tutorials/essentials/part-1-overview-concepts
var : ์ฐ์ง ๋ง์ธ์let : ๊ฐ๋ณ์ ๋ณ์ ์ ์ธ, ์ฌํ ๋น ๊ฐ๋ฅ, ์ฝ๋ ์ด๋์ ๊ฐ ์ด ๋ณ์์ ๊ฐ์ด ๋ค๋ฅด๊ฒ ํ ๋น๋ ๊ฐ๋ฅ์ฑconst : ๋ถ๋ณ์ฑ ์ ์ง ๋ณ์ ์ ์ธ, ์ฌํ ๋น ๋ถ๊ฐ๋ฅ, ๊ทผ๋ฐ ์์๋ผ๊ณ ๋ถ๋ฌ์ผ๋ง ์ ํํ ๊ฑด๊ฐ?var : ์ค์ฝํ ๋ด ์ค๋ณต ์ ์ธ ๊ฐ๋ฅ, ์ฌํ ๋น ๊ฐ๋ฅ, ๋ณ์ ์
๋ ๋๋ง์ด๋ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๊ณผ์ ์ ๋งํฉ๋๋ค.React์์๋ JSX๋ก ์์ฑํ ์ปดํฌ๋ํธ๊ฐ ๋ธ๋ผ์ฐ์ ์ DOM์ ์ค์ ์์๋ก ๋ณํ๋๋ ๊ฒ์ ๋ ๋๋ง์ด๋ผ๊ณ ํฉ๋๋ค.๋ ๋๋ง์ ๋ค์์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ์ ๋ฐ์ํฉ๋๋ค:์ด๊ธฐ ๋ ๋๋ง: ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ์์ฑ๋์ด ํ๋ฉด์ ๋ํ๋ ๋.์ ๋ฐ์ด
[ ] ๋ชจ๋ ๋ฆฌ์กํธ - useEffect [ ] useEffect ์คํ ์์ ์ ๋ฆฌ [ ] Redux ํต์ฌ ๊ฐ๋ ์์ [ ] ๋ชจ๋ ๋ฆฌ์กํธ - DOM๊ณผ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์
ES6์์ ๋์ ๋ ์ ๋๋ ์ดํฐ(generator)๋ ์ฝ๋ ๋ธ๋ก์ ์คํ์์ผ์ ์ค์งํ๋ค๊ฐ ํ์ํ ์์ ์ ์ฌ๊ฐํ ์ ์๋ ํน์ํ ํจ์๋ค. ์ ๋๋ ์ดํฐ ํจ์๋ ํจ์ ํธ์ถ์์๊ฒ ํจ์ ์คํ ์ ์ด๊ถ์ ์๋ํ ์ ์๋ค.: ์ผ๋ฐ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ ์ด๊ถ์ด ํจ์์๊ฒ ๋์ด๊ฐ๊ณ , ํจ์ ์ฝ๋๋ฅผ ์ผ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ๋์ ํจํด์ผ๋ก ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉ. ํ์ง๋ง ์ ํต์ ์ฝ๋ฐฑ ํจํด์ ์ฝ๋ฐฑ ํฌ๋ก ์ธํด ๊ฐ๋ ์ฑ์ด ๋์๊ณ , ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ค ๋ฐ์ํ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๊ณค๋ํ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ ํ๊ณ๊ฐ ์๋ค.ES6์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ
ํจ์๋ฅผ ํธ์ถํ๋ฉด ํจ์ ์ฝ๋๊ฐ ํ๊ฐ๋์ด ํจ์ ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋๋ค. ์ด๋ ์์ฑ๋ ํจ์ ์คํ ์ปจํ ์คํธ๋ ์คํ ์ปจํ ์คํธ ์คํ(์ฝ ์คํ์ด๋ผ๊ณ ๋ ๋ถ๋ฆ)์ ํธ์๋๊ณ , ํจ์ ์ฝ๋๊ฐ ์คํ๋๋ค. ํจ์ ์ฝ๋์ ์คํ์ด ์ข ๋ฃํ๋ฉด ํจ์ ์คํ ์ปจํ ์คํธ๋ ์คํ ์ปจํ ์คํธ ์คํ์์ ํ๋์ด ์ ๊ฑฐ๋
๋ณ์ ํธ์ด์คํ (variable hoisting) : ๋ณ์ ์ ์ธ๋ฌธ์ด ์ฝ๋์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณ ์ ์ ํน์ง.๋ณ์ ์ ์ธ๋ฟ ์๋๋ผ var, let, const, function\*, class ํค์๋๋ก ์ ์ธํ๋ ๋ชจ๋ ์๋ณ์(๋ณ์, ํจ์, ํด๋์ค
๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ - ํ๋ก๋ฏธ์ค ๋ท๋ถ๋ถ ์ฝ๊ธฐGET, POST ๊ธ ๋ง๋ฌด๋ฆฌ๋ฌดํ์คํฌ๋กค ์ฝ๋๋ชจ๋ ๋ฆฌ์กํธ - DOM๊ณผ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ๋ชจ๋ ๋ฆฌ์กํธ - useEffectuseEffect ์คํ ์์ ์ ๋ฆฌRedux ํต์ฌ ๊ฐ๋ ์์
โ๏ธ ๋ชจ๋ ๋ฆฌ์กํธ - ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ฝ๊ธฐ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ - ํ๋ก๋ฏธ์ค ๋ท๋ถ๋ถ ์ฝ๊ธฐโ๏ธ GET, POST ๊ธ ๋ง๋ฌด๋ฆฌ๋ฌดํ์คํฌ๋กค ์ฝ๋๋ชจ๋ ๋ฆฌ์กํธ - useEffectuseEffect ์คํ ์์ ์ ๋ฆฌRedux ํต์ฌ ๊ฐ๋ ์์https://www.youtube.c
๋ฆฌ์กํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ useState๋งํผ์ด๋ ์์ฃผ ์ฐ์ด๋ ํ ์ด ๋ฐ๋ก useEffect๋ค.useEffect๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ ์ฝ๋ฐฑ, ๋ ๋ฒ์งธ๋ ์์กด์ฑ ๋ฐฐ์ด์ด๋ค. ์ด ๋ ๋ฒ์งธ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ฒซ ๋ฒ์งธ ์ธ์์ธ ์ฝ๋ฐฑ์ ์คํํ๋ค.ํด๋์ค ์ปดํฌ๋
๋ชจ๋ ๋ฆฌ์กํธ - ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ ๋ฆฌ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ - ํ๋ก๋ฏธ์ค ๋ท๋ถ๋ถ ์ฝ๊ธฐ๋ฌดํ์คํฌ๋กค ์ฝ๋useEffect ์คํ ์์ ์ ๋ฆฌRedux ํต์ฌ ๊ฐ๋ ์์https://www.youtube.com/watch?v=N9PT9iNTZAE&list=PLuHgQVnccG
์ ์น ๊ณ์ธต ํ๋กํ ์ฝ์, ๋คํธ์ํฌ ํต์ ์์ ์ก์ ์์ ์์ ์ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ ํจ์จ์ ์ด๊ณ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค. OSI 7๊ณ์ธต ๋ชจ๋ธ์ 4๋ฒ์งธ ๊ณ์ธต์ ํด๋นํ๋ฉฐ, TCP/IP ๋ชจ๋ธ์์๋ ์ค์ํ ๋ถ๋ถ์ ๋ด๋นํ๋ค.โOSI 7๊ณ์ธต ๋ชจ๋ธ?โTCP/IP ๋ชจ๋ธ?๋ฐ์ดํฐ ๋ถํ
3-way ํธ๋์ ฐ์ดํฌ๋ TCP ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ณผ์ . ๋ ์ฅ์น(ํด๋ผ์ด์ธํธ์ ์๋ฒ)๊ฐ ์๋ก ์ ๋ขฐํ ์ ์๋ ์ฐ๊ฒฐ์ ์์ํ๊ธฐ ์ํด, ์ธ ๋ฒ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.์ด ๊ณผ์ ์ด ์๋ฃ๋์ด์ผ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํด์ง๋ค.1\. SYN (Synchronization)ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ

HTTP์ HTTPS๋ ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ.๋์ ๋ฐ์ดํฐ ์ ์ก ๋ฐฉ์๊ณผ ๋ณด์ ์์ค์์ ์ฐจ์ด๊ฐ ์๋ค.HTTP๋ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋น๋ณด์ ํ๋กํ ์ฝ.๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ง ์์ ํ๋ฌธ(Plain Text)์ผ๋ก ์ ์ก๋๊ธฐ ๋
์ฟ ํค ์ธ์ ์น์คํ ๋ฆฌ์ง

์๊ฐ ์ ํ๊ณ ๊ทธ๋ฅ ํ๋ ๋ฒ ์ข ์๊ฐํด ๋ด์ผ๊ฒ ๋ค..๐ฅด๋ ์ ์ด๋ด๊น?(๊ณ์) ์ฌ๊ธฐ์ ๊ธฐ ์ํ๋ค.์ด๋์ ๋ชป/์ ํ๋ค.์ ํ๊ธฐ์ ๊ด์ฑ์์์ ๋ป์น๋๋ฐ, ๋จน๊ณ ๋์๋ ๋ถ์พํ ์ ์ํ๋ผ์ง๊ฐ๋๐ํ ์ผ ๋ง๊ณ ์ฒด๋ ฅ ์์ด๋ด ์๊ตฌ ์์ค : ใ ํค ๋ง๋ผํ+๊ฟ๋ฐ๋ก์ฐ ๋จน๊ณ ๋ฐฉ๊ตฌ ๋ฟก๋ฟก๐คช ๊ฐ์๊ธฐ 1
Redux๋ก ๋ฆฌํฉํ ๋ง ์์https://www.youtube.com/watch?v=8EhmwDKSeJQ&list=PLuHgQVnccGMB-iGMgONoRPArZfjRuRNVc&index=7ํผ๊ทธ๋ง ๋ด์ฉ ์นดํ ๊ณ ๋ฆฌํผ๊ทธ๋ง ๊ฒ์ ๊ฒฐ๊ณผ UI, ๊ฒ์ ํค์๋ ํ์๋ชจ๋ ๋ฆฌ์กํธ
์ํํธ์จ์ด ๊ฐ๋ฐ ์ฝ๋์์ ๋ผ์ดํ์ฌ์ดํด์, ์ฃผ๋ก ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ์๋ฉธ๋ ๋๊น์ง ๊ฑฐ์น๋ ์ผ๋ จ์ ๋จ๊ณ๋ค์ ์๋ฏธํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ ๊ฐ์ฒด ๋๋ ์ปดํฌ๋ํธ์ ์ํ ๋ณํ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ถํ์ํ ์์ ์๋ชจ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. ํ๋ ์์ํฌ(React,
React ์ปดํฌ๋ํธ๋ ํจ์ํ ์ปดํฌ๋ํธ์ ํด๋์คํ ์ปดํฌ๋ํธ๋ก ๋๋๋ค. ๋ผ์ดํ์ฌ์ดํด์ ์ฃผ๋ก ์ปดํฌ๋ํธ์ ์์ฑ(Mount), ์ ๋ฐ์ดํธ(Update), ์๋ฉธ(Unmount) ๋จ๊ณ์์ ์ด๋ฃจ์ด์ง๋ค.componentDidMount() : ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ์งํ ํธ์ถ๋๋ค. ๋น๋๊ธฐ ์

๊ณผ๊ฑฐ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ Create React App(create-react-app)์ด ๊ฐ๊ด๋ฐ์์ง๋ง, ์์ฆ์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ง์ํ๋ Next.js ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ธ๊ธฐ๋ค.์ด์ ๋ฐ๋ผ, ๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง
์ด๊ฑฐ ์ปดํ์ผ๊ณผ ์ธํฐํ๋ฆฌํฐ ๊ฐ๋ ๋ ๊ฐ์ด ์ดํดํด์ ์ค๋ช ํ๊ณ ์ถ์๋ฐ ์ง์ ๋ถ์กฑ..! ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ฐํ์์ ๊ฐ์์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด, ์ฝ๋ ์์ฑ ์์ ํ์ ์ ์ง์ ํด์ ์์ ์ฑ์ ์ ๊ณ ํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ HTML, ( ์ถ์ฒ : ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive, ์ด์ ๋ชจ, ์ํค๋ถ์ค )
( ์ถ์ฒ : ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive, ์ด์ ๋ชจ, ์ํค๋ถ์ค )
๋ฆฌ์กํธ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ๋ด์ฉ ์ถ๊ฐ๋ชจ๋ ๋ฆฌ์กํธ - ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ์ ๋ฆฌ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ - ๋๋ฐ์ด์ค, ์ค๋กํ ์ฝ๋ ์ถ๊ฐํผ๊ทธ๋ง ๋ด์ฉ ์นดํ ๊ณ ๋ฆฌํผ๊ทธ๋ง ๊ฒ์ ๊ฒฐ๊ณผ UI, ๊ฒ์ ํค์๋ ํ์์ฝ๋ ์ปจ๋ฒค์ ์์๋ณด๊ธฐ๋ฌดํ์คํฌ๋กค ์ฝ๋useEffect ์คํ ์์ ์ ๋ฆฌRedux ์ค์ 7
constructor(props)๋ ํด๋์คํ ์ปดํฌ๋ํธ์์์ปดํฌ๋ํธ๋ฅผ ์ด๊ธฐํํ ๋ ์ฌ์ฉ.์ด๊ธฐ state๋ฅผ ์ค์ , props๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ ์ค์ ์ ์ํํ ์ ์๋ค.์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๋ฐ์ธ๋ฉํ ๋ ์ ์ฉํ๋ค.React์์ constructor๋ ๋ฐ๋์ ํ์ํ ๋ฉ์๋๋ ์๋๋ค.๋ง์

linked list ์ข ๋ฅ๋ณ ์ด๋ฏธ์ง ํ๊ตญ์ด๋ก ๋ฌ๋ผ๊ณ ํ๊ณ ์ ๋ ์ผ์นจ์ ์ฐธ์ ์ ์์์ด์์๊ฒ ์ต๋๋ค!๐

์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง(Object Storage)๋ ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ด๋ ๋ธ๋ก ๋จ์๊ฐ ์๋ ์ค๋ธ์ ํธ ๋จ์๋ก ์ ์ฅํ๋ ๋ฐฉ์. ์ด๋ ๊ฐ๊ฐ์ ์ค๋ธ์ ํธ๋ ๋ฐ์ดํฐ(ํ์ผ), ๋ฉํ๋ฐ์ดํฐ(ํ์ผ ๊ด๋ จ ์ ๋ณด), ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ํค(์๋ณ์)๋ก ๊ตฌ์ฑ๋๋ค.์ค๋ธ์ ํธ ์คํ ๋ฆฌ์ง๋ ์ฃผ๋ก

๐ทํต์ฌ ์น ์งํ(Core Web Vital) ๐ชป๋ถ๊ฐ ์น ์งํ
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋์์ ์๋ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ ๋ฒ์ ํ๋์ ์์ ๋ง์, ๋๊ธฐ ๋ฐฉ์์ผ๋ก๋ง ์ฒ๋ฆฌํ ์ ์๋ค๋ ๋ป์ด๋ค. ๋๊ธฐ(synchronous)๋, ์ง๋ ฌ ๋ฐฉ์์ผ๋ก ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์ด ์์ฒญ์ด ์์๋ ์ดํ์๋ ๋ฌด์กฐ๊ฑด ์๋ต์ ๋ฐ์ ์ดํ์์ผ
ํ๋ ์ด์คํ๋๋ฐฑ์๋ ์๋ฒ ์ธํ ํ์ธ๋ชจ์ง๊ธ ์นดํ ๊ณ ๋ฆฌ ์ข ๋ฅ, ๋ฐฉ์ ์ ํ๊ธฐ๊ธฐํ์ ์์ฑํ๋ก ํธ ๋ ผ์๊ธฐ์ ๋ฉด์ 1-4์ฃผ์ฐจ ๋ด์ฉ ๋ณด๊ฐ๊ธฐ์ ๋ฉด์ 1์ฐจ ์ ์ฒด ํ๊ณ ๋ฌธ์ ์ ํ๊ธฐ ๋ฆฌ์กํธ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ๋ด์ฉ ์ถ๊ฐ์ฝ๋ ์ปจ๋ฒค์ ์์๋ณด๊ธฐ๋ฌดํ์คํฌ๋กค ์ฝ๋useEffect ์คํ ์์ ์ ๋ฆฌRedux ์ค
ERD๋ Entity Relationship Diagram(์ํฐํฐ ๊ด๊ณ ๋ค์ด์ด๊ทธ๋จ)์ ์ฝ์์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ๊ณผ์ ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ ์ค ํ๋๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์ํฐํฐ(entity)๋ค๊ณผ ์ํฐํฐ ๊ฐ์ ๊ด๊ณ(relationship)๋ฅผ ์๊ฐ์ ์ผ๋ก
์ ํ๋ธ ์์๋ค์ ์ ๋ง ์กฐ๊ธ ๋ดค๋ค.์ฟ ํค๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋ ์๋ํ ๊ทธ๋ฆ๊ฐ์ ๊ฒ์ด๊ณ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ ์ฃผ๊ณ ๋ฐ๋๋ค.๊ทธ๋ฐ๋ฐ ๊ทธ ์์ ์ด์ ๋ณดํต์ ๋ฏผ๊ฐํ (๊ฐ์ธ)์ ๋ณด๋ ์ธ์ ID์ ๋ชจ์ต์ผ๋ก, ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ ์์ด ์ด๋๋๊ณ , ์๋ฒ์์ ์ธ์ ID๋ฅผ ๋ณด๊ณ ๊ฐ์ธ์ ์๋ณํ๋ ๊ฑฐ์ง.์๋ฒ์ธก์์


์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ 7๊ฐ์ง ๋ฐ์ดํฐ ํ์ (์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ, null, defined, ์ฌ๋ฒ, ๊ฐ์ฒด ํ์ )์ ํฌ๊ฒ ์์ ํ์ (primitive type)๊ณผ ๊ฐ์ฒด ํ์ (object/reference type)์ผ๋ก ๊ตฌ๋ถํ๋ค. ์ด๋ ๊ฒ ๊ตฌ๋ถ๋ณ๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ๊ทผ๋ณธ์

What are "nullish" values?Nullish values in JavaScript are null and undefined. These values fall under falsy values but are more specifically referred
JavaScript์์ ๋ชจ๋ ๊ฐ์ฒด๋ ํ๋กํ ํ์ ์ด๋ผ๋ ์์ฑ์ ๊ฐ๊ณ ์๋ค. ์ด prototype์, ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ก๋ถํฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ ์๋๋ก ์ฐ๊ฒฐํ๋ ์ผ์ข ์ ํ์ด๋ค. (๋ฅ๋ค์ด๋ธ์๋ ์ฌ๋กฏ์ด๋ผ๊ณ ์จ์์๋ ๋ฏ) ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง ๋ ํด๋น ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ
๐ธ ํ ์คํธ ์ฝ๋๋ ์ ๋ง๋ค๊น?โฒ ํ๋ก ํธ์๋ ๋จ์ ํ ์คํธ Part.1 ์ด๋ก ํธTDD(Test Driven Development)๋จ์ ํ ์คํธ๋ ํน์ ํ ๋ชจ๋ ํน์ ๋จ์๊ฐ ๊ธฐ๋ฅ์ ์๋ํ ๋๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์ํํ๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ผ๋ก, ํ ์คํธ ์ค์์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด๊ณ ๊ธฐ์ ์ ๊น๋ ค
โ๏ธ ๊ธฐ์ ๋ฉด์ 1์ฐจ ์ ์ฒด ํ๊ณ ๋ฌธ์ ์ ํ๊ธฐ โ๏ธ useEffect ์คํ ์์ ์ ๋ฆฌuseEffect ์คํ ์์ ์ฝ๊ธฐ๐ useEffect ์คํ ์์๐ฉท ๋ ๋๋ง, ๋ง์ดํธ ์ฐจ์ด์ + ์ธ๋ง์ดํธ, useEffect, ํด๋ฆฐ์ ํจ์์ฟ ํค, ์ธ์ , ํ ํฐ ๋ํ ์ด์ 9๋ก ๋๋ ๋๋จธ์ง์๋ฐ ์คํฌ
๋น๊ต ์ฐ์ฐ์ ๋น๊ต ์ฐ์ฐ์(comparison operator)๋ ์ขํญ๊ณผ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํ ๋ค์ ๊ทธ ๊ฒจ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ๋ณํํ๋ค. ๋น๊ต ์ฐ์ฐ์๋ if ๋ฌธ์ด๋ for ๋ฌธ๊ณผ ๊ฐ์ ์ ์ด๋ฌธ์ ์กฐ๊ฑด์์์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ๋๋ฑ/์ผ์น ๋น๊ต ์ฐ์ฐ์ ๋๋ฑ ๋น๊ต(loose eq

DOM ํธ๋ฆฌ ์์ ์กด์ฌํ๋ DOM ์์ ๋ ธ๋์์ ๋ฐ์ํ ์ด๋ฒคํธ๋, DOM ํธ๋ฆฌ๋ฅผ ํตํด ์ ํ๋๋ค. ์ด๋ฅผ ์ด๋ฒคํธ ์ ํ(event propagation)๋ผ๊ณ ํ๋ค.ul ์์์ ๋ ๋ฒ์งธ ์์์ธ li ์์๋ฅผ ํด๋ฆญํ๋ฉด ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ์์ฑ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ ์ด๋ฒคํธ๋ฅผ
9๋ก ๋๋ ๋๋จธ์ง์ฟ ํค, ์ธ์ , ํ ํฐ ์์ 10:21~ ๋ณด๊ธฐ์ฟ ํค, ์ธ์ , ํ ํฐ ํ๋ฐ ๋ํ ์ด์ โ๏ธ ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ์ด๋ฒคํธ ์ฝ๊ธฐ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ์ด๋ฒคํธ ์์ ํ์ดํํ๋กํ ํ์ ์์ ์ฐพ์๋ณด๊ธฐ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ํ๋กํ ํ์ ์ฝ๊ธฐcontextAPI, use
์ง์ง ํ๋กํ ํ์ ํผ์ ์ฝ์ผ๋ฉด์ ์ดํดํด๋ณด๋ ค๋ค๊ฐ ๋๊ฐ ๋๋ฌด ํ๊ฒจ์ํด์๋์์์ ์ฐพ์๋ณด๊ธฐ๋ก ํ๋ค. ์์ฑ์ ํจ์๊น์ง ํฌํจํด ์ ๋ คํ๊ฒ ์ค๋ช ์ ๋ชป ํด๋๋์ถฉ ๋๋๋ง ์๊ณ ๊ฐ๊ธฐ๐ฅฒ๐ญ ์ด๊ฑฐ๋ณด๊ณ prototype ์ดํด ๋ชปํ๋ฉด ๊ฐ์์ ์
์ฒซ ๋ฒ์งธ ์ธ์๋ก this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ณ , ์ดํ์๋ ํจ์์ ์ ๋ฌํ ๋งค๊ฐ๋ณ์๋ค์ ์์๋๋ก ๋์ดํฉ๋๋ค.javascript์ฝ๋ ๋ณต์ฌfunction greet(greeting, punctuation) { console.log(greeting + ", " + th
( ์ถ์ฒ : ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive, ์ด์ ๋ชจ, ์ํค๋ถ์ค )
9๋ก ๋๋ ๋๋จธ์ง์ฟ ํค, ์ธ์ , ํ ํฐ ์์ 10:21~ ๋ณด๊ธฐ์ฟ ํค, ์ธ์ , ํ ํฐ ํ๋ฐ ๋ํ ์ด์ ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ํ๋กํ ํ์ ์ฝ๊ธฐโ๏ธ ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - this ์ฝ๊ธฐ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - this ํ์ดํ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ์ด๋ฒคํธ ๋ง์ ์ฝ๊ธฐconte
[ ] 9๋ก ๋๋ ๋๋จธ์ง [ ] ์ฟ ํค, ์ธ์ , ํ ํฐ ์์ 10:21~ ๋ณด๊ธฐ [ ] ์ฟ ํค, ์ธ์ , ํ ํฐ ํ๋ฐ ๋ํ ์ด์ [ ] ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ํ๋กํ ํ์ ์ฝ๊ธฐ โ๏ธ ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - this ํ์ดํ [ ] ์๋ฐ ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ - ์ด๋ฒคํธ ๋ง์ ์ฝ๊ธฐ [ ] cva ๊ฐ์ ๋ณด๊ธฐ โ๏ธ Jira ์ฌ์ฉ๋ฒ ์์ ๋ณด๊ธฐ โ๏ธ Jira, Agile ์ํฐํด...
์ฌ์ํ๊ณ ๋๋ผ์ด ๋ฐ๊ฒฌ(?) tsํ์ฅ์ ํ์ผ์์ ์ ์ธํ const ์์ ์๋ณ์๋ ์ค๋ณต์ด ์ ๋ผ? ๋ธ๋ก ์ค์ฝํ๋ผ๊ณ ์ค๋ฅ ๋จ๋๋ฐ
๋ผ์ฟ ๋ - ์ถค์ ์ถฐ์ ๋ ์ค - ์ด๊ธฐ๊ตฌ ๋น์ทํ๋ค...์ด ๋ฐ์๋ทฐ์ ์ ์ฒด๋ฅผ ๋ฐํ๋ด์ ์์ฃผ ์กฐ๊ธ ์์์ํ๋ค.๊ทธ๋ฆฌ๊ณ ์ด์ ์ค๋ ์นดํ์์ ์ ๋์๊ฐ ๋๋ฌด ๋์ ์ง๊ธ์ง๊ธํ๋ค.์ง๋ ํ์ ๋ด์ฉ ์ ๋ฆฌโ PH-4 ์ฝ๋ ๊ตฌ์, ๊ธฐ๋ฅ ์ ๋ฆฌ๊นํ๋ธ ์๋ ์ค๋ฅ ํด๊ฒฐ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ ์คํ ์ปจํ ์ค
์ง๋ ํ์ ๋ด์ฉ ์ ๋ฆฌ์ธ๊ฐ JS ์์ง ๋๊ธฐ โก๏ธ ๋ณด๋ ์คhttps://www.youtube.com/watch?v=eXQQipdastk&list=PLcqDmjxt30Rt9wmSlw1u6sBYr-aZmpNB3์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ ์ค์ฝํ ๋ง์ ์ฝ๊ธฐ์๋ฐ์คํฌ๋ฆฝํธ ๋ฅ๋ค์ด๋ธ
Console Error :A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined
๋ชจ์ ์ ์ถ ์ ๋ค์ด๊ฐ๋ ์ธํ๋ค์ ์ธํฐํ์ด์ค๋ก ์ง์ , ๊ฐ๊ฐ ์ธํ๊ฐ์ ref๋ก ๊ด๋ฆฌ,TanstackQuery์ createMutation.mutate(newMeetup)์ ํตํด์ ๋ชจ์์ ์์ฑํ๋๋ฐ, newMeetup์ ์๋์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.'{ name: React
ํ ํ์ด์ง์์ ๋ฐ์ดํฐ ํต์ ๋ ๋ฒ ํ๋ ์ฝ๋ ์ฐ๊ธฐ ๋๋ฌด ์ซ์ด์ ๊ดด๋ก์ด๋ฐ,(๋ญ๊ฐ ๊ธธ์ด์ง๊ณ ์ง์ ๋ถํด์ง๊ณ ํต์ ๋ฅผ ๋ฒ์ด๋๋ ๊ฒ ๊ฐ๊ณ ...! ์๋ฒ์ ๋ถ๋ด์ด ์ผ๋ง๋ ๋ ์ง๋ ๋ฐฑ์๋๋ถ๊ป ์ง๋ฌธ ๋๋ ค๋ด์ผ ์๊ฒ ์ง๋ง, ์ค์ง์ ์ธ ์งํ๋ณด๋ค๋ ๊ทธ๋ฅ ๋๋์ด ๋ณ๋ก^ใ ^)appliaction/json
ํด๋์ค๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ๊ธฐ๋ณธ ๋จ์๋ก, ๋ฐ์ดํฐ์ ๋ฉ์๋(๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์)๋ฅผ ๋ฌถ๋ ์ฒญ์ฌ์ง. ํด๋์ค๋ฅผ ํตํด ์๋ก์ด ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์์ฑํ ์ ์๋ค.ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค. ๊ฐ ์ธ์คํด์ค๋ ํด๋์ค์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด์ง๋ง ๋ ๋ฆฝ์ ์ธ ๊ฐ

์ธํ ์์ฒด๊ฐ ์ ์ถ๋ผ ๋ฒ๋ ธ์ด?ConosleMeetupForm.tsx:163Submitted startedAt: <input id=โ"startedAt" type=โ"date" required name=โ"startedAt">โ
ํ์ผ์ด๋ ์ถ๊ฐ ํ๋ ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ ํต์ฉ๋๋ HTML form ์ ์ก ๋ฐฉ์.ํผ์ ์ฝ๊ฒ ๋ณด๋ด๋๋ก ๋์์ฃผ๋ ๊ฐ์ฒด๋ก, FormData ๊ฐ์ฒด๋ HTML ํผ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ธ๋ค.fetch ๋ฑ์ ๋คํธ์ํฌ ๋ฉ์๋๊ฐ FormData ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๊ฒ์ด FormData์ ํน์ง.์ด๋ ๋ธ๋ผ์ฐ์
๐ฆ What is the .current in a React ref?๋์ ๊ฐ์ ๊ถ๊ธ์ฆ์ ๊ฐ์ง ์ธ๊ตญ์ธ ์ ์๋ ๊ณ ๋ง์์!
ํ์ฌ ์ฝ๋์์ ํ์ผ ์ ํ ์, ํ์ผ ์ด๋ฆ์ด ํ๋ฉด์ ํ์ผ ์ ํ ๋ฒํผ ์ค๋ฅธ์ชฝ์ ํ์๋๋ ์ด์ ๋ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ <input type="file"> ์์์ ๋์ ๋๋ฌธ์ ๋๋ค.์ด์ :HTML ํ์ค ๋์:<input type="file">์ ํ์ผ์ ์ ํํ

์ฌ๋ผํ๊ฐ ์๋ค๋ ๊ฑด ๋ ธ๋ ฅํ๋ค๋ ์ด์ฉ๊ณ ..์ค์ค๋ก์ ๋ ธ๋ ฅ์ ์ธ์ ํ๊ณ ๊ทธ ๋๋ฌธ์ ์ธ๋ฏธ ์ฌ๋ผํ๊ฐ ์๋ค(์์ฃผ ์ค๊ณ ๊ฐ๊ธด ํ๋ค)๊ณ ๋งํ๋ ๊ฒ์ด, ์์ง๋ ์กฐ๊ธ์ ๋จ์ฐ์ธ์ค๋ฝ๋ค. ์ง๋๋ ์ ๋ด๊ฐ ์ค๋๋ ์ ๋์ด๊ธฐ๋ ํ๊ธฐ์, "๋๊ฐ ๋ญ ๊ทธ๋ ๊ฒ ๋๋จํ ๋ ธ๋ ฅํ์ด?"๋ผ๊ณ ๋ค๊ทธ์น๋ ๋ชฉ์๋ฆฌ๋ ํฌ๋ฏธํ
JS ๊ธฐ์ ๋ฉด์ 4์ฃผ์ฐจ ๊ธ ์ ๋ฆฌ9๋ก ๋๋ ๋๋จธ์ง ํ๊ธฐcodeit TanstackQuery๋ด ํผ๋ ๊ตฌํํ๊ธฐ์์ฃผ ์ฐ๋ ์ต์ ๊ณผ ๋ฆฌํด๊ฐ๋ก๋ฉ๊ณผ ์๋ฌ ์ฒ๋ฆฌ ๊ตฌํํ๊ธฐuseMutation์ผ๋ก ๋ฐ์ดํฐ ์ถ๊ฐํ๊ธฐuseMutation ์ฝ๋ฐฑ์ผ๋ก ๋ฐ์ดํฐ ๋ฐ๋ก ์ ๋ฐ์ดํธํ๊ธฐ
์ฐ์ ์์๋ฅผ ๋ชจ๋ฅด๊ฒ ์ด์!๊ทธ๋ฅ ์์๋ก ์ค์ผ์ฅด์ ๋ฐ๋ผ ๋์ดํด๋ณด๊ฒ ์ต๋๋ค.์ ๊ทธ๋ฆฌ๊ณ TIL ํฌ์คํ ์์ todo list ๋ฐ๋ก ๋นผ์ผ ํ๋๋ฐ ใ ใ ใ ๋๋ก๋ ๋ด์ฉ์ด ์ฎ์ฌ์์ด์ ์นผ๊ฐ์ด ๋ถ๋ฆฌํ๊ธฐ๊ฐ ์ ๋งคํ๋ค.JS ๊ธฐ์ ๋ฉด์ ์ข ๋ฃํด๋ก์ ์์ ๋ณด๊ธฐํด๋ก์ ์์ ๋ด์ฉ ์ ๋ฆฌ๋ ์์ปฌ ์ค์ฝํ ์์ ๋ณด๊ธฐ๋
If your query function depends on a variable, include it in your query key.Since query keys uniquely describe the data they are fetching, they should
์ข์ ์ง๋ฌธ์ด์์! React.StrictMode๊ฐ ์ ์ฉ๋ ํ๊ฒฝ์์ useEffect๋ง ํน๋ณํ 2๋ฒ ์คํ๋๋ ๊ฒ์ ์๋๋๋ค. ์๋ฐํ ๋งํ๋ฉด StrictMode๋ ์ผ๋ถ React ํจ์๋ ํ ๋ค์ ๋์์ ๋ ์๊ฒฉํ๊ฒ ๊ฒ์ฌํ๋ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ํน์ ์ํฉ์์๋
onSuccess์์๋ ์ ๋งค๊ฐ๋ณ์๋ก data๋ฅผ ์ฌ์ฉํด?previousMeetupData๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ผ?ChatGPT : onSuccess ์ฝ๋ฐฑ์์๋ ๋งค๊ฐ๋ณ์๋ก data๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ด์ ๋ฅผ ์๋์์ ์ค๋ช ํฉ๋๋ค.onSuccess ์ฝ๋ฐฑ์ ๋
https://velog.io/@bwj0509/REACT-Input-%ED%83%9C%EA%B7%B8%EC%9D%98-value-defaultValue%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C
useEffect ์คํ ์์ ํ๊ตฌ ๋ธ๋ก๊ทธ ๊ธRTKpersistcodeit TanstackQuery
ํ๋ก์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ๋ ๋ํผ(wrapper)๋ค.ES6์ ๋์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ๊ฐ์ฒด(Proxy ๊ฐ์ฒด)๋ฅผ ์๋ฏธํ๋ฉฐ, ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ์ด๋ ์กฐ์์ ๊ฐ๋ก์ฑ ํน์ ๋์์ ์ํํ ์ ์๊ฒ ํ๋ค.immer๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ๊ฐ์ฒด๋ฅผ ์์๋ก "๊ฐ๋ณ
ChatGPT์ ๋ง:ChatGPTFlux ์ํคํ ์ฒ์ ์๋ฐ๋๊ฑฐ๋ ๋ค๋ฅธ ์ํคํ ์ฒ ๊ฐ๋ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ์์ต๋๋ค. ๊ฐ ๊ฐ๋ ์ ๋ฐ์ดํฐ ํ๋ฆ ๋ฐฉ์์ด๋ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์์ Flux์ ๋ค๋ฅธ ์ ์ด ์์ต๋๋ค.MVC (Model-View-Controller)์ค๋ช MVC๋ ์ ํ๋ฆฌ์ผ
์ ์ธ์ ์ฝ๋(declarative code)๋ "์ด๋ป๊ฒ(how)"๊ฐ ์๋๋ผ "๋ฌด์์(what)" ํด์ผ ํ๋์ง๋ฅผ ๊ธฐ์ ํ๋ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์ฆ, ๊ณผ์ ์ ์์ธํ ์ง์ํ๊ธฐ๋ณด๋ค๋, ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ํํํ๋ ๋ฐฉ์.๋ช ๋ นํ ์ฝ๋๊ฐ๋ฐ์๊ฐ ์คํ ๊ณผ์ ์ ์์ธํ ์ง์ํด์ผ ํ๋ค. ๊ฐ ๋จ๊ณ๋ฅผ
React.lazy๋ React์์ ์ฝ๋ ์คํ๋ฆฌํ (Code Splitting)์ ๊ตฌํํ๊ธฐ ์ํ ํจ์์ ๋๋ค. ๋์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ณ ํ์ํ ๋๋ง ์ฝ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.์ฝ๋ ์คํ๋ฆฌํ ์ด๋?์ฝ๋ ์คํ๋ฆฌํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ
Next.js๋ React ๊ธฐ๋ฐ์ ํ๋ ์์ํฌ๋ก SPA์ ํน์ง์ธ CSR(Client-Side Rendering)๊ณผ SSR(Server-Side Rendering)์ ํผํฉํ์ฌ ํ์ฉํ ์ ์๋๋ก ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ค. ํ์ด์ง๋ฅผ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋งํ์ฌ ํด๋ผ์ด์ธํธ์ HTML
Concurrent Rendering์ React 18์์ ๋์ ๋ ์๋ก์ด ๋ ๋๋ง ๋ฉ์ปค๋์ฆ์ผ๋ก,React๊ฐ ์ฌ๋ฌ ๋ฒ์ ์ UI๋ฅผ ๋์์ ์ค๋นํ๊ณ ์ค์๋์ ๋ฐ๋ผ ๋ ๋๋ง์ ์กฐ์ ํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค.๋ ๋๋ง ์ค๋จ ๊ฐ๋ฅ: ๋ ์ค์ํ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด ์งํ ์ค์ธ ๋ ๋๋ง์ ์ค๋จ
์ ์๋ฅผ ์๋ฉด์๋, ๋๋ ๋ชจ๋ฅด๊ฒ SPA์ CSR ๊ฐ๋ ์ ๋์์ด์ฒ๋ผ ํผ์ฉํ๊ณ ์์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ํ์์๊ฒ ํผ๋์ ์ฃผ์ด ์ํต์ด ํ ๋จ๊ณ ๋๋์ก๋ค. ๋ฌผ๋ก ๋ ๊ฐ๋ ์ด ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋์ด ์๊ธด ํ์ง๋ง, ๊ทธ๋ฐ ๋งํผ ๋ญ๋ฑ๊ทธ๋ฆฌ์ง ์๊ณ ๋ช ํํ๊ฒ ์ ๋ฆฌํ ํ์ ์ ์ฌ์ฉํ ํ์๋ฅผ ๋๊ปด, ์ง๊ณ
ํ๋ฆฌ๋ ๋๋ง(Pre-rendering)์ ์น ํ์ด์ง์ HTML์ ๋ฏธ๋ฆฌ ์์ฑํด๋๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก SPA์ SEO ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.๋น๋ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๊ฒฝ๋ก(route)์ ๋ํ HTML์ ๋ฏธ๋ฆฌ ์์ฑํ๋ ํ๋ก์ธ์ค์ค์ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ์ ์ ์ ์ HTML
https://brunch.co.kr/@tigrisdesign/3
๋งํฌ์ ์ธ์ด๋ ๋ฌธ์๋ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ ์ํ ์ปดํจํฐ ์ธ์ด์ด๋ค. ํ ์คํธ์ ํ๊ทธ(tag)๋ฅผ ์ถ๊ฐํ์ฌ ๋ฌธ์์ ๊ตฌ์กฐ์ ํํ ๋ฐฉ์์ ์ ์ํ๋ค.๋ํ์ ์ธ ๋งํฌ์ ์ธ์ดHTML (HyperText Markup Language): ์น ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ง
๐ฉ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ (Imperative Programming)ํ๋ก๊ทธ๋จ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ๋ น๋ฌธ๋ค์ ์์๋ฅผ ์์ธํ ๊ธฐ์ "์ด๋ป๊ฒ(How) ํ ๊ฒ์ธ๊ฐ"์ ์ด์ javascriptCopy// ๋ช ๋ นํ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด์ ๋ชจ๋ ์์ ๋ ๋ฐฐ๋ก ๋ง๋ค๊ธฐconst num
import { useMutation, useQuery } from "@tanstack/react-query";import React, { useEffect, useState } from "react";import { useNavigate } from "react-ro
๊ธฐ์ ๋ฉด์ ์ค๋น ์ค ๋ฆฌ์กํธ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ์ด์ ๊ฐ์ ๋๊ณผ ํ์ฌ ๊ฐ์ ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋น๊ตํ๋ค๊ณ ์ฝ์๋ค. ์ด๊ฒ ๋ญ ๊ฐ๋ฆฌํค๊ณ ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ถ๊ธํด์ก๋ค.React๋ Reconciliation์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ณผ์ ์์O(n) ๋ณต์ก๋๋ฅผ ๊ฐ์ง ํด๋ฆฌ์คํฑ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ
ํ ์คํ ์ฟผ๋ฆฌ ์์ด ์ง์ ๊ตฌํํ ๋์ ์บ์์คํ ์ด๋ฅผ ์ค๋ช ํด๋๋ฆฌ๊ฒ ์ต๋๋ค.์บ์์คํ ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ง๋๋ ์ ์ญ ์ํ ์ ์ฅ์์ ๋๋ค. ๊ตฌํ ๋ฐฉ์์ ํฌ๊ฒ ์ธ ๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค:๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๋ฐฉ์JavaScript ๊ฐ์ฒด๋ Map์ ์ ์ญ ๋ณ์๋ก ์ ์ธํ์ฌ ์ฌ์ฉ์ฑ์ด ์คํ๋๋ ๋์๋ง
์ ๋ํ ๋จธ๋ฆฌ์ ์ ๋ค์ด์ค๋ ๊ธฐ๋ณธ ๊ฐ๋ ์ด ๋ช ์๋ค.์ง๋ฅ์ด ๋ชจ์๋ผ๋ฉด ๋ฐ๋ณตํด์ผ์ง.1, 2๋ ๊ฐ๊ณ 3์ ๋ค๋ฅธ ๊ฑด๊ฐ? 3์ ์ฌ์ฉํ ๋๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ์ ์๊ณ ?โก๏ธ 1๊ณผ 2๋ ๋ค๋ฅด๊ณ , 1๊ณผ 3์ด ๊ฐ์ ๋ฐฉ์์ด๋ค.onClick={(e) => {handleClick(e)}onCl
๊ฐ๋ฐ์๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด(machine code) ๋๋ ์ค๊ฐ ์ฝ๋(intermediate code)๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.์๋ฅผ ๋ค์ด, C++ ์์ค์ฝ๋(.cpp)๋ฅผ ์ปดํ์ผํ๋ฉด ๋ชฉ์ ํ์ผ(.obj)์ด ์์ฑ๋๋ค์ปดํ์ผ๋ฌ๋ ์ฝ๋์ ๋ฌธ๋ฒ์ ์ค๋ฅ๋ฅผ ๊ฒ์ฌํ๊ณ , ์ต์ ํ๋ฅผ ์ํ
๐ ์น ์ ๊ทผ์ฑ ํ์ค (WCAG)W3C๊ฐ ์ ํ ์น ์ฝํ ์ธ ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ(WCAG, Web Content Accessibility Guidelines)์ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ค์ํ๋ค.์ด ๊ฐ์ด๋๋ผ์ธ์ ์ง๊ฐ ๊ฐ๋ฅ(Perceivable), ์ด์ฉ ๊ฐ๋ฅ(Operable), ์ดํด ๊ฐ๋ฅ
์๋ ์์ด๋ ์น ์ปจ์์์(W3C)์ ์น ๊ธฐ์ ์ ํ์ค์ ๊ฐ๋ฐํ๊ณ ์ ์งํ๋ ๊ตญ์ ๊ธฐ๊ตฌ๋ก,HTML, CSS, JavaScript, ์น ์ ๊ทผ์ฑ ๋ฑ์ ์น ๊ธฐ์ ์ ํ์คํ.๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ฐ ๋๋ฐ์ด์ค์์ ์ผ๊ด๋ ์น ํ๊ฒฝ์ ์ ๊ณต.์น ์ ๊ทผ์ฑ(Accessibility)๊ณผ ์ฌ์ฉ์ฑ์ ๋ณด์ฅ.
์ต์ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ์ฝ๋ ๋๋ ์คํฌ๋ฆฝํธ. ์ฆ, ๊ตฌํ ๋ธ๋ผ์ฐ์ ๊ฐ ์ต์ JavaScript ๊ธฐ๋ฅ์ ์ดํดํ ์ ์๋๋ก "๋์ฒด ์ฝ๋"๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค.์น ๊ฐ๋ฐ์์๋ ์ต์ ๊ธฐ์ (์: fetch, Promise, E
dialog๋? ์ฃผ๋ก ์ฌ์ฉ์์ ์ฃผ์๊ฐ ํ์ํ ์ค์ํ ์ ๋ณด๋ ์ก์ ์ ๋ณด์ฌ์ค ๋ ์ฌ์ฉ๋๋ ํ์ ํํ์ UI ์์์ด๋ค. ์ฌ์ฉ 1. ํ์ธ Dialog (Confirmation Dialog) ์ฌ์ฉ์๊ฐ ์ค์ํ ์์ ์ ์ํํ๊ธฐ ์ ์ ํ ๋ฒ ๋ ํ์ธํ๋ ์ฉ๋ ๊ฒ์๊ธ/ํ์ผ ์ญ์ ๊ฒฐ์ ์งํ ์ค์ํ ์ค์ ๋ณ๊ฒฝ 2. ํผ Dialog (Form Dialog) ์ฌ์ฉ์ ์ ๋ ฅ์ด ...
๋ค, ๊ด์ฐฎ์ต๋๋ค! ๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์ ํจํ๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋์ผํฉ๋๋ค:git push --set-upstream origin badge-edit-uxfix๋ธ๋์น๋ฅผ ํธ์ํ๋ฉด์ ๋์์ upstream ๋ธ๋์น๋ฅผ ์ค์ ์ดํ์๋ ๊ฐ๋จํ git push๋ง์ผ๋ก๋ ํธ์ ๊ฐ๋ฅgit push
๋ฅ์คํธJS ์๋ฒ๋ฅผ 3001 ํฌํธ์์ ์คํํ๊ณ ์ถ์ผ์๊ตฐ์. ํฌํธ๋ฅผ ์์๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:npm run dev -- -p 3001์ด ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด package.json์ ์์ ํ์ง ์๊ณ ๋ 3001 ํฌํธ์์ ์๋ฒ๋ฅผ ์คํํ ์ ์์ต๋๋ค. ๋ช ๋ น์ด ๋ค์ --
Tailwind CSS์์ py-6์ padding-top๊ณผ padding-bottom์ ๊ฐ๊ฐ 1.5rem ๋งํผ ์ฃผ๋ ํด๋์ค.1rem์ ์ผ๋ฐ์ ์ผ๋ก 16px์ด๋ฏ๋ก1.5rem = 24px๋ฐ๋ผ์ py-6์padding-top: 24pxpadding-bottom: 24px์ด
https://stackoverflow.com/questions/54880669/react-domexception-failed-to-execute-removechild-on-node-the-node-to-be-re?newreg=368dd3a7d48e4f5390
๋ค, Lighthouse ๊ฒฐ๊ณผ์์ "ํ์ด์ง ๋ก๋๊ฐ ๋๋ฌด ๋๋ ค ์๊ฐ ์ ํ ๋ด์ ์๋ฃ๋์ง ์์์ต๋๋ค"๋ผ๋ ๋ฉ์์ง๋ ํ์ด์ง ๋ก๋ฉ ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒ์ ๋ํ๋ ๋๋ค.์ด ๋ฉ์์ง๊ฐ ์๋ฏธํ๋ ๊ฒ์๊ฐ ์ ํ ์ด๊ณผ: Lighthouse๋ ํ์ด์ง ๋ถ์ ์ ์ผ์ ์๊ฐ(๋ณดํต 30-60์ด)
const ThumbnailItem = ({ id }: Meetup\["id"]) ํ๋ฆผ!=> { ์ฝ๋์์ ์๋ฌ๊ฐ ๋๋ ์ด์ ๋ ํ์ ์ง์ ๋ฐฉ์์ด ์๋ชป๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.๋ฌธ์ ์ ์์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:Meetup"id"๋ number ํ์ ์ ์๋ฏธํฉ๋๋ค. ์ฆ, ๋จ์ผ ๊ฐ์ ํ์
์ด ์ด์๋ฅผ ํด๊ฒฐํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฝ๋์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ณด๋, thumbnail.image์ ์ ๊ทผํ๋ ค ํ ๋ "Cannot read properties of undefined" ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค:์ด ์ค๋ฅ๋ ์ปดํฌ๋ํธ๊ฐ
MeetupForm์์ ์ ๋ชจ์์ ์์ฑํ ๋, id๊ฐ ํฌํจ๋ ์ธํฐํ์ด์ค Meetup์ ํ์ ์ผ๋ก ์ฐ๊ณ ์์๋ค. ๊ทธ๋ฐ๋ฐ id?: number๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ์ค๋ฅ๋ฅผ ์ผ์ผ์ผ ๋ฌผ์ํ๋ฅผ ์ง์ ๋๋ ์ด์ NewMeetup์์ ์ค๋ฅ๊ฐ ๋๋ค.๋๋จธ์ง ์์๋ ๋ค ๋์ผํ๋ฐ, id๋ง ์๋
isPublic: isPublicRef.current?.checked์isPublic: isPublicRef.current?.checked || false์ ์ฐจ์ด์ ์undefined ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์๋ค.TypeScript์์ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(?.)๋ฅผ ์ฌ์ฉํ
https://tanstack.com/query/latest/docs/framework/react/reference/useInfiniteQuery๊ณต์ ๋ฌธ์์๋ ์ด๋ ๊ฒ ์ฐ๋ผ๊ณ ๋์์๋ค.
https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API

http://localhost:3000/์ ์ ์ํ ๋ ๋ณด์ฌ์ง๋ ํ์ผ์ app/page.tsx์ธ๋ฐ, ์ด ํ์ผ์์๋ MainPage ์ปดํฌ๋ํธ๋ฅผ ์ง์ ์ํฌํธํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด ๋ฐฉ์์ Next.js์ ๋ ์ด์์ ์์คํ ์ ์ฐํํ๊ฒ ๋ฉ๋๋ค.๋ฌธ์ ์์ธapp/page
๊ฐ์๊ธฐ ์ง๋ฅ ํ ๋จ์ด์ง๋ฉด์ ์ด๋ฆฌ๋ฅ์ \~\~~์ ๋๋ฆฌ ์น์ง ์๊ณ ์ด๋ชจ์ง๋ ๊ทธ๋ฅ "" ์์ ๋ฃ์ด์ ์ฐ์๋ฉด ๋ฉ๋๋ค ํํ..
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sortcompareFunction์ด ์ ๊ณต๋์ง ์์ผ๋ฉด ์์๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์ ๋ ์ฝ๋ ์ฝ๋ ํฌ์ธํธ ์์๋ก ๋ฌธ
ํํ ๋ฉ์ธํ์ด์ง ์ ๋ ฌ, ํํฐ ๊ตฌํ ์ค.sortType์ ํ์ ํ๋ผ๋ฏธํฐ์ด์ queryKey๋ก ๋ค์ด๊ฐ๋ ๋ฐ๋ฉด,(sortType๊ณผ setSortType์ RTK๋ก ์ ์ญ ์ํ ๊ด๋ฆฌํ์ฌ, ThumbnailArea์ SortArea๊ฐ ๋ถ๋ฆฌ๋์ด ์์ง๋ง ํ ํ์ด์ง์์ ๋ ๋๋ง๋๋ฉฐ ์ ๋ ฌ

๋์ผ ์ต์ ๋ฒํผ (์๋ฅผ ๋ค๋ฉด ์์ธ์ ๋ ๋ฒ ์ฐ์ ํด๋ฆญ)์ด ํ ๋ฒ ๋ ํด๋ฆญ๋์ ์ ์์ธ์ด ํด์ ๋๊ฒ ๋ง๋ค๊ณ ์ถ์๋ค. ์ฆ ์ต์ ๋ด์ฉ๊ณผ ํด๋ฆญ๋๋ ๋ด์ฉ์ ๋น๊ตํด์ ๋ฌดํจํ ๋ก์ง์ ๋ฃ๊ณ ์ถ์๋๋ฐ, ์๊ฐ๋๋ ๊ฒ event.target.value๋ฐ์ ์์๊ณ ๋ฌธ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ๋ ๊ฑฐ๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ categories์ ๋ด์ฉ๋ค์ ๋ ๋ฐฐ์ด์์ ๋ฃ์ด์ ๋ค์ ์ ์ํ ํ์๊ฐ ์์ด? ๊ธฐ์กด ํ์ ์ ๊ฐ์ ธ์์ ๊ทธ๋ฅ ์ฐ๋ฉด ์๋ผ? ๋ฌธ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ๋คํธ์ง์ข์ ์ง๋ฌธ์ ๋๋ค. ํ์ ์ ์๋ง ๊ฐ์ ธ์์๋ ์ค์ ๊ฐ์ ๋ฐฐ์ด์ ์ป์ ์ ์์ต๋๋ค. ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ ๋ณด๋ ์ปดํ์ผ ์๊ฐ์
ํ์ฌ ์ฝ๋ ๋ฐฉ์(${BASE_URL}/api/v1/user/me/meetup?${queryParams.toString()}&page=${page}&size=${size})๋ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ์๋ํ๊ฒ ์ง๋ง, ๊ถ์ฅ๋๋ ๋ฐฉ์์ ์๋๋๋ค. ์ด ๋ฐฉ์์ ๋ฌธ์ ๋:queryParams์
Interface MemberDeleteModalProps { meetupId: MyMeetupItem\['id']; // MyMeetupItem์ id ํ์ ๋ง ์ฌ์ฉ } ์ด๋ถ๋ถ์ ์์ ์ ์ฐ๊ณ ์ง์ MyMeetupItem'id'๋ก ํ์ ์ ์ง์ ํด์ฃผ๋ฉด ์ ๋ผ? ์๋ก int
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMapArray ์ธ์คํด์ค์ flatMap() ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ์ฃผ์ด์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ์ฉํ ๋ค์

๋ค, ์ ํํฉ๋๋ค! ์์ฃผ ์ ํํ๊ฒ ์ดํดํ์ จ์ต๋๋ค. ๐ฅน๐ฅน๐ฅน๐ฅน๐ฅน๐ฅน๐ฅนํด๋ก๋๋ ๋๋ ๋ด ๋จธ๋ฆฌ๋๋ฉ์ด ์ก๊ณ ๋์๊ฐ๋ ์ค
TypeScript์์ catch ๋ธ๋ก์ error ๋ณ์๋๊ธฐ๋ณธ์ ์ผ๋ก unknown ํ์ ์ผ๋ก ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ค๋ฅ.TypeScript์ ํ์ ์์ ์ฑ์ ์ํด error.message์ ์ง์ ์ ๊ทผํ ์ ์๋ค.any๋ก ํ์ ์ง์ ํ๋ฉด ์ค๋ฅ๋ ์ฌ๋ผ์ง์ง๋ง ์ ์๋ฆฌ๊น๋ฆฌํ๋ค.
handleNameLengthChange ํจ์์ event ๊ฐ์ฒด ํ๋ฆhandleNameLengthChange ํจ์๊ฐ event ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๋ ๊ณผ์ ๊ณผ ํ๋ฆ์ ์์ฐจ์ ์ผ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.1\. ์ด๋ฒคํธ ๊ฐ์ฒด์ ์์ฑ๋จผ์ , ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ ฅ(ํค๋ณด๋ ํ์ด

https://tailwindcss.com/docs/hover-focus-and-other-statesvariant๋ก ์กฐ๊ฑด์ ํ๊ธฐํ ๋ค css๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฐ๋ก ์กฐ๊ฑด๋ถ๋ก ์คํ์ผ์ด ์ ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด hover์ ๋ฐฐ๊ฒฝ์ bg-sky-700์ ์ด๋ ๊ฒ ์ ๋ ฅ hove
middleware.ts๋ ์๋ฒ ์ฌ์ด๋์์ ์คํ๋๋ค.๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ์๋ฒ๋ฅผ ๊ป๋ค ์ผ์ผ ํ๋ค.๋ธ๋ผ์ฐ์ ์ฝ์์ด ์๋ ์ฝ๋ ํฐ๋ฏธ๋์ ๋ก๊ทธ๊ฐ ๋ฌ๋ค.ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์ ์คํ๋๋ ๋ธ๋ผ์ฐ์ ์ ์ฉ ํจ์(์๋ฅผ ๋ค๋ฉดalert)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.getUSerํจ์๋ Cookies์
๋ ์ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์คํํ๋๋ฐ,๋ด ๋์๋ ๋ ๊ฐ์ด ๊ฐ์์ ํต๊ณผ๋์ด์ผ ํ ํจ์๊ฐ alert์ ๋์ฐ๋ ์ํฉ ๋ฐ๊ฒฌ.previousStartDate์ inputDate๊ฐ ๊ฐ์ ๋ ์ง์ธ๋ฐ๋===๋ ==๋ก ๋น๊ตํ๋ฉด ๊ฒฐ๊ณผ๋ false๊ฐ์ ํ์ ์ objecttoString()์ผ๋ก ๋ณํ
๋ด ๋ง์ style={{ objectFit: 'fill' }} ์ด ๋ถ๋ถ์ ์์ ์ ์ฐ๋๊น ์ด๋ฏธ์ง ๋น์จ์ด ์๊ณก๋๋ฉด์ ๊ฝ ์ฐจ๋๋ฐ, ๊ทธ๊ฑด ๋ญ๋๋ฌธ์ด์ผ์, ์ด์ ์ดํดํ์ด์! ์ ๊ฐ ํ๋ ธ๋ค์.Next.js Image ์ปดํฌ๋ํธ์ fill ์์ฑ์ ์ฌ์ฉํ ๋ objectFit์ ์ง์ ํ์ง

๋ก๊ทธ์ธํ์ง ์์ ์ ์ ๋ ๊ด๊ณ ๊ธ ์ ์ฒด๋ฅผ ๋ณผ ์ ์๊ฒ ํ์.๋ฐฑ์๋์์ ์กฐํ ๋ก์ง์ ์์ ํด์ฃผ์๋๋ฐ ์ 401 unauthorized๊ฐ ๋จ์ง?๋ด GET ์์ฒญ ์ฝ๋๊ฐ ๊ทธ๋๋ก์ด๊ธฐ ๋๋ฌธ!BE๋ถ์ด ๋ณด๋ด์ค ๋ต๋ณGPT ์ : ์ผ๋ฐ์ ์ธ ๊ดํ (๊ถ์ฅ ๋ฐฉ์)์ ํค๋์ Authorizatio
(fetch ๋ฑ API) ํจ์ ์ ์ธ์ ๋ถ๋ฆฌํด๋๋๋ฐ, ์ด ํจ์ ๋ด๋ถ๊ฐ ์๋๋ผํจ์๋ฅผ ํธ์ถํ๋ ์ปดํฌ๋ํธ์์ try catch๋ฌธ์ ์ฌ์ฉํด ์๋ฌ์ฒ๋ฆฌ๋ฅผ ๋ฐ๋ก ํ๋ ๊ฒ์ดํต์์ ์ด๋ค!!!try-catch๋ฅผ ์ ์ด ์ด์ ๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฐจ์ด ๋๋ฌธ์ ๋๋ค.try-catch๋ฅผ ์ฐ๋ ๊ฒฝ์ฐ:
meetup.service.ts:111 Uncaught (in promise) TypeError: Failed to execute 'json' on 'Response': body stream already read at getMeetupPresignedUrl (m

๋ด๊ฐ ์ด๊ฑธ 2๋ ๋ ํจ์ฌ ์ ์ ์ํ์ฝ๋ฉ ๋ดค๋ ์์ ์ ์ ํ๋๋ฐ,์์ง๋ ์์ง๊ฐ ์ ๋์ด์๋ ๊ฒ ๋ ์ ๋
๋ฐฉ๋ฒ 1: index๋ฅผ ์ฌ์ฉํ ์กฐ๊ฑด๋ถ ํด๋์ค (์ถ์ฒ)๋ฐฉ๋ฒ 2: ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด๋ก ๋ ๊ฐ๋จํ๊ฒ๋ฐฉ๋ฒ 3: clsx๋ classnames ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ (๋ ๊น๋)๋ฐฉ๋ฒ 4: CSS ์ ํ์ ์ฌ์ฉ (๊ฐ์ฅ ๊น๋ํ์ง๋ง ์ ํ์ )์ถ์ฒ: Tailwind์ last: ์์ ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ
: ๋ธ๋ผ์ฐ์ ๋ด์ฅ CSS ํ์ค ํจ์(clamp(), calc(), min(), max() ๋ฑ).์์ CSS์์, ๊ทธ๋ฆฌ๊ณ tailwind์์ \[]๋ก ์์๊ฐ์ ๋ฃ์ด ์ฌ์ฉํ๋ค.clamp(์ต์๊ฐ, ์ ํธ๊ฐ, ์ต๋๊ฐ)๋์ ์๋ฆฌ:์ ํธ๊ฐ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ์ ํธ๊ฐ์ด ์ต์๊ฐ๋ณด๋ค ์์ผ๋ฉด โ

SEO(LCP)์ง๊ธ ์๋ง์ง์ฐฝ์unoptimized={false/true}๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ต์ ํ ํ์ธ ์ด๋ ค์์ ์ค์ ์ ๋ฐ๋ผ LCP ์์๊ฐ ๋ฐ๋๊ทผ๋ฐ ์ด๊ฒ priority={index===0} ์ ์ฉ ํ ๊ฒฐ๊ณผ๊ฐ์LCP ์์๊ฐ ์ฝ์๊ณผ ๋ผ์ดํธํ์ฐ์ค์์ ๋ค๋ฅด๊ฒ ๋์ด๋ก๊ณ ์ prio
event.target.value and ref.current.value are two distinct methods for accessing the value of an HTML input element, primarily within a React context.
๊ทธ๋ผ ์ด ๋ถ๋ถ ๋ค์์ ๊ฐ๋ น, 4๋จ๊ณ, headhuntings, like, place, ๊ฒฝ๊ธฐ ๋ผ๋ ์ฟผ๋ฆฌํค๋ก ํธ์ถํ๋ค๋ฉด ์ด๊ฒ์ ๋ฐ์ดํฐB์ ๊ฒฝ๊ธฐ ๋ถ๋ถ๋ง ๊ต์ฒด๋๋ ๊ฑฐ์ผ? ์๋๋ฉด ์๋ก์ด ๋ฐ์ดํฐC๋ฅผ ์ ์ฒด ๋ค ๊ฐ์ ธ์ค๋ ๊ฑฐ์ผ?โ๏ธ ๋ต์, ์๋ก์ด ๋ฐ์ดํฐC๋ฅผ ์ ์ฒด ๋ค ๊ฐ์ ธ์ต๋๋ค์ค์ ์บ์
tailwind.config.ts ์์ ํ๋ ๊ฑด v3 ๋ฒ์ (๊ตฌ๋ฒ์ )์ด๊ณ v4์ด๋ค.

div ํ๊ทธ์ฌ์ ์์๊ฐ ๊ทธ๋ฅ ์ ์๋๋ก ๋ฐฐ์น๋๊ณ ์์๋๋ฐflex ์ ์ฉํ๋ฉด ์์ผ๋ก ๋๊ฒ
์ธ์ ์ธ ๋ด์ฉ์ด ์๋๋ผ๋ ์ฌ์ค, ์๊ณ ์์ง๋ง ๊ทธ๋ฅ ์๊ธฐ๋์ผ๋ฉด ์ข๊ฒ ๋ค. ํ๋ํ๋ ๋๋ฌ๋๋ฌ ํ์ดํ/์์ ํ๋ ๋ด๊ฐ ๋ต๋ต์ค๋ฌ์์ฅ์ฐจ๋ผ๋ฆฌ ์์ด ๋จ์ด 100๊ฐ๋ฅผ ์ธ์ฐ๋ผ๋ฉด ์ธ์ฐ๊ฒ ..hover - ๋ง์ฐ์ค ์ค๋ฒ ์focus - ํฌ์ปค์ค ์active - ํ์ฑํ ์disabled - ๋นํ์ฑ
1\. HTML ํ์ฑ โ DOM ์์ฑํ๊ทธ๋ง๋ค ๋ ธ๋๊ฐ ์์ฑ๋จ.2\. CSS ํ์ฑ โ CSSOM ์์ฑ์คํ์ผ ์ํธ ๋ด์ฉ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง๋ฆ.3\. DOM + CSSOM = Render Tree ์์ฑ๊ฐ ์์๊ฐ ์ด๋ค ์คํ์ผ์ ์ ์ฉ๋ฐ๋์ง ๊ฒฐ์ .4\. Layout(๋ฐฐ์น)๊ฐ ์์๊ฐ
https://velog.io/@vlmbuyd/UI-%EA%B3%84%EC%B8%B5-%EC%84%A4%EA%B3%84-FSD-Atomic-Design-Pattern-%EC%A0%81%EC%9A%A9%EA%B8%B0-2a3rothv
lowpoly origami
Test Suites๋ ํ ์คํธ ํ์ผ ์ tests๋ ํ ์คํธ ์ฝ๋ ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.์ง๊ธ caculator.test.js์ sum.js ํ์ผ 2๊ฐ -> test suites์ค์ ๋ด๋ถ์ ํ ์คํธ ์ฝ๋ ์ด 3๊ฐ
๊ธฐ์ ์์ ์ด๋ ๊ฒ ๋งํ ๋๋ ๋ณดํต,"๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก Visual Studio๋ฅผ ์ฐ๊ณ , UI๋ WinForms ๊ธฐ๋ฐ์ด๋ค"๋ผ๋ ๋ป.IDE(๋๊ตฌ): Visual StudioUI ํ๋ ์์ํฌ: WinFormsโ WinForms ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ง์ผ๋ก๋ ๋ถ์กฑํ ๊ธฐ๋ฅ๋ค์ด ์์ด์โ WinFor