ํ๋ฌ์ ์ผ๋ง์ผ๋ง ์ง๋ฆฌ ์๊ธ์ ๋ฅผ ์ฐ๊ณ ์๋ค. ์ฒ์์ ์ ๊ณต๋ ๋ฐ์ดํฐ ๋ช๊ธฐ๊ฐ๋ฅผ ์ ๋ถ ์์งํ๋ฉด ๊ทธ ์ดํ๋ก ์๋์ ํ์ด ๊ฑธ๋ฆฐ ์ฑ ๋ฌด์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ง์ด ๋ฌด์ ํ์ด์ง, ์น์ํ๊ณผ ์์
์คํธ๋ฆฌ๋ฐ์ ๋์์ ๋ชปํ๋ ๋์ญํญ. ๊ทธ๋ด ๋ ํด๋ํฐ์ผ๋ก ๋๋ฅ์ ๋ค์ด๊ฐ๋ฉด ๋ก๋ฉ์ด ๊ต์ฅํ ๋๋ ค ๋ต๋ตํ๋ค. ํฌ์คํฐ ์ด๋ฏธ์ง๋ฅผ ๋ง์ด ๋ถ๋ฌ์ค๋ ํํ๋ฉด์ ํนํ ๊ทธ๋ฌ๋ค. ์น ์ฑ๋ฅ ์ต์ ํ๋ฅผ ํด๋ณด๊ธฐ๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฒ ๊ธ์ ๊ทธ์ ๋ํ ๊ธฐ๋ก. ์ด๊ธฐ lightHouse ์ ์์ด๋ค. ๋คํํ ๋ง ํฌ๊ฒ ์์ข์ ์ ์๋ ์๋์๋ค. 1. ํฐํธ ์ต์ ํ * ์นํฐํธ๊ฐ ๋ก๋๋๋ ๋์ ํ
์คํธ๊ฐ ๊ณ์ ํ์๋๋์ง ํ์ธํ๊ธฐ ์นํฐํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์์๋ ๋๊ฐ์ง๊ฐ ์๋ค. ๋์ฒด ๊ธ๊ผด์ด ์ ๊ธ๊ผด๋ก ๋ฐ๋ (FOUT - ์คํ์ผ์ด ์ง์ ๋์ง ์์ ํ
์คํธ ํ๋์). "๋ณด์ด์ง ์๋" ํ
์คํธ..
๐ฌ ๊ธดํธํก/๊ณ ์ค๋ฝ ํฐ์ผ
์์ ๋ํ๋ฐด๋ ๋์๋ฆฌ๊ฐ ๊ณต์ฐ์ ํ๋ฉฐ ๊ฒช์ ๋ถํธํจ์ ๋ํ ๊ณ ๋ฏผ์์ ์์๋์์ด์๊ฐ๋ฐ์ ํ ๋ ์๋ก์ด ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ฅ๋จ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์ค์ด๋ค์ด์ ๊ทธ๋ฐ๊ฐ, ์ฝ๋๋ฅผ ์ด์๊ฒ ์ง๋ ๊ฒ์ ๊ด์ฌ์ด ๋ง์์ก๋ค. ๋๋ฅ์ ๊ฐ๋ฐํ๋ฉด์ ๋ง์ฃผ์น ๊ณ ๋ฏผ๋ค์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํ๋ค. ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐํ๋ค๋ณด๋ฉด ์ ์ธ์ ์ธ ์ฝ๋์ ๋ํด์ ๊ณ ๋ฏผํ๊ฒ ๋๋ค. ๋ฆฌ์กํธ ์์ฒด๊ฐ ์ ์ธํ์ด๊ธฐ ๋๋ฌธ์ผ์๋. ์ ์ธ์ ์ธ ์ฝ๋ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ธ๋ค์์ ํํ 'How'์ 'What'์ ์ฐจ์ด๋ก ์ค๋ช
ํ๋ค. ๋ฐ๋ณต๋ฌธ์ ํตํด ๋ฐฐ์ด์ ์์๋ฅผ ์ํํ๋ฉด์ html์์๋ฅผ ์์ฑํ๊ณ ๋ณด์ฌ์ฃผ๋ ์ฝ๋์ด๋ค. ์ด๋ค ์ ์ฐจ๋ก ์ด๋ฃจ์ด์ง๋์ง๊ฐ ๋๋ฌ๋ ์๋ค. const arr = [1, 2, 3, 4, 5]; return ( {arr.map((elem) => ( {elem} ))} ); React์์ jsx ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒ ํํํ ์ ์๋ค. ํต์ฌ ๋ฐ์ดํฐ๋ง ์ธ..
1. ๋ฐฐ๊ฒฝ ๊ณ ์ค๋ฝ์์ ๊ณต์ฐ์ ํด์ค๋ฉด์ ํฐ์ผ ์๋งค๋ฐฉ์์ ๋ถํธํจ์ ๋๊ผ๋ค. ์ปดํจํฐ๊ณตํ๊ณผ ํํ๋ต๊ฒ, ์๋
3์๋ถํฐ ๋งค ๊ณต์ฐ๋ง๋ค ๊ณ ์ค๋ฝ ๋ด๋ถ ์ธ์๋ค๋ก ์๋งค์๋น์ค๋ฅผ ์ง์ ๊ฐ๋ฐํด ์ฌ์ฉํ๋ค. 500๋ช
์ด ๋๋ ์ธ์์ด ์ฐ๋ฆฌ ์๋น์ค๋ฅผ ์ค์ฌ์ฉํ๋ ๊ฒฝํ์ด์๋ค. ๋งจ ์ฒ์ ๊ณ ์ค๋ฝ ํฐ์ผ์ ๊ธฐํํ๋ฉด์, ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ ์ด ๋ถํธํ๊ณ ์ด๋ค ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ ค ํ๋์ง์ ๋ํด์ ๊ธฐ๋กํ์๋ค. https://www.9yujin.site/devlog/gosrock1/idea-220124 ์๋
3์ ์ฒซ๋ฒ์งธ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ผ๋ก ์๋น์ค๋ฅผ ํ๋ค. ์ ํ๋ฒํธ์ ์ด๋ฆ์ ๋ณ๊ฐ๋ก ์
๋ ฅ๋ฐ์ ๋ฌธ์ ์ธ์ฆ์ ํตํด ์ ์ ๋ฅผ ๋ฐ์๋ค. ์ฝ๋ก๋๋ก ์ธํด ์ต๋ ์
์ฅ ๊ฐ๋ฅ ์ธ์ ์ ํ์ด ์์ด 107๋ช
์ ๊ด๊ฐ์ด ์ด ์๋น์ค๋ฅผ ํตํด ๊ณ ์ค๋ฝ ๊ณต์ฐ์ ์์ฃผ์๋ค. QR์ฝ๋ ์
์ฅ ํ์ธ..
๋ฒ์ ๊ณ ์ค๋ฝ ํฐ์ผ ํ๊ณ ๋ง์ง๋ง ์๋ฆฌ์ฆ์
๋๋ค. ๋ถ๋ช
ํ '์ด๊ฑด ์ ์ด๋์ผ์ง' ํ๋ค๊ฐ ๊น๋จน์๊ฒ ์์ํ
๋ฐ. (์ ์ ๊ธฐ์ ๋ธ๋ก๊ทธ๊ฐ ์ผ๊ธฐ์ฅ์ฒ๋ผ ์ฐ์ด๋๊ฒ ๊ฐ์ง๋ง) ์์ฃผ ๋ฉ์ง ํ๋ก์ ํธ์ ๊ฑธ๋ง๋ ์์ฃผ์์ฃผ ๋ฉ์ง ๊ณต์ฐ์ด์์ต๋๋ค. ์์ง๋ ์ฌ์ด์ด ๊ฐ์์ง ์๋๊ตฐ์. ํ. ๊ทธ๋ผ ์์ํด๋ณด๊ฒ ์ต๋๋ค. ๋๋ฉํ์ด์ง ๋ฐ๋ก๊ฐ๊ธฐ ํ๋ฒ์ด ์ด๋ ต์ง, ๋๋ฒ์ ๊ทธ๋๋ ํ ๋งํ๋ค. 3์๊ณต์ฐ์ด๋ผ๋ ์์ฃผ ์ ํฉํ ๋ ํผ๋ฐ์ค๊ฐ ์์๊ธฐ ๋๋ฌธ์. ์ด์ ๊ณผ ํ์ด์ง ๊ตฌ์ฑ์์ ํฐ ์ฐจ์ด๋ ์๋ค. ๋์ ์ ์ฒด์ ์ผ๋ก ๋คํฌ๋ชจ๋๋ฅผ ์น ๊ฑท์ด๋์. ๊ฒ์ ๋ฐฐ๊ฒฝ์ ์ฐ๋๊น ๋ค๋ฅธ ์๋ค์ ์ฌ์ฉํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ต๋ค!! ๋์์ธ์ด ์ ์ผ ํ๋ค์ด. ๋ค๋ฅธ ์ด๋ ํ์ด์ง๋ณด๋ค ์ ์ผ ์์ฑ๋๊ฐ ์ค์ํ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ๋ํ
์ผ ํ๋ํ๋ ์ฑ๊ธฐ๋๊ฒ ๊ฝค ์คํธ๋ ์ค์๋ค. ๋๋ถ์ ๊ฒฐ๊ณผ๋ ํจ์ฌ ์ด์๊ฒ ๋์จ ๊ฒ ๊ฐ์ ์ข๋ค. ํนํ ๋ฐ์ํ์ด ..
1์ฐจ ํ๋ก์ ํธ์ ์๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฎ๊ฒจ์ค๋ฉด ๋ ๊ฑฐ๋ผ ์๊ฐ์ ํ๋๋ฐ, ์์๋ณด๋ค ๊ฝค ์ค๋ ์๊ฐ ์ฝ์ง์ ํ๋ค. ๋ด๊ฐ ๋ชป์ฐพ๋๊ฑด์ง ํ์
์ ๋ํ ์ ๋ณด๊ฐ ๋ณ๋ก ์์์. ์ผ๋จ ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ด๋ฌ์ฟต ์ ๋ฌ์ฟต ํ๋ ๋๊ธด ํ๋๋ฐ, ์ด๊ฒ ์ ํํ ๋ฐฉ๋ฒ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ์ผ๋จ ์ ๋์๊ฐ๋ ๊ธฐ๋ก. ์ ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจํค์ง ๋งค๋์ ์์ socket.io-client ๋ฅผ ์ค์นํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ํ์
์ ์๋ฅผ ํด์ฃผ๋ ค๊ณ ํ๋๋ฐ, ์์ฐ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค๋๊ฑด ์๊ฒ ๋ค.. ์ผ๋จ!! import io, { Socket } from 'socket.io-client'; io์ ํจ๊ป Socket๋ import ํด์ค๋ค. const [socket, setSocket] = useState(); ์์ผ ๊ฐ์ฒด๋ฅผ ์์ฑํด state์ ์ ์ฅํ๋ ๋ฐฉ์์ด์๋ค. ์๋ Socket ํ์
..
์์ํก ํ์ด์ง๋ฅผ ์ํด ๋ฌดํ์คํฌ๋กค์ ๊ตฌํํ๋ ๊ธฐ๋ก์ด๋ค. ๊ทผ๋ฐ ์ด์ ๋ฆฌ์กํธ์ฟผ๋ฆฌ์ useInfiniteQuery๋ฅผ ๊ณ๋ค์ธ. ์ฒ์์ ๋จ์ํ๊ฒ state๋ฅผ ์ด์ฉํด์ ๋ฌดํ์คํฌ๋กค์ ๋ง๋๋ ๋ก์ง์ ์๊ฐํ๊ณ ์ ๊ทผํ๋ค๊ฐ ์ฝ์ง์ ์ข ํ๋ค. setList(prev => [...prev, ...res.data.list]); ์ ๋ฐ์ดํฐ๋ฅผ ํจ์นญ์ ํ๊ฒ ๋๋ฉด, ๊ธฐ์กด์ ์๋ ๋ฐฐ์ด ์ํ์ ์๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. ์คํ๋ ๋ ์ฐ์ฐ์ ๋๋ concat์ ์ฌ์ฉํ ์ ์๋ค. ๊ทผ๋ฐ useInfiniteQuery๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ง์ฟต ๋ค๋ฆ. 1. useInfiniteQuery const { data, fetchNextPage } = useInfiniteQuery( ['talks'], UsersApi.getTalks, { getNextPagePa..
ํ๋ก์ ํธ์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ฅผ ๋์
ํ๋ฉด์ ์ด๊ฒ์ ๊ฒ ํด๋ณด๊ณ ์ถ์๊ฒ ๋ง์๋ค. ์๋๋ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ์ฅ์ ์ด๋ผ๊ณ ํ๋ฉด ์์ฃผ ๋์ค๋ ๊ฒ๋ค์ด๋ค. ํจ์นํด์จ ๋ฐ์ดํฐ๋ค์ ์บ์ฑ staleํ ๋ฐ์ดํฐ์ธ์ง ์๋์ง๋ฅผ ๊ตฌ๋ถํด์ ํญ์ ์ ์ ํ ๋ฐ์ดํฐ๋ก ์ ์ง ์๋ฒ ์ํ์ ํด๋ผ์ด์ธํธ ์ํ์ ๋ถ๋ฆฌ success์ error ๋ฑ์ ํจ์นญ ์ํ๋ฅผ ๊ด๋ฆฌ ํนํ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์ด์ ๊ณ ๋ฏผ์ ๋ ํด๋ณด๊ณ ์ถ์๋ค. axios๋ก ๋งค๋ฒ ํจ์นญํด์ฌ๋ ํธ๋ผ์ด ์บ์น๋ก ๊ฐ์ธ์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค. ๊ทธ๋ด ๋๋ง๋ค ๋น์ทํ ๋ก์ง(๋ณดํต์ ๊ทธ๋ฅ ์ฝ์๋ก๊ทธ..)์ ์ฌ๊ธฐ์ ๊ธฐ ์์ฑํ๊ฑฐ๋, ์ฌ๋ฌ ํ์ด์ง์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋์ด์ผ ํ๋ ๋ก์ง๋ ์ค๋ณต์ผ๋ก ์ฐ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ ๋ถํฐ ๊ณ ๋ฏผ์ ๋ช๋ฒ ํ์๋ ๋ถ๋ถ์ด์๋๋ฐ ๋ง์นจ ์ฐธ๊ณ ํ ๋งํ ์ข์ ๋ ํผ๋ฐ์ค๋ค์ด ์์ด์ ํ๋ก์ ํธ์ ๋ฃ์ด๋ณด..
์ฑ์ ๋ค์ํ ํ์ด์ง์์ ๋ชจ๋ฌ์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฏธ๋ฆฌ ์ง์ ๋์ง ์์ ์ค๋ฅ์ ๋ํด์๋ ์บ์นํด์ ๋ชจ๋ฌ์ ๋์ฐ๋๋ก ๋์ด์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ฌ์ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํด์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก. ๋ฑ
ํค์ฆ์ ๋น์ทํ๊ฒ ์ฌ์ฉํ์ง๋ง ์กฐ๊ธ์ ๋ค๋ฅธ ๋ฐฉ์์ด๋ค. ์ฐธ๊ณ 6๊ฐ์ ์ , 1์ฐจ ํ๋ก์ ํธ ์ค์ ์งฐ๋ ์ฝ๋์ด๋ค. import React from 'react'; const ModalComponent = ({ children }, ref) => { return ( { ref.current.classList.add('hidden'); }} > {children} ); }; export default React.forwardRef(ModalComponent); ์ด๋ ๊ฒ ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด๋๊ณ , function TicketCodePage({ ....