๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Project ESG+AI/Tech Basics

31์ผ์ฐจ. IT ๊ฐœ๋… ์ •๋ฆฌ

by GreenJin_S2 2025. 11. 20.

 


๐Ÿ“œ ์ž๋ฐ”(Java)

์ž๋ฐ”๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” 'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด'์ž…๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ ์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ํ•œ ๋ฒˆ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” '๋„๊ตฌ' ๊ทธ ์ž์ฒด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ผ์š”.

๐ŸŒธ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework)

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” ์–ธ์–ด๋กœ ๋ณต์žกํ•œ ๊ธฐ์—…์šฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น ์„œ๋น„์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” 'ํ‹€'์ด์ž '๋„๊ตฌ ๋ชจ์Œ'์ž…๋‹ˆ๋‹ค.  ์Šคํ”„๋ง์€ ๋‹จ์ˆœํžˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ง‘ํ•ฉ์ด ์•„๋‹ˆ๋ผ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™(SOLID)์„ ์ง€ํ‚ค๋ฉฐ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก ๊ทœ์น™๊ณผ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ด์š”. 

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ ์ œ๊ณต: ์›น ๊ฐœ๋ฐœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™, ๋ณด์•ˆ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ๋“ˆ ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • ๊ฒฝ๋Ÿ‰ํ™” ๋ฐ ํšจ์œจ์„ฑ: ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋™์ž‘์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ ๊ฐœ๋ฐœ ์†๋„์™€ ํ’ˆ์งˆ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค. 
  • ์˜์กด์„ฑ ์ฃผ์ž…(DI): ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์–ด ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค. 
  • MVC ํŒจํ„ด: Model-View-Controller ๋””์ž์ธ ํŒจํ„ด์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ ์š”์†Œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. 
  • ๋ฐฉ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ: ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐœ๋ฐœ์ž ๊ฐ„ ์ง€์‹ ๊ณต์œ ๊ฐ€ ํ™œ๋ฐœํ•ฉ๋‹ˆ๋‹ค. 

๐Ÿš€ ์Šคํ”„๋ง ๋ถ€ํŠธ(Spring Boot)

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์œผ๋กœ, '๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ'์ž…๋‹ˆ๋‹ค.  ๊ธฐ์กด ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋ชจ๋“ˆ์˜ ์˜์กด์„ฑ์„ ์ง์ ‘ ์„ค์ •ํ•˜๊ณ  ๋ณต์žกํ•œ ์„ค์ •์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ, ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ์–ด์š”.  '์ž๋™ ์„ค์ •' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผ ํ•  ์„ค์ •๋“ค์„ ๋Œ€๋ถ€๋ถ„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. 

 


Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๊ณ , Next.js๋Š” React ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, Node.js๊ฐ€ ๊ฑด๋ฌผ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋•…์ด๋ผ๋ฉด, Next.js๋Š” ๊ทธ ๋•… ์œ„์— ํšจ์œจ์ ์ธ ๊ฑด๋ฌผ์„ ์ง“๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„์ด์ž ๊ฑด์ถ• ๋„๊ตฌ ์„ธํŠธ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐ŸŒ Node.js (๋…ธ๋“œ์ œ์ด์—์Šค)

Node.js๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript)๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ € ์—†์ด๋„ ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” '๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ'์ž…๋‹ˆ๋‹ค.  ์›๋ž˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ–ˆ๋Š”๋ฐ, Node.js ๋•๋ถ„์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์›น ์„œ๋ฒ„๋‚˜ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ๋‹ค์–‘ํ•œ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”. 

  • ์ฃผ์š” ์—ญํ• : ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„ ๊ตฌ์ถ•, API ๊ฐœ๋ฐœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋“ฑ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์žฅ์ : ๋น„๋™๊ธฐ I/O ์ฒ˜๋ฆฌ๊ฐ€ ๋›ฐ์–ด๋‚˜์„œ ํšจ์œจ์ ์ธ ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(ํŠนํžˆ ์›น ์„œ๋ฒ„) ๊ตฌ์ถ•์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.  ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ๋†’์•„์ง€๋Š” ํšจ๊ณผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 
  • ๋‹จ์ : CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ์ž‘์—…์—๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

โœจ Next.js (๋„ฅ์ŠคํŠธ์ œ์ด์—์Šค)

