๐ WIL
์ถ์ํ๋..
:) ์ง๋ ์คํฐ๋์์ ๋ด๊ฐ ์ ๋ฆฌํ ์ํฐํด์ ๊ณต์ ํ๊ณ , ์ X๋์ด '์ถ์ํ๋ ๋ฌด์์ธ๊ฐ?' ์ ๋ํ ์ง๋ฌธ์ ๋ช ํํ๊ฒ ๋ต๋ณ์ ๋งํ์ง ๋ชปํ์๋ค.. ~์ด์ง ์์๊น์? ์ ๋๋ก ๋ง๋ฌด๋ฆฌ๋ฅผ ํ์๋๋ฐ ์ฐพ๋ค๋ณด๋ ์ด ๋ถ๋ถ๋ ์คํฌํฐํ์ด ๋ธ๋ก๊ทธ์ ์ด๋ฏธ ๊ด๋ จํ ๊ธ์ด ์์ด์ ์ด๋ฒ์ฃผ๋ ์ถ์ํ ๊ด๋ จํด์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค! ๐ Abstraction - ๋ ๋ณต์กํ ๊ฐ๋ ์ ๊ฐ๋จํ๊ฒ ๋ง๋ ๋ฒ์ ์ ์๋ฏธ - ๋ณต์กํ ์ธ๋ถ์ฌํญ์ ์จ๊ธฐ๊ณ , ์ฌ์ฉ์๊ฐ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์์คํ ์ ๋จ์ํํ๋ ๊ณผ์ - FE ๊ฐ๋ฐ์์์ ์ถ์ํ ๊ฐ๋ 1. ๋ฎ์ ์์ค์ ์ถ์ํ : ๊ฐ๋ฐ์๊ฐ HTML, CSS ์ฝ๋์ ์ง์ ์ ๊ทผํ๊ณ ์กฐ์. ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง์ ํน์ ๋ฒํผ์ ์คํ์ผ์ ์ ์ฉํ๊ณ ์ ํ ๋, ๊ฐ๋ฐ์๋ ์ง์ ํด๋น HTML ์์๋ฅผ ์ฐพ๊ณ , CSS๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ผ(..
๋์์ธ ์์คํ ์ ์ฌ๋ฌ ๊ณ์ธต ์ถ์ํ
๊ธ์ ์ ๋ฆฌํ๊ธฐ ์์:) ์๋ก์ด ์คํฐ๋๋ก ์ผ์ฃผ์ผ์ ํ๊ฐ์ฉ ๊ด์ฌ์๊ฒ ์ฝ์ ์ํฐํด์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ ํ ์คํฐ๋์ ๊ณต์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์งํํ๊ฒ ๋์์ต๋๋ค. ์์ ์๋ ์ฝ์ ๊ฒ๋ค์ ์ ์ ๋ฆฌํ์ง ๋ชปํ์ง๋ง, ์ ์ ๋ฆฌํ๊ธฐ์ํด ์๊ฐ์ ํฌ์ํ๋ฉด์ ๋ธ๋ก๊ทธ์ ๊ธ์ ์ ๋ฆฌํ๊ณค ํ์๋๋ฐ์, ์ด๋์๊ฐ๋ถํฐ ๋ค์์ ์ ๋ฆฌํ์ง~ ๊ฐ ๋ฐ๋ณต๋๋๋..1๋ ์ด ํ๋ ๋ค์. ์ค๋๋ง์ ์ ๋ํ๋ ๋ธ๋ก๊ทธ ๊ธ์ ์์์ ๋ฌด์์ผ๋ก ํ ์ง ๊ณ ๋ฏผํ๋ค๊ฐ ๐ค ์ ์ ๊ด์ฌ ํค์๋ ์ค ํ๋์ธ DS ๊ด๋ จํด์ ์ฌ๋ฏธ์๊ฒ ์ฝ์๋ ๊ธ์ ์งง๊ฒ ์ ๋ฆฌ ํด๋ณด์์ต๋๋ค. ๐ https://engineering.atspotify.com/2023/05/multiple-layers-of-abstraction-in-design-systems/ Multiple Layers of Abstraction in De..
ElementRef
import { useRef } from "react"; const Component = () => { const buttonRef = useRef(null); return Hello; }; ํญ์ ์จ์๋ ๋ฐฉ์์ ref ์ ํธ๋ฒํด์ ํด๋นํ๋ ํ๋กํผํฐ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ด์๋ค. ElementRef ElementRef ๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค. ๐ import { useRef, ElementRef } from "react"; const Component = () => { const buttonRef = useRef(null); return Hello; }; typeof ๋ ์ฌ์ฉ๊ฐ๋ฅ! ์ด๋ฏธ ์ด์ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๊ตณ์ด ElementRef ๋ก ๋ณ๊ฒฝํ ํ์๋ ์๋ค! https://www...
Apollo Client - Fetching
โ๏ธ Apollo Client GraphQL๋ก ๋ก์ปฌ ๋ฐ์ดํฐ์ ์๊ฒฉ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ด๋ฆฌํ ์ ์๋ JavaScript์ฉ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ โ๏ธ Fetching 1. useQuery ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค. (๋ณ๊ฒฝ X) ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์๋์ผ๋ก ์บ์ํจ. โ๏ธ Updating cached query results 1. Polling : ์ง์ ํ ์๊ฐ์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์คํํด์, ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ด. 2. Refetching : user action์ ํตํด์ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ. (ex. button) polling, refetching ์ ํ ๋๋ ๋ฐ์ดํฐ๋ฅผ fetching ํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋๋ฐ, notifyOnNetworkStatusChange : tru..
GraphQL
1. GraphQL ์ด๋? API ๋ฅผ ์ํด ๋ง๋ ์ฟผ๋ฆฌ ์ธ์ด Rest API ๋ ๊ฐ๊ฐ ๋ฆฌ์์ค์ ํด๋นํ๋ ์๋ํฌ์ธํธ๋ฅผ ์ด์ฉํด์ ๊ฐ์ ธ์จ๋ค๋ฉด, GraphQL ์ ์๋ํฌ์ธํธ๊ฐ ํ๊ฐ๋ค! ํ๋์ ์๋ํฌ์ธํธ๋ฅผ ์ด์ฉํด์ ์ฟผ๋ฆฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์์ฒญํ๊ฒ ๋๋ค! const GET_DATA = gql` query getData(dataId: ID!) { data(id: $dataId) { id title author { id name photo } } } `; 2. ์์ 1. ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด GraphQl ์๋ฒ์ ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ๋ค. (POST or GET) 2. ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด GraphQL ์ฟผ๋ฆฌ๋ก ๋ฌธ์์ด์ ์ถ์ถํ๋ค. => ๋ง์ฝ ์์ฒญํ๋ ๋ฐ์ดํฐ๊ฐ ์คํค๋ง์ ์ ์๋์ด ์์ง ์๊ฑฐ๋..
๐ธ NVM ์ฌ์ฉ ๋ฐฉ๋ฒ (mac)
๐ธ NVM ? ํ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋๋ ์ฌ์ฉํด๋ณธ ์ ์ด ์์ด์ ์ด๋ฒ์ ์ฒ์ ์๊ฒ ๋์๋ค. nvm์ Node ๋ฒ์ ์ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ธ๋ฐ, ๋ค์ํ ํ๋ก์ ํธ๋ฅผ ์งํํด์ผ ํ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ฐ๋ฐํด์ ๋ฒ์ ํธํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ค์ํ Node ๋ฒ์ ์ ์ค์นํ๊ธฐ ์ํด NVM ์ ์ฌ์ฉํ๋ค๊ณ ํ๋ค! (โ ๏ธ ํฐ๋ฏธ๋ ์ปค์คํ ๋ณ๊ฒฝ ์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ..ํฐ๋ฏธ๋์ด...๋งค์ฐ ์ํ๊ฐ ์ข์ง์์..์ํฉ์ ๋๋ค...) ๐ ์ค์น ๋ฐ ํ๋ก์ ํธ์ ์ ์ฉ ํด๋ณด์! 1. homebrew ๋ฅผ ์ฌ์ฉํ์ฌ nvm ์ค์น brew install nvm 2. zshrc ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ด์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์! code ~/.zshrc 3. ๋ณ๊ฒฝ๋ zshrc ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํจ๋ค! source ~/.zshrc 4. nvm -v ๋ช ..
ํด๋ก์ ์ useState
1. ํด๋ก์ ๋? ํด๋ก์ ๋ ์ค์ฒฉ ํจ์์์ ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถ ํจ์์ ๋ด๋ถ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ํ์์ด๋ค! nayeon1์ ํธ์ถํ๊ฒ ๋๋ฉด nayeon1 ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋์ด์ ์ฝ ์คํ์ ๋ด๊ธฐ๊ณ , nayeon1 ์คํ ์ปจํ ์คํธ์์ ์ ๊ฑฐ๋๋ฉด, y์ ๋ํ ์ ๋ณด๋ ์๋ ๊ฒ์ด ์๋๊น? (์ ์ญ ์คํ์ปจํ ์คํธ๋ ์ ๊ฑฐ X) ๊ทธ๋ฐ๋ฐ, ์ด๋ฐ ํ์์ ์ ์ผ์ด๋ ๊น ? ์ค์ฝํ, ๊ทธ์ค์์๋ ์ค์ฝํ ์ฒด์ธ, ๋ ์์ปฌ ์ค์ฝํ, ์คํ ์ปจํ ์คํธ์ ๋ ์์ปฌ ํ๊ฒฝ์ ํ๋์ฉ ์ดํดํ๊ณ ๋๋, ํด๋ก์ ์ ๋ํด ์กฐ๊ธ์ ์ดํดํ๊ณ ์๊ตฌ๋..๋ฅผ ๋๋ ์ ์์๋ค. ํ๋์ฉ ์ ๋ฆฌํด๋ณด์. 1-1. ์ค์ฝํ ์ค์ฝํ๋ ์ด๋ค ๋ณ์๋ค์ ์ ๊ทผํ ์ ์๋ ์ ํจ ๋ฒ์๋ค. ๊ฐ๋จํ ์์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค. ๋ณ์ x๋ ์ ์ญ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ nayeon1 ํจ์์ ๋ด๋ถ ํจ์์ธ nayeon2..
sessionStorage is not defined?
Next.js ์์ PrivateRoute ๊ตฌํ ์ค์ ๋ฐ์ํ ๋ฌธ์ ๋ค. sessionStorage ์คํ์ธ ์ค ์๊ณ ๋ค์ ์ ๋ ฅํ์ง๋ง ๋๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๐ ๋ฌธ์ ๋ฐ์ ์ด์ ๋คํํ ๊ณต์ ๋ฌธ์์ ์์ธํ ์ค๋ช ๋์ด ์๋ค! Next.js ๋ client-side Rendering ํ๊ธฐ ์ ์ server-side Rendering์ ํ๊ธฐ ๋๋ฌธ์, server์์๋ sessionStorage์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค! ํด๊ฒฐ ๋ฐฉ๋ฒ 1. window ๊ฐ์ฒด๊ฐ ์กด์ฌํ ๋ => sessionStorage์ ์ ๊ทผํ๋ฉด ์ ์์ ์ผ๋ก ๋์๋๋ค! 2. useEffect๋ฅผ ์ฌ์ฉํ์. => useEffect๋ CSR์์ ๋์ํ๊ธฐ ๋๋ฌธ! if (typeof window !== 'undefined') { const accessToken =..