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

์ „์ฒด ๊ธ€207

[๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ] Composition Pattern ์ปดํฌ์ง€ํŠธ ํŒจํ„ด? ์ปดํฌ์ง€ํŠธ ํŒจํ„ด์€ ๊ฐ์ฒด๋“ค์˜ ๊ด€๊ณ„๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋ถ€๋ถ„-์ „์ฒด ๊ณ„์ธต์„ ํ‘œํ˜„ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ผ ๊ฐ์ฒด์™€ ๋ณตํ•ฉ ๊ฐ์ฒด ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ๋‹ค๋ฃจ๋„๋ก ํ•œ๋‹ค ์›๋ž˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์‚ฌ์šฉ๋˜๋˜ ํŒจํ„ด์ธ๋“ฏํ•˜๋‹ค ์ด๊ฑธ ์–ด๋–ป๊ฒŒ NextJS์—์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ ์ง€, ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค Server and Client Composition Patterns ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ปดํฌ์ง€ํŠธ ํŒจํ„ด ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์ด ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”์ฒœ๋˜๋Š” ์ปดํฌ์ง€์…˜ ํŒจํ„ด์„ ๋‹ค๋ฃฌ๋‹ค. When to use Server and Client Components? ์–ธ์ œ ์„œ๋ฒ„ ์ปด.. 2024. 3. 22.
[๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ] NextJS ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ Client Componentsํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง๋œ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ UI๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” JavaScript๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.์ด ํŽ˜์ด์ง€๋Š” ์–ด๋–ป๊ฒŒ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋™์ž‘ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๊ทธ๋“ค์ด ๋ Œ๋”๋˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ธ์ œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. Benefits of Client Renderingํด๋ผ์ด์–ธํŠธ ๋ Œ๋”๋ง์˜ ์ด์ ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ๋ Œ๋”๋ง ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐ€์ง€ ์ด์ ์„ ๊ฐ€์ง„๋‹ค.Interactivity (์ƒํ˜ธ์ž‘์šฉ): ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ(state), ํšจ๊ณผ(effects), ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ(event listeners)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ๊ทธ๊ฒƒ์€ ์œ ์ €์—๊ฒŒ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๊ณ .. 2024. 3. 21.
[๊ณต์‹๋ฌธ์„œ ๋ฒˆ์—ญ] NextJS ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ Server Components Next13์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ณ€ํ™”๋Š” ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ์ƒ๊ฐ๋œ๋‹ค ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ(RSC)๋Š” ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง๋˜๊ณ  ์„ ํƒ์ ์œผ๋กœ ์บ์‹œ๋  ์ˆ˜ ์žˆ๋Š” UI๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. NextJS์—์„œ ๋ Œ๋”๋ง ์ž‘์—…์€ Route Segment ๋ณ„๋กœ ๋ถ„ํ• ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ŠคํŠธ๋ฆฌ๋ฐ(Streaming)๊ณผ ๋ถ€๋ถ„ ๋ Œ๋”๋ง์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์„œ๋ฒ„ ๋ Œ๋”๋ง ๋ฐฉ์‹์—๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. Static Rendering (์ •์  ๋ Œ๋”๋ง) Dynamic Rendering (๋™์  ๋ Œ๋”๋ง) Streaming (์ŠคํŠธ๋ฆฌ๋ฐ) Benefits of Server Rendering ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง์„ ํ–ˆ์„ ๋•Œ์˜ ์ด์  Data Fetching (๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ) ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋กœ์ง์„ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๊ฐ€๊นŒ์ด์— ์žˆ๋Š” .. 2024. 3. 20.
7. ์›น ์„œ๋ฒ„ ๊ตฌ์ƒ ์ด๋ฒˆ ํ™œ๋™ ์š”์•ฝ ์ด๋ฒˆ์ฃผ์—๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ๊ตฌ์„ฑํ• ์ง€์— ๋Œ€ํ•ด์„œ ๊ตฌ์ƒ์„ ํ•ด๋ณด์•˜๋‹ค ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ์ผ๋‹จ ์ž ์‹œ ๋ฏธ๋ค„๋‘๊ณ , ์ด๋ฒˆ์ฃผ์—๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์ด์—ˆ๋‹ค๋ฉด ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ , AWS์— ๋ฐฐํฌํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰์„ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฐ๊ตฌ์‹ค์— ์ƒ์‹œ ๊ฐ€๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์…”์„œ, ์ด๊ฒƒ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰์„ ๊ฒฐ์ •ํ–ˆ์—ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜๋„ ๋ณ„๋กœ ์—†์ง€๋งŒ, ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋กœ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์ด๋ผ ์ด๊ฒƒ์ €๊ฒƒ ์•Œ์•„๋ณด์•„์•ผ ํ–ˆ๋‹ค. ์›๊ฒฉ ์ ‘์† ๊ณ„์† ์—ฐ๊ตฌ์‹ค์— ๋ฐฉ๋ฌธํ•ด์„œ ์ž‘์—…์„ ํ•  ์ˆ˜๋Š” ์—†์–ด์„œ, ์›๊ฒฉ์œผ๋กœ ์„œ๋ฒ„ ์ปดํ“จํ„ฐ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธํŒ…์„ ํ–ˆ๋‹ค ๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…์€ ์กฐ๊ต๋‹˜์ด ํ•ด์ฃผ์‹œ๊ณ , ๋‚˜๋Š” ์—ฐ๊ตฌ์‹ค์— ๋ฐฉ๋ฌธํ•ด์„œ ๋‚ด ๊ณ„์ •์„ ๋“ฑ๋กํ•˜๊ธฐ๋งŒ ํ–ˆ๋‹ค. ํฌ๋กฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์„ ์‚ฌ.. 2024. 3. 20.
6. ๋…ธ๋“œ ์‚ญ์ œ ๋ฐ ๊ฐ„์„  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ์„  ์ด์ „ ๋ฏธํŒ… ํ”ผ๋“œ๋ฐฑ ์ด์ „ ๋ฏธํŒ…์—์„œ ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ธฐ๋Šฅ ๊ฐœ์„  ๋…ธ๋“œ ์‚ญ์ œ์‹œ ์ด์›ƒ ๋…ธ๋“œ๋„ ํ•จ๊ป˜ ์‚ญ์ œํ•  ๊ฒƒ์ธ์ง€ ์—ฌ๋ถ€ ์„ ํƒ ๊ฐ€๋Šฅ ์„œ๋กœ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ„ ๊ฐ„์„  ์ถ”๊ฐ€์‹œ ์ƒ‰์ƒ ๋ณ€๊ฒฝ Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ ๊ฐœ์„  ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ 1. ์ด์›ƒ ๋…ธ๋“œ ์‚ญ์ œ ์—ฌ๋ถ€ ๊ฒฐ์ • ํŠน์ • ๋…ธ๋“œ ์‚ญ์ œ์‹œ ํ•ด๋‹น ๋…ธ๋“œ์™€ ์ด์›ƒํ•œ ๋…ธ๋“œ๋ฅผ ํ•จ๊ป˜ ์‚ญ์ œํ• ์ง€ ์„ ํƒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐœ์„  const handleSubmit = useCallback(() => { if (filter === "") { return; } setRerender(false); setGraphData((prev) => { let filteredNodes = prev.nodes; let filteredEdges = prev.edges; if (deleteNeighbor) { filtere.. 2024. 3. 17.
๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ ์ง€์‹์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด, ๊น€์˜ํ•œ๋‹˜์˜ "๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹" ๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค. ๊ทธ ์ค‘์— ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๊ฐœ๋…์€ ์ฒ˜์Œ์ด๋ผ ์ •๋ฆฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ ๊ฐ•์˜ - ์ธํ”„๋Ÿฐ ์‹ค๋ฌด์— ๊ผญ ํ•„์š”ํ•œ HTTP ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ์˜ฌ๋ฐ”๋ฅธ HTTP API ์„ค๊ณ„ ๋ฐฉ๋ฒ•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค., [์‚ฌ์ง„] ๐Ÿ“ฃ ํ™•์ธํ•ด์ฃผ์„ธ์š”!๋ณธ ๊ฐ•์˜๋Š” ์ž๋ฐ” ์Šคํ”„๋ง ์™„์ „ ์ •๋ณต ์‹œ๋ฆฌ์ฆˆ์˜ ์„ธ ๋ฒˆ์งธ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. ์šฐ์•„ํ•œํ˜•์ œ๋“ค ์ตœ์—ฐ์†Œ ๊ธฐ์ˆ  www.inflearn.com (PPL์•„๋‹˜...) ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ Stateless Protocol HTTP ํ”„๋กœํ† ์ฝœ์€ ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์„ ์ง€ํ–ฅํ•œ๋‹ค ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š๋Š”๋‹ค ์žฅ์ : ์„œ๋ฒ„์˜ ํ™•์žฅ์„ฑ์ด ๋†’๋‹ค(Scale Out) ๋‹จ์ : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „์†กํ•˜๋Š”.. 2024. 3. 8.
5. ์ •์ , ๊ฐ„์„  ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ์ด๋ฒˆ ํ™œ๋™ ์š”์•ฝ ์ด๋ฒˆ์ฃผ์—๋Š” Cytoscape.js์—์„œ Measure์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ณ , ์ •์ ๊ณผ ๊ฐ„์„ ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ผ๋ถ€ ๊ตฌํ˜„ํ–ˆ๋‹ค. Community Detection์€ ์–ด๋Š์ •๋„ ๋˜์—ˆ์œผ๋‹ˆ, ์ด์ œ ๋…ธ๋“œ์˜ Degree, Path์˜ ๊ธธ์ด ๋“ฑ Network์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ Network๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด์•˜๋‹ค. ๊ธฐ์กด์—๋Š” ํŒŒ์ด์ฌ์—์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ด์ฌ์— ์ด๋ฏธ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์ง€๋งŒ, ํ”„๋ก ํŠธ๋‹จ์—์„œ ๊ณ„์‚ฐ์„ ํ•ด์„œ ๋ฐ”๋กœ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋ฉด ์•„๋ฌด๋ž˜๋„ ๋” ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Cytoscape.js์—์„œ ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด์•˜๋‹ค. Network Analyzer Cytoscape์—์„œ๋Š” Network์— ๋Œ€ํ•œ ํ†ต๊ณ„ ์ •๋ณด.. 2024. 3. 4.
์‚ผ์„ฑ SDS 2024(์ƒ๋ฐ˜๊ธฐ) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠน๊ฐ• ํ›„๊ธฐ + ์‹œํ—˜ ์ง€๋‚œ 2์›” 13์ผ์— ์‹œ์ž‘ํ•ด์„œ 23์ผ๊นŒ์ง€ํ•ด์„œ ์ด๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํŠน๊ฐ•์„ ๋งˆ์ณค๋‹ค. ํ˜น์‹œ ์ด ๊ธ€์„ ๋ณด์‹ค์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๋‹ค์Œ๋ฒˆ ํŠน๊ฐ•์„ ๊ณ ๋ฏผํ•˜๊ณ  ๊ณ„์‹ค ๋ถ„๋“ค์„ ์œ„ํ•ด ๋’ค๋Šฆ๊ฒŒ ํ›„๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ง€์›์„œ ์ง€์›์€ ์–ด๋–ป๊ฒŒ ? ๋Œ€ํ•™์ƒ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งค ๋ฐฉํ•™๋งˆ๋‹ค ํŠน๊ฐ•์ด ์ด๋ฃจ์–ด์ง„๋‹ค. ๊ฒจ์šธ์—” ๋ณดํ†ต 1์›”์ฏค์— ์˜ฌ๋ผ์˜ค๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ, ์ •ํ™•ํžˆ ์–ธ์ œ์ผ์ง€๋Š” ๋ชจ๋ฅด๊ธฐ์— ์ฐพ์•„๋ณด์•„์•ผ ํ•œ๋‹ค. ์ด์ „๊นŒ์ง€๋Š” ์ž…๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์ž…๊ณผ ํ…Œ์ŠคํŠธ๋Š” ์—†๊ณ  ์ง€์›์„œ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ง€์› ํ•ฉ๊ฒฉ๊ณผ ๋ถˆํ•ฉ๊ฒฉ์ด ์–ด๋””์„œ ๊ฐˆ๋ฆฌ๋Š”์ง€๋Š” ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ,, ๋ฐฑ์ค€ ์•„์ด๋””๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•„ ํ‰์†Œ์—๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ณด๋Š” ๊ฒŒ ์•„๋‹๊นŒ ?? (์ •ํ™•ํ•œ ๊ฑด ์•„๋‹ˆ๊ณ  ๋‡Œํ”ผ์…œ์ž…๋‹ˆ๋‹ค,, ใ…Žใ…Ž) ํ™œ๋™ ํ™œ๋™์€ ๋งค๋ฒˆ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ 2์ฃผ .. 2024. 3. 2.
GraphQL๊ณผ N + 1 ๋ฌธ์ œ ์ฐพ์•„๋ณด๊ฒŒ ๋œ ๊ณ„๊ธฐ ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ, ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ„์˜ ์˜์กด๋„๋ฅผ ๋–จ์–ดํŠธ๋ฆฌ๊ณ ์ž GraphQL์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค GraphQL์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋ก ํŠธ์ธก์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ฐ€๋Š” ํ˜•์‹์ด๊ธฐ ๋•Œ๋ฌธ์—, RestAPI์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋–„๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ GraphQL์„ ์‚ฌ์šฉํ•˜๋ฉด Resolver๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” N + 1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๊ณ  ํ•ด์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ์œ„ํ•ด ์•Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. N + 1 ๋ฌธ์ œ๋ž€? 1๋ฒˆ์˜ ์ฟผ๋ฆฌ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ N๊ฐœ ๊ฐ๊ฐ์— ๋Œ€ํ•ด ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค N + 1 ๋ฒˆ์˜ ์ฟผ๋ฆฌ ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋‚˜์˜ ๋ธ”๋กœ๊ทธ์— 3๊ฐœ์˜ ๋Œ“๊ธ€์ด ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์ด๋•Œ, ๋ธ”๋กœ๊ทธ์™€ ๋Œ“๊ธ€์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ.. 2024. 2. 27.