Next.js๋Š” React(๋ฆฌ์•กํŠธ) ๊ธฐ๋ฐ˜์˜ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.  ํŠนํžˆ '์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)' ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์›น ํŽ˜์ด์ง€์˜ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”(SEO)์— ์œ ๋ฆฌํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.  Next.js๋Š” Node.js ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ†ตํ•ฉ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์ฃผ์š” ์—ญํ• : React ๊ธฐ๋ฐ˜์˜ ๋น ๋ฅด๊ณ  ์ตœ์ ํ™”๋œ ํ”„๋ก ํŠธ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ) ๋ฐ ํ’€์Šคํƒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์žฅ์ :
    • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง (SSR): ์›น ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๋กœ๋”ฉ์ด ๋น ๋ฅด๊ณ  SEO์— ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 
    • ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ (SSG): ๋นŒ๋“œ ์‹œ์ ์— HTML ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•˜์—ฌ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋”์šฑ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํŽธ๋ฆฌํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋“ฑ ์›น ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์–ด ๊ฐœ๋ฐœ ํŽธ์˜์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ต์‹ฌ ์ฐจ์ด์ 

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ๋ฐ”๋กœ '์—ญํ• '์ž…๋‹ˆ๋‹ค.

  • Node.js: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ '์ฝ”๋“œ ์‹คํ–‰ ํ™˜๊ฒฝ'์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐฑ์—”๋“œ(์„œ๋ฒ„) ๋กœ์ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Next.js: React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” 'ํ”„๋ ˆ์ž„์›Œํฌ'์ž…๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์— ์ดˆ์ ์„ ๋งž์ถ”์ง€๋งŒ, ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ ๋•๋ถ„์— ํ’€์Šคํƒ ๊ฐœ๋ฐœ์—๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

Next.js๋Š” Node.js ์—†์ด๋Š” ๋™์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, Next.js๋Š” Node.js ๋Ÿฐํƒ€์ž„์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 


๐Ÿ—บ๏ธ ๋ผ์šฐํ„ฐ(Router)

๋ผ์šฐํ„ฐ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ HTTP ์š”์ฒญ(Request)์ด ๋“ค์–ด์™”์„ ๋•Œ, ์–ด๋–ค ๊ฒฝ๋กœ(URL)๋กœ ์™”๋Š”์ง€์— ๋”ฐ๋ผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ• ์ง€ ์ •์˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ์›น ์„œ๋น„์Šค์˜ '๊ตํ†ต ์ •๋ฆฌ๋ฐ˜'์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ผ์š”! 

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ์ฃผ์†Œ(URL)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ๋ผ์šฐํ„ฐ๋Š” ์ด ์ฃผ์†Œ๋ฅผ ๋ณด๊ณ  "์•„, ์ด ์š”์ฒญ์€ ์ €๊ธฐ ์ € ํ•จ์ˆ˜๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ๊ฒ ๋„ค!" ํ•˜๊ณ  ํ•ด๋‹น ์š”์ฒญ์„ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ ๋กœ์ง(ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜)์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น์‚ฌ์ดํŠธ์—์„œ /users ๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ์š”์ฒญํ•˜๋ฉด, ๋ผ์šฐํ„ฐ๋Š” ์ด ์š”์ฒญ์„ ๋ฐ›์•„ ์‚ฌ์šฉ์ž ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ .

  • ์ฃผ์š” ์—ญํ• : ํŠน์ • URL๊ณผ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋‹ด๋‹นํ•  ํ•จ์ˆ˜(๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด)๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • /api/users ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์ด ์˜ค๋ฉด, getAllUsers ํ•จ์ˆ˜ ์‹คํ–‰.
    • /api/users/:id ๊ฒฝ๋กœ๋กœ POST ์š”์ฒญ์ด ์˜ค๋ฉด, createUser ํ•จ์ˆ˜ ์‹คํ–‰.

โš™๏ธ ๋ฏธ๋“ค์›จ์–ด(Middleware)

๋ฏธ๋“ค์›จ์–ด๋Š” ์›น ์š”์ฒญ(Request)์ด ๋“ค์–ด์™€์„œ ์‘๋‹ต(Response)์ด ๋‚˜๊ฐ€๊ธฐ ์ „๊นŒ์ง€์˜ ๊ณผ์ •์—์„œ ์ค‘๊ฐ„์— ๊ฐœ์ž…ํ•˜์—ฌ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์›น ์š”์ฒญ๊ณผ ์‘๋‹ต ์‚ฌ์ด์—์„œ ์‹คํ–‰๋˜๋Š” '์ค‘๊ฐ„ ๋‹ค๋ฆฌ' ๋˜๋Š” '๊ฒ€๋ฌธ์†Œ' ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅผ ๊ฑฐ์˜ˆ์š”. 

