[React] [Immer] "An immer producer returned a new value and modified its draft. Either return a new value or modify the draft." ์—๋Ÿฌ ํ•ด๊ฒฐ
ยท
Frontend/React
๐Ÿ”ฅ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ Uncaught Error: [Immer] An immer producer returned a new value and modified its draft. Either return a new value or modify the draft. ์—๋Ÿฌ๋ฅผ ๋ฒˆ์—ญํ•˜์ž๋ฉด immer ์ œ์ž‘์ž๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ํ•ด์•ผ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์›์ธ์ด ๋˜๋Š” ์ฝ”๋“œ ๋ถ„์„ immer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆ๋ณ€์„ฑ ์ƒํƒœ์˜ ํŠธ๋ฆฌ๋ฅผ ์†์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•˜๋˜ ์ค‘ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. updatePerson((person) => person.mentors.push({ name, title })); ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์จ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ return ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™๋Š”๋‹ค. ์ฆ‰, ์œ„์˜ ์ฝ”๋“œ๋Š” ๊ธฐ์กด..
[Axios] Axios ์ธํ„ฐ์…‰ํ„ฐ ์ ์šฉํ•˜๊ธฐ
ยท
Frontend/JavaScript
์ธํ„ฐ์…‰ํ„ฐ(Interceptors)๋ž€? then ๋˜๋Š” catch๋กœ ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋‹ค. Axios ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋ ค๋Š” ์ด์œ โ“ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์„œ๋ฒ„์— ํ† ํฐ ์ธ์ฆ์„ ํ•„์š”๋กœ ํ•˜๋Š” API ์š”์ฒญ์„ ํ• ๋•Œ๋งˆ๋‹ค HTTP Authorization ์š”์ฒญ ํ—ค๋”์— ํ† ํฐ์„ ๋„ฃ์–ด์ค˜์•ผํ•˜๊ณ  401(Unauthorized) ์—๋Ÿฌ๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋ฉด ํ† ํฐ์„ ๊ฐฑ์‹ ํ•ด์ค€ ํ›„ ์žฌ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ํ•œ ๊ณณ์—์„œ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด Axios ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์ ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • config๋กœ ์ƒˆ๋กœ์šด Axios ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋‹ˆ ๋”์šฑ ํŽธ๋ฆฌํ–ˆ๋‹ค. (baseURL, timeout ์„ค์ •) ์ ์šฉํ•˜๋Š” ๊ณผ์ • 1) Axios ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ const instanc..
[JavaScript] ์ •๊ทœ ํ‘œํ˜„์‹ ์•ˆ์— ๋™์ ์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•
ยท
Frontend/JavaScript
์ •๊ทœ ํ‘œํ˜„์‹(Regular Expression)์€ ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž ์กฐํ•ฉ์„ ์ฐพ๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ด๋‹ค. RegExp RegExp ์ƒ์„ฑ์ž๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ํ…์ŠคํŠธ๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌํ„ฐ๋Ÿด ํ‘œ๊ธฐ๋ฒ•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‘ ๋น—๊ธˆ์œผ๋กœ ๊ฐ์‹ธ์•ผ ํ•˜๋ฉฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋น—๊ธˆ์œผ๋กœ ๊ฐ์‹ธ์ง€ ์•Š์œผ๋‚˜ ๋”ฐ์˜ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. // ์ •๊ทœ ํ‘œํ˜„์‹ ์ƒ์„ฑํ•˜๊ธฐ /ab/g new RegExp(/ab/, 'g') // ๋ฆฌํ„ฐ๋Ÿด new RegExp('ab', 'g') // ์ƒ์„ฑ์ž ๋™์ ์œผ๋กœ ์ •๊ทœ ํ‘œํ˜„์‹ ์ƒ์„ฑํ•˜๊ธฐ const ๋ณ€์ˆ˜ = 'JS'; const regex = new RegExp(`${๋ณ€์ˆ˜}`, 'g'); console.log(regex); // /JS/g ๐Ÿง ์‘์šฉํ•˜๊ธฐ match() ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์ด ์ •๊ทœ์‹๊ณผ ๋งค์น˜๋˜๋Š”..
[JavaScript] ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ(Queue) ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
ยท
Frontend/JavaScript
ํ(Queue)๋ž€? ํ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ, ๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ๋˜๋Š” "์„ ์ž…์„ ์ถœ(FIFO: First-In-First-Out)" ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ํ(Queue)์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• 2๊ฐ€์ง€ ํ๋Š” ๋ฐฐ์—ด(Array)์ด๋‚˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1๏ธโƒฃ ๋ฐฐ์—ด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ์˜ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ์— ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋น ๋ฆ…๋‹ˆ๋‹ค. 2๏ธโƒฃ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ํฌ๊ธฐ์— ์ œํ•œ์ด ์—†์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๐Ÿง ๋ฐฐ์—ด๋กœ ํ(Queue)๋ฅผ ๊ตฌํ˜„ํ•ด๋„ ๋˜์ง€๋งŒ ๊ตณ์ด ? ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ด์œ  JavaScript์—์„œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉ..
[JavaScript/BOJ] 2164 - ์นด๋“œ2
ยท
Algorithm/๋ฐฑ์ค€(BOJ)
๐Ÿ“Œ ๋ฌธ์ œ N์žฅ์˜ ์นด๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ๋Š” ์ฐจ๋ก€๋กœ 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์–ด ์žˆ์œผ๋ฉฐ, 1๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์œ„์—, N๋ฒˆ ์นด๋“œ๊ฐ€ ์ œ์ผ ์•„๋ž˜์ธ ์ƒํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์นด๋“œ๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์นด๋“œ๊ฐ€ ํ•œ ์žฅ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค. ์šฐ์„ , ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ๋ฐ”๋‹ฅ์— ๋ฒ„๋ฆฐ๋‹ค. ๊ทธ ๋‹ค์Œ, ์ œ์ผ ์œ„์— ์žˆ๋Š” ์นด๋“œ๋ฅผ ์ œ์ผ ์•„๋ž˜์— ์žˆ๋Š” ์นด๋“œ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด N=4์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž. ์นด๋“œ๋Š” ์ œ์ผ ์œ„์—์„œ๋ถ€ํ„ฐ 1234 ์˜ ์ˆœ์„œ๋กœ ๋†“์—ฌ์žˆ๋‹ค. 1์„ ๋ฒ„๋ฆฌ๋ฉด 234๊ฐ€ ๋‚จ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ 2๋ฅผ ์ œ์ผ ์•„๋ž˜๋กœ ์˜ฎ๊ธฐ๋ฉด 342๊ฐ€ ๋œ๋‹ค. 3์„ ๋ฒ„๋ฆฌ๋ฉด 42๊ฐ€ ๋˜๊ณ , 4๋ฅผ ๋ฐ‘์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด 24๊ฐ€ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ 2๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ๋‚˜๋ฉด, ๋‚จ๋Š” ์นด๋“œ๋Š” 4๊ฐ€ ๋œ๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๋‚จ๊ฒŒ ๋˜๋Š” ์นด๋“œ๋ฅผ ๊ตฌํ•˜๋Š” ..
[JavaScript/section 10] 05 - ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ
ยท
Algorithm/์ธํ”„๋Ÿฐ(inflearn)
๐Ÿ“Œ ์ตœ๋Œ€์ ์ˆ˜ ๊ตฌํ•˜๊ธฐ(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์ด๋ฒˆ ์ •๋ณด์˜ฌ๋ฆผํ”ผ์•„๋“œ๋Œ€ํšŒ์—์„œ ์ข‹์€ ์„ฑ์ ์„ ๋‚ด๊ธฐ ์œ„ํ•˜์—ฌ ํ˜„์ˆ˜๋Š” ์„ ์ƒ๋‹˜์ด ์ฃผ์‹  N๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๊ณ  ํ•œ๋‹ค. ๊ฐ ๋ฌธ์ œ๋Š” ๊ทธ๊ฒƒ์„ ํ’€์—ˆ์„ ๋•Œ ์–ป๋Š” ์ ์ˆ˜์™€ ํ‘ธ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ œํ•œ ์‹œ๊ฐ„ M ์•ˆ์— N๊ฐœ์˜ ๋ฌธ์ œ ์ค‘ ์ตœ๋Œ€์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. (ํ•ด๋‹น ๋ฌธ์ œ๋Š” ํ•ด๋‹น ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉด ํ‘ธ๋Š” ๊ฑธ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ํ•œ ์œ ํ˜•๋‹น ํ•œ ๊ฐœ๋งŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.) ์ž…๋ ฅ์„ค๋ช… ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜ N(1
[JavaScript/section 10] 04 - ๋™์ „๊ตํ™˜
ยท
Algorithm/์ธํ”„๋Ÿฐ(inflearn)
๐Ÿ“Œ ๋™์ „๊ตํ™˜(๋ƒ…์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ๋‹จ์œ„์˜ ๋™์ „๋“ค์ด ์ฃผ์–ด์ ธ ์žˆ์„๋•Œ ๊ฑฐ์Šค๋ฆ„๋ˆ์„ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ๋™์ „์œผ๋กœ ๊ตํ™˜ํ•ด์ฃผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฃผ๋ฉด ๋˜๋Š”๊ฐ€? ๊ฐ ๋‹จ์œ„์˜ ๋™์ „์€ ๋ฌดํ•œ์ • ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์„ค๋ช… ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋™์ „์˜ ์ข…๋ฅ˜๊ฐœ์ˆ˜ N(1
[JavaScript/section 10] 03 - ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด
ยท
Algorithm/์ธํ”„๋Ÿฐ(inflearn)
๐Ÿ“Œ ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€์ˆ˜์—ด(LIS) N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”(์ž‘์€ ์ˆ˜์—์„œ ํฐ ์ˆ˜๋กœ) ์›์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›์†Œ๊ฐ€ 2, 7, 5, 8, 6, 4, 7, 12, 3์ด๋ฉด ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋„๋ก ์›์†Œ๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋ฉด 2, 5, 6, 7, 12๋ฅผ ๋ฝ‘์•„๋‚ด์–ด ๊ธธ์ด๊ฐ€ 5์ธ ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์„ค๋ช… ์ฒซ์งธ ์ค„์€ ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜ N(1= 0; j--) { if (arr[j] < arr[i] && max < dy[j]) { max = dy[j]; } } dy[i] = max + 1; } answer = Math.max(...dy); return answer; } let arr = [2, 7, 5, 8, 6, 4, 7, 12,..
_์„ฑํ˜ธ_
๐ŸŒฑ ์„ฑํ˜ธ ๋ธ”๋กœ๊ทธ