MAC ์ฃผ์†Œ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ: ๋„คํŠธ์›Œํฌ ์‹๋ณ„์ž์˜ ์—ญํ• ๊ณผ ์˜๋ฏธ

ํ•˜๋“œ์›จ์–ด ์‹๋ณ„์ž, MAC ์ฃผ์†Œ์™€ ์—ญํ• ๊ณผ ๊ตฌ์กฐ

๐Ÿ” MAC ์ฃผ์†Œ๋ž€?

MAC ์ฃผ์†Œ(Media Access Control Address)๋Š” ๋„คํŠธ์›Œํฌ์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ ์žฅ์น˜(Network Interface Card, NIC)์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋‹ค.

์ด๋Š” ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์—์„œ ์žฅ์น˜๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์œผ๋กœ, ๋ณดํ†ต 16์ง„์ˆ˜ ํ˜•์‹์˜ 48bit(6bytes) ์ฃผ์†Œ๋กœ ํ‘œํ˜„๋œ๋‹ค.

๊ฐ ๋ฐ”์ดํŠธ๋Š” : ๋˜๋Š” -๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ์ƒ˜ํ”Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

00:1A:2B:3C:4D:5E


๐Ÿงฌ MAC ์ฃผ์†Œ ๊ตฌ์กฐ

MAC ์ฃผ์†Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋œ๋‹ค.

OUI (Organizationally Unique Identifier): ์•ž์˜ 3๋ฐ”์ดํŠธ๋Š” ์ œ์กฐ์‚ฌ ์‹๋ณ„ ์ฝ”๋“œ (์˜ˆ: Apple, Intel ๋“ฑ)๋กœ ์œ„ ์ƒ˜ํ”Œ์—์„œ๋Š” 00:1A:2B๊ฐ€ OUI์ด๋‹ค.

Device Identifier: ๋’ค์˜ 3๋ฐ”์ดํŠธ๋Š” ๊ฐ ์ œ์กฐ์‚ฌ๊ฐ€ ์žฅ์น˜์— ๋ถ€์—ฌํ•˜๋Š” ๊ณ ์œ  ๋ฒˆํ˜ธ

MAC ์ฃผ์†Œ๋Š” ์ œ์กฐ ์‹œ ํ•˜๋“œ์›จ์–ด์— ๊ณ ์ •๋˜์–ด ๋ถ€์—ฌ๋˜๋ฉฐ, ์ค‘๋ณต์ด ๊ฑฐ์˜ ์—†๋„๋ก ๊ด€๋ฆฌ๋œ๋‹ค.

3๋ฐ”์ดํŠธ(24๋น„ํŠธ)๋Š” ์ด๋ก ์ ์œผ๋กœ ์ตœ๋Œ€ 16,777,215๊ฐœ์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธยท๋ฉ€ํ‹ฐ์บ์ŠคํŠธ ๋“ฑ ํŠน์ˆ˜ ์šฉ๋„๋กœ ์˜ˆ์•ฝ๋œ ๋น„ํŠธ์™€ ์ฃผ์†Œ ๋ฒ”์œ„๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ, ํ•˜๋‚˜์˜ ์‹๋ณ„ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๊ณ ์œ  ๋ฒˆํ˜ธ์˜ ์ˆ˜๋Š” ์ด๋ณด๋‹ค ํ›จ์”ฌ ์ ๋‹ค.

๋‹จ์ ์ธ ์˜ˆ๋กœ, ์•„์ดํฐ์˜ ๊ฒฝ์šฐ ํ•œ ๋Œ€์˜ ๊ธฐ๊ธฐ ์•ˆ์—๋„ Wi-Fi MAC ์ฃผ์†Œ์™€ Bluetooth MAC ์ฃผ์†Œ ๋‘ ๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํŒ๋งค๋œ ์•„์ดํฐ์˜ ๋ˆ„์  ๋Œ€์ˆ˜๊ฐ€ ์ˆ˜์–ต ๋Œ€์— ๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ผ OUI๋งŒ์œผ๋กœ๋Š” ๋ชจ๋“  ๊ธฐ๊ธฐ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ OUI๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

MAC ์ฃผ์†Œ๋Š” IEEE(Institute of Electrical and Electronics Engineers)์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์• ํ”Œ์—์„œ๋งŒ ์ˆ˜๋ฐฑ ๊ฐœ ์ด์ƒ์˜ OUI๋ฅผ ๋ณด์œ ํ•œ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ๋‹ค.


๐Ÿ“ก MAC ์ฃผ์†Œ๋Š” ์–ด๋””์„œ ์‚ฌ์šฉ๋ ๊นŒ?

MAC ์ฃผ์†Œ๋Š” ์ฃผ๋กœ **๋ฐ์ดํ„ฐ๋งํฌ ๊ณ„์ธต(OSI 2๊ณ„์ธต)**์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ๊ฐ™์€ ๋„คํŠธ์›Œํฌ(์„œ๋ธŒ๋„ท) ๋‚ด์—์„œ A โ†’ B๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ, IP ์ฃผ์†Œ๋Š” ๋ชฉ์ ์ง€๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์‹๋ณ„ํ•˜์ง€๋งŒ ์‹ค์ œ ์ด๋”๋„ท ํ”„๋ ˆ์ž„์€ MAC ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์ •ํ™•ํ•œ ์žฅ๋น„๋ฅผ ์ฐพ์•„ ์ „์†กํ•œ๋‹ค.

    IP ์ฃผ์†Œ์™€ MAC ์ฃผ์†Œ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹

๐Ÿ“˜ MAC vs IP ์ฃผ์†Œ์˜ ์ฐจ์ด

ํ•ญ๋ชฉMAC ์ฃผ์†ŒIP ์ฃผ์†Œ
๊ณ„์ธตOSI 2๊ณ„์ธต (๋ฐ์ดํ„ฐ๋งํฌ)OSI 3๊ณ„์ธต (๋„คํŠธ์›Œํฌ)
์„ฑ๊ฒฉ๋ฌผ๋ฆฌ์ (๊ณ ์œ ) ์‹๋ณ„์ž๋…ผ๋ฆฌ์ (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ) ์‹๋ณ„์ž
์˜ˆ์‹œ00:1A:2B:3C:4D:5E192.168.1.1
๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆ๋ณ€ (์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•˜๊ธด ํ•จ)๋„คํŠธ์›Œํฌ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ๋ณ€๋™

๐Ÿ”„ ํ†ต์‹  ๊ณผ์ •์—์„œ์˜ MAC ์ฃผ์†Œ ์—ญํ• 

  1. A ์ปดํ“จํ„ฐ๊ฐ€ B์˜ IP ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ,
  2. ๊ฐ™์€ ๋„คํŠธ์›Œํฌ๋ผ๋ฉด **ARP(Address Resolution Protocol)**๋ฅผ ํ†ตํ•ด ํ•ด๋‹น IP์— ๋Œ€์‘ํ•˜๋Š” MAC ์ฃผ์†Œ๋ฅผ ์š”์ฒญ
  3. B๊ฐ€ MAC ์ฃผ์†Œ๋ฅผ ์‘๋‹ตํ•˜๊ณ , A๋Š” ๊ทธ MAC ์ฃผ์†Œ๋ฅผ ํ”„๋ ˆ์ž„์˜ ๋ชฉ์ ์ง€ ์ฃผ์†Œ๋กœ ์„ค์ •ํ•˜์—ฌ ์ „์†ก
  4. ์ด ํ”„๋ ˆ์ž„์€ MAC ์ฃผ์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ B์— ๋„๋‹ฌ

๐Ÿ’ก MAC ์ฃผ์†Œ๋Š” ์ธํ„ฐ๋„ท ์ „์ฒด์—์„œ ์‚ฌ์šฉ๋ ๊นŒ?

MAC ์ฃผ์†Œ๋Š” ๋กœ์ปฌ ๋„คํŠธ์›Œํฌ(๊ฐ™์€ ์„œ๋ธŒ๋„ท) ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

์„œ๋ธŒ๋„ท์„ ๋„˜์–ด์„œ๋Š” ํ†ต์‹ ์—์„œ๋Š” IP ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์ด ์ž‘๋™ํ•˜๋ฉฐ, ๋ผ์šฐํ„ฐ๋Š” ๋‹ค์Œ ํ™‰(HOP)์˜ MAC ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌ์„ ์ด์–ด๊ฐ„๋‹ค.

