์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™”
ยท
๐ŸŒ WEB
1. ์›น ์‚ฌ์ดํŠธ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•๋ฒ ์ŠคํŠธ : ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š”๋‹ค.ํ˜„์‹ค์ ์ธ ์„ ํƒ : ๋œ ์ผํ•œ๋‹ค.2. ์ตœ์ ํ™” ์ž‘์—… ์ง„ํ–‰ ํ๋ฆ„์ง„๋‹จ > ๊ฐœ์„  > ํ…Œ์ŠคํŠธ > ์ง„๋‹จ1. ์ง„๋‹จ์ฒซ ํŽ˜์ด์ง€ ์™œ ์ด๋ ‡๊ฒŒ ๋А๋ฆผ?Core Web VitalsFirst Contentful PaintLagest Contentful PaintCumulative Layout Shift์™œ ์ด๋ ‡๊ฒŒ ๋Šฆ๊ฒŒ ๋ฐ˜์‘ํ•จ?Core Web VitalsInteraction to Next Paint์™œ ์ด๋ ‡๊ฒŒ ๋Š๊น€?์• ๋‹ˆ๋ฉ”์ด์…˜ ๋™์ž‘ํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ - lighthouseํฌ๋กฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ - performance, memory(๋ˆ„์ˆ˜๋Š” ์—†๋‚˜?) 2.1 ๋ฌธ์ œ ํ•ด๊ฒฐ - ๋กœ๋”ฉ ์ง€์—ฐHTML Parsing ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ธฐscript ์œ„์น˜ ์กฐ์ • (body ๋์œผ๋กœ ์ด๋™)defer/async ์†์„ฑ ํ™œ์šฉBu..
์›น์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
ยท
๐Ÿ’ป CS/์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ
1. HTTP ๋ฐ TCP/IP1.1 TCP์™€ IP์˜ ์—ญํ• IP (Internet Protocol): ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€๊นŒ์ง€ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• .TCP๋Š” IP ์œ„์—์„œ ์ž‘๋™ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ท์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ „์†กํ•œ ํ›„ ์ˆ˜์‹  ์ธก์—์„œ ์ด๋ฅผ ์žฌ์กฐ๋ฆฝ.TCP (Transmission Control Protocol): ๋ฐ์ดํ„ฐ ์ „์†ก์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅ.1.2 HTTP ํ†ต์‹ ์˜ ํŠน์ง•HTTP (Hypertext Transfer Protocol): ์š”์ฒญ-์‘๋‹ต ๊ธฐ๋ฐ˜์˜ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ.ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ์ •์  ์ฝ˜ํ…์ธ  ๋กœ๋“œ, ํผ ๋ฐ์ดํ„ฐ ์ „์†ก, API ํ˜ธ์ถœ ๋“ฑ ์ผํšŒ์„ฑ ์š”์ฒญ์— ์ ํ•ฉ.์š”์ฒญ-์‘๋‹ต ๊ตฌ์กฐ: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ.๋ฌด์ƒํƒœ์„ฑ: HTTP..
ํ”„๋ก ํŠธ์—”๋“œ ์ž์ž˜ํ•œ ํ”ผ๋“œ๋ฐฑ
ยท
๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
vite proxy ์„ค์ •์„ ํ†ตํ•ด์„œ ๋ฐฑ์—”๋“œ ์—ฐ๋™์‹œ๋„๊ฐ€ ์ข‹์Œ// vite.config ํŒŒ์ผexport default defineConfig({ server: { proxy: { '/api': 'http://localhost:8080', }, },});๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐfeatures ์ค‘์‹ฌ?src/โ”œโ”€โ”€ app/โ”œโ”€โ”€ entities/โ”œโ”€โ”€ features/โ”œโ”€โ”€ shared/โ”œโ”€โ”€ widgets/โ”œโ”€โ”€ pages/๋ฃฐ์„ ๋งŒ๋“ค๊ณ  => ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ AI์—๊ฒŒ ๋ถ€ํƒ.ํ™•์žฅ์žํƒ€์ž…ํŒŒ์ผ์ด๋ฉด ts๋กœ/types/Window.tsany ํƒ€์ž…interface BootStoreState { bootStatus: BootStatus; systemData: any; errorMessage: string | nul..
RAG ์—ฐ๋™ ์›น ์•ฑ
ยท
๐ŸŒ WEB
1. RAG ?๊ฒ€์ƒ‰(Retrieval) + ๋‹ต๋ณ€ ์ƒ์„ฑ(Generation)์„ ๊ฒฐํ•ฉํ•œ ๊ธฐ์ˆ . ๋งˆ์น˜ ์˜คํ”ˆ๋ถ ์‹œํ—˜์ฒ˜๋Ÿผ, ํ•„์š”ํ•œ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋ฉด์„œ ๋‹ต๋ณ€ํ•˜๋Š” ๋ฐฉ์‹.์™ธ๋ถ€ ๋ฌธ์„œ๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•  ๋•Œ ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ LLM์ด ๋” ์ •ํ™•ํ•œ ๋‹ต๋ณ€์„ ์ƒ์„ฑ.์™œ ํ•„์š”ํ• ๊นŒ?LLM์€ ํ•™์Šต ๋ฐ์ดํ„ฐ์—๋งŒ ์˜์กด. ํ•˜์ง€๋งŒ RAG๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?์ตœ์‹  ์ •๋ณด ํ™œ์šฉ ๊ฐ€๋Šฅ์‚ฌ๋‚ด ๋ฌธ์„œ, ๊ฐœ์ธ ์ž๋ฃŒ ๋“ฑ ์™ธ๋ถ€ ์ง€์‹ ํ™œ์šฉHallucination(ํ—›์†Œ๋ฆฌ) ๊ฐ์†Œ๋‹ต๋ณ€์˜ ์ถœ์ฒ˜ ์ถ”์  ๊ฐ€๋Šฅ2. ๋ฐ๋ชจ2.1 ์š”์•ฝ๋ฌธ์„œ๋ฅผ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ด์„œ Vector DB์— ์ €์žฅ์งˆ๋ฌธ๋„ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์œ ์‚ฌํ•œ ๋ฌธ์„œ ๊ฒ€์ƒ‰๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ + ์งˆ๋ฌธ์„ LLM์— ์ „๋‹ฌํ•ด ๋‹ต๋ณ€ ์ƒ์„ฑ2.2 ์ค€๋น„Gemini key ์ƒ์„ฑํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐhttps://aistudio.google.com/api-key..
Next.js ์‹œ์ž‘ํ•˜๊ธฐ
ยท
๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
CH 1. Next.js 16 ๊ธฐ๋ณธ ๊ตฌ์กฐ ๋ฐ ์ •์  UI ๊ตฌ์ถ•1-1. React์™€ Next.js์˜ ์ฐจ์ด์ React๋Š” UI๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ Œ๋”๋ง(CSR)๋งŒ ์ง€์›.Next.js๋Š” React๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ(๋ผ์šฐํŒ…, ๋ฐ์ดํ„ฐ ํŽ˜์นญ, ๋นŒ๋“œ ์‹œ์Šคํ…œ)์„ ๊ฐ–์ถ˜ ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ.์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง(SSR), ์ •์  ์ƒ์„ฑ(SSG) ๋“ฑ ๋‹ค์–‘ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตSEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)์— ์œ ๋ฆฌ๋” ๋น ๋ฅธ ๋กœ๋”ฉ ์ง€์› (ํด๋ผ์ด์–ธํŠธ ๋กœ๋“œ ๋ถ€๋‹ด ๊ฐ์†Œ )Server Component๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•จ.1-2 todo ๊ฐœ๋ฐœ ๋ฒ”์œ„Read (์ฝ๊ธฐ): ToDo ๋ฆฌ์ŠคํŠธ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์™€ ๋ณด์—ฌ์คŒ.๊ฐ„๋‹จํ•œ ํ† ๊ธ€ : ToDo ์™„๋ฃŒ ํ‘œ์‹œCr..
ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋„๊ตฌ ( MSW, Vitest, React Testing Library )
ยท
๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
1. MSW ๋ฐฉ์‹์˜ mocking ์„œ๋ฒ„ ๊ตฌํ˜„feat.md ์— ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ง„ํ–‰.๋™์ž‘ ์ฒดํฌ~์„œ๋ฒ„ ์‹คํ–‰service worker ๊ธฐ๋ฐ˜ ์‘๋‹ต ํ™•์ธ๊ตฌ์กฐ ์ดํ•ด ๋ฐ MSW ํ•™์Šต์ฐธ๊ณ . Service WorkerService Worker ๋“ฑ๋ก:์‹œ์ž‘์ฝ”๋“œ, worker.start() ์‹คํ–‰mockServiceWorker.js ํŒŒ์ผ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์— ๋“ฑ๋ก๋„คํŠธ์›Œํฌ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ชจ๋“  fetch ์š”์ฒญ์„ ๋„คํŠธ์›Œํฌ๋กœ ๋‚˜๊ฐ€๊ธฐ ์ „์— ๊ฐ€๋กœ์ฑ”.๊ฐ€๋กœ์ฑˆ ์š”์ฒญ(URL, ๋ฉ”์„œ๋“œ)์„ handlers.js์— ์ •์˜๋œ Mock ๋ชฉ๋ก๊ณผ ๋น„๊ตํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ์ฐพ๊ธฐ์ผ์น˜์‹œ : ์‹ค์ œ ์„œ๋ฒ„ ํ†ต์‹  ์—†์ด ํ•ธ๋“ค๋Ÿฌ์— ์ •์˜๋œ Mock ๋ฐ์ดํ„ฐ(JSON)๋ฅผ ์ฆ‰์‹œ ์ƒ์„ฑ๋ถˆ์ผ์น˜ : ์š”์ฒญ์„ bypassํ•˜์—ฌ ํ†ต๊ณผService Worker๋Š” ์ด Mock ์‘๋‹ต์„ ์›น ํŽ˜์ด์ง€์˜ fetch ํ˜ธ์ถœ..
React ๋น„๋™๊ธฐ ์—๋Ÿฌ ํ•ธ๋“ค๋ง
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
์—๋Ÿฌ ํ•ธ๋“ค๋ง์˜ ๋ชฉํ‘œ๋Š” ๋‘ ๊ฐ€์ง€๋‹ค์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ๋‹จ์ˆœํžˆ try / catch๋ฅผ ์“ฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค.๋ชฉํ‘œ๋Š” ๋ช…ํ™•ํ•˜๋‹ค.๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€์–ด๋””์„œ์™œ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋Š”์ง€์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„์ •์ƒ ์ƒํ™ฉ์„ ์ ์ ˆํžˆ ๋ณด์—ฌ์ฃผ๋Š”๊ฐ€๋ฉˆ์ท„๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ ค์ฃผ๋Š”์ง€๋‹ค์‹œ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์ตœ์†Œํ•œ ๋ง๊ฐ€์ง„ ํ™”๋ฉด์€ ์•„๋‹Œ์ง€ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์˜ ๊ธฐ์ดˆ: throw๋Š” ์–ด๋””๊นŒ์ง€ ์ „ํŒŒ๋ ๊นŒ?function foo(s) { console.log("foo start"); if (typeof s !== 'string') throw '์—๋Ÿฌ'; console.log("foo end");}function bar() { console.log("bar start"); foo(1); console.log("bar end");}function baz() { conso..
FE ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ(FE ์•„ํ‚คํ…์ณ)
ยท
๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
1. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์ค‘์š”ํ• ๊นŒ?์œ ์ง€๋ณด์ˆ˜์„ฑ: ๊ธฐ๋Šฅ์ด ๋Š˜์–ด๋‚˜๊ณ  ํŒ€์›์ด ๋งŽ์•„์งˆ์ˆ˜๋ก, ๊ตฌ์กฐ๊ฐ€ ์—‰ํ‚ค๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค.์ฝ”๋“œ ํƒ์ƒ‰ ์†๋„: ํŒŒ์ผ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ.ํ˜‘์—… ๋ช…ํ™•์„ฑ: ์—ญํ• ๋ณ„/๊ธฐ๋Šฅ๋ณ„ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•ด์ ธ ์ฝ”๋“œ ์ถฉ๋Œ ์ค„์–ด๋“ฆ.ํ™•์žฅ์„ฑ: ๊ตฌ์กฐ๊ฐ€ ์ž˜ ์งœ์—ฌ ์žˆ์œผ๋ฉด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๊ธฐ ์‰ฌ์›€.์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ• ์ˆ˜๋ก ๋” ์ค‘์š”.2. "๋‚˜๋ˆˆ๋‹ค"๋Š” ๊ฑด ๋ฌด์—‡์„ ๊ธฐ์ค€์œผ๋กœ?๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฐœ๋…์€ ๊ฒฐ๊ตญ ๋ชจ๋“ˆํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ์ ์šฉํ•  ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ.ESM๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์ด ๋ถ€์กฑํ–ˆ๋˜ ์‹œ์ ˆ์—๋Š”?์ „์—ญ ๊ฐ์ฒด(namespace)๋ฅผ ์ด์šฉํ•ด ๊ณ„์ธต์„ ํ‰๋‚ด๋‚ด๊ธฐ๋„ ํ•จ.๊ณผ๊ฑฐ ๋ฐฉ์‹: Namespace ํŒจํ„ด (ESM ์ด์ „)(์™€ ์ „์—ญ๋ณ€์ˆ˜ ํ•˜๋‚˜๋ผ๋‹ˆ...)const naver = {}naver.auth = {}naver.auth.login = fun..