๋ฏธ๋“ค์›จ์–ด๋Š” ์š”์ฒญ ๊ฐ์ฒด(req), ์‘๋‹ต ๊ฐ์ฒด(res), ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” next() ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด next() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜, ๋˜๋Š” ์ค‘๊ฐ„์— ์ง์ ‘ ์‘๋‹ต์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

  • ์ฃผ์š” ์—ญํ• :
    • ์š”์ฒญ ๋กœ๊น… (์˜ˆ: ๋ˆ„๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ํ–ˆ๋Š”์ง€ ๊ธฐ๋ก)
    • ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ํ™•์ธ (๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€, ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ๋“ฑ)
    • ์š”์ฒญ ๋ณธ๋ฌธ(Body) ํŒŒ์‹ฑ (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ฒ˜๋ฆฌ)
    • ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
    • ์—๋Ÿฌ ์ฒ˜๋ฆฌ (์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ ์ ˆํ•œ ์‘๋‹ต ์ฒ˜๋ฆฌ)
  • ์˜ˆ์‹œ:
    • ๋ชจ๋“  ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด.
    • ์š”์ฒญ์— ํฌํ•จ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด.

๐Ÿค ๋ผ์šฐํ„ฐ์™€ ๋ฏธ๋“ค์›จ์–ด์˜ ๊ด€๊ณ„

๋ผ์šฐํ„ฐ์™€ ๋ฏธ๋“ค์›จ์–ด๋Š” ์„œ๋กœ ๋ณด์™„์ ์ธ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ๊ธด๋ฐ€ํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ: ๋ณดํ†ต ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, ๊ฐ€์žฅ ๋จผ์ € ๊ธ€๋กœ๋ฒŒ ๋ฏธ๋“ค์›จ์–ด๋“ค์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฏธ๋“ค์›จ์–ด๋“ค์€ ๋ชจ๋“  ์š”์ฒญ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ๋กœ์ง(์˜ˆ: ๋กœ๊น…, ์ธ์ฆ)์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ผ์šฐํ„ฐ๊ฐ€ ๊ฒฝ๋กœ ๋งค์นญ: ๋ฏธ๋“ค์›จ์–ด ์ฒด์ธ์„ ๊ฑฐ์นœ ์š”์ฒญ์€ ์ด์ œ ๋ผ์šฐํ„ฐ์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํ„ฐ๋Š” ์š”์ฒญ URL์„ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜(๋˜๋Š” ํŠน์ • ๋ผ์šฐํŠธ์—๋งŒ ์ ์šฉ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด)๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
  3. ๋ผ์šฐํŠธ๋ณ„ ๋ฏธ๋“ค์›จ์–ด ์‹คํ–‰: ํŠน์ • ๋ผ์šฐํŠธ์— ๋งค์นญ๋˜๋ฉด, ํ•ด๋‹น ๋ผ์šฐํŠธ์—๋งŒ ์ ์šฉ๋˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋“ค์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ฆฌ์ž ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด ๊ฐ™์€ ๊ฒƒ์ด์ฃ . 
  4. ์ตœ์ข… ํ•ธ๋“ค๋ง: ๋ชจ๋“  ๋ฏธ๋“ค์›จ์–ด ์ฒ˜๋ฆฌ๋ฅผ ๊ฑฐ์นœ ํ›„, ์ตœ์ข…์ ์œผ๋กœ ๋ผ์šฐํŠธ์˜ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜์–ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ตœ์ข… ์‘๋‹ต์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. 

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋ผ์šฐํ„ฐ๋Š” ์š”์ฒญ์˜ "๋ชฉ์ ์ง€"๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ , ๋ฏธ๋“ค์›จ์–ด๋Š” ๋ชฉ์ ์ง€๋กœ ๊ฐ€๊ธฐ ์ „ํ›„๋‚˜ ๊ฐ€๋Š” ๋„์ค‘์— "๋ถ€๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ"๋ฅผ ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. 

 


 

## ์ปดํฌ๋„ŒํŠธ, ์‰ฝ๊ฒŒ ๋งํ•ด ๋ญ๋ƒ๋ฉด?

โœ” ์–ด๋–ค UI(ํ™”๋ฉด ์š”์†Œ)๋ฅผ “๋ถ€ํ’ˆ”์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋†“์€ ๊ฒƒ