๋”ฐ๋ผ์„œ MAC ์ฃผ์†Œ๋Š” ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ์—์„œ๋งŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.


๐Ÿ” ๋ณด์•ˆ๊ณผ MAC ์ฃผ์†Œ

MAC ์ฃผ์†Œ๋Š” ๊ณ ์œ ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋‹ค.

  • ๐Ÿ› ๏ธ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ์œ„์กฐ(Spoofing) ๊ฐ€๋Šฅ
  • ๐Ÿ”’ ์ผ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ๋Š” MAC ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด(ACL) ์ ์šฉ
  • ๐Ÿงญ MAC ํ•„ํ„ฐ๋ง์„ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ๋“ฑ๋ก๋˜์ง€ ์•Š์€ MAC์€ ์ ‘๊ทผ ๋ถˆ๊ฐ€

๐Ÿงช MAC ์ฃผ์†Œ ํ™•์ธ ๋ฐฉ๋ฒ•

MAC OS

ifconfig | grep ether

ํ˜น์€:

networksetup -listallhardwareports

WINDOWS OS

ipconfig /all

โœ๏ธ ๋งˆ๋ฌด๋ฆฌ

MAC ์ฃผ์†Œ๋Š” ๋„คํŠธ์›Œํฌ์˜ ์‹œ์ž‘์ ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

ํ•˜๋“œ์›จ์–ด์˜ ์‹ ๋ถ„์ฆ ๊ฐ™์€ MAC ์ฃผ์†Œ ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” ์ˆ˜๋งŽ์€ ์žฅ์น˜ ๊ฐ„ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

IP ์ฃผ์†Œ์™€ MAC ์ฃผ์†Œ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹

๋ชฉ์ ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” IP ์ฃผ์†Œ, ๊ธธ์„ ์•Œ๋ ค์ฃผ๋Š” MAC ์ฃผ์†Œ

์ธํ„ฐ๋„ท์ด๋‚˜ ์‚ฌ๋‚ด ๋„คํŠธ์›Œํฌ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ API ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์‹ค์ œ๋กœ๋Š” ์ˆ˜๋งŽ์€ ๋„คํŠธ์›Œํฌ ์žฅ๋น„์™€ ํ”„๋กœํ† ์ฝœ์ด ์ด ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํŠนํžˆ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์ด ๋ฐ”๋กœ IP ์ฃผ์†Œ์™€ MAC ์ฃผ์†Œ๋‹ค.

OSI 7๊ณ„์ธต ์ค‘ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต(IP ์ฃผ์†Œ)๊ณผ ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต(MAC ์ฃผ์†Œ)์—์„œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ „์†ก์— ์–ด๋–ค ์—ญํ• ์„ ํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ํ˜‘๋ ฅํ•˜์—ฌ ๋ชฉ์ ์ง€๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ์ „๋‹ฌํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„๋ณด์ž.


โœ… IP ์ฃผ์†Œ์™€ MAC ์ฃผ์†Œ, ๋ฌด์—‡์ด ๋‹ค๋ฅธ๊ฐ€?

ํ•ญ๋ชฉIP ์ฃผ์†ŒMAC ์ฃผ์†Œ
์ข…๋ฅ˜๋…ผ๋ฆฌ ์ฃผ์†Œ (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)๋ฌผ๋ฆฌ ์ฃผ์†Œ (๊ณ ์œ ๊ฐ’)
์šฉ๋„๋ชฉ์ ์ง€ ์ฐพ๊ธฐ (๋ผ์šฐํŒ…)์‹ค์ œ ์ „์†ก ๋Œ€์ƒ ์‹๋ณ„
๊ณ„์ธต๋„คํŠธ์›Œํฌ ๊ณ„์ธต (3๊ณ„์ธต)๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต (2๊ณ„์ธต)
๋ฒ”์œ„์„ธ๊ณ„์  ์‹๋ณ„์ž (๋ผ์šฐํŒ…์šฉ)๋™์ผ ๋„คํŠธ์›Œํฌ(์„œ๋ธŒ๋„ท) ๋‚ด ์‹๋ณ„์ž

๐Ÿ” ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ „์†ก ํ๋ฆ„ ์š”์•ฝ

์˜ˆ์‹œ: A ๊ธฐ๊ธฐ(192.168.1.2) โ†’ B ๊ธฐ๊ธฐ(192.168.2.3)๋กœ ์ „์†กํ•  ๊ฒฝ์šฐ

1. ์ถœ๋ฐœ์ง€ A๋Š” B์˜ IP ์ฃผ์†Œ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค.

2. A๋Š” ์ž์‹ ์˜ ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ(์˜ˆ: 255.255.255.0, ํ•˜๋‹จ ์„ค๋ช… ์ฐธ๊ณ )๋ฅผ ๊ธฐ์ค€์œผ๋กœ B๊ฐ€ ๊ฐ™์€ ์„œ๋ธŒ๋„ท(๋™์ผ ๋„คํŠธ์›Œํฌ)์— ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.

3. A์™€ B๊ฐ€ ๋‹ค๋ฅธ ์„œ๋ธŒ๋„ท์ด๋ผ๋ฉด, A๋Š” ์šฐ์„  ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด(๋ผ์šฐํ„ฐ)์˜ MAC ์ฃผ์†Œ๋ฅผ ARP(ํ•˜๋‹จ ์„ค๋ช… ์ฐธ๊ณ )๋กœ ์š”์ฒญํ•œ๋‹ค.

4. ARP ์‘๋‹ต์œผ๋กœ ๊ฒŒ์ดํŠธ์›จ์ด์˜ MAC ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„ ํ”„๋ ˆ์ž„(๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹จ์œ„)์„ ์ž‘์„ฑํ•ด ์ „์†กํ•œ๋‹ค.

5. ๊ฒŒ์ดํŠธ์›จ์ด ๋ผ์šฐํ„ฐ๋Š” ํŒจํ‚ท(๋„คํŠธ์›Œํฌ ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ๋‹จ์œ„)์„ ๋””์บก์Аํ™”ํ•˜๊ณ  ๋ชฉ์ ์ง€ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

6. ์ž์‹ ์˜ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”(ํ•˜๋‹จ ์„ค๋ช… ์ฐธ๊ณ )์„ ๊ฒ€์ƒ‰ํ•ด ๋‹ค์Œ ๋ชฉ์ ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ๋ผ์šฐํ„ฐ์˜ MAC ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์ „์†กํ•œ๋‹ค.

7. ์ด ๊ณผ์ •์€ ๋ชฉ์ ์ง€์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๊ฐ ๋ผ์šฐํ„ฐ์—์„œ ๋ฐ˜๋ณต๋œ๋‹ค.

8. ์ตœ์ข… ๋ชฉ์ ์ง€ ๋ผ์šฐํ„ฐ๋Š” B์™€ ๊ฐ™์€ ์„œ๋ธŒ๋„ท์— ์žˆ๋Š” ๊ฒฝ์šฐ, B์˜ MAC ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ๋งˆ์ง€๋ง‰ ์ „์†ก์„ ํ•œ๋‹ค.


๐Ÿ” ์ด ๋ชจ๋“  ๊ณผ์ •์€ ํŒจํ‚ท๋งˆ๋‹ค ๋ฐ˜๋ณต๋œ๋‹ค

๋ฐ์ดํ„ฐ๋Š” ์‹ค์ œ๋กœ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ž‘์€ ํŒจํ‚ท์œผ๋กœ ๋‚˜๋‰˜์–ด ์ „์†ก๋˜๋ฉฐ, ํŒจํ‚ท์€ ์ตœ๋Œ€ 1500bytes, ํ”„๋ ˆ์ž„์€ ์ตœ๋Œ€ ํŒจํ‚ท์— ํ—ค๋”(14bytes)์™€ ๊ฒ€์ฆ ๋ฐ์ดํ„ฐ FCS(4bytes)๊ฐ€ ์ถ”๊ฐ€๋œ 1518bytes ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ ํŒจํ‚ท์€:

– IP ํ—ค๋” + TCP/UDP ํ—ค๋” โ†’ 3๊ณ„์ธต
– MAC ํ—ค๋” โ†’ 2๊ณ„์ธต

