๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€

(38)
redux-saga #. redux-saga๋ž€? redux-saga(์ดํ•˜ ๋ฆฌ๋•์Šค ์‚ฌ๊ฐ€)๋Š” redux์˜ ๋ฏธ๋“ค์›จ์–ด๋กœ์„œ ๋น„๋™๊ธฐ ๋™์ž‘์„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ์ฆ‰ ์™ธ๋ถ€์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ(fetch)์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ ๋™์ž‘๋“ค์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ , ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, redux์˜ action์ด ๋ฐœ์ƒํ•˜๋ฉด reducer๊ฐ€ ์•ก์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „์— ๋น„๋™๊ธฐ ์ž‘์—…์„ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์•ก์…˜์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฏธ๋“ค์›จ์–ด๋กœ ๋™์ž‘ํ•œ๋‹ค. #. redux-saga ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  1) ์ฃผ๋กœ ์„œ๋ฒ„์— ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ์—์„œ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ  Saga์—์„œ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•ด์ฃผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ์—์„œ ์ง์ ‘ async/await ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ์„œ๋ฒ„์— API ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”๊ฒŒ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ..
mysql ํŠน์ • ๋ฌธ์ž ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ** LIKE ์—ฐ์‚ฐ์ž๋Š” ํŠน์ • ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 1. ํŠน์ • ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ SELECT [ํ•„๋“œ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [ํ•„๋“œ๋ช…] LIKE '%ํŠน์ • ๋ฌธ์ž์—ด%'; 2. ํŠน์ • ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ SELECT [ํ•„๋“œ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [ํ•„๋“œ๋ช…] LIKE 'ํŠน์ • ๋ฌธ์ž์—ด%'; 3. ํŠน์ • ๋ฌธ์ž๋กœ ๋๋‚˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ SELECT [ํ•„๋“œ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [ํ•„๋“œ๋ช…] LIKE '%ํŠน์ • ๋ฌธ์ž์—ด'; 4. ๋ณต์ˆ˜๊ฐœ์˜ ํŠน์ • ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ (Tip. ์œ„์˜ ๊ฒฝ์šฐ์—” REGEXP ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•˜๋‹ค) SELECT [ํ•„๋“œ๋ช…] FROM [ํ…Œ์ด๋ธ”๋ช…] WHERE [ํ•„๋“œ๋ช…] LIKE '%ํŠน์ • ๋ฌธ์ž์—ด%' OR ..
ios ์‚ฌํŒŒ๋ฆฌ, ํฌ๋กฌ heigth: 100vh ์•ˆ๋  ๋•Œ (feat. ์ด๊ฒƒ์ด ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์ธ๊ฐ€) ๊ธฐํš์ž๋กœ ์ผํ•˜๋ฉด์„œ QA๋ฅผ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ํ•  ๋• ๋‹น์—ฐํ•˜๋“ฏ ํ•˜๋˜ ๋ธŒ๋ผ์šฐ์ € ๋ณ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด์   ๋‚ด๊ฐ€ ๊ฐœ๋ฐœ์ž๋กœ ์ฝ”๋“œ์น˜๋ฉด์„œ๋Š” ์žŠ๊ณ  ์žˆ์—ˆ๋‹ค ๐Ÿ˜… ์‚ฌ์‹ค ์–ด๋ ดํ’‹์ด ํ•ด์•ผ์ง€๋Š” ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋‹น์žฅ ๊ฐœ๋ฐœ ์ž‘์—…์ด ๋ฐ”์˜๋‹ˆ๊น ์ผ๋‹จ ๋„˜๊ฒผ๋”๋‹ˆ ๊ฒฐ๊ตญ..! ๋ฐฐํฌ ์ „ ํ…Œ์ŠคํŠธ ๋•Œ ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ์ผ๋ถ€ ๊นจ์กŒ๋‹ค ๐Ÿ˜ฑ ์ง„์งœ ios..... ์™œ ์•ˆ๋˜๋Š” ์ง€.... ํ•œ์ฐธ ๊ตฌ๊ธ€๋ง ํ•ด์„œ ํ•ด๊ฒฐํ•œ ์˜ค๋Š˜์˜ ์ฃผ์ œ...! ios ์‚ฌํŒŒ๋ฆฌ, ํฌ๋กฌ heigth: 100vh ์•ˆ๋  ๋•Œ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ธฐ๋กํ•œ๋‹ค. ์ด์Šˆ iOS ๊ธฐ๊ธฐ ๋ธŒ๋ผ์šฐ์ €์—์„œ 100vh ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์˜ ๋„๊ตฌ๋ฐ” ์˜์—ญ๊นŒ์ง€ ์žก๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜๋‹จ์— ๋ฒ„ํŠผ๊ณผ ๊ฐ™์€ ๋ฌด์–ธ๊ฐ€ ๋ฐฐ์น˜ํ•˜๋ฉด ๊ฐ€๋ ค์„œ ์•ˆ๋ณด์ด๋Š” ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚œ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ ๋ฐฉ๋ฒ•์€ ์ด๋Ÿฌํ•˜๋‹ค. ์‹ค์ œ innerHeight ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ css ..
iwinv ์„œ๋ฒ„์— mysql ํŒŒ์ผ ์˜ฎ๊ธฐ๊ธฐ ( feat. mysql ๋ฐฑ์—…) iwinv๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜ ๋นŒ๋ ธ๋‹ค. ๊ทธ๋ฆฌ๊ณค ๋‚ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๊ณ  ์ž„๋Œ€ ์„œ๋ฒ„์— clone ํ•˜์˜€๋‹ค. ๊ทผ๋ฐ ๋กœ์ปฌ์— ์ €์žฅ๋œ mysql ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์˜ฎ๊ฒจ์•ผ ๋ ์ง€ ๋ชฐ๋ผ์„œ ํ•œ์ฐธ ํ—ค๋งธ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฏธ๋ž˜์˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๋‚จ๊ธฐ๋Š” ๋ฉ”๋ชจ...! iwinv ์„œ๋ฒ„์— mysql ํŒŒ์ผ ๋ฐฑ์—…ํ•˜๊ธฐ...! ๐Ÿ”ฅ 1. ๋กœ์ปฌ ์„œ๋ฒ„์— ์žˆ๋Š” mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ export ํ•˜๊ธฐ. ์ผ๋‹จ ๋‚˜๋Š” mysql workbench๋ฅผ ์ด์šฉํ–ˆ๋‹ค. 1) mysql workbench์— ์ ‘์†ํ•˜๋ฉด ์ขŒ์ธก์— Data Export ๋ฉ”๋‰ด ํด๋ฆญ. 2) exportํ•  ์Šคํ‚ค๋งˆ ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ณด์—ฌ์ง€๊ณ  ํ•ด๋‹น ์Šคํ‚ค๋งˆ ํด๋ฆญ. 3) ํ•˜๋‹จ์— Export to Self-Contained File ์˜ต์…˜ ํด๋ฆญ. (*์ด๋•Œ ํŒŒ์ผ๊ฒฝ๋กœ ์ž˜ ๊ธฐ์–ตํ•ด๋‘๊ธฐ.) 4) ๋งจํ•˜๋‹จ์— [Start..
git clone ์—๋Ÿฌ 'remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.' ์ž„๋Œ€ ์„œ๋ฒ„์— git clone์„ ํ•˜๋Š”๋ฐ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค. ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ ๋ญ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ ์ง€์›์ด 2021.08.13 ์ดํ›„๋กœ ์•ˆ๋œ๋‹ค๋Š” ๋‚ด์šฉ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๋ก ์€ ๊นƒํ—ˆ๋ธŒ์— ๋“ค์–ด๊ฐ€์„œ ํ† ํฐ์ด๋‚˜ ssh ๋‘˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ธ์ฆ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์ž‘์—…์ด ์–ด๋ ต์ง€ ์•Š์•˜์–ด์„œ ๋ธ”๋กœ๊ทธ์— ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค. 1. ์ผ๋‹จ ๋‚ด ๊นƒํ—ˆ๋ธŒ๋กœ ์ด๋™ ํ›„ ์•„๋ž˜ ์ด๋ฏธ์ง€๋Œ€๋กœ ์ด๋™ํ•˜์ž. ํ† ํฐ ๋งŒ๋“œ๋Š” ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๋Š” ๊ฑด๋ฐ ์€๊ทผ ํ•œ์ฐธ ์ฐพ์•˜๋‹ค. 2. ํ•ด๋‹น Personal access token ํŽ˜์ด์ง€๊นŒ์ง€ ์ด๋™ํ–ˆ๋‹ค๋ฉด ๊ทธ ํ›„์—” ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์ž. ๋‚œ ์ด๋ฏธ ํ† ํฐ์„ ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ์ง€ ์บก์ณ๊ฐ€ ์–ด๋ ต๋„ค ํ—คํ—ฟใ……ใ…Žใ…Žใ…Ž. ๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡๐Ÿ‘‡ https://docs.github.com/en/authentication/keeping-your-account-and-data..
#7. ํšŒ์›๊ฐ€์ž… ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (react-hook-form) #7-0 ๋“ค์–ด๊ฐ€๋Š” ๋ง ๊ธฐ์กด์— ์ž‘์„ฑํ•œ ํšŒ์›๊ฐ€์ž… ํผ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๋ ค๋˜ ์ฐจ์— react-hook-form์ด ์žˆ๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. react-hook-form์„ ์ด์šฉํ•˜๋Š”๊ฒŒ ๊ธฐ์กด ์ฝ”๋“œ์˜ ์–‘๋„ ์ค„์ผ ์ˆ˜ ์žˆ๊ณ , ์ข€ ๋” ์ž˜ ์งœ์—ฌ์ง„ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์„๊ฑฐ ๊ฐ™์•„ ํ•œ๋ฒˆ ์ ์šฉ์‹œ์ผœ ๋ณด์•˜๋‹ค. #7-1 react-hook-form ์ด์šฉํ›„๊ธฐ ๋จผ์ € npm install react-hook-form์„ ํ•˜์—ฌ ์„ค์น˜ํ•œ ํ›„์— ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€(https://react-hook-form.com/kr/get-started/)์— ์•ˆ๋‚ด๋œ ๋Œ€๋กœ ์‹คํ–‰ํ•ด ๋ณด์•˜์œผ๋‚˜ "Uncaught TypeError: path.split is not a function" ๋ž€ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค.๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ์—ฌ๋Ÿฌ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ค‘ react-hook-form ๋ฒ„์ „์„..
#6. ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ (1์ฐจ) #6-0 ๋“ค์–ด๊ฐ€๋Š” ๋ง ์ด์ „์— ํฌ์ŠคํŒ… ํ–ˆ๋˜๋Œ€๋กœ(https://white-salt.tistory.com/26) JWT ๋ฐฉ์‹์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. jwt ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ๋„ ์กฐ๊ธˆ ์–ด๋ ค์› ๋Š”๋ฐ ์‹ค์ œ๋กœ ์ฝ”๋“œ ์งœ๋Š”๊ฑด ๋” ์–ด๋ ค์› ๋‹ค (^_^;;). ์ผ๋‹จ ์ง€๊ธˆ๊นŒ์ง€ ์ง  ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ ์ •๋ฆฌ ํ›„ ๋ฐฑ์—”๋“œ ์นœ๊ตฌ์™€ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ•ด๋ณด์ž. #6-1 ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๋กœ์ง 1. ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜์—ฌ accessToken๊ณผ refreshToken ๋ฐ›๊ธฐ. ์ž…๋ ฅ๋ฐ›์€ id์™€ password ๊ฐ’์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋ฉด, ์„œ๋ฒ„๋Š” ์œ ์ €ํ™•์ธ ํ›„ ๋“ฑ๋ก๋œ ์œ ์ €๊ฐ€ ๋งž๋‹ค๋ฉด accessToken, refreshToken์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค. (Q1. ์ด๋•Œ ๋ฐœ๊ธ‰ ๋ฐ›์€ refreshToken์„ httpOnly cookie๋กœ ์„œ๋ฒ„๋‹จ์—์„œ ๋ฐ”๋กœ ์ €์žฅํ•ด์ฃผ๊ณ , ์ดํ›„ ํด..
#5. ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ ๊ตฌํ˜„ #5-0 ๋“ค์–ด๊ฐ€๋Š” ๋ง ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ฒ˜์Œ์—” ์™ ์ง€ ์กฐ๊ธˆ ์–ด๋ ค์šธ๊บผ ๊ฐ™์•„์„œ ์ผ๋‹จ ํ˜ผ์ž ์‹œ๋„ํ•ด๋ณด๊ณ  ์•ˆ๋˜๋ฉด ๊ตฌ๊ธ€๋ง ํ•ด๋ณด์ž ์‹ถ์—ˆ๋‹ค. ๊ทผ๋ฐ ์›ฌ๊ฑธ ์„ฑ๊ณตํ–ˆ๋‹ค. ์ฝฉ๋‚˜๋ฌผ ์ฒ˜๋Ÿผ ๋‚˜๋„ ์กฐ๊ธˆ์”ฉ ์ž๋ผ๊ณ  ์žˆ๋‚˜๋ณด๋‹ค. ๋ฟŒ๋“ฏ! #5-1 ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ ์„ค๊ณ„ 1) ์ „์ฒด๋™์˜ ์ฒดํฌ ์‹œ ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ž๋™์ฒดํฌ 2) ์ „์ฒด๋™์˜ ์ฒดํฌํ•ด์ œ ์‹œ ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ž๋™ ์ฒดํฌํ•ด์ œ 3) ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ฒดํฌ ์‹œ ์ „์ฒด๋™์˜ ์ž๋™์ฒดํฌ 4) ์ „์ฒด๋™์˜ + ์„ธ๋ถ€ํ•ญ๋ชฉ 3๊ฐœ ๋ชจ๋‘ ์ฒดํฌ๋œ ์ƒํƒœ์—์„œ ์„ธ๋ถ€ํ•ญ๋ชฉ 1๊ฐœ ์ฒดํฌํ•ด์ œ ์‹œ ์ „์ฒด๋™์˜ ์ž๋™ ์ฒดํฌํ•ด์ œ #5-2 ์•ฝ๊ด€๋™์˜ ์ฒดํฌ๋ฐ•์Šค ๊ธฐ๋Šฅ ๊ตฌํ˜„ 1) ์ฒดํฌ๋ฐ•์Šค์˜ checked ์†์„ฑ๊ฐ’์ธ true / false ๋ฅผ useState๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €์žฅ ๋ฐ ๋ณ€๊ฒฝํ•จ. 2) ๊ธฐ๋Šฅ 1๋ฒˆ๊ณผ ..