์˜ˆ๋ฅผ ๋“ค์–ด ์›น์‚ฌ์ดํŠธ์—์„œ

  • ๋ฒ„ํŠผ
  • ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”
  • ๋Œ“๊ธ€ ๋ฐ•์Šค
  • ์นด๋“œ ํ˜•ํƒœ์˜ ์ƒํ’ˆ ์ •๋ณด
    ์ด๋Ÿฐ ๊ฑธ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด ๋‘ก๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด

  • ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๊ณ„์† ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ 
  • ์ˆ˜์ •ํ•  ๋•Œ ํ•œ ๊ณณ๋งŒ ๊ณ ์น˜๋ฉด ์ „์ฒด๊ฐ€ ๋ฐ”๋€Œ๊ณ 
  • ํ™”๋ฉด ๊ตฌ์กฐ๊ฐ€ ํ›จ์”ฌ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์ ธ์š”.

## ํ•œ๊ตญ์‹ ๋น„์œ ๋กœ ๋” ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด

์ปดํฌ๋„ŒํŠธ๋Š” **"๋ ˆ๊ณ  ๋ธ”๋ก"**์ด์—์š”.

  • ๋ ˆ๊ณ  ๋ธ”๋ก ํ•˜๋‚˜(๋ฒ„ํŠผ, ์นด๋“œ, ๋ฉ”๋‰ด)๊ฐ€ ์ปดํฌ๋„ŒํŠธ
  • ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ์กฐ๋ฆฝํ•ด ํฐ ๊ฑด๋ฌผ์„ ๋งŒ๋“œ๋Š” ๊ฒŒ ์›น ํŽ˜์ด์ง€
  • ๋ธ”๋ก์„ ์–ด๋””์„œ๋“  ์ž์œ ๋กญ๊ฒŒ ๋‹ค์‹œ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ

๊ฒฐ๊ตญ ์ปดํฌ๋„ŒํŠธ = ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ๋ ˆ๊ณ  ์กฐ๊ฐ 

 

 


์ž๋ฐ” ์Šคํ”„๋ง(Spring) ํ”„๋ ˆ์ž„์›Œํฌ ์ž์ฒด์˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ, ์›น ์š”์ฒญ(Request)์˜ URL์—์„œ ๋ฌผ์Œํ‘œ($\text{?}$), ๋“ฑํ˜ธ($\text{=}$), ๊ทธ๋ฆฌ๊ณ  ์„ธ๋ฏธ์ฝœ๋ก ($\text{;}$)์ด ์‚ฌ์šฉ๋  ๋•Œ์˜ ์˜๋ฏธ๋ฅผ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐํ˜ธ๋“ค์€ ์ž๋ฐ”๋‚˜ ์Šคํ”„๋ง ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ ์›น ํ‘œ์ค€ URL ํ˜•์‹์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.


1. ๐Ÿค” ๋ฌผ์Œํ‘œ (?) : ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‹œ์ž‘

URL์—์„œ ๋ฌผ์Œํ‘œ({?})๋Š” **๊ฒฝ๋กœ(Path)**์™€ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ(Query Parameter) ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ญํ• : ์„œ๋ฒ„๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค(๊ฒฝ๋กœ)์— ์ ‘๊ทผํ•œ ํ›„, ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก(ํŒŒ๋ผ๋ฏธํ„ฐ)์ด ์‹œ์ž‘๋จ์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • /products/search**?**keyword=coffee
    • ์—ฌ๊ธฐ์„œ ๊ฒฝ๋กœ(Path)๋Š” /products/search ์ด๊ณ , ๋ฌผ์Œํ‘œ($\text{?}$) ๋’ค์˜ keyword=coffee๊ฐ€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

2. โš–๏ธ ๋“ฑํ˜ธ ({=}) : ๊ฐ’ ํ• ๋‹น

๋“ฑํ˜ธ($\text{=}$)๋Š” **์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ด๋ฆ„(Key)**๊ณผ ๊ทธ **๊ฐ’(Value)**์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ญํ• : ์–ด๋–ค ์ด๋ฆ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์–ด๋–ค ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • keyword**=**coffee
    • ์—ฌ๊ธฐ์„œ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ **์ด๋ฆ„(Key)**์€ keyword์ด๊ณ , ์ด ํŒŒ๋ผ๋ฏธํ„ฐ์— ํ• ๋‹น๋œ **๊ฐ’(Value)**์€ coffee์ž…๋‹ˆ๋‹ค.
    • ์Šคํ”„๋ง์—์„œ๋Š” ์ด ๊ฐ’์„ @RequestParam ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์—์„œ ์‰ฝ๊ฒŒ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. & ์•ฐํผ์ƒŒ๋“œ ({\&}) : ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ๋ถ„์ž