์œผ๋กœ ์บก์Аํ™”๋˜๋ฉฐ, ์ „๋‹ฌ ์ค‘ ๊ณ„์ธต๋งˆ๋‹ค ๋””์บก์Аํ™” ๋ฐ ์žฌ์บก์Аํ™”๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.


๐Ÿšฅ ํ™‰(Hop)๊ณผ ๊ฒฝ๋กœ

– ๊ฐ ๋ผ์šฐํ„ฐ๋ฅผ 1ํ™‰(Hop)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
– ํ•œ๊ตญ์—์„œ google.com๊นŒ์ง€๋Š” ๋Œ€๋žต 15~20ํ™‰ ์ •๋„์˜ ๋ผ์šฐํ„ฐ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.


๐ŸŽฏ MAC ์ฃผ์†Œ๋งŒ์œผ๋กœ๋Š” ๋ชฉ์ ์ง€๋ฅผ ๋ชป ์ฐพ๋Š” ์ด์œ 

MAC ์ฃผ์†Œ๋Š” LAN(Local Area Network)์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค.

๋ผ์šฐํ„ฐ ๋ฐ–์˜ MAC ์ฃผ์†Œ๋Š” ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „ ์„ธ๊ณ„ ํ†ต์‹ ์€ IP ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , MAC ์ฃผ์†Œ๋Š” ๊ทธ๋•Œ๊ทธ๋•Œ ๋‹ค์Œ ํ™‰์˜ MAC ์ฃผ์†Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.


โœ๏ธ ์˜ˆ์‹œ ํ๋ฆ„ ์ •๋ฆฌ

[A] 192.168.1.2
  โ†“ (ARP ์š”์ฒญ โ†’ ๊ฒŒ์ดํŠธ์›จ์ด MAC ํš๋“)
[๋ผ์šฐํ„ฐ 1] โ†’ [๋ผ์šฐํ„ฐ 2] โ†’ ... โ†’ [์ตœ์ข… ๋ผ์šฐํ„ฐ]
  โ†“ (B์˜ MAC ํš๋“)
[B] 192.168.2.3

๐Ÿงฉ ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ(Subnet Mask)๋ž€?

์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ๋Š” IP ์ฃผ์†Œ๋ฅผ ๋„คํŠธ์›Œํฌ ์˜์—ญ๊ณผ ํ˜ธ์ŠคํŠธ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋‹ค.

์ฆ‰, โ€œ์ด IP ์ฃผ์†Œ์—์„œ ์–ด๋””๊นŒ์ง€๊ฐ€ ๋„คํŠธ์›Œํฌ๊ณ , ์–ด๋””๋ถ€ํ„ฐ๊ฐ€ ๊ฐœ๋ณ„ ์žฅ์น˜(ํ˜ธ์ŠคํŠธ)๋ƒ?โ€œ๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค.


๐ŸŽฏ ์™œ ํ•„์š”ํ• ๊นŒ?

– IP ์ฃผ์†Œ๋งŒ ๋ด์„œ๋Š” ์ด ๊ธฐ๊ธฐ๊ฐ€ **๊ฐ™์€ ๋„คํŠธ์›Œํฌ(์„œ๋ธŒ๋„ท)**์— ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
– ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ๋ฅผ ํ†ตํ•ด IP ์ฃผ์†Œ ๋ฒ”์œ„๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ , ๊ฐ™์€ ์„œ๋ธŒ๋„ท์ด๋ฉด ์ง์ ‘ ํ†ต์‹ , ๋‹ค๋ฅด๋ฉด ๋ผ์šฐํ„ฐ(๊ฒŒ์ดํŠธ์›จ์ด)๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•œ๋‹ค.


๐Ÿ“˜ ์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๊ธฐ

– IP ์ฃผ์†Œ: 192.168.1.10
– ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ: 255.255.255.0 โ†’ /24

์ด ๊ฒฝ์šฐ:

– 192.168.1๊นŒ์ง€๊ฐ€ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ
– .10์€ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ (์ฆ‰, ๋„คํŠธ์›Œํฌ ๋‚ด ๊ฐœ๋ณ„ ์žฅ์น˜)

์ฆ‰, 192.168.1.X๋Š” ๋ชจ๋‘ ๊ฐ™์€ ์„œ๋ธŒ๋„ท


๐Ÿง  CIDR ํ‘œ๊ธฐ

ํ‘œ๊ธฐ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜ธ์ŠคํŠธ ์ˆ˜
/8255.0.0.0์•ฝ 1,600๋งŒ ๊ฐœ
/16255.255.0.0์•ฝ 65,000๊ฐœ
/24255.255.255.0์•ฝ 254๊ฐœ
/30255.255.255.2522๊ฐœ (๋ผ์šฐํ„ฐ ๊ฐ„ ๋งํฌ์šฉ)
/32255.255.255.2551๊ฐœ(๋‹จ์ผ ์ฃผ์†Œ)


๐Ÿงช ๊ฐ™์€ ์„œ๋ธŒ๋„ท์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‘ IP ์ฃผ์†Œ๊ฐ€ ๊ฐ™์€ ์„œ๋ธŒ๋„ท์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด:

1. ๋‘ IP ์ฃผ์†Œ๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
2. ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜
3. IP & ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ ๊ณ„์‚ฐ โ†’ ๋‚˜์˜จ ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์„œ๋ธŒ๋„ท

์˜ˆ๋ฅผ ๋“ค์–ด:
– A: 192.168.1.10
– B: 192.168.1.20
– ์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ: 255.255.255.0
โ†’ A์™€ B ๋ชจ๋‘ 192.168.1.0 ๋„คํŠธ์›Œํฌ์— ์žˆ์Œ โ†’ ๊ฐ™์€ ์„œ๋ธŒ๋„ท


๐Ÿ” ARP (Address Resolution Protocol)๋ž€?

ARP๋Š” โ€œ์ด IP ์ฃผ์†Œ์— ํ•ด๋‹นํ•˜๋Š” MAC ์ฃผ์†Œ๋ฅผ ์•Œ๋ ค์ค˜!โ€œ๋ผ๊ณ  ๋„คํŠธ์›Œํฌ์— ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ”„๋กœํ† ์ฝœ.

– A โ†’ ๋„คํŠธ์›Œํฌ ์ „์ฒด์— ARP Request
– ํ•ด๋‹น IP ๊ฐ€์ง„ ๊ธฐ๊ธฐ โ†’ ARP Reply๋กœ MAC ์ฃผ์†Œ ์‘๋‹ต
– A๋Š” ๋ฐ›์€ MAC ์ฃผ์†Œ๋กœ ์ด๋”๋„ท ํ”„๋ ˆ์ž„ ๊ตฌ์„ฑํ•˜์—ฌ ์ „์†ก


๐Ÿง  ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์ด๋ž€?

๋ผ์šฐํ„ฐ๋Š” ๋ชฉ์ ์ง€ IP๋ฅผ ๋ณด๊ณ  โ€œ์–ด๋А ๋ฐฉํ–ฅ์œผ๋กœ ๋ณด๋‚ด์•ผ ํ• ์ง€โ€ ๊ฒฐ์ •ํ•˜๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์˜ˆ์‹œ

๋ชฉ์ ์ง€ IP ๋ฒ”์œ„๋„ฅ์ŠคํŠธ ํ™‰ (Next Hop)์ธํ„ฐํŽ˜์ด์Šค
192.168.2.0/2410.1.1.2eth1
0.0.0.0/010.1.1.1 (๊ธฐ๋ณธ ๊ฒฝ๋กœ)eth0

– 192.168.2.3 โ†’ 192.168.2.0/24์— ํฌํ•จ๋จ โ†’ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „์†ก
– ๋ฒ”์œ„์— ์—†์œผ๋ฉด ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋กœ ์ „์†ก (๋ณดํ†ต ์ธํ„ฐ๋„ท ๊ฒŒ์ดํŠธ์›จ์ด)



MAC ์ฃผ์†Œ(MAC Address)์— ๋Œ€ํ•œ ๊ณต์‹์ ์ธ ์ •๋ณด๋Š” IEEE (Institute of Electrical and Electronics Engineers)์—์„œ ๊ด€๋ฆฌ

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € pnpm, ์ƒˆ๋กœ์šด ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ์‹(vs npm/yarn)

