๐Ÿฌ ๊ธดํ˜ธํก

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({ ....
๋žœ๋”ฉํŽ˜์ด์ง€์™€ ๋กœ๊ทธ์ธํŽ˜์ด์ง€๋Š” ํ† ํฐ ์—†์ด๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋งˆ์ดํŽ˜์ด์ง€์™€ ํ‹ฐ์ผ“ํŒ… ํŽ˜์ด์ง€๋Š” ์ธ์ฆ์ด ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํ‹ฐ์ผ“ QR์ฝ”๋“œ ํŽ˜์ด์ง€๋Š” ์ธ์ฆ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ํ•œ๋ช…์ด ํ‹ฐ์ผ“์„ ์—ฌ๋Ÿฌ์žฅ์„ ์‚ฌ์„œ '๊ณต์œ ํ•˜๊ธฐ'๋ฅผ ํ†ตํ•ด ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ค„ ์ˆ˜ ์žˆ์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—. ๋ผ์šฐํŒ…๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ผ์šฐํŒ… return ( ); ๋ฌธ์„œ์—์„œ React-Route-dom ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์˜ˆ์‹œ๊ฐ€ ์ž˜ ๋˜์–ด ์žˆ์–ด์„œ ์ฐธ๊ณ ํ–ˆ๋‹ค. 1์ฐจ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ HOC๋กœ ๋งŒ๋“ค์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ธ์ž๋ฅผ ๋„˜๊ธฐ๊ณ  ๊ฑธ๋Ÿฌ์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋ฐฉ์‹์— ๋น„ํ•ด ํ›จ์‹  ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ด์–ด์„œ ์ข‹๋‹ค. RequireAuth.tsx const RequireAuth = () => { const { ..
์ €๋ฒˆ 3์›” ๊ณต์—ฐ๋•Œ ์‚ฌ์šฉํ•œ ํ‹ฐ์ผ“ ์˜ˆ๋งค ์„œ๋น„์Šค๋Š” ๊ฝค ์„ฑ๊ณต์ ์ด์—ˆ๋‹ค. ๊ณต์—ฐ ์˜ˆ๋งค๋Š” ๋ฌผ๋ก  ์ƒˆ ๊ธฐ์ˆ˜ ์„ ๋ฐœ์—๋„ ๊ฝค ๋งŽ์€ ์‹ ์ž…์ƒ๋“ค์ด ์ง€์›์„ ํ–ˆ๊ณ , ์›น์„œ๋น„์Šค๊ฐ€ ํฐ ์˜ํ–ฅ์„ ๋ผ์ณค๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 103๋ช… ์˜ˆ์•ฝ ( ์ฝ”๋กœ๋‚˜ 19 ๋กœ ์ธํ•œ ์ตœ๋Œ€ ์ž…์žฅ ๊ฐ€๋Šฅ ์ธ์› ) ์‹ ์ž…์ƒ 54๋ช… ๋ฉด์ ‘ ์ง€์› ( ์†Œ๋ชจ์ž„ ๊ธฐ๋Šฅ์„ ํ†ตํ•œ ์ ‘๊ทผ์„ฑ , ์›นํŽ˜์ด์ง€๋ฅผ ํ†ตํ•œ ํ™๋ณด ) ๊ด€๋ฆฌ์ž ์›นํŽ˜์ด์ง€ ์ œ๊ณต์„ ํ†ตํ•œ ์ž…๊ธˆ ํ™•์ธ, ์†Œ๋ชจ์ž„ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ง€์› QR ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ๋น ๋ฅธ ์ž…์žฅ ํ™•์ธ , ์ž…๊ธˆ ์ •์‚ฐ storybook ์„ ํ™œ์šฉํ•œ npm ๋ชจ๋“ˆ์ œ์ž‘, ๋””์ž์ธ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์ด๋ฒˆ 9์›” ๊ณต์—ฐ์—๋Š” ๊ณต์—ฐ์„ ํ•˜๊ณ ์‹ถ์–ดํ•˜๋Š” ์„ ํ›„๋ฐฐ๋“ค์ด ๋งŽ์•„์„œ ๋ฌด๋ ค 12ํŒ€์ด๋‚˜ ๋‚˜์™”๋‹ค. ์–ด์ฉ” ์ˆ˜ ์—†์ด ๊ณต์—ฐ์„ ์ดํ‹€๋กœ ๋‚˜๋ˆ„์–ด ๊ฐœ๊ฐ• ํ›„ ์ฒซ ๋ชฉ์š”์ผ๊ณผ ๊ธˆ์š”์ผ์— ์ง„ํ–‰ํ•œ๋‹ค. ์‚ฌํšŒ์  ๊ฑฐ๋ฆฌ๋‘๊ธฐ๋„ ์™„ํ™”๋˜์–ด ๊ณต์—ฐ์žฅ ์ตœ๋Œ€ ์ž…์žฅ ๊ฐ€๋Šฅ ์ธ์›..
๋””์ž์ด๋„ˆ๊ฐ€ ํ”„๋กœ์ ํŠธ์— ํ•จ๊ป˜ ํ•œ๋‹ค๋Š”๊ฑด ์ถ•๋ณต์ด๋‹ค. ๋””์ž์ธ์ด๋‚˜ ๊ธฐํš์— ์‹œ๊ฐ„์„ ์Ÿ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ ์™ธ์—๋„ ์–ป์–ด๊ฐ€๋Š” ๊ฒƒ์ด ๊ฝค ์žˆ๋‹ค. ๋””์ž์ธ ํŒ€์—์„œ ๋„˜๊ฒจ ๋ฐ›์€ ํ”ผ๊ทธ๋งˆ ํ™”๋ฉด์„ ์ฐจ๊ทผ์ฐจ๊ทผ ๋œฏ์–ด๋ณด๋ฉด์„œ ๋งŽ์ด ๋ฐฐ์› ๋‹ค. ๋””์ž์ด๋„ˆ๋“ค์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…ํ•˜๋Š”์ง€, ํ”ผ๊ทธ๋งˆ์˜ ์ด ๊ธฐ๋Šฅ์€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜๋Š”์ง€, ํ˜‘์—…์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€. ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ ๋””์ž์ธ์„ ๋งก์•„์„œ ํ•  ๋• ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ „ํ˜€ ๋ชฐ๋ž๋‹ค. ์ œ๋ชฉ๊ณผ ์„œ๋ธŒ ํ…์ŠคํŠธ์˜ ๊ฐ„๊ฒฉ์€ ํ•ญ์ƒ 24ํ”ฝ์…€๋กœ ํ•ด์•ผ์ง€, ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ํ™”๋ฉด ๋„ˆ๋น„์— ์ฑ„์›Œ์ง€๋„๋ก ํ•ด์•ผ์ง€, ํ•˜๋Š” ๋‚˜๋ฆ„์˜ ๊ธฐ์ค€๋“ค์„ ๋‚˜ ํ˜ผ์ž์„œ๋งŒ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋Š” ํŒ€์›๋“ค๊ณผ ์†Œํ†ต์ด ์•ˆ๋ผ์„œ ์ผ์„ ๋‘๋ฒˆ์”ฉ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์—ฌ๋Ÿฌ๋ฒˆ ์ƒ๊ฒผ๋‹ค. ๊ฐ ํŽ˜์ด์ง€์—์„œ ํ†ต์ผํ•ด์•ผ ํ•˜๋Š” ๋””์ž์ธ๋“ค๋„ ์—ฌ๋Ÿฌ๋ช…์ด์„œ ์ž‘์—…์„ ํ•˜๋‹ค๋ณด๋‹ˆ ์‹ ๊ฒฝ..
๋‹ค๋ฅธ ํŒ€์— ๋น„ํ•ด ๋ณผ๋ฅจ์€ ๋ฐฐ๋กœ ํฐ ์ƒํ™ฉ์ด์—ˆ์ง€๋งŒ ์ œ์ผ ์ฒœ์ฒœํžˆ ์ง„๋„๋ฅผ ๋‚˜๊ฐ”๋‹ค. ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ๋ฏผ์€ ๋‹ค ํ•˜๊ณ  ์‹œ์ž‘ํ•˜์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ์–ด๊ธ‹๋‚˜๋Š”๊ฒŒ ์ƒ๊ธด๋‹ค. ์ด๋ฒˆ ๊ธ€์€ ๋ฑ…ํ‚ค์ฆˆ ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ์„ธํŒ…์— ๋Œ€ํ•œ ๊ธฐ๋ก. ํŒ€ ํ”„๋กœ์ ํŠธ ์ง์ „์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ–ˆ๋˜ ํŒ€ ํ˜‘๋™ ์Šคํ„ฐ๋””์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ์™€, ์ด์ „์— ๊ณ ํ‹ฐ์ผ“ ํ”Œ์ ์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์Šคํƒ๋“ค์ด ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ธํŒ…ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๊ฒƒ๋“ค์€ ์ด์ œ ๋ง‰ ์‹œ์ž‘ํ•œ ๋‘๋ฒˆ์งธ ๊ณ ํ‹ฐ์ผ“ ํ”„๋กœ์ ํŠธ์—์„œ ๋˜ ์š”๊ธดํžˆ ์‚ฌ์šฉํ•  ์˜ˆ์ •. ๋‹ค์Œ์€ ์ด ๊ธ€์—์„œ ์–ธ๊ธ‰ํ•  ๋‚ด์šฉ๋“ค์ด๋‹ค. ๋ฆฌ๋•์Šค ํˆดํ‚ท ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๊นƒํ—ˆ๋ธŒ ์•ก์…˜๊ณผ ๋„์ปค๋ฅผ ์ด์šฉํ•œ ์ž๋™ ๋ฐฐํฌ ์„ธํŒ… 1. ๋ฆฌ๋•์Šค ํˆดํ‚ท ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ๋งŽ์•˜๋‹ค. ๋ฆฌ๋•์Šค ๋–ตํฌ, ๋ฆฌ์ฝ”์ผ ๋“ฑ๋“ฑ ๊ณ ๋ คํ–ˆ์ง€๋งŒ RTK๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •. ์‚ฌ์‹ค ๋ช‡..
ํ•œ๊ทœ์ง„
'๐Ÿฌ ๊ธดํ˜ธํก' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)