๐Ÿ—‚ 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

    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 ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (mac)

    ๐Ÿ•ธ NVM ? ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ• ๋•Œ๋Š” ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์—†์–ด์„œ ์ด๋ฒˆ์— ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. nvm์€ Node ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ์ธ๋ฐ, ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•  ๋•Œ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ฐœ๋ฐœํˆด์˜ ๋ฒ„์ „ ํ˜ธํ™˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ Node ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด NVM ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค! (โš ๏ธ ํ„ฐ๋ฏธ๋„ ์ปค์Šคํ…€ ๋ณ€๊ฒฝ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ..ํ„ฐ๋ฏธ๋„์ด...๋งค์šฐ ์ƒํƒœ๊ฐ€ ์ข‹์ง€์•Š์€..์ƒํ™ฉ์ž…๋‹ˆ๋‹ค...) ๐Ÿš€ ์„ค์น˜ ๋ฐ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ ํ•ด๋ณด์ž! 1. homebrew ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ nvm ์„ค์น˜ brew install nvm 2. zshrc ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ด์–ด์„œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž! code ~/.zshrc 3. ๋ณ€๊ฒฝ๋œ zshrc ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค! source ~/.zshrc 4. nvm -v ๋ช…..

    ํด๋กœ์ €์™€ useState

    ํด๋กœ์ €์™€ useState

    1. ํด๋กœ์ €๋ž€? ํด๋กœ์ €๋Š” ์ค‘์ฒฉ ํ•จ์ˆ˜์—์„œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ์ด๋‹ค! nayeon1์„ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด nayeon1 ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์„œ ์ฝœ ์Šคํƒ์— ๋‹ด๊ธฐ๊ณ , nayeon1 ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ์ œ๊ฑฐ๋˜๋ฉด, y์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์—†๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ? (์ „์—ญ ์‹คํ–‰์ปจํ…์ŠคํŠธ๋Š” ์ œ๊ฑฐ X) ๊ทธ๋Ÿฐ๋ฐ, ์ด๋Ÿฐ ํ˜„์ƒ์€ ์™œ ์ผ์–ด๋‚ ๊นŒ ? ์Šค์ฝ”ํ”„, ๊ทธ์ค‘์—์„œ๋„ ์Šค์ฝ”ํ”„ ์ฒด์ธ, ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ํ•˜๋‚˜์”ฉ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋‹ˆ, ํด๋กœ์ €์— ๋Œ€ํ•ด ์กฐ๊ธˆ์€ ์ดํ•ดํ•˜๊ณ  ์žˆ๊ตฌ๋‚˜..๋ฅผ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด๋ณด์ž. 1-1. ์Šค์ฝ”ํ”„ ์Šค์ฝ”ํ”„๋Š” ์–ด๋–ค ๋ณ€์ˆ˜๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์•˜๋‹ค. ๋ณ€์ˆ˜ x๋Š” ์ „์—ญ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— nayeon1 ํ•จ์ˆ˜์™€ ๋‚ด๋ถ€ ํ•จ์ˆ˜์ธ nayeon2..

    sessionStorage is not defined?

    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 =..