๊ธฐ์กด์˜ ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹๊ณผ pnpm์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ ์œ ์ง€ ๋ฐฉ์‹

pnpm์€ Performant NPM, ์ฆ‰ ๋†’์€ ์„ฑ๋Šฅ์„ ๋‚ด๋Š” npm์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

npm์€ ๊ณต์‹์ ์œผ๋กœ ‘์ค„์—ฌ์“ด ์•ฝ์ž๊ฐ€ ์•„๋‹ˆ๋‹ค(npm is not an acronym)’๋ผ๊ณ  ํ•˜์ง€๋งŒ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ Node Package Manager๋ผ๊ณ  ํ•˜๋ฉด ์‰ฝ๊ฒŒ ์„ค๋ช…์ด ๋œ๋‹ค…

ํšŒ์‚ฌ ํ”„๋กœ์ ํŠธ์—์„œ๋„ npm โ†’ yarn โ†’ yarn berry๋ฅผ ๊ฑฐ์ณ ํ˜„์žฌ๋Š” pnpm์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ํŠน์„ฑ์ƒ ๋‚ฎ์€ ๋…ธ๋“œ ๋ฒ„์ „ ์œ ์ง€๊ฐ€ ํ•„์š”ํ•œ ๊ณณ๋งŒ npm์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์™€ ๋น„๊ตํ•ด pnpm์˜ ํŠน์ง•์„ ๋จผ์ € ์‚ดํŽด๋ณด์ž.

ํŠน์ง•pnpmnpm / yarn
์†๋„๋น ๋ฆ„(๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ)๋‹ค์†Œ ๋А๋ฆผ
ํšจ์œจ์„ฑ์ข‹์Œ(๊ธ€๋กœ๋ฒŒ ์บ์‹ฑ, ๋งํฌ ์‚ฌ์šฉ)๋‚ฎ์Œ(์ค‘๋ณต ์ €์žฅ ๊ฐ€๋Šฅ์„ฑ)
ํ˜ธํ™˜์„ฑnpm ํ˜ธํ™˜Node.js ๊ธฐ๋ณธ
์˜์กด์„ฑ ๊ด€๋ฆฌ์—„๊ฒฉํ•จ(์ถฉ๋Œ ๋ฐฉ์ง€ ์žฅ์ )๋А์Šจํ•จ
๋ชจ๋…ธ๋ ˆํฌ ์ง€์›์›Œํฌ์ŠคํŽ˜์ด์Šค ์ง€์›yarn ์ผ๋ถ€ ์ง€์›
pnpm๊ณผ npm/yarn์˜ ์ฐจ์ด

pnpm์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ๊ธฐ์กด์˜ ํ˜ธ์ด์ŠคํŒ…(hoisting) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์™€ ์ฐจ๋ณ„ํ™”๋œ๋‹ค. ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹๊ณผ pnpm ๊ณ ์œ ์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ ์œ ์ง€ ๋ฐฉ์‹์„ ๋น„๊ตํ•ด๋ณด์ž.

ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹

์ „ํ†ต์ ์ธ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €(npm, yarn)์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์˜์กด์„ฑ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
๋ชจ๋“  ์˜์กด์„ฑ์„ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜ํ•˜์—ฌ, ํ•˜์œ„ ํŒจํ‚ค์ง€์—์„œ ํ•ด๋‹น ์˜์กด์„ฑ์„ ๋งˆ์น˜ ๋ฃจํŠธ์— ์„ค์น˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹์˜ ์žฅ์ 

1. ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ : ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋˜๋ฏ€๋กœ, ์˜์กด์„ฑ์„ ์ฐพ๋Š” ๋ฐ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

2. ์ค‘๋ณต ์ œ๊ฑฐ : ์ค‘๋ณต๋œ ์˜์กด์„ฑ์„ ์ƒ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ค„์–ด๋“ ๋‹ค.

ํ˜ธ์ด์ŠคํŒ… ๋ฐฉ์‹์˜ ๋‹จ์ 

1. ์˜์กด์„ฑ ์ถฉ๋Œ : ์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์˜์กด์„ฑ์„ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์œผ๋กœ ์š”๊ตฌํ•  ๋•Œ, ํ•˜๋‚˜์˜ ๋ฒ„์ „๋งŒ ์„ค์น˜๋˜๋ฏ€๋กœ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌํ•œ๋‹ค.

2. ์˜์กด์„ฑ ์ˆจ๊น€ ๋ฌธ์ œ : ํ•˜์œ„ ํŒจํ‚ค์ง€๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ๋ฃจํŠธ์— ์žˆ๋Š” ์˜์กด์„ฑ์— ์ ‘๊ทผํ•˜๊ฒŒ ๋˜์–ด, ์˜์กด์„ฑ์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

pnpm ๊ณ ์œ ์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ ์œ ์ง€ ๋ฐฉ์‹

pnpm์€ ์˜์กด์„ฑ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ ํŒจํ‚ค์ง€์˜ ์˜์กด์„ฑ ํŠธ๋ฆฌ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๋˜ํ•œ โ€œflatโ€ ๊ตฌ์กฐ ๋Œ€์‹  ํ•˜๋“œ ๋งํฌ์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์˜์กด์„ฑ์ด ์„ค์น˜๋œ ์œ„์น˜๋ฅผ ์ฐธ์กฐ๋งŒ ํ•œ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹

.pnpm ๋””๋ ‰ํ† ๋ฆฌ

๋ชจ๋“  ์˜์กด์„ฑ์€ ๋ฃจํŠธ์˜ node_modules ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€ .pnpm ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋œ๋‹ค. ์ค‘๋ณต๋œ ์˜์กด์„ฑ์€ ๋‹จ์ผ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•œ ์œ„์น˜์—์„œ ํ•ด๋‹น ํŒŒ์ผ์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋…๋ฆฝ์  ์˜์กด์„ฑ ํŠธ๋ฆฌ

๊ฐ ํŒจํ‚ค์ง€๋Š” ์ž์‹ ๋งŒ์˜ node_modules๋ฅผ ๊ฐ€์ง€๊ณ , ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ .pnpm์—์„œ ์ฐธ์กฐํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋‹ค.

project/
โ”œโ”€โ”€ node_modules/
โ”‚ ย  โ”œโ”€โ”€ package-a/
โ”‚ ย  โ”‚ ย  โ””โ”€โ”€ node_modules/
โ”‚ ย  โ”‚ ย  ย  ย  โ””โ”€โ”€ dependency-a@1.0.0 -> .pnpm/dependency-a@1.0.0
โ”‚ ย  โ”œโ”€โ”€ package-b/
โ”‚ ย  โ”‚ ย  โ””โ”€โ”€ node_modules/
โ”‚ ย  โ”‚ ย  ย  ย  โ””โ”€โ”€ dependency-a@2.0.0 -> .pnpm/dependency-a@2.0.0

๋”ฐ๋ผ์„œ package-a์™€ package-b๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ dependency-a๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

pnpm ๋ฐฉ์‹์˜ ์žฅ์ 

1. ์˜์กด์„ฑ ์ถฉ๋Œ ๋ฐฉ์ง€ : ๊ฐ ํŒจํ‚ค์ง€๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ์˜์กด์„ฑ์„ ๋ฌธ์ œ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ๋น ๋ฅธ ์„ค์น˜ : ๋™์ผํ•œ ์˜์กด์„ฑ์„ ์ค‘๋ณต ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ , ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ฐธ์กฐํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

3. ๋””์Šคํฌ ๊ณต๊ฐ„ ์ ˆ์•ฝ : .pnpm ๋””๋ ‰ํ† ๋ฆฌ์— ๋ชจ๋“  ์˜์กด์„ฑ์„ ๊ณต์œ  ์ €์žฅํ•˜๋ฏ€๋กœ ์ค‘๋ณต ์„ค์น˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

4. ๋ช…์‹œ์  ์˜์กด์„ฑ ์‚ฌ์šฉ : ํŒจํ‚ค์ง€๋Š” ๋ฐ˜๋“œ์‹œ ์ž์‹ ์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•œ ์˜์กด์„ฑ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฃจํŠธ์— ์„ค์น˜๋œ ์˜์กด์„ฑ์— ์•”๋ฌต์ ์œผ๋กœ ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

pnpm ๋ฐฉ์‹์˜ ๋‹จ์ 