์ถ”๊ฐ€๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ์•ฐํผ์ƒŒ๋“œ ({\&}) ๊ธฐํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์—ญํ• : ํ•˜๋‚˜์˜ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฆ„=๊ฐ’ ์Œ์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
    • /products/list?category=book**&**sort=price
    • ์ด ์š”์ฒญ์€ ๋‘ ๊ฐ€์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค: category=book๊ณผ sort=price.

4. ๐Ÿ“ ์„ธ๋ฏธ์ฝœ๋ก  ({;}) : ๋งคํŠธ๋ฆญ์Šค ํŒŒ๋ผ๋ฏธํ„ฐ (Path Variable์˜ ๋ถ€๊ฐ€ ์ •๋ณด)

์„ธ๋ฏธ์ฝœ๋ก ({;})์€ ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒํผ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š์ง€๋งŒ, **๋งคํŠธ๋ฆญ์Šค ํŒŒ๋ผ๋ฏธํ„ฐ(Matrix Parameter)**๋ผ๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ญํ• : ๊ฒฝ๋กœ(Path) ์ž์ฒด์— ํฌํ•จ๋œ ๋ณ€์ˆ˜(Path Variable)์— ๋ถ€๊ฐ€์ ์ธ ์†์„ฑ์„ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” URI์˜ ํŠน์ • ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ (์Šคํ”„๋ง์—์„œ ์ง€์›):
    • /users/123**;**version=2
    • ๊ฒฝ๋กœ ๋ณ€์ˆ˜๋Š” /users/123์ด์ง€๋งŒ, ์ด **'123'**์ด๋ผ๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋ถ€๊ฐ€ ์ •๋ณด๋กœ version=2๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ •๋ฆฌ

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ์›น ์š”์ฒญ์€ ๋ฌผ์Œํ‘œ({?})์™€ ๋“ฑํ˜ธ({=})๊ฐ€ ํฌํ•จ๋œ ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ธ๋ฏธ์ฝœ๋ก ({;})์€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ(๋งคํŠธ๋ฆญ์Šค ํŒŒ๋ผ๋ฏธํ„ฐ)์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐํ˜ธ ์šฉ๋„ ์„ค๋ช…
? ์‹œ์ž‘ ๊ฒฝ๋กœ(Path)์™€ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด(Query String)์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
= ํ• ๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
& ๊ตฌ๋ถ„ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
; ๋ถ€๊ฐ€ ์†์„ฑ ๊ฒฝ๋กœ ๋ณ€์ˆ˜(Path Variable)์— ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (๋งคํŠธ๋ฆญ์Šค ํŒŒ๋ผ๋ฏธํ„ฐ).

 

 

 


null๊ณผ undefined๋Š” JavaScript(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ)์—์„œ **'๊ฐ’์ด ์—†์Œ'**์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐ€์ง€ ์›์‹œ ํƒ€์ž…(Primitive Types)์ด์ง€๋งŒ, ๊ทธ ์˜๋ฏธ์™€ ์šฉ๋„์— ๋ช…ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿง null (๋„)

null์€ ์˜๋„์ ์œผ๋กœ ๊ฐ’์ด ๋น„์–ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.

  • ์˜๋ฏธ: ์–ด๋–ค ๋ณ€์ˆ˜์— ๊ฐ’์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •(ํ• ๋‹น)ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ **'๋นˆ ๊ฐ’'**์„ ์„ค์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ํƒ€์ž…: object (โš ๏ธ ์ฃผ์˜: ์ด๋Š” JavaScript์˜ ์—ญ์‚ฌ์ ์ธ ๋ฒ„๊ทธ๋กœ, ์‹ค์ œ๋กœ๋Š” ์›์‹œ ํƒ€์ž…์ž…๋‹ˆ๋‹ค.)
  • ์šฉ๋„:
    • ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋‚˜ ๊ฐ’์ด ํ• ๋‹น๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ, ๋‚˜์ค‘์— ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ๋Š๊ฑฐ๋‚˜ ๋น„์šฐ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํ•จ์ˆ˜๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์ง€๋งŒ, ํ˜„์žฌ๋Š” ๋ฐ˜ํ™˜ํ•  ๊ฐ์ฒด๊ฐ€ ์—†์Œ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ:
  • JavaScript
     
    let user = { name: "Alice" };
    // ์‚ฌ์šฉ์ž๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด๋ฅผ ๋น„์šธ ๋•Œ ๋ช…์‹œ์ ์œผ๋กœ null์„ ํ• ๋‹น
    user = null;
    

