ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์˜ Offscreen ๋ฌธ์„œ (vs Background)
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
๐ŸŽฏ ํ•œ ์ค„ ์š”์•ฝbackground(Service Worker) = ํ™•์žฅ์˜ ๋‘๋‡Œ/์ง€ํœ˜์ž (ํ•ญ์ƒ ๋Œ€๊ธฐ, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, DOM ์—†์Œ)offscreen = ๋‘๋‡Œ๊ฐ€ ๋ชป ํ•˜๋Š” DOM ์ž‘์—…์„ ๋Œ€์‹  ํ•ด์ฃผ๋Š” ์† (ํ™”๋ฉด์— ์•ˆ ๋ณด์ด๋Š” ์ˆจ๊ฒจ์ง„ HTML ๋ฌธ์„œ) 1. Offscreen์ด ๋ญ”๊ฐ€?ํฌ๋กฌ์˜ Offscreen API, ์ฆ‰ "ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ์ˆจ๊ฒจ์ง„ HTML ๋ฌธ์„œ".์™œ ํ•„์š”ํ–ˆ๋‚˜? (๋ฐฐ๊ฒฝ)Manifest V2: background page๊ฐ€ DOM์„ ๊ฐ€์ ธ์„œ ์˜ค๋””์˜ค/ํด๋ฆฝ๋ณด๋“œ/HTML ํŒŒ์‹ฑ ๋“ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ–ˆ์Œ.Manifest V3: background๊ฐ€ Service Worker๋กœ ๋ฐ”๋€œ.Service Worker = "DOM์ด ์—†๋Š” ์ˆœ์ˆ˜ JS ์‹คํ–‰ ํ™˜๊ฒฝ" (document, window, ์—†์Œ)ํ•„์š”ํ•  ๋•Œ ๊นผ๋‹ค๊ฐ€ ์ผ ๋๋‚˜๋ฉด ..
๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜์Œ ๋ธŒ๋ผ์šฐ์ € ์ต์Šคํ…์…˜์„ ๋งŒ๋“ค ๋•Œ ํ—ท๊ฐˆ๋ฆฐ ๊ฒƒ๋“ค
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋˜ ๊ฐ๊ฐ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ € ์ต์Šคํ…์…˜์„ ์‹œ์ž‘ํ•˜๋ฉด, ๋ถ„๋ช… ๋˜‘๊ฐ™์€ JavaScript์ธ๋ฐ ์ž๊พธ ์ด์ƒํ•œ ๋ฒฝ์— ๋ถ€๋”ชํžŒ๋‹ค. "๋ถ„๋ช… ๋ณ€์ˆ˜์— ๊ฐ’์„ ๋„ฃ์—ˆ๋Š”๋ฐ ์‚ฌ๋ผ์ ธ์š”", "ํŽ˜์ด์ง€์˜ ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๋ ค๋Š”๋ฐ undefined๋ž˜์š”", "์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ–ˆ๋”๋‹ˆ CORS ์—๋Ÿฌ๊ฐ€ ๋‚˜์š”" ๊ฐ™์€ ๊ฒƒ๋“ค.์ด๊ฑด ์‹ค๋ ฅ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ต์Šคํ…์…˜์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ๋ฐ˜ ์›นํŽ˜์ด์ง€์™€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ทธ ๊ตฌ์กฐ๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์˜ ๋ˆˆ๋†’์ด์—์„œ ์ •๋ฆฌํ•ด๋ณธ๋‹ค. ๐Ÿงฉ 1. ์ต์Šคํ…์…˜์€ "ํ•˜๋‚˜์˜ ์•ฑ"์ด ์•„๋‹ˆ๋‹ค์ผ๋ฐ˜ ์›นํŽ˜์ด์ง€์—์„œ๋Š” ๋ณดํ†ต JS ํ•˜๋‚˜๊ฐ€ ํ•œ ํ™”๋ฉด์„ ๋‹ค ์ฃผ๋ฌด๋ฅธ๋‹ค. ํ•˜์ง€๋งŒ ์ต์Šคํ…์…˜์€ ์—ญํ• ๋ณ„๋กœ ๋”ฐ๋กœ ๋„๋Š” ์กฐ๊ฐ๋“ค์˜ ๋ชจ์Œ์ด๋‹ค.Content Script — ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ์›นํŽ˜์ด์ง€ ์•ˆ์— ์นจํˆฌํ•ด์„œ ๋„๋Š” ์ฝ”๋“œ. DOM ์กฐ์ž‘์„ ๋‹ด๋‹นํ•œ๋‹ค.Backgrou..
TELNET, FTP, ๊ทธ๋ฆฌ๊ณ  SSH ์ด์•ผ๊ธฐ โœจ
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์–ด๋А ๋‚  ๊ฐ‘์ž๊ธฐ ์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋งˆ์ฃผ์น˜๊ฒŒ ๋œ๋‹ค.git clone git@github.com:foo/bar.git# Permission denied (publickey).๋ถ„๋ช…ํžˆ ์–ด์ œ๊นŒ์ง€ https://github.com/... ์œผ๋กœ ์ž˜๋งŒ ์“ฐ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์–ด๋А ์ˆœ๊ฐ„ ๋ˆ„๊ตฐ๊ฐ€ "SSH ํ‚ค ๋“ฑ๋กํ•ด์•ผ์ง€" ํ•˜๋Š” ๋ง์„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ~/.ssh/id_rsa.pub ์˜ ๋‚ด์šฉ์„ GitHub์— ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.์ด ๋งˆ๋ฒ•์˜ ์ •์ฒด๊ฐ€ ๋ฐ”๋กœ SSH ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SSH๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ ค๋ฉด ๊ทธ ์กฐ์ƒ๊ฒฉ์ธ TELNET๊ณผ FTP๋ถ€ํ„ฐ ์งš์–ด๋ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ๊ฒƒ์˜ ์‹œ์ž‘ — ์œ ๋‹‰์Šค, ๊ทธ๋ฆฌ๊ณ  ์›๊ฒฉ ์ ‘์†์›น ์„œ๋ฒ„์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์šด์˜์ฒด์ œ๋Š” ๋ฆฌ๋ˆ…์Šค๋‹ค. ๋ฆฌ๋ˆ…์Šค์˜ ๋ฟŒ๋ฆฌ๋Š” ์œ ๋‹‰์Šค(UNIX) ์ธ๋ฐ, ์ด ์œ ๋‹‰์Šค..
Figma MCP๋กœ UI ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ž˜ํ•œ CSS๊ฐ€ ์ž๊พธ ํ‹€์–ด์ง€๋Š” ์ด์œ ์™€ ํ•ด๊ฒฐ๋ฒ•
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
๋“ค์–ด๊ฐ€๋ฉฐFigma MCP๋ฅผ Claude Code์— ์—ฐ๊ฒฐํ•ด์„œ UI๋ฅผ ๊ตฌํ˜„ํ•ด๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋น„์Šทํ•œ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํฐ ๋ ˆ์ด์•„์›ƒ์€ ์ œ๋ฒ• ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ๋ฝ‘ํžˆ๋Š”๋ฐ, ์ž์„ธํžˆ ๋ณด๋ฉด padding์ด 2px์”ฉ ์–ด๊ธ‹๋‚˜ ์žˆ๊ฑฐ๋‚˜, gap์ด ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅด๊ฑฐ๋‚˜, ๊ทธ๋ฆผ์ž ๊ฐ’์ด ๊ทผ์‚ฌ์น˜๋กœ๋งŒ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค. ๊ฒฐ๊ตญ Claude์—๊ฒŒ "์ €๊ธฐ ๊ฐ„๊ฒฉ 16px๋กœ ๋งž์ถฐ์ค˜", "์ด ์ƒ‰ ์ข€ ์›๋ณธ์ด๋ž‘ ๋น„๊ตํ•ด์ค˜"๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค.์ด ๊ธ€์€ ์™œ ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ฒˆ์˜ ์‹คํ–‰์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ค„์ด๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.1. Figma MCP๊ฐ€ Claude Code์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ๋จผ์ € MCP ์—ฐ๊ฒฐ ์‹œ Claude์—๊ฒŒ ์‹ค์ œ๋กœ ์–ด๋–ค ์ •๋ณด๊ฐ€ ์ „๋‹ฌ๋˜๋Š”์ง€๋ถ€ํ„ฐ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž. ํ•ต์‹ฌ ๋„๊ตฌ๋Š” get_design_context์ด๊ณ , ๋‹ค์Œ์ด ..
Chrome ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
1. ํฌ๋กฌ ์ต์Šคํ…์…˜ ๊ธฐ๋ณธ ๊ตฌ์กฐํฌ๋กฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.my-extension/โ”œโ”€โ”€ manifest.json # ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค์ • ํŒŒ์ผ (ํ•„์ˆ˜)โ”œโ”€โ”€ background.js # Service Worker (๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋กœ์ง)โ”œโ”€โ”€ content.js # Content Script (์›น ํŽ˜์ด์ง€์— ์ฃผ์ž…)โ”œโ”€โ”€ popup.html # ํŒ์—… UIโ”œโ”€โ”€ popup.js # ํŒ์—… ๋กœ์งโ”œโ”€โ”€ options.html # ์„ค์ • ํŽ˜์ด์ง€ (์„ ํƒ)โ”œโ”€โ”€ options.js # ์„ค์ • ๋กœ์งโ””โ”€โ”€ icons/ # ์•„์ด์ฝ˜ ํŒŒ์ผ๋“ค โ”œโ”€โ”€ icon16.png ..
[ํ”„๋ก ํŠธ์—”๋“œ] Safari ๋ธŒ๋ผ์šฐ์ € ํŒ์—… ์ฐจ๋‹จ ์šฐํšŒํ•˜์—ฌ SSO ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•
ยท
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ
Safari SSO ๋กœ๊ทธ์ธ ํ”Œ๋กœ์šฐSafari ๋ธŒ๋ผ์šฐ์ €์—์„œ SSO ๋กœ๊ทธ์ธ ์‹œ ํŒ์—… ์ฐจ๋‹จ ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต ๋ฐ ํ”Œ๋กœ์šฐ ์„ค๋ช…๋ฌธ์ œ ๋ฐฐ๊ฒฝSafari๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ๋น„๋™๊ธฐ ์ž‘์—…(async/await) ์ค‘์— window.open()์„ ํ˜ธ์ถœํ•˜๋ฉด ํŒ์—…์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž ์•ก์…˜(ํด๋ฆญ) ์ปจํ…์ŠคํŠธ๊ฐ€ ๋น„๋™๊ธฐ ์ž‘์—… ์ค‘์— ๋Š์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.// โŒ Safari์—์„œ ์ฐจ๋‹จ๋จasync function handleLogin() { const response = await fetch('/api/auth') // ๋น„๋™๊ธฐ ์ž‘์—… window.open(response.url) // ์ปจํ…์ŠคํŠธ ๋Š์–ด์ง → ํŒ์—… ์ฐจ๋‹จ}ํ•ด๊ฒฐ ์ „๋žต2๋‹จ๊ณ„ ํŒ์—… ์—ด๊ธฐ ์ „๋žต:API ํ˜ธ์ถœ ์ „์— ์ž‘์€ ํŒ์—…(10×10)์„ ๋ฏธ๋ฆฌ ์—ด์–ด๋‘  → ์‚ฌ์šฉ์ž ์•ก์…˜ ์ปจํ…์ŠคํŠธ..
[ํ”„๋ก ํŠธ์—”๋“œ] http-only ์ฟ ํ‚ค์— ๋Œ€ํ•˜์—ฌ
ยท
ํ”„๋ก ํŠธ์—”๋“œ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ฟ ํ‚คSet-Cookie: session=abc123; HttpOnly๋ธŒ๋ผ์šฐ์ €๋Š” HTTP ์š”์ฒญ์— ์ž๋™์œผ๋กœ ํฌํ•จdocument.cookie๋กœ ์ฝ์„ ์ˆ˜ ์—†์ŒJS์—์„œ ์ˆ˜์ •/์‚ญ์ œ ๋ถˆ๊ฐ€์™œ ๊ตณ์ด JS ์ ‘๊ทผ์„ ๋ง‰์„๊นŒ๋ชฉ์ : XSS ๊ณต๊ฒฉ ๋ฐฉ์–ด๋งŒ์•ฝ ๊ณต๊ฒฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ์œผ๋ฉด→ ์ผ๋ฐ˜ ์ฟ ํ‚ค๋ฉด ์„ธ์…˜ ํƒˆ์ทจ ๊ฐ€๋Šฅalert(document.cookie)ํ•˜์ง€๋งŒ Http-only ์ฟ ํ‚ค๋Š”document.cookie // โŒ session ์ฟ ํ‚ค ์•ˆ ๋ณด์ž„→ ์„ธ์…˜ ํƒˆ์ทจ ์ฐจ๋‹จ Https์™€์˜ ๊ด€๊ณ„HttpOnly → JS ์ ‘๊ทผ ์ฐจ๋‹จSecure → Https์—์„œ๋งŒ ์ „์†กNextAuth์—์„œ HTTP-only ์ฟ ํ‚ค์„ธ์…˜ ์ฟ ํ‚ค = Http-Onlyproduction ๋ชจ๋“œ์—์„œ Secure ์ž๋™ ์ ์šฉ๊ทธ๋ž˜์„œJS์—์„œ ์„ธ์…˜ ํ† ..
[React] forwardRef๋ž€?
ยท
React์˜ ๊ณ ์ˆ˜ ๐ŸŸข
โ“React forwardRef๋ž€ ?ref๋ฅผ ๋ถ€๋ชจ์—์„œ ์ž์‹์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๋Š” ํ•จ์ˆ˜"๋ถ€๋ชจ๊ฐ€ ์ž์‹ ๋‚ด๋ถ€์˜ DOM์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ"function Input() { return }function App() { const inputRef = useRef(null) return }Input์€ ๊ทธ๋ƒฅ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ผ์„œ ref๋ฅผ ๋ฐ”๋กœ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.React๋Š” ref๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ DOM ์š”์†Œ์—๋งŒ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ์‹œ) forwardRef๋กœ ๊ฐ์‹ธ์„œ ref ์ „๋‹ฌ ํ—ˆ์šฉํ•˜๊ธฐconst Input = React.forwardRef>( (props, ref) => { return })function App() { const inputRef = u..
[Next.js ์—๋Ÿฌ] build error-export ํ•ญ๋ชฉ ์ œํ•œ
ยท
Next.js ์ตํžˆ๊ธฐ ๐Ÿ”ต
๋ฐœ์ƒํ•œ ์—๋ŸฌType error: Route "src/app/api/auth/[...nextauth]/route.ts" does not match the required types of a Next.js Route.2025-10-24T09:38:12.105Z "authOptions" is not a valid Route export field.Next.js 13~15(App Router)์—์„œ๋Š” app/api/**/route.ts ํŒŒ์ผ ์•ˆ์—์„œexport ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์ด ์ œํ•œ๋˜์–ด ์žˆ์–ด์š”. route.ts ์—์„œ ํ—ˆ์šฉ๋˜๋Š” export ๋‚ด์šฉ์€export const GET = ...export const POST = ...export const PUT = ...export const DELETE = ...expo..
[AWS] ๋‚ด๊ฐ€ ๋ณผ๋ ค๊ณ  ์ ์€ AWS ์„œ๋น„์Šค ์ •๋ฆฌ๋ณธ
ยท
ํด๋ผ์šฐ๋“œ์— ๊ด€ํ•˜์—ฌ โ˜๏ธ
์ด ๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ๋™๊ธฐAWS Cloud practitioner ์ž๊ฒฉ์ฆ์„ ์ค€๋น„ํ•˜๋ฉด์„œ, ํ—ท๊ฐˆ๋ฆฌ๋Š” AWS ์„œ๋น„์Šค๋“ค์ด ๋งŽ์•„ ๋‘๊ณ ๋‘๊ณ  ๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด์ง€๊ทนํžˆ ๊ฐœ์ธ์ ์ธ ์ •๋ฆฌ ๋…ธํŠธ๋ฅผ ์ž‘์„ฑํ• ๋ ค๊ณ  ํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์„œ๋น„์ŠคAmazon ECSElastic Container ServiceAWS ์ œ๊ณตํ•˜๋Š” ์™„์ „๊ด€๋ฆฌํ˜• ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์ŠคAWS์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋น„์ŠคEC2 ๋˜๋Š” Fargate ์œ„์—์„œ ์‹คํ–‰ ๊ฐ€๋ŠฅAmazon EKSElastic Kubernetes Service์™„์ „๊ด€๋ฆฌํ˜• ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์„œ๋น„์ŠคAmazon Fargate์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„๋ฆฌ์Šค ์ปดํ“จํŒ… ์—”์ง„EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ง์ ‘ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ ๋„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์„œ๋ฒ„ ์—†๋Š” ECS/EKS ์‹คํ–‰ ๋ฐฉ์‹ECS..
[AWS] ๋„คํŠธ์›Œํ‚น ๋ฐ ๋ณด์•ˆ ๋„คํŠธ์›Œํ‚น ๊ณผ์ •
ยท
ํด๋ผ์šฐ๋“œ์— ๊ด€ํ•˜์—ฌ โ˜๏ธ
ํ”„๋กค๋กœ๊ทธAmazon Virtual Private Cloud(VPC)๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ์—์„œ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ฒฉ๋ฆฌ๋œ AWS ํด๋ผ์šฐ๋“œ ์„น์…˜์„ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ธํ„ฐ๋„ท์— ์ง์ ‘ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ํผ๋ธ”๋ฆญ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๊ณ , ์ ‘์†ํ•  ์ˆ˜ ์—†๋Š” ํ”„๋ผ์ด๋น—์ผ ์ˆ˜ ์žˆ๋‹ค. ํผ๋ธ”๋ฆญ ๋˜๋Š” ํ”„๋ผ์ด๋น— ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์„ ์„œ๋ธŒ๋„ท์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ์„œ๋ธŒ๋„ท์€ VPC์— IP ์ฃผ์†Œ์˜ ๋ฒ”์œ„๋‹ค.๐Ÿ“Œ ์„œ๋ธŒ๋„ท์ด๋ž€? ์„œ๋ธŒ๋„คํŠธ์›Œํฌ๋Š” ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ ๋‚ด์˜ ์ž‘์€ ๋„คํŠธ์›Œํฌ๋‹ค. 1์žฅ VPC(Amazon Virtual Private Cloud)์ˆ˜๋งŽ์€ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ฒฝ๊ณ„๊ฐ€ ์—†์œผ๋ฉด ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œํ•œ ์—†์ด ๋ฆฌ์†Œ์Šค ๊ฐ„์— ํ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. → AWS ๋ฆฌ์†Œ์Šค์— ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํ‚น ์„œ..
[ํ”„๋ก ํŠธ์—”๋“œ] Node.js๋ž€ ๋ฌด์—‡์ธ๊ฐ€
ยท
ํ”„๋ก ํŠธ์—”๋“œ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป
์„œ๋ก  ํฌ๋กฌ์ด ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ๋ณด๋‹ค๋„ ์„ฑ๋Šฅ์ด ์ข‹์€๋ฐ ์ด์œ ๋Š” V8์—”์ง„์ด๋ผ๊ณ  ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ๋ฐ ์ด๋ฅผ ์‚ฌ๋žŒ์ด ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ๋ฌธ๋ฒ•์„ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด์„ํ•ด์„œ ๋™์ž‘ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์ด ์–ธ์–ด๋ฅผ ํ•ด์„ํ•ด์„œ ์ปดํ“จํ„ฐ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—”์ง„์ด๋ผ๋Š”๊ฒŒ ํ•„์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์จ์„œ ์ธํ„ฐ๋„ท ์ต์Šคํ”Œ๋กœ๋Ÿฌ์—์„œ๋Š” ์ฐจํฌ๋ผ๋ผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๊ณ  ํŒŒ์ด์–ดํญ์Šค์—์„œ๋Š” ์ŠคํŒŒ์ด๋” ๋ชฝํ‚ค๋ผ๋Š” ์—”์ง„์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” V8์—”์ง„์ด๋ผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค. V8์—”์ง„์€ ์„ฑ๋Šฅ์ด ๋น ๋ฅธ๋ฐ ์ด๋Š” ๋ฒค์น˜๋งˆํฌ ํˆด์„ ํ†ตํ•ด์„œ ์ˆซ์ž๋กœ ์ •๋Ÿ‰์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํฌ๋กฌ์€ ๊ทธ๋Ÿด ํ•„์š” ์—†์ด ๋งจ๋ˆˆ์œผ๋กœ๋งŒ ๋ด๋„ ๋น ๋ฅด๋‹ค๊ณ  ๋А๋‚„ ์ •๋„์ด๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ ํฌ๋กฌ๊ณผ ์ต์Šคํ”Œ๋กœ๋Ÿฌ์˜ ์ฐจ์ด..