1. ๋ณต์žกํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ : ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹๋ณด๋‹ค ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

2. ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ : ์ผ๋ถ€ ์˜ค๋ž˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ node_modules ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ •ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.


pnpm์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ์˜์กด์„ฑ ์ถฉ๋Œ ๋ฐฉ์ง€, ๋””์Šคํฌ ๊ณต๊ฐ„ ์ ˆ์•ฝ, ๋ช…์‹œ์  ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ ํŒจํ‚ค์ง€์˜ ๋…๋ฆฝ์  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌ์— ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

์ฐธ๊ณ 
https://docs.npmjs.com
https://pnpm.io

๋ Œ๋”๋ง ์—”์ง„๊ณผ ํŠน์ง• ๋ถ„์„ํ•˜๊ธฐ(webkit, blink, gecko)

๋…๋ฆฝ ๋ฐœ์ „ํ•˜๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์—”์ง„

์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋Œ€ํ‘œ์ ์ธ ๋ Œ๋”๋ง ์—”์ง„์€ Webkit, Blink, Gecko ์„ธ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๊ฐ๊ฐ์˜ ๋ฐœ์ „์‚ฌ์™€ ์ ์œ ์œจ, ํŠน์ง•์„ ์‚ดํŽด๋ณด์ž.

1. ์—”์ง„์˜ ์ ์œ ์œจ

๊ฐ ์—”์ง„์˜ ์ ์œ ์œจ์€ ํ•ด๋‹น ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ ์œ ์œจ ์ถ”์ •์น˜๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์—”์ง„BlinkWebkitGecko
์ ์œ ์œจ75%20%3%
๋ธŒ๋ผ์šฐ์ €Google Chrome(65%)
Microsoft Edge(5%)
Opera(2.5%)
Samsung Internet(2.5%)
Brabe
Vivaldi
Safari(19%)
iOS์šฉ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €
Mozilla Firefox
Statcounter Global Stats – Browser Market Share ์ฐธ๊ณ 

‘iOS์šฉ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €’๋Š” ์• ํ”Œ OS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํฌ๋กฌ, ์—ฃ์ง€ ๋“ฑ์€ Webkit, ์ด์™ธ์˜ ์œˆ๋„์šฐ, ์•ˆ๋“œ๋กœ์ด๋“œ ๋“ฑ์˜ OS์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํฌ๋กฌ, ์—ฃ์ง€๋Š” Blink๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์• ํ”Œ ๊ธฐ๊ธฐ์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋‘ Webkit์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ์ „์ฒด์—์„œ ๋Œ€๋žต 20%๊ฐ€ ๋œ๋‹ค.

์ด ๊ฐ™์€ ํŠน์„ฑ์„ ๋ดค์„ ๋•Œ ๋งฅ OS์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ํฌ๋กฌ์˜ ํ˜ธํ™˜์„ฑ OK ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ OS๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ์˜ ํ•„์š”์„ฑ์ด ์ œ๊ธฐ๋œ๋‹ค.

2. ๋ฐœ์ „์‚ฌ

Webkit

Webkit์€ ์• ํ”Œ์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ KHTML(1998๋…„๋ถ€ํ„ฐ ์‚ฌ์šฉ๋œ HTML ๋ Œ๋”๋ง ์—”์ง„)๊ณผ KJS(JavaScript ์—”์ง„)์„ ๊ธฐ๋ฐ˜์œผ๋กœ 2002๋…„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, HTML, CSS, JavaScript ๋“ฑ์„ ํ•ด์„ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ํ™”๋ฉด์— ๋ Œ๋”๋งํ•œ๋‹ค.

2003๋…„ Safari ๋ธŒ๋ผ์šฐ์ € ์ถœ์‹œ์™€ ํ•จ๊ป˜ Webkit์„ ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œํ–ˆ์œผ๋ฉฐ, 2005๋…„ ์˜คํ”ˆ์†Œ์Šคํ™”ํ•˜์—ฌ ํ˜„์žฌ๊นŒ์ง€ ์• ํ”Œ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์ณ ๊ธฐ๋ณธ ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

Webkit์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

WebCore – HTML, CSS, SVG, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ๋ Œ๋”๋ง๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋ Œ๋”๋ง ์—”์ง„

JavaScriptCore(Nitro ์—”์ง„) – JavaScript ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—”์ง„์œผ๋กœ ์„ฑ๋Šฅ์ด ๊ฐœ์„ ๋œ Nitro ์—”์ง„์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋จ. Webkit์„ ์‚ฌ์šฉํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ„๋„์˜ JavaScript ์—”์ง„์ด ํ•„์š”์—†์Œ

Web Inspector – ๋‚ด์žฅ ๋””๋ฒ„๊น… ๋„๊ตฌ๋กœ DOM, css, ๋„คํŠธ์›Œํฌ ใ…‡ใ…Ž์ฒญ ๋“ฑ์˜ ๋ถ„์„๊ณผ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅ

ํ”Œ๋žซํผ ํŠน์ • ์ฝ”์–ด – ์šด์˜ ์ฒด์ œ์™€ ์—”์ง„์„ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ํ”Œ๋žซํผ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ถ”์ƒํ™”, ํŠน์ • ํ”Œ๋žซํผ์—์„œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋“ฑ์„ ๋‹ด๋‹น

Webkit์˜ ํŠน์ง•์œผ๋กœ๋Š” ์›น ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ตœ์‹  ์›น ํ‘œ์ค€์„ ์ง€์›ํ•˜๋ฉฐ ์ง€์†์ ์ธ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ๊ณผ ์—๋„ˆ์ง€ ํšจ์œจ์„ฑ์ด ๊ฐ•ํ™”๋˜์—ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ ์ตœ์†Œํ™”์— ์ค‘์ ์„ ๋‘”๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ์• ํ”Œ ์ค‘์‹ฌ ๊ฐœ๋ฐœ๊ณผ ๊ฐ•ํ•œ ํ†ต์ œ๋กœ ์ธํ•ด ์• ํ”Œ ์ƒํƒœ๊ณ„ ์™ธ์—์„œ๋Š” ๊ธฐ์ˆ  ์ฑ„ํƒ์ด ๋”๋””๋ฉฐ ํƒ€ํ”Œ๋žซํผ์˜ ๊ธฐ์—ฌ๊ฐ€ ์ œํ•œ์ ์ด๊ณ  ์ ์œ ์œจ์ด ๋‚ฎ๋‹ค.

Blink

2013๋…„ ๊ตฌ๊ธ€์ด Webkit์„ forkํ•˜์—ฌ ๋งŒ๋“  ๋ Œ๋”๋ง ์—”์ง„์ด๋‹ค. Chrome ๋ธŒ๋ผ์šฐ์ €๋„ ์ดˆ๊ธฐ์—๋Š” Webkit์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์•„ํ‚คํ…์ณ์™€ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ด ๋งž์ง€ ์•Š์•„ Blink๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

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

Chromium(๊ตฌ๊ธ€ ์ฃผ๋„ ์˜คํ”ˆ์†Œ์Šค ์›น ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์ ํŠธ)์€ Blink ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ Chromium์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋‘ Blink ๋ Œ๋”๋ง ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค.

Blink์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

DOM core – HTML ํŒŒ์‹ฑ๊ณผ DOM ํŠธ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์กฐ์ž‘ ์ง€์›

Layout&Render Engine – ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ๋ฐ ๋ Œ๋” ํŠธ๋ฆฌ ์ƒ์„ฑ

CSS Parser&Style Engine – CSS ํŒŒ์‹ฑ ๋ฐ ์Šคํƒ€์ผ ๊ณ„์‚ฐ

DevTools – ๊ฐœ๋ฐœ์ž์šฉ ๋””๋ฒ„๊น… ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ

์ฐธ๊ณ ๋กœ Blink๋Š” ๋‚ด๋ถ€์— JavaScript ์—”์ง„์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ์™ธ๋ถ€ ์—”์ง„์ธ V8 ์—”์ง„์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

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

Gecko

1997๋…„ Netscape์—์„œ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜์˜€์œผ๋ฉฐ, 2004๋…„ Firefox์˜ ํ•ต์‹ฌ ์—”์ง„์œผ๋กœ ์ฑ„ํƒ๋˜์—ˆ๋‹ค. 2017๋…„ Quantum ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์ง€์›, GPU ํ™œ์šฉ, ์›น ํ‘œ์ค€ ๊ฐ•ํ™” ๋“ฑ์„ ๊ฐ•ํ™”ํ–ˆ๋‹ค.