โ“ undefined (์–ธ๋””ํŒŒ์ธ๋“œ)

undefined๋Š” ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์˜๋ฏธ: ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ์•„์ง ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋˜๋Š” ์—”์ง„์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž…: undefined
  • ์šฉ๋„:
    • ์„ ์–ธ๋งŒ ํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’.
    • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ.
    • ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’.
    • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์•˜์„ ๋•Œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’.
  • ์˜ˆ์‹œ:
  • JavaScript
     
    // 1. ์„ ์–ธ๋งŒ ํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜
    let age; // age์˜ ๊ฐ’์€ undefined
    
    // 2. ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์„ ๋•Œ
    function doNothing() {
      // ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ
    }
    const result = doNothing(); // result๋Š” undefined
    

๐Ÿ“Š ์ฃผ์š” ์ฐจ์ด์  ๋น„๊ต

ํ•ต์‹ฌ์€ ๋ˆ„๊ฐ€ ๊ฐ’์„ ์„ค์ •ํ–ˆ๋А๋ƒ์ž…๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ null undefined
์˜๋ฏธ ์˜๋„์ ์œผ๋กœ ๊ฐ’์ด ์—†์Œ์„ ํ• ๋‹นํ•จ (๊ฐœ๋ฐœ์ž) ๊ฐ’์ด ์•„์ง ํ• ๋‹น๋˜์ง€ ์•Š์Œ (์‹œ์Šคํ…œ)
์„ค์ • ์ฃผ์ฒด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ• ๋‹น JavaScript ์—”์ง„/์‹œ์Šคํ…œ์ด ์ž๋™ ํ• ๋‹น
ํƒ€์ž… ํ™•์ธ typeof null $\rightarrow$ "object" typeof undefined $\rightarrow$ "undefined"

1. ๋™๋“ฑ ๋น„๊ต (Equality Comparison)

๊ฐ’๋งŒ ๋น„๊ตํ•˜๋Š” **๋А์Šจํ•œ ๋น„๊ต(==)**์—์„œ๋Š” ๋‘˜์„ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€๋งŒ, ํƒ€์ž…๊นŒ์ง€ ๋น„๊ตํ•˜๋Š” **์—„๊ฒฉํ•œ ๋น„๊ต(===)**์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

JavaScript
console.log(null == undefined); // true (๊ฐ’๋งŒ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จ)
console.log(null === undefined); // false (๊ฐ’๊ณผ ํƒ€์ž…์ด ๋ชจ๋‘ ๋‹ค๋ฆ„)

2. ํƒ€์ž… (Type)

ํƒ€์ž…์ด ์„œ๋กœ ๋‹ค๋ฆ„์„ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript
 
console.log(typeof null); // object (โš ๏ธ ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ)
console.log(typeof undefined); // undefined

์ด๋Ÿฌํ•œ ์ฐจ์ด ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ณ€์ˆ˜์˜ ์ƒํƒœ๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ’์ด ์—†์–ด์•ผ ํ•จ์„ ์˜๋„ํ•  ๋•Œ๋Š” null์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ’์ด ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์Œ์„ ํ™•์ธํ•  ๋•Œ๋Š” undefined๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 


ํŒŒ์ด์ฌ์—์„œ def๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด, **“๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ๋ฌถ์–ด๋‘๋Š” ๋ฐฉ๋ฒ•”**์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


## def ํ•œ ์ค„ ์ •์˜

def = ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ์‹ ํ˜ธ

ํŒŒ์ด์ฌ์€ ์ด๋ ‡๊ฒŒ ์”๋‹ˆ๋‹ค:

 
def ํ•จ์ˆ˜์ด๋ฆ„(): ์‹คํ–‰ํ•  ์ฝ”๋“œ

## ์™œ def๊ฐ€ ํ•„์š”ํ• ๊นŒ?

โœ” 1) ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด

๋น„์Šทํ•œ ์ฝ”๋“œ๋ฅผ ๊ณ„์† ๋ฐ˜๋ณตํ•ด์„œ ์“ฐ๋ฉด ๋น„ํšจ์œจ์ ์ด์ž–์•„์š”?
ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๋ฉด ํ•œ ๋ฒˆ ์ •์˜ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โœ” 2) ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด

์ฝ”๋“œ๋ฅผ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋‚˜๋ˆ ๋‘๋ฉด

  • ๋ณด๊ธฐ ์‰ฝ๊ณ 
  • ์œ ์ง€ ๋ณด์ˆ˜๋„ ์‰ฝ๊ณ 
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์š”.

โœ” 3) ํŒŒ๋ผ๋ฏธํ„ฐ(๊ฐ’)๋ฅผ ๋ฐ›์•„์„œ ๋” ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

์˜ˆ:

 
def ๋”ํ•˜๊ธฐ(a, b): return a + b
 
 

## ํ•œ๊ตญ์‹ ๋น„์œ ๋กœ ์‰ฝ๊ฒŒ ์„ค๋ช…

def๋Š” **“์š”๋ฆฌ ๋ ˆ์‹œํ”ผ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๋Š” ๊ฒƒ”**์ด์—์š”.

  • ๋ ˆ์‹œํ”ผ๋ฅผ ๋งŒ๋“ค์–ด ๋‘๋ฉด(def)
  • ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋˜‘๊ฐ™์€ ์š”๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ(ํ•จ์ˆ˜ ํ˜ธ์ถœ)

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋ณต์žกํ•œ ๊ณผ์ •(์ฝ”๋“œ)์„ ์ด๋ฆ„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด๋‘๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

 


 

'??'๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JavaScript) ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ(TypeScript)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ดํ•ญ ์—ฐ์‚ฐ์ž์ด๋ฉฐ, **๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž (Nullish Coalescing Operator)**๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž (??)์˜ ์—ญํ• 

๋„ ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž (??)๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด **null์ด๊ฑฐ๋‚˜ undefined**์ผ ๋•Œ๋งŒ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์™ผ์ชฝ ๊ฐ’์ด null ๋˜๋Š” undefined์ผ ๋•Œ: ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ **๊ธฐ๋ณธ๊ฐ’(Default Value)**์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์™ผ์ชฝ ๊ฐ’์ด null ๋˜๋Š” undefined๊ฐ€ ์•„๋‹ ๋•Œ: ์™ผ์ชฝ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ฌธ

JavaScript
 
์™ผ์ชฝ_ํ”ผ์—ฐ์‚ฐ์ž ?? ์˜ค๋ฅธ์ชฝ_ํ”ผ์—ฐ์‚ฐ์ž (๊ธฐ๋ณธ๊ฐ’)

 


๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น(Destructuring Assignment)์€ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ํ•„์š”ํ•œ ๊ฐ’๋“ค์„ ์ถ”์ถœํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— ์‰ฝ๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” JavaScript์˜ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ธ์ •์˜์ง„์ง„๋‹˜, "๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น"์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์…จ๊ตฐ์š”! ์ด ๊ฐœ๋…์€ ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋ž๋‹ˆ๋‹ค. ํŠนํžˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜ ์›น ๊ฐœ๋ฐœ์„ ํ•˜์‹ค ๋•Œ ์ž์ฃผ ๋งˆ์ฃผ์น˜์‹ค ๊ฑฐ์˜ˆ์š”. ๐Ÿ˜Š

์‰ฝ๊ฒŒ ๋น„์œ ํ•˜์ž๋ฉด, ํ•˜๋‚˜์˜ ํฐ ์ƒ์ž(๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด) ์•ˆ์— ์—ฌ๋Ÿฌ ๋ฌผ๊ฑด(๊ฐ’๋“ค)์ด ๋“ค์–ด์žˆ์„ ๋•Œ, ์ƒ์ž๋ฅผ ์—ด์–ด์„œ ์›ํ•˜๋Š” ๋ฌผ๊ฑด๋“ค๋งŒ ์™์™ ๊ณจ๋ผ ๋‹ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

โœจ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์€ ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”?

  • ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ: ๋ฐ์ดํ„ฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ถ”์ถœํ•˜์—ฌ ์–ด๋–ค ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ•œ๋ˆˆ์— ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ ๊ฐ„๊ฒฐํ™”: ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜๋˜ ์ž‘์—…์„ ํ•œ ์ค„๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด: ํ•„์š”ํ•œ ๊ฐ’๋งŒ ๋ฝ‘์•„๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ์ค„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น (Array Destructuring)