์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋Š” HTML parser, CSS parser, Rendering Engine ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, Gecko์— ํ†ตํ•ฉ๋œ JavaScript ์—”์ง„์€ SpiderMonkey๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์ธ Developer Tools๋„ ์ œ๊ณตํ•œ๋‹ค.

ํŠน์ง•์œผ๋กœ๋Š” Servo ํ”„๋กœ์ ํŠธ ๊ธฐ์ˆ  ํ†ตํ•ฉ์„ ํ†ตํ•ด Stylo CSS ์—”์ง„์„ ๋„์ž…ํ•˜๊ณ  ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ Œ๋”๋ง์„ ์ง€์›ํ•˜๋ฉฐ GPU ๊ฐ€์† ํ™œ์šฉ์ด ๊ฐ•ํ™”๋˜์—ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ ๋ฐ ํ™•์žฅ์„ฑ์ด ์žฅ์ ์ด์ง€๋งŒ ๋‚ฎ์€ ์‹œ์žฅ ์ ์œ ์œจ๊ณผ Blink๋ณด๋‹ค ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ๊ฒƒ์ด ๋‹จ์ ์ด๋‹ค.


์ถœ์ฒ˜
Chromium Documentation
Google Developers Blog
Webkit Official
Mozilla Developer Network(MDN)

๋งฅ nvm 14 ๋ฒ„์ „ ์„ค์น˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ(nvm install 14)

apple silicon,nvm node ๋ฒ„์ „ 14 ์„ค์น˜ํ•˜๊ธฐ

๋น„๊ต์  ์˜ค๋ž˜๋œ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋…ธ๋“œ ๋ฒ„์ „์„ ๋‚ฎ์ถฐ์„œ ์ž‘์—…ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๋•Œ NVM์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋…ธ๋“œ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ํŠน์ • ๋ฒ„์ „(ํŠนํžˆ node 14)์€ ์„ค์น˜๊ฐ€ ๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋์—†์ด ์˜ฌ๋ผ๊ฐ€๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๋•Œ๋Š” ์•„ํ‚คํ…์ณ(๋งฅ ์‹ค๋ฆฌ์ฝ˜, M1, M2, M3 ๋“ฑ)์ด ์›์ธ์ธ ์ƒํ™ฉ์ด ๋งŽ์œผ๋ฏ€๋กœ ๋กœ์ œํƒ€2(Rosetta2)๋ฅผ ์‚ฌ์šฉํ•ด ์•„ํ‚คํ…์ณ๋ฅผ x86_64๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

๋จผ์ € ๋กœ์ œํƒ€2๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

$ /usr/bin/pgrep oahd

ํ”„๋กœ์„ธ์Šค ID๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋จผ์ € ๋กœ์ œํƒ€2๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

๋กœ์ œํƒ€2 ์„ค์น˜ ๋ฐฉ๋ฒ• (์• ํ”Œ ์„œํฌํŠธ ํŽ˜์ด์ง€)

์ด์ œ ํ„ฐ๋ฏธ๋„์—์„œ ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

$ arch

arm64๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ๋‹ค์Œ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด x86_64๋กœ ์ „ํ™˜ํ•œ๋‹ค.

arch -x86_64 zsh

๋‹ค์‹œ arch ์ปค๋งจ๋“œ๋ฅผ ์ž…๋ ฅํ•ด๋ณด๋ฉด ๋ณ€ํ™˜๋œ ์•„ํ‚คํ…์ณ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ nvm install 14๋ฅผ ๋ฌธ์ œ์—†์ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŽ˜์ด์ง€ ์ด๋™ ํ›„ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ(Next.js, setHeader, writeHead)

์„ค์ •ํ•œ ์ฟ ํ‚ค๊ฐ€ ํŽ˜์ด์ง€ ์ด๋™ ํ›„ ์‚ฌ๋ผ์งˆ ๋•Œ ์˜์‹ฌํ•ด ๋ณผ ์ƒํ™ฉ

getServerSideProps์—์„œ writeHead ๋˜๋Š” setHeader๋กœ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๊ณ  redirect ์‹œ

๋“ฑ๋ก๋œ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค.

redirect๋œ ํŽ˜์ด์ง€์—์„œ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๋ฉด ํ—ค๋” ์„ค์ •์˜ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•ด ๋ด์•ผ ํ•œ๋‹ค.

ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์˜์‹ฌํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋Š” ํŽ˜์ด์ง€ ์ด๋™ ํ›„ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์กŒ์œผ๋ฏ€๋กœ ์ฟ ํ‚ค์˜ ์‚ฌ์šฉ ๋ฒ”์œ„์— ๋Œ€ํ•œ ์„ค์ • ๋ฌธ์ œ์ด๋‹ค.

Path=/ ์„ค์ •์€ ์ฟ ํ‚ค๊ฐ€ ๋ชจ๋“  ๊ฒฝ๋กœ์—์„œ ์œ ํšจํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค. ์ด ์˜ต์…˜์„ ํ†ตํ•ด ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์˜ต์…˜์ด ๋ˆ„๋ฝ๋˜๋ฉด ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ฟ ํ‚ค๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

setHeader์™€ writeHead๋ฅผ ์‚ฌ์šฉํ•ด path=/๋ฅผ ํฌํ•จํ•˜๋Š” ์ฟ ํ‚ค ์„ค์ • ์˜ˆ์ œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.
HttpOnly๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋„๋ก ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.

export async function getServerSideProps({ req, res }) {

  res.setHeader('Set-Cookie', 'myCookie=value; Path=/; HttpOnly; Max-Age=3600');

  return {
    redirect:{
      destination: '/new-page', // redirectํ•  ํŽ˜์ด์ง€
      permanent: false
    }
  }
}

writeHead์˜ ์‚ฌ์šฉ๋„ ํ™•์ธํ•ด๋ณด์ž.

export async function getServerSideProps({ req, res }) {
  const cookieVal = 'myCookie=value; Path=/; HttpOnly; Max-Age=3600';

  res.writeHead(302, {
    Location: 'new-page', // redirectํ•  ํŽ˜์ด์ง€
    'Set-Cookie': cookieVal,
    'Custom-Header': 'Custom', // ์ปค์Šคํ…€ ํ—ค๋”
  });
  
  res.end();

  return {
    props: {}
  };
}

writeHead์˜ ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ, ๋‘ ๋ฒˆ์งธ๋Š” ํ—ค๋” ๊ฐ์ฒด๋ฅผ ์„ค์ •ํ•œ๋‹ค.

ํ—ค๋” ๊ฐ์ฒด ๋‚ด๋ถ€์˜ Location ํ•„๋“œ๋กœ redirect ํŽ˜์ด์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๊ณ , return ๋ฌธ์— redirect๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ํŽ˜์ด์ง€๋ฅผ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

Next.js์˜ ๊ธฐ๋ณธ ๊ถŒ์žฅ ๋ฐฉ์‹์€ return ๋ฌธ์—์„œ redirect๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด writeHead์™€ setHeader์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ผ๊นŒ?

  • writeHead๋Š” ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์„ค์ •(setHeader๋Š” ๋ถˆ๊ฐ€๋Šฅ)ํ•  ์ˆ˜ ์žˆ๋Š” ๋“ฑ์˜ ์„ธ์„ธํ•œ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • setHeader๋Š” ์‘๋‹ต์ด ์‹œ์ž‘(res.end())๋˜๊ธฐ ์ „ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ writeHead๋Š” ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒํƒœ ์ฝ”๋“œ์™€ ์—ฌ๋Ÿฌ ํ—ค๋”๋ฅผ ๋™์‹œ์— ์„ค์ •ํ•˜๋ ค๋ฉด writeHead, ๊ฐœ๋ณ„์ ์œผ๋กœ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ˆ˜์ •ํ•  ๋•Œ๋Š” setHeader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ด์™€ ๊ฐ™์ด Path=/๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด๋™ํ•˜๋Š” ํŽ˜์ด์ง€์— ์ƒ๊ด€์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฟ ํ‚ค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์ถ”๊ฐ€ ์ฐธ๊ณ  : Next.js ๊ณต์‹ ๋ฌธ์„œ(Setting Headers)

๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ข…๋ฅ˜ ์•Œ์•„๋ณด๊ธฐ(WEBP, PNG, SVG, JPG, TIFF….)

Webp, png, svg, gif, psd, eps, tiff

์ด๋ฏธ์ง€ ํŒŒ์ผ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ ์›น์šฉ(WEBP, PNG, SVG, JPG, GIF)๊ณผ ์ธ์‡„์šฉ(PSD, EPS, TIFF)์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

1. ์›น์šฉ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ

– SVG
๋ฒกํ„ฐ(Vector) ๊ทธ๋ž˜ํ”ฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ. ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ด๋„ ํ’ˆ์งˆ์ด ์ €ํ•˜๋˜์ง€ ์•Š์œผ๋ฉฐ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜์ด๋ฏ€๋กœ ์ฝ”๋“œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ๊ณ , ์•„์ด์ฝ˜, ์ผ๋Ÿฌ์ŠคํŠธ ๋“ฑ์— ์ ํ•ฉํ•˜๋ฉฐ PNG๋ณด๋‹ค ๋” ์ž‘์€ ์šฉ๋Ÿ‰์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

– WEBP
๊ตฌ๊ธ€์ด ๊ฐœ๋ฐœํ•œ ์ด๋ฏธ์ง€ ํ˜•์‹์œผ๋กœ ์†์‹ค๊ณผ ๋ฌด์†์‹ค ์••์ถ•์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค. ์†์‹ค์€ JPG, ๋ฌด์†์‹ค์€ PNG์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค. ์•ŒํŒŒ ์ฑ„๋„์„ ์ง€์›ํ•˜์—ฌ ํˆฌ๋ช… ๋ฐฐ๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ๋Ÿฌ ์žฅ์˜ ์‚ฌ์ง„์„ ์‚ฌ์šฉํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋™์ผ ํ’ˆ์งˆ ๋Œ€๋น„ JPG, PNG๋ณด๋‹ค ์•ฝ 30% ๊ฐ€๋Ÿ‰ ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฉฐ, ์›น ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.

– JPG
JPEG๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์‚ฌ์ง„์ด๋‚˜ ๊ทธ๋ผ๋ฐ์ด์…˜ ๋“ฑ ์—ฌ๋Ÿฌ ์ƒ‰์ƒ์„ ํฌํ•จํ•˜๋Š” ์ด๋ฏธ์ง€์— ์ ์ ˆํ•˜๋‹ค. ์†์‹ค ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์šฉ๋Ÿ‰์ด ์ž‘์ง€๋งŒ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๊ณ„์† JPG๋กœ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๋ฉด ๊ณ„์†๋˜๋Š” ์†์‹ค ์••์ถ•์œผ๋กœ ์ธํ•ด ํ™”์งˆ ์ €ํ•˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

– GIF
์ƒ‰์˜ ์ˆ˜๊ฐ€ 256์ƒ‰์œผ๋กœ ํŒŒ์ผ ์šฉ๋Ÿ‰์ด ์ž‘์œผ๋ฉฐ, ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€์˜ ๋ฐฐ์—ด์„ ํ†ตํ•ด ์›€์ง์ด๋Š” ์˜์ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋ฌด์†์‹ค ์••์ถ• ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ƒ‰์ƒ ์ˆ˜์˜ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ์‚ฌํ•ญ์ด ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค.

2. ์ธ์‡„์šฉ ๋ฐ์ดํ„ฐ

– TIFF
์ด๋ฏธ์ง€๋ฅผ ์••์ถ•ํ•˜์ง€ ์•Š๊ณ  ์ €์žฅํ•˜๋Š” ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ. ์ธ์‡„ ๋ฐ ๊ทธ๋ž˜ํ”ฝ ์ž‘์—…์—์„œ ์ธ๊ธฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ ์ €์žฅ์„ ๋ฐ˜๋ณตํ•ด๋„ ํ™”์งˆ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฌด์†์‹ค ๋ฐฉ์‹์ด๋ฏ€๋กœ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ์••์ถ•, ์ตœ์ ํ™”๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์›น์šฉ์œผ๋กœ๋Š” ์ ์ ˆํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๋Œ€๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค.

– PSD
ํฌํ† ์ƒต ์ €์žฅ ํ˜•์‹์œผ๋กœ ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ ˆ์ด์–ด ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฉด ์šฉ๋Ÿ‰์ด ์ปค์ง€๋ฏ€๋กœ ์ €์žฅ ์‹œ ๋ ˆ์ด์–ด ๋ณ‘ํ•ฉ์„ ํ†ตํ•ด ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ํฌํ† ์ƒต ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ณ ํ•ด์ƒ๋„ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ JPG, PNG๋“ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

– EPS
์–ด๋„๋น„ PortScript๋กœ ๋งŒ๋“  ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ. ์ €ํ•ด์ƒ๋„์™€ ๊ณ ํ•ด์ƒ๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ €ํ•ด์ƒ๋„๋กœ ์ž‘์—…ํ•˜๊ณ  ๊ณ ํ•ด์ƒ๋„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ์ธ์‡„์— ์ ํ•ฉํ•˜๋‹ค.


MDN – SVG
Wikipedia – PNG
Wikipedia – WebP

spec.template: Invalid value ์—๋Ÿฌ


~~~ is invalid. spec.template: Invalid value

yaml์„ ์ž‘์„ฑํ•˜๊ณ  kubectl apply -f sample.yaml๊ณผ ๊ฐ™์ด ์ ์šฉํ•  ๋•Œ spec.template์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ์ƒํ™ฉ์ด ์žˆ๋‹ค.

์ด ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ํ•ด๋‹น yaml๋กœ ํŒŒ๋“œ๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ,์ˆ˜์ • ์‚ฌํ•ญ์ด ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

spec.Completions
spec.Selector
spec.Template
ย 

์ด ํ•ญ๋ชฉ๋“ค์€ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๋„๋ก ์ง€์ •๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ spec.template๋ฅผ ์ˆ˜์ •ํ•˜๋Š” applyํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์ด๋‹ค.

์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ ์‹ ๊ทœ ์ƒ์„ฑ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋‹น yaml์„ kubectl delete -f sample.yaml๋กœ ์ œ๊ฑฐํ•œ ๋’ค ๋‹ค์‹œ apply๋ฅผ ์ ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์ฐธ๊ณ  : https://github.com/kubernetes/kubernetes/issues/89657

bash์—์„œ vim ์„ค์น˜(feat.ํ•œ๊ธ€ ์„ค์ •)

bash: vim: command not found

๊ฒฝ๋Ÿ‰ํ™”๋ฅผ ์ถ”๊ตฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๊ธฐ๋ณธ ์—๋””ํ„ฐ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•„์š” ์‹œ ์ง์ ‘ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ bash์—์„œ vim ์—๋””ํ„ฐ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํ•œ๊ธ€ ์„ค์ •(UTF-8, CP949)๊นŒ์ง€ ์•Œ์•„๋ณด์ž.

1. vim ์—๋””ํ„ฐ ์„ค์น˜

$ apt-get update

Hit:1 http://deb.debian.org/debian bookworm InRelease
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Hit:3 http://deb.debian.org/debian-security bookworm-security InRelease
$ apt install vim

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libsodium23 vim-common vim-runtime xxd
Suggested packages:
  ctags vim-doc vim-scripts
The following NEW packages will be installed:
  libsodium23 vim vim-common vim-runtime xxd
0 upgraded, 5 newly installed, 0 to remove and 40 not upgraded.
Need to get 8962 kB of archives.
After this operation, 41.8 MB of additional disk space will be used.
Do you want to continue? [Y/n] 

bash์—์„œ ๋‘ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  y๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋์ด๋‹ค(๊ถŒํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด sudo๋ฅผ ์•ž์— ๋ถ™์ธ๋‹ค).

๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ธ€์ด๋‚˜ ์ผ๋ณธ์–ด ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ธ์ฝ”๋”ฉ์ด ํ•„์š”ํ•˜๋‹ค.

UTF-8์„ ์„ค์ •ํ•ด๋ณด์ž.

vim ์ธ์ฝ”๋”ฉ ์„ค์ •(UTF-8)

์„ค์น˜ํ•œ vim์„ ์‚ฌ์šฉํ•ด /etc/vim/vimrc์„ ์—ด๊ณ  ํ•˜๋‹จ์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

" Source a global configuration file if available
if filereaedable("/etc/vim/vimrc.local")
  source /etc/vim/vimrc.local
endif

//์ถ”๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„
set encoding=utf-8
set fileencodings=utf-8,cp949

utf-8์€ mac, cp949๋Š” windows์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์ด๋‹ค.

์ €์žฅํ•˜๋ฉด vim์—์„œ ํ•œ๊ธ€ ๋“ฑ์ด ์‚ฌ๋žŒ ์–ธ์–ด๋กœ ํ‘œ์‹œ๋œ๋‹ค.

์•Œ๊ธฐ ์‰ฌ์šด BEM ์•Œ์•„๋ณด๊ธฐ(CSS)

block__element_modifier๋ชจ๋“ˆ ๊ธฐ๋ฐ˜์˜ ๋ฐฉ๋ฒ•๋ก  (+mix)

๊ณต์‹ ๋ฌธ์„œ(https://en.bem.info)์—์„œ๋Š” BEM์„ ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค.

BEM(Block, Element, Modifier)๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‹ค. ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ๋…๋ฆฝ๋œ ๋ธ”๋ก์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ UI๋„ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

BEM์€ ๋ชจ๋“ˆ์„ Block, Element, Modifier ๋‹จ์œ„๋กœ ๋ถ„ํ•ดํ•˜๋ฉฐ, ๊ฐ ์•ž ๊ธ€์ž๋ฅผ ๋”ฐ์„œ BEM์œผ๋กœ ๋ถ€๋ฅธ๋‹ค. BEM์€ ๋Ÿฌ์‹œ์•„ Yandex์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์‹ค์ œ๋กœ ์ด ๋ฐฉ๋ฒ•์— ๊ธฐ๋ฐ˜ํ•œ CSS ์„ค๊ณ„ ๊ธฐ๋ฒ•์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ BEM์€ CSS์—๋งŒ ๊ตญํ•œ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด BEM์˜ ๊ณตํ†ต ๊ทœ์น™๊ณผ ๋ชจ๋“ˆ์˜ ๊ฐœ๋ณ„ ๊ทœ์น™์„ ์•Œ์•„๋ณด์ž.

CSS style์„ ์œ„ํ•œ BEM ๊ณตํ†ต ๊ทœ์น™

– ID ์…€๋ ‰ํ„ฐ์™€ ํƒœ๊ทธ ์…€๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
– ๋„ค์ŠคํŒ…๋œ ์…€๋ ‰ํ„ฐ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค.
– CSS ํด๋ž˜์Šค ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ณ  ์…€๋ ‰ํ„ฐ์˜ ๋ชฉ์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ๋‹ค.
– Blocks, Elements, Modifiers๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
– Blocks๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.

BEM์˜ ๋„ค์ด๋ฐ ๊ทœ์น™

๋ชจ๋‘ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋‘ ๋‹จ์–ด๋Š” ํ•˜์ดํ”ˆ(-)์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.

Blockblock, block-two
Elementblock ์ด๋ฆ„์„ ์ƒ์†๋ฐ›์•„ ์–ธ๋”์Šค์ฝ”์–ด ๋‘ ๊ฐœ(__)๋กœ ์—ฐ๊ฒฐblock__element, block-two__element-two
ModifierBlock/Element ์ด๋ฆ„ ์ƒ์†๋ฐ›์•„ ์–ธ๋”์Šค์ฝ”์–ด ํ•˜๋‚˜(_)๋กœ ์—ฐ๊ฒฐ. ํ‚ค-๊ฐ’ ์Œ์€ ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค(_)๋ฅผ ์‚ฌ์šฉ.
block_modifier, block__element_modifier, element_key_value
Modifier
(MindBEMding)
Block/Element ์ด๋ฆ„ ์ƒ์†๋ฐ›์•„ ํ•˜์ดํ”ˆ ๋‘๊ฐœ(–)๋กœ ์—ฐ๊ฒฐ. ํ‚ค-๊ฐ’์—์„œ ํ‚ค๋Š” ์ƒ๋žต๊ฐ€๋Šฅ.block–modifier, element–value

๋ชจ๋“ˆ์˜ ๊ฐœ๋ณ„ ๊ทœ์น™

๋…ผ๋ฆฌ์ , ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋…๋ฆฝ๋˜์–ด ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ๋กœ ์ •์˜ํ•œ๋‹ค. ํด๋ž˜์Šค ์ด๋ฆ„์€ ‘ํ˜•ํƒœ’๊ฐ€ ์•„๋‹ˆ๋ผ ‘๋ชฉ์ , ์šฉ๋„’๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค.

EX) head, logo, menu (O)
blue-button, small-title (X)

block์€ ๋‹ค๋ฅธ block ๋‚ด๋ถ€์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, modifier๋ฅผ ํ†ตํ•ด ์œ„์น˜๋‚˜ ๋ชจ์–‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆผ – block์˜ ์ค‘์ฒฉ(์ถœ์ฒ˜: en.bem.info)

Element

block์„ ๊ตฌ์„ฑํ•˜๋ฉฐ block ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์ •์˜ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด menu__item์€ menu๋ผ๋Š” block์„ ๊ตฌ์„ฑํ•˜๋ฉฐ menu ๋ฐ–์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ element๊ฐ€ ๋œ๋‹ค.

๊ทธ๋ฆผ – block์„ ๊ตฌ์„ฑํ•˜๋Š” element(์ถœ์ฒ˜:en.bem.info)


element ํด๋ž˜์Šค ์ด๋ฆ„๋„ block๊ณผ ๋™์ผํ•˜๊ฒŒ ‘ํ˜•ํƒœ’๊ฐ€ ์•„๋‹ˆ๋ผ ‘์šฉ๋„’๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค.
element๋Š” ์„ ํƒ์  ์š”์†Œ์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†์ง€๋งŒ element ์ด๋ฆ„์„ ์ค‘์ฒฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

EX) block__element__element, menu__button__icon (X)

Modifier

block/element์˜ ๋ชจ์–‘์ด๋‚˜ ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
modifier๋Š” ์„ ํƒ์  ์š”์†Œ์ด๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†์ง€๋งŒ ๋‹จ๋…์œผ๋กœ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  block/element์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
๊ฐ™์€ block์ด๋ผ๋„ modifier์— ๋”ฐ๋ผ ๋ชจ์–‘์ด ๋ณ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, modifier๋Š” ๋Ÿฐํƒ€์ž„์ด๋‚˜ block์— ๋”ฐ๋ผ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค.
modifier ํด๋ž˜์Šค ์ด๋ฆ„์€ ํ˜•ํƒœ(ํฌ๊ธฐ, ์ƒ‰, ์ƒํƒœ, ๋™์ž‘)์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•œ๋‹ค. ํ˜•ํƒœ๋กœ ๋‚˜๋ˆ„๋ฉด boolean, key-value ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

– boolean : ex) active, disabled
– key-value : ex) color_red, line_doubled (์Šค๋„ค์ดํฌ ์ผ€์ด์Šค๋กœ ํ‘œํ˜„)

modifier์˜ ์ˆ˜๋Š” ์ œํ•œ์ด ์—†์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์ผํ•œ ์Šคํƒ€์ผ์€ ์ค‘๋ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

MIX

mix๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ์— ์—ญํ• ์ด ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
์žฅ์ ์€ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ์Šคํƒ€์ผ๊ณผ ์กฐํ•ฉํ•ด์„œ ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
block+element, block+block, element+element ๋“ฑ์˜ mix๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

<!-- HTML -->
<div class="header">
  <div class="logo header__logo"></div>
</div>

/* CSS */
.logo {
  width:100px;
  height:50px;
}
.header__logo {
  margin: 12px;
}

๋‹ค๋ฅธ ์š”์†Œ์™€ ๊ด€๊ณ„๋œ ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์€ mix, block ๋‚ด๋ถ€์˜ ๋ฌธ์ œ๋Š” modifier๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
mix๋Š” ๋…๋ฆฝ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.


์ฐธ๊ณ 
https://en.bem.info
– ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๋กœ ๋ฐฐ์šฐ๋Š” CSS ์„ค๊ณ„ ์‹ค์ „ ๊ฐ€์ด๋“œ