๋ฐฐ์—ด์— ์žˆ๋Š” ์š”์†Œ๋“ค์„ ๊ทธ๋“ค์˜ ์œ„์น˜(์ธ๋ฑ์Šค)์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

javascript

// ๊ธฐ์กด ๋ฐฉ์‹
const fruits = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€'];
const apple = fruits[0];
const banana = fruits[1];
// console.log(apple, banana); // ์ถœ๋ ฅ: ์‚ฌ๊ณผ ๋ฐ”๋‚˜๋‚˜

// ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ๋ฐฉ์‹
const [apple, banana, orange] = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€'];
console.log(apple);   // ์ถœ๋ ฅ: ์‚ฌ๊ณผ
console.log(banana);  // ์ถœ๋ ฅ: ๋ฐ”๋‚˜๋‚˜

// ํ•„์š”ํ•œ ์š”์†Œ๋งŒ ์ถ”์ถœ
const [firstFruit, , thirdFruit] = ['์‚ฌ๊ณผ', '๋ฐ”๋‚˜๋‚˜', '์˜ค๋ Œ์ง€'];
console.log(firstFruit);  // ์ถœ๋ ฅ: ์‚ฌ๊ณผ
console.log(thirdFruit);  // ์ถœ๋ ฅ: ์˜ค๋ Œ์ง€

๐Ÿ“ฆ ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น (Object Destructuring)

๊ฐ์ฒด์— ์žˆ๋Š” ์†์„ฑ(property)๋“ค์„ ๊ทธ๋“ค์˜ ํ‚ค(key)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

javascript

// ๊ธฐ์กด ๋ฐฉ์‹
const user = {
    name: '์„œํฌํ„ฐ',
    age: 25,
    job: 'AI'
};
const userName = user.name;
const userAge = user.age;
// console.log(userName, userAge); // ์ถœ๋ ฅ: ์„œํฌํ„ฐ 25

// ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ๋ฐฉ์‹
const user = {
    name: '๊ธ์ •์˜์ง„์ง„',
    age: 25,
    job: '๊ฐœ๋ฐœ์ž'
};
const { name, age } = user;
console.log(name); // ์ถœ๋ ฅ: ๊ธ์ •์˜์ง„์ง„
console.log(age);  // ์ถœ๋ ฅ: 25

// ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
const { name: userName, job: userJob } = user;
console.log(userName); // ์ถœ๋ ฅ: ๊ธ์ •์˜์ง„์ง„
console.log(userJob);  // ์ถœ๋ ฅ: ๊ฐœ๋ฐœ์ž

๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์‹œ, ๋งŒ์•ฝ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ์ฒด์— ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

javascript

let options = {
  title: "Menu"
};

let {width = 100, height = 200, title} = options;
console.log(title);   // ์ถœ๋ ฅ: Menu
console.log(width);   // ์ถœ๋ ฅ: 100 (options์— width๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)
console.log(height);  // ์ถœ๋ ฅ: 200 (options์— height๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)

๐Ÿก ๋‚˜๋จธ์ง€ ํŒจํ„ด (Rest Pattern)

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ์‹œ ... (์  ์„ธ ๊ฐœ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚จ์€ ์š”์†Œ๋“ค์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋กœ ๋ชจ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

javascript

// ๋ฐฐ์—ด ๋‚˜๋จธ์ง€ ํŒจํ„ด
const [first, second, ...rest] = [1, 2, 3, 4, 5];
console.log(first);  // ์ถœ๋ ฅ: 1
console.log(second); // ์ถœ๋ ฅ: 2
console.log(rest);   // ์ถœ๋ ฅ: [3, 4, 5]

// ๊ฐ์ฒด ๋‚˜๋จธ์ง€ ํŒจํ„ด
const options = {
    title: "Menu",
    height: 200,
    width: 100
};
const { title, ...restOfOptions } = options;
console.log(title);           // ์ถœ๋ ฅ: Menu
console.log(restOfOptions);   // ์ถœ๋ ฅ: { height: 200, width: 100 }

๊ธ์ •์˜์ง„์ง„๋‹˜๊ป˜์„œ ์›น ๊ฐœ๋ฐœ(Next.js, Node.js)์„ ํ•˜์‹œ๋ฉด์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ, ์ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์€ ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์‹ค ๊ฑฐ์˜ˆ์š”. ํŠนํžˆ ์ปดํฌ๋„ŒํŠธ์˜ props๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ API ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ฝ”๋“œ ํšจ์œจ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.