Skip to content

Latest commit

ย 

History

History
1338 lines (823 loc) ยท 79.7 KB

computer-science.md

File metadata and controls

1338 lines (823 loc) ยท 79.7 KB

CS

์ž๋ฃŒ๊ตฌ์กฐ

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

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

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋ฉฐ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค๋ฅผ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰์ด ๋น ๋ฆ…๋‹ˆ๋‹ค. (O(1)) JavaSCript์˜ Object๋‚˜ Map์ด ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ•ญ์ƒ O(1)์ธ๊ฐ€์š”?

์•„๋‹™๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ฒ€์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํ‰๊ท ์ ์œผ๋กœ O(1)์ด์ง€๋งŒ, ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n)์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‰๊ท  O(1): ํ•ด์‹œ ํ•จ์ˆ˜๊ฐ€ ํ‚ค๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„์‚ฐ์‹œ์ผœ ์ถฉ๋Œ(collision)์ด ๊ฑฐ์˜ ์—†๋Š” ์ด์ƒ์ ์ธ ๊ฒฝ์šฐ, ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ตœ์•… O(n): ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด์‹œ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋™์ผํ•œ ๋ฒ„ํ‚ท(bucket)์— ์ €์žฅ๋˜๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ๋ฒ„ํ‚ท ๋‚ด์—์„œ ์„ ํ˜• ํƒ์ƒ‰(linear search)์„ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜(n)์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
ํ•ด์‹œ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
  1. ์ฒด์ด๋‹: ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ํ•ด์‹œ ์ธ๋ฑ์Šค์— ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด, ์ถฉ๋Œํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ด ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  2. ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•: ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด, ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋น„์–ด์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด์€ ๋ญ˜๊นŒ์š”?
  1. ํ‚ค๋“ค์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋ฒ„ํ‚ท์—ย ์ตœ๋Œ€ํ•œ ๊ท ๋“ฑํ•˜๊ฒŒย ๋ถ„์‚ฐ์‹œ์ผœ ํ•ด์‹œ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ•ด์‹œ ๊ฐ’์„ย ์‹ ์†ํ•˜๊ฒŒย ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜ ์ž์ฒด๊ฐ€ ๋А๋ฆฌ๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์žฅ์ ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  3. ๋™์ผํ•œ ํ‚ค์— ๋Œ€ํ•ด์„œ๋Š”ย ํ•ญ์ƒ ๋™์ผํ•œ ํ•ด์‹œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Stack๊ณผ Queue์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”

[Stack]

  • ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out)
  • ์‚ฝ์ž… ์—ฐ์‚ฐ์€ Push, ์‚ญ์ œ์—ฐ์‚ฐ์€ Pop

์˜ˆ์‹œ : ์ ‘์‹œ, ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ ๊ฐ€๊ธฐ, ์‹คํ–‰์ทจ์†Œ(ctrl+z)

[Queue]

  • ์„ ์ž…์„ ์ถœ(FIFO, First In First Out)
  • ์‚ฝ์ž… ์—ฐ์‚ฐ์€ Enqueue, ์‚ญ์ œ์—ฐ์‚ฐ์€ Dequeue

์˜ˆ์‹œ : ์€ํ–‰์—…๋ฌด, ๋†€์ด๊ธฐ๊ตฌ ๋Œ€๊ธฐ์ค„

List, Map, Set์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

[List]

  • ์ˆœ์„œ์™€ ์ค‘๋ณต์ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ธ๋ฑ์Šค๋กœ ์›์†Œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
  • ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ 

[Map]

  • key์™€ value๋ฅผ ๊ฐ™์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • key์— ๋Œ€ํ•œ ์ค‘๋ณต์ด ์—†์œผ๋ฉฐ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
  • value์˜ ์ค‘๋ณต์€ ํ—ˆ์šฉ๋จ
  • ๊ฒ€์ƒ‰ ์†๋„ ๋น ๋ฆ„

[Set]

  • ์ˆœ์„œ๊ฐ€ ์—†๊ณ , ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ๊ฒ€์ƒ‰ ์†๋„ ๋น ๋ฆ„
  • ์ค‘๋ณต๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•  ๋•Œ ์œ ์šฉ
์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š”ย ์‹œ๊ฐ„์ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒ™๋„์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœย Big O ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋ฉฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์‚ฌ์šฉํ•˜๋Š”ย ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์–‘์ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒ™๋„์ž…๋‹ˆ๋‹ค. ์—ญ์‹œย Big O ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์˜ ํšจ์œจ์„ฑ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
O(2^n), O(1), O(n^3), O(n!), O(n log n), O(log n), O(n), O(n^2)๋ฅผ ์‹œ๊ฐ„๋ณต์žก๋„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•ด์ฃผ์„ธ์š”.

img

  1. O(1)ย (์ƒ์ˆ˜ ์‹œ๊ฐ„)
  2. O(log n)ย (๋กœ๊ทธ ์‹œ๊ฐ„)
  3. O(n)ย (์„ ํ˜• ์‹œ๊ฐ„)
  4. O(n log n)ย (๋กœ๊ทธ ์„ ํ˜• ์‹œ๊ฐ„)
  5. O(n^2)ย (์ด์ฐจ ์‹œ๊ฐ„)
  6. O(n^3)ย (์‚ผ์ฐจ ์‹œ๊ฐ„)
  7. O(2^n)ย (์ง€์ˆ˜ ์‹œ๊ฐ„)
  8. O(n!)ย (ํŒฉํ† ๋ฆฌ์–ผ ์‹œ๊ฐ„)
๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ๊ทธ๋ž˜ํ”„:ย ๋…ธ๋“œ(์ •์ )์™€ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.ย ์‚ฌ์ดํด์ด ํ—ˆ์šฉ๋˜๋ฉฐ, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ํŠธ๋ฆฌ:ย ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜๋กœ,ย ์‚ฌ์ดํด์ด ์—†๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœย ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ,ย ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. N๊ฐœ์˜ ๋…ธ๋“œ๋Š” ํ•ญ์ƒ N-1๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
์ „์œ„์ˆœํšŒ vs ์ค‘์œ„์ˆœํšŒ vs ํ›„์œ„์ˆœํšŒ ๋ฅผ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ•ต์‹ฌ์ ์ธ ์ฐจ์ด๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์–ธ์ œ ๋ฐฉ๋ฌธํ•˜๋А๋ƒ์ž…๋‹ˆ๋‹ค.

  • ์ „์œ„ ์ˆœํšŒ: ๋ฃจํŠธ โ†’ ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ
  • ์ค‘์œ„ ์ˆœํšŒ: ์™ผ์ชฝ โ†’ ๋ฃจํŠธ โ†’ ์˜ค๋ฅธ์ชฝ
  • ํ›„์œ„ ์ˆœํšŒ: ์™ผ์ชฝ โ†’ ์˜ค๋ฅธ์ชฝ โ†’ ๋ฃจํŠธ
Array (๋ฐฐ์—ด) vs Linked List (๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ) ๋ฅผ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

๋ฐ˜๋ฉด ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ตฌ์กฐ๋กœ, ๋™์ ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ณ  ์ค‘๊ฐ„ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ํฌ์ธํ„ฐ๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(1)์— ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ž„์˜ ์ ‘๊ทผ์ด ์–ด๋ ค์›Œ ๊ฒ€์ƒ‰์—๋Š” O(n)์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด์€ ๋น ๋ฅธ ์ ‘๊ทผ์ด, ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ์œ ์—ฐํ•œ ์‚ฝ์ž…ยท์‚ญ์ œ๊ฐ€ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค.

ํž™์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์‹œ๊ณ , ๊ฐ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ์ตœ๋Œ€ํž™๊ณผ ์ตœ์†Œํž™์ด ์žˆ๋‹ค.
  • ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’ ํƒ์ƒ‰ O(1)
  • ์‚ญ์ œ O(log n) โ†’ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œ ํ›„ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ๊ฐ€์ ธ์™€์„œ ์œ„์น˜ ์žฌ๊ตฌ์„ฑ(heapify)ํ•œ๋‹ค.
  • ์‚ฝ์ž… O(log n) โ†’ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์‚ฝ์ž…ํ•˜๊ณ  ์œ„์น˜๋ฅผ ์žฌ๊ตฌ์„ฑ(heapify)ํ•œ๋‹ค.
AVLํŠธ๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์ธ ์„ ํ˜• ํŠธ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ, ๊ท ํ˜•์„ ์žก๊ธฐ ์œ„ํ•ด ํŠธ๋ฆฌ ์ผ๋ถ€๋ฅผ ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋ชจ๋‘ ์‹œ๊ฐ„๋ณต์žก๋„ O(log n))

FIFO์™€ LIFO ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฐ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

FIFO(First-In-First-Out)๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ๋กœ, ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ํ(Queue)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค„์„ ์„  ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ, ๋ฐ์ดํ„ฐ๋Š” ํ•œ์ชฝ์—์„œ ์‚ฝ์ž…๋˜๊ณ  ๋ฐ˜๋Œ€์ชฝ์—์„œ ์ œ๊ฑฐ๋˜๋ฉฐ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

LIFO(Last-In-First-Out)๋Š” ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ๋กœ, ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋Š” ์Šคํƒ(Stack)์ž…๋‹ˆ๋‹ค. ์Œ“์•„ ์˜ฌ๋ฆฐ ์ฑ… ๋”๋ฏธ์ฒ˜๋Ÿผ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋ฉฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ์ด๋‚˜ ๋˜๋Œ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ ๋“ฑ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ •์ˆ˜๋ฅผ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋กœ ์œ„๋ถ€ํ„ฐ ์ฑ„์šด๋‹ค๋ฉด ๋†’์ด๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

๋†’์ด๋Š” 6

๋ฃจํŠธ๋ถ€ํ„ฐ ๋ ˆ๋ฒจ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘, ๋†’์ด๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ (๋†’์ด = ๋ ˆ๋ฒจ - 1)

์ด์ง„ํŠธ๋ฆฌ๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‚˜์š”?

์ž์‹์˜ ๋…ธ๋“œ ์ˆ˜๊ฐ€ ๋‘๊ฐœ ์ดํ•˜์ธ ํŠธ๋ฆฌ.

  • ์ •์ด์ง„ ํŠธ๋ฆฌ โ†’ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 0 ๋˜๋Š” 2๊ฐœ์ธ ์ด์ง„ ํŠธ๋ฆฌ
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ โ†’ ์œ„ ๊ณ„์ธต๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ.
  • ๋ณ€์งˆ ์ด์ง„ ํŠธ๋ฆฌ โ†’ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋ฐ–์— ์—†๋Š” ์ด์ง„ ํŠธ๋ฆฌ (์„ ํ˜•์ฒ˜๋Ÿผ ํ•œ์ค„)
  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ โ†’ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ๋Š” ํŠธ๋ฆฌ
  • ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ โ†’ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์กฑ ๋…ธ๋“œ์˜ ๋†’์ด ์ฐจ๊ฐ€ 1์ดํ•˜์ธ ์ด์ง„ ํŠธ๋ฆฌ.
์ด์ง„ ํŠธ๋ฆฌ ๋ชจ์–‘์— ๊ฐ’์„ ์ฑ„์›Œ๋„ฃ์€ ๊ฒƒ. ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ์ž‘์€๊ฐ’, ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ํฐ ๊ฐ’์ด ๋“ค์–ด์žˆ์Œ. (ํƒ์ƒ‰ ์‹œ ๋ณดํ†ต O(log n)์ด์ง€๋งŒ, ์ตœ์•…์—๋Š” O(n))

์ด์ง„ ํŠธ๋ฆฌ ๋ชจ์–‘์— ๊ฐ’์„ ์ฑ„์›Œ๋„ฃ์€ ๊ฒƒ. ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ์ž‘์€๊ฐ’, ์˜ค๋ฅธ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ์—๋Š” ํฐ ๊ฐ’์ด ๋“ค์–ด์žˆ์Œ. (ํƒ์ƒ‰ ์‹œ ๋ณดํ†ต O(log n)์ด์ง€๋งŒ, ์ตœ์•…์—๋Š” O(n))

์ข…๋ฅ˜๋Š” AVL ํŠธ๋ฆฌ, ๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋™์ž‘, ๊ตฌํ˜„๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ์ผ๋ฐ˜ ํ์™€ ๋‹ฌ๋ฆฌ, ์‚ฝ์ž…๋œ ์š”์†Œ ์ค‘ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ˆœํžˆ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ์š”์†Œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๋ฐฉ์‹์œผ๋กœ๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํž™์ด ์žˆ์œผ๋ฉฐ, ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์€ ์ด์ง„ ํž™(Binary Heap)์ž…๋‹ˆ๋‹ค. ์ด์ง„ ํž™์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์—ฐ์‚ฐ์ด O(log n)์œผ๋กœ ํšจ์œจ์ ์ด๋ฉฐ, ์ตœ์†Œ ํž™์€ ์ตœ์†Ÿ๊ฐ’์„, ์ตœ๋Œ€ ํž™์€ ์ตœ๋Œ“๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์–ด ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์„ฑ๋Šฅ์„ ์ž˜ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ์š”์†Œ์ธ ๋…ธ๋“œ์—์„œ, ์–ด๋–ค ๋…ธ๋“œ๋“ค์ด ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • Root Node (๋ฃจํŠธ ๋…ธ๋“œ):: ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ
  • Internal Node (๋‚ด๋ถ€ ๋…ธ๋“œ, ๋น„๋‹จ๋ง ๋…ธ๋“œ): ๋ฃจํŠธ์™€ ๋ฆฌํ”„ ๋…ธ๋“œ ์‚ฌ์ด์— ์žˆ๋Š” ๋…ธ๋“œ
  • Terminal Node (=leaf Node, ๋‹จ๋ง ๋…ธ๋“œ): ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ
ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ๊ณผ ๋†’์ด์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?
  • ๋ฃจํŠธ๋ถ€ํ„ฐ ๋ ˆ๋ฒจ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘, ๋†’์ด๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ (๋†’์ด = ๋ ˆ๋ฒจ - 1)
DFS์™€ BFS์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์‹œ,๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์„ค๋ช…ํ•˜์„ธ์š”.

DFS(Depth-First Search)๋Š” ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ ๋’ค ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ์žฌ๊ท€๋‚˜ ์Šคํƒ์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. BFS(Breadth-First Search)๋Š” ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ํ๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋˜๊ณ  ์ตœ๋‹จ ๊ฒฝ๋กœ ํƒ์ƒ‰์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชจ๋‘ ์ •์  V๊ฐœ์™€ ๊ฐ„์„  E๊ฐœ์ผ ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V + E)๋กœ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” DFS๊ฐ€ ์žฌ๊ท€ ํ˜ธ์ถœ ๋˜๋Š” ์Šคํƒ์— ์˜ํ•ด O(V), BFS๋Š” ํ์— ์˜ํ•ด O(V)์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, BFS๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ํ์— ๋‹ด์„ ์ˆ˜ ์žˆ์–ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ DFS๋ณด๋‹ค ๋” ํด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์•Œ๊ณ ๋ฆฌ์ฆ˜

Dynamic Programming์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Dynamic Programming(๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์€ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด ์ค‘๋ณต ๊ณ„์‚ฐ์„ ํ”ผํ•จ์œผ๋กœ์จ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋™์ผํ•œ ๋ถ€๋ถ„ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋˜๋Š” ํ…Œ์ด๋ธ” ๋ฐฉ์‹์œผ๋กœ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋งค ์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ตœ์„ ์ด๋ผ๊ณ  ํŒ๋‹จ๋˜๋Š” ์„ ํƒ์„ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ „์ฒด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์—์„œ์˜ ์ง€์—ญ์  ์ตœ์  ์„ ํƒ์ด ์ „์ฒด์ ์œผ๋กœ๋„ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ๋Š” ๋™์ „ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ, ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ™œ๋™ ์„ ํƒ ๋ฌธ์ œ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด์ง€๋งŒ ํ•ญ์ƒ ์ตœ์ ํ•ด๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ธ์ง€ ํŒ๋‹จ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Kruskal Algorithm(ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST, Minimum Spanning Tree)๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๊ฐ„์„  ์ค‘ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์€ ๊ฒƒ๋ถ€ํ„ฐ ์„ ํƒํ•˜๋ฉด์„œ ์‚ฌ์ดํด์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ„์„ ์„ ๊ฐ€์ค‘์น˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„, ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ์†ํ•œ ์ •์ ์„ ์—ฐ๊ฒฐํ•  ๋•Œ๋งŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ดํด ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ๋กœ Union-Find(Disjoint Set) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ E, ์ •์ ์˜ ๊ฐœ์ˆ˜๋ฅผ V๋ผ ํ•  ๋•Œ O(E log E)์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์š”์†Œ ๊ฐ„ ๋น„์šฉ ์ตœ์†Œ ์—ฐ๊ฒฐ์„ ์ฐพ๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ๊ฐ„์„  ์ค‘์‹ฌ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๋Š” ์ ์—์„œ Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฐจ๋ณ„๋ฉ๋‹ˆ๋‹ค.

Prime Algorithm(ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(MST)๋ฅผ ๊ตฌํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ์‹œ์ž‘ํ•ด ์ธ์ ‘ํ•œ ๊ฐ„์„  ์ค‘ ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ„์„ ์„ ์„ ํƒํ•˜๋ฉฐ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. ๋ชจ๋“  ์ •์ ์ด ํฌํ•จ๋  ๋•Œ๊นŒ์ง€ ๊ฐ€์žฅ ์งง์€ ์—ฐ๊ฒฐ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ ํƒํ•˜๋ฉฐ, ํ•ญ์ƒ ์—ฐ๊ฒฐ๋œ ํŠธ๋ฆฌ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ(ํž™)๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(E log V)์ž…๋‹ˆ๋‹ค. Prim์€ ์ •์  ์ค‘์‹ฌ ๋ฐฉ์‹์œผ๋กœ, ์ด˜์ด˜ํ•œ ๊ทธ๋ž˜ํ”„์—์„œ Kruskal๋ณด๋‹ค ์œ ๋ฆฌํ•œ ์„ฑ๋Šฅ์„ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

BFS์™€ ๋‹ค์ต์ŠคํŠธ๋ผ์˜ ๊ณตํ†ต์ ๊ณผ ์ฐจ์ด์ ์€ ๋ญ˜๊นŒ์š”?

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

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

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ์„ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ๋ญ๊ฐ€ ์žˆ๋‚˜์š”?

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ์„ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์€ ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ A* ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ฒจ๋งŒ-ํฌ๋“œ๋Š” ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์—์„œ๋„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅ๋œ ๋ฐฉ์‹์ด๋ฉฐ, ์‚ฌ์ดํด ๊ฒ€์ถœ ๊ธฐ๋Šฅ๋„ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

A* ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์ต์ŠคํŠธ๋ผ์— ํœด๋ฆฌ์Šคํ‹ฑ ํ•จ์ˆ˜๋ฅผ ๊ฒฐํ•ฉํ•ด ๋ชฉํ‘œ ์ง€์ ๊นŒ์ง€์˜ ์˜ˆ์ƒ ๊ฑฐ๋ฆฌ๊นŒ์ง€ ๊ณ ๋ คํ•˜๋ฉฐ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ, ํŠนํžˆ ๊ฒฝ๋กœ ํƒ์ƒ‰ ๋ฌธ์ œ์—์„œ ํšจ์œจ์„ฑ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‹ค์ต์ŠคํŠธ๋ผ ์ž์ฒด๋„ **์šฐ์„ ์ˆœ์œ„ ํ(ํž™)**๋ฅผ ์ ์šฉํ•ด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O((V + E) log V)๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ์ •์  ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ •์  ์Œ (i, j)์— ๋Œ€ํ•ด ์ค‘๊ฐ„์— ๊ฑฐ์น  ์ˆ˜ ์žˆ๋Š” ์ •์  k๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณ ๋ คํ•˜๋ฉฐ, dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]) ๋ฐฉ์‹์œผ๋กœ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(Vยณ)๋กœ ๋А๋ฆฌ์ง€๋งŒ, ์Œ์˜ ๊ฐ€์ค‘์น˜ ๊ฐ„์„ ๋„ ํ—ˆ์šฉ๋˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„์œผ๋กœ ๋ชจ๋“  ๊ฒฝ๋กœ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด ์ •์  ์ˆ˜๊ฐ€ ์ ์€ ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์Œ์ˆ˜ ์‚ฌ์ดํด์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ตœ๋‹จ ๊ฒฝ๋กœ ์ž์ฒด๋Š” ์˜๋ฏธ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

P / NP / NP-Complete / P=NP? ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
์šฉ์–ด ์†ํ•œ ๋ถ„๋ฅ˜ ์„ค๋ช…
P ๊ฒฐ์ • ๋ฌธ์ œ, ๋ณต์žก๋„ ํด๋ž˜์Šค ๋‹คํ•ญ ์‹œ๊ฐ„(Polynomial Time) ์•ˆ์— "ํ’€ ์ˆ˜ ์žˆ๋Š”" ๋ฌธ์ œ ์ง‘ํ•ฉ
NP ๊ฒฐ์ • ๋ฌธ์ œ, ๋ณต์žก๋„ ํด๋ž˜์Šค ๋‹คํ•ญ ์‹œ๊ฐ„ ์•ˆ์— "๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š”" ๋ฌธ์ œ ์ง‘ํ•ฉ
NP-Complete NP ๋‚ด์˜ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ๋“ค NP ๋ฌธ์ œ ์ค‘ ๋ชจ๋“  ๋‹ค๋ฅธ NP ๋ฌธ์ œ๋กœ ํ™˜์› ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ
P = NP? ๋ณต์žก๋„ ์ด๋ก ์˜ ๋Œ€ํ‘œ์  ๋‚œ์ œ P์™€ NP๊ฐ€ ๊ฐ™์€ ์ง‘ํ•ฉ์ธ์ง€์— ๋Œ€ํ•œ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ
Comparisons Sorting์™€ ๊ทธ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Comparison Sorting์€ ์š”์†Œ๋“ค ๊ฐ„์˜ ํฌ๊ธฐ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

img

  • Bubble Sort (๊ฑฐํ’ˆ ์ •๋ ฌ = ๋ฒ„๋ธ” ์ •๋ ฌ)
    • ์ธ์ ‘ํ•œ ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜๋ฉฐ ์ •๋ ฌํ•ด ๋‚˜๊ฐ€์„œ, ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐฐ์—ด์˜ ๋งจ ๋์— ์ด๋™์‹œ์ผœ ๋’ค๋ถ€ํ„ฐ ์ฑ„์›Œ๊ฐ€๋Š” ๋ฐฉ์‹ โ†’ O(N^2)
  • Selection Sort (์„ ํƒ ์ •๋ ฌ)
    • ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ›‘์–ด์„œ ๊ฐ€์žฅ ์ž‘์€๊ฑธ ์ฒซ๋ฒˆ์งธ๋กœ ๋†“๊ณ , ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋‘๋ฒˆ์งธ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ›Œ์–ด์„œ ๊ฐ€์žฅ ์ž‘์€๊ฑธ ๋‘๋ฒˆ์งธ๋กœ ๋†“๊ณ , ์ด๋ ‡๊ฒŒ ๋๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ์‹. โ†’ O(N^2)
  • Insertion Sort (์‚ฝ์ž… ์ •๋ ฌ)
    • k๋ฒˆ์งธ ์›์†Œ๋ฅผ 1๋ถ€ํ„ฐ k-1๋ฒˆ์งธ ๊นŒ์ง€ ๋น„๊ตํ•ด์„œ ์ ์ ˆํ•œ ์œ„์น˜์— ๋ผ์›Œ ๋„ฃ๊ณ  ๊ทธ ๋’ค์˜ ๊ฐ’๋“ค์„ ํ•œ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€์–ด๋‚ด๋Š” ๋ฐฉ์‹ โ†’ O(N^2)
  • Merge Sort (๋ณ‘ํ•ฉ ์ •๋ ฌ)
    • 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด ๋ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต ๋ถ„ํ• ํ•˜๊ณ , ๊ทธ ํ›„ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ๋‹ค์‹œ ํ•ฉ์ณ๊ฐ€๋ฉด์„œ ์ •๋ ฌํ•˜๋ฉด์„œ ๋ชจ๋‘ ํ•ฉ์ณ์งˆ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. โ†’ O(N log N)
  • Heap Sort
    • ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์†Œ, ์ตœ๋Œ€ ํž™ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ด ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹. ๋‚ด๋ฆผ์ฐจ์ˆœ์€ ์ตœ๋Œ€ํž™, ์˜ค๋ฆ„์ฐจ์ˆœ์€ ์ตœ์†Œ ํž™. โ†’ O(N log N)
  • Quick Sort
    • ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์ž„์˜์˜ ๊ธฐ์ค€์ธ pivot์„ ์ •ํ•˜์—ฌ ํ•ด๋‹น ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋‘๊ฐœ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ํ•œ์ชฝ์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€๊ฐ’์„ ๋„ฃ๊ณ  ๋ฐ˜๋Œ€์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค. ์ด๋ฅผ ๋”์ด์ƒ ์ชผ๊ฐค ๋ถ€๋ถ„์ง‘ํ•ฉ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต โ†’ ํ‰๊ท =O(N log N), ์ตœ์•…=O(N^2)
  • Shell Sort
    • ์‚ฝ์ž… ์ •๋ ฌ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ณ ์ž ๋„์ž…. interval(๊ฐ„๊ฒฉ) ๋งŒํผ ๋ฒŒ์–ด์ง„ ์›์†Œ๋“ค์„ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„œํ•œ ๋’ค ์‚ฝ์ž…์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹. ์ดˆ๊ธฐ interval ๊ฐ’์€ ์ „์ฒด ๊ธธ์ด / 2 ๋กœ ์ฃผ์–ด์ง€๋ฉฐ ๊ณ„์† 2๋กœ ๋‚˜๋ˆ ์ฃผ๊ณ  ๋ฐ˜๋ณต. โ†’ O(N^1.25) OR โ†’ O(N^1.5)
  • Tim Sort
    • ๋ณ‘ํ•ฉ+์‚ฝ์ž… ์ •๋ ฌ๋กœ ์•ˆ์ •์ ์ด๋ฉฐ ๋ณ‘ํ•ฉ ์ •๋ ฌ์— ๋น„ํ•ด ์ ์€ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•จ. ํŒŒ์ด์ฌ์—์„œ ์ •๋ ฌ ํ‘œ์ค€.โ†’ O(N log N)
non-Comparisons Sorting์™€ ๊ทธ ์ข…๋ฅ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Non-Comparison Sorting์€ ์›์†Œ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํฌ๊ธฐ ๋น„๊ต ์—†์ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • Counting Sort
    • ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์–ด์„œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹ โ†’ O(N)
  • Radix Sort (๊ธฐ์ˆ˜ ์ •๋ ฌ)
    • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆ˜์˜ ๋‚ฎ์€ ์ž๋ฆฌ ์ˆ˜๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹. ์ด 10๊ฐœ์˜ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 1์˜ ์ž๋ฆฌ ์ˆ˜ โ†’ 10์˜ ์ž๋ฆฌ์ˆ˜ ์ด๋Ÿฐ์‹์œผ๋กœ ํ™•์ธ. โ†’ O(N)
Stable sort & Unstable sort์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ‚ค ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ๋“ค์ด ์ •๋ ฌํ•˜๋ฉด์„œ ์ „ ํ›„์— ์ˆœ์„œ๊ฐ€ ๋’ค๋ฐ”๋€Œ๋ฉด unstable sort ๋ผ๊ณ  ํ•˜๊ณ , ์ˆœ์„œ๊ฐ€ ์•ˆ๋ฐ”๋€Œ๋ฉด stable sort ๋ผ๊ณ  ํ•œ๋‹ค.

  • Stable sort โ†’ Bubble sort / Insertion sort / Merge sort
  • Unstable sort โ†’Selection sort / Quick sort / Heap sort
Quick Sort์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Quick Sort์˜ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n log n)์œผ๋กœ, ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ์‹์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๋ ฌ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ, ์ฆ‰ ํ•ญ์ƒ ๊ฐ€์žฅ ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ํƒํ•˜๋ฉด ํ•œ์ชฝ๋งŒ ๋ถ„ํ• ๋˜์–ด **O(nยฒ)**์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

์œ„์ƒ ์ •๋ ฌ (Topology Sort)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์œ„์ƒ ์ •๋ ฌ์€ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์ •์ ๋“ค์„ ์„ ํ›„ ๊ด€๊ณ„์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ณดํ†ต ์‚ฌ์ดํด์ด ์—†๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(DAG)์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์—… ๊ฐ„ ์˜์กด์„ฑ์ด ์žˆ๋Š” ์ผ์ •, ์ปดํŒŒ์ผ ์ˆœ์„œ, ๊ณผ๋ชฉ ์ด์ˆ˜ ์กฐ๊ฑด ๋“ฑ์„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•  ๋•Œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹์œผ๋กœ๋Š” ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ๊ณ , ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ์ง„์ž… ์ฐจ์ˆ˜๋ฅผ ์ค„์ด๋Š” Kahnโ€™s ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ, DFS ๊ธฐ๋ฐ˜์œผ๋กœ ํ›„์œ„ ์ˆœํšŒ๋ฅผ ์ด์šฉํ•ด ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(V + E)์ด๋ฉฐ, ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋ฉด ์œ„์ƒ ์ •๋ ฌ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์บ์‹œ๋Š” ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ €์žฅ ๊ณต๊ฐ„์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์บ์‹œ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…๋ฅ˜

  1. FIFO (First in First Out) - ๊ฐ€์žฅ ๋จผ์ € ์บ์‹œ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ œ๊ฑฐ
  2. LRU (Least Recently Used)
    • ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ
    • ํ•ด์‹œ๋งต๊ณผ ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„.
    • ์‹œ๊ฐ„๋ณต์žก๋„ โ†’ ์กฐํšŒ, ์‚ฝ์ž…, ์‚ญ์ œ O(1)
  3. LFU (Least Frequently Used) - ์‚ฌ์šฉ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐ
์†Œ์ˆ˜ ํŒ๋ณ„ ๋ฐฉ์‹์„ O(N), O(N/2), O(N^0.5) ๋ณ„๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  1. O(N) ๋ฐฉ์‹
    • ํ•œ ์ˆซ์ž์— ๋Œ€ํ•œ ์†Œ์ˆ˜ ํŒ๋ณ„์‹œ 2๋ถ€ํ„ฐ ํ•ด๋‹น ์ˆซ์ž ๋ฐ”๋กœ ์ „๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜๋กœ ๋‚˜๋ˆ ๋ณด๊ณ  ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•.
  2. O(N/2) ๋ฐฉ์‹
    • ์ง์ˆ˜๋ฅผ ๋จผ์ € ์ œ์™ธํ•˜๊ณ  2 ์ดํ›„์˜ ํ™€์ˆ˜๋งŒ ๊ฒ€์‚ฌํ•˜์—ฌ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•.
  3. O(N^0.5) ๋ฐฉ์‹
    • ์†Œ์ˆ˜์˜ ์•ฝ์ˆ˜ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ โˆšN ์ดํ•˜์— ์กด์žฌํ•˜๋ฏ€๋กœ, 2๋ถ€ํ„ฐ โˆšN๊นŒ์ง€๋งŒ ๋‚˜๋ˆ ๋ณด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ตœ์ ํ™”.
์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

O(n log log n) ๋ฐฉ์‹

ํ•˜๋‚˜์˜ ์ˆซ์ž์— ๋Œ€ํ•ด ์†Œ์ˆ˜ํŒ๋ณ„์„ ์œ„ ์„ธ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์ด๊ฑด ํŠน์ • ๋ฒ”์œ„์˜ ๋ชจ๋“  ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ• ๋•Œ ์œ ์šฉ. 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ๋ชจ๋“  ์†Œ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ, ๋ฐฐ์ˆ˜๋“ค์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ์†Œ์ˆ˜๋งŒ ๋‚จ๊ธฐ๋Š” ๋ฐฉ์‹.

ex) 100 ์ดํ•˜์˜ ์†Œ์ˆ˜๋ฅผ ์ฐพ์œผ๋ ค๋ฉด 1์„ ์ œ์™ธํ•˜๊ณ , 2๋ถ€ํ„ฐ 100์˜ ์ œ๊ณฑ๊ทผ์ธ 10๊นŒ์ง€์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค.

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

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

ERD ํ’€๋„ค์ž„๊ณผ ๋ฌด์—‡์ธ์ง€?

Entity-Relationship Diagram์œผ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๋‹ค์ด์–ด๊ทธ๋žจ

SQL๊ณผ NoSQL์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

SQL์€ ์ •ํ•ด์ง„ ์Šคํ‚ค๋งˆ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ๋ณต์žกํ•œ ์กฐ์ธ๊ณผ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์— ๊ฐ•ํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ๊ณผ ๊ตฌ์กฐํ™”๊ฐ€ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ MySQL, PostgreSQL, Oracle ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด NoSQL์€ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๋ฌธ์„œ, ํ‚ค-๊ฐ’, ์ปฌ๋Ÿผ, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, ์ˆ˜ํ‰ ํ™•์žฅ์„ฑ๊ณผ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ๊ฐ•์ ์„ ๊ฐ€์ง€๋ฉฐ ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด๋‚˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. MongoDB, Redis, Cassandra ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ž…๋‹ˆ๋‹ค.

์ฟ ํ‚ค, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€, ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์ฟ ํ‚ค โ†’ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ, ๋ณดํ†ต ์ธ์ฆ ์ •๋ณด๋‚˜ ์‚ฌ์šฉ์ž ์„ค์ •์„ ์œ ์ง€ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ โ†’ ๋ธŒ๋ผ์šฐ์ €์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ์„ธ์…˜ ์Šคํ† ๋ฆฌ์ง€ โ†’ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํž ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋Š” ํŠน์ง•์ด ์žˆ์–ด ์ผ์‹œ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ์— ์ ํ•ฉํ•˜๋‹ค.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ธ๋ฑ์Šค(Index)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Index๋ž€ ํ…Œ์ด๋ธ”์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ FTS(Full Table Scan)๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ํ•ด๋‹น ์ž๋ฃŒ์˜ ํ…Œ์ด๋ธ”์„ ์—‘์„ธ์Šค ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค๋Š” ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ ๋น ๋ฅด์ง€๋งŒ, ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค.

์ฆ‰, ์ธ๋ฑ์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์„ฑ๋Šฅ์„ ํฌ์ƒํ•˜๊ณ  ๊ทธ๋Œ€์‹  ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ๋Šฅ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DBMS๊ฐ€ Index๋ฅผ ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Index๋Š” ์ฃผ๋กœ B+Tree ์ธ๋ฑ์Šค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ B-Tree๋ฅผ ๊ฐœ์„ ์‹œํ‚จ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, BTree ๋ฆฌํ”„๋…ธ๋“œ๋“ค์„ LinkedList๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ˆœ์ฐจ ๊ฒ€์ƒ‰์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋‚˜์œ O(log2N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

DBMS๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

DBMS(Database Management System)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅ, ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋กœ, ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ, ์ผ๊ด€์„ฑ, ๋ณด์•ˆ, ๋™์‹œ์„ฑ ์ œ์–ด ๋“ฑ์„ ๋ณด์žฅํ•˜๋ฉฐ, ์ฟผ๋ฆฌ ์–ธ์–ด(SQL)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ DBMS๋กœ๋Š” MySQL, PostgreSQL, Oracle ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ง์ ‘ ํŒŒ์ผ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  DBMS๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ์•ˆ์ •์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

ํŠธ๋žœ์žญ์…˜(Transaction)์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ์—ฐ์‚ฐ ๋ฌถ์Œ์œผ๋กœ, ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‘ ์‹คํŒจํ•ด์•ผ ํ•˜๋Š” ์›์ž์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์€ํ–‰ ์ด์ฒด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์˜ ์ž‘์—…์ด ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ์ž‘์—…์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์€ ACID(์›์ž์„ฑ, ์ผ๊ด€์„ฑ, ๊ณ ๋ฆฝ์„ฑ, ์ง€์†์„ฑ) ํŠน์„ฑ์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์žฅ์• ๋‚˜ ๋™์‹œ ์ ‘๊ทผ ์ƒํ™ฉ์—์„œ๋„ ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. DBMS๋Š” ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ค‘์—๋„ ์•ˆ์ „ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ์„๊นŒ์š”?

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ™œ๋™(Active), ๋ถ€๋ถ„ ์™„๋ฃŒ(Partially Committed), ์ปค๋ฐ‹(Committed), ์‹คํŒจ(Failed), ์ฒ ํšŒ(Aborted)์˜ ๋‹ค์„ฏ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

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

ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ์ˆ˜์ค€(Isolation Level)์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ฆฝ ์ˆ˜์ค€์€ ํŠธ๋žœ์žญ์…˜์—์„œ ์ผ๊ด€์„ฑ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•˜๋Š” ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

DB๋Š” ACID ํŠน์ง•๊ณผ ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์ด ๋…๋ฆฝ์ ์ธ ์ˆ˜ํ–‰์„ ํ•˜๋„๋ก ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Lockin์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์ด DB๋ฅผ ๋‹ค๋ฃจ๋Š” ๋™์•ˆ์—๋Š” ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ด€์—ฌํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌด์กฐ๊ฑด์ ์ธ Locking์œผ๋กœ ์ˆ˜๋งŽ์€ ํŠธ๋žœ์žญ์…˜๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด DB์˜ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง€๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํšจ์œจ์ ์ธ Locking ๋ฐฉ๋ฒ•์ธ ๊ณ ๋ฆฝ ์ˆ˜์ค€์„ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐฉ์ƒํƒœ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๊ต์ฐฉ์ƒํƒœ(Deadlock)๋Š” ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ๊ฐ€ ์ ์œ ํ•œ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์ด ํ•„์š”ํ•œ ์ž์›์„ ์–ป์ง€ ๋ชปํ•˜๊ณ , ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ž‘์—… ํ๋ฆ„์ด ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

Inner Join๊ณผ Outer Join์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Inner Join์€ ๋‘ ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜๋Š” ๊ต์ง‘ํ•ฉ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๊ณตํ†ต๋œ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ฒฐ๊ณผ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ ๊ฐ๊ณผ ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”์„ Inner Joinํ•˜๋ฉด, ์ฃผ๋ฌธ์ด ์žˆ๋Š” ๊ณ ๊ฐ๋งŒ ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Outer Join์€ ์กฐ๊ฑด์— ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ํ•œ์ชฝ ๋˜๋Š” ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Left Outer Join์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์˜ค๋ฅธ์ชฝ์— ๋งค์นญ๋˜๋Š” ๊ฐ’์ด ์—†์œผ๋ฉด NULL์„ ์ฑ„์šฐ๊ณ , Right Outer Join์€ ๊ทธ ๋ฐ˜๋Œ€, Full Outer Join์€ ์–‘์ชฝ ๋ชจ๋‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ด ์กฐ๊ฑด์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ NULL๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

img

cascade์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Cascade(์นด์Šค์ผ€์ด๋“œ)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ(์‚ญ์ œ ๋˜๋Š” ์ˆ˜์ •)์ด ์ž์‹ ํ…Œ์ด๋ธ”์— ์—ฐ์‡„์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์™ธ๋ž˜ ํ‚ค(Foreign Key) ์ œ์•ฝ ์กฐ๊ฑด๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์ž๋™์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ON DELETE CASCADE๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ–‰์ด ์‚ญ์ œ๋  ๋•Œ ํ•ด๋‹น ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ํ–‰๋„ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ON UPDATE CASCADE๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ‚ค ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๋„ ํ•จ๊ป˜ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ˆ˜๋™ ์ •๋ฆฌ ์—†์ด๋„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋Œ€๋Ÿ‰ ์‚ญ์ œ๋‚˜ ์ˆ˜์ •์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์Šˆํผํ‚ค, ํ›„๋ณดํ‚ค, ๋Œ€์ฒดํ‚ค, ๊ธฐ๋ณธํ‚ค, ์™ธ๋ž˜ํ‚ค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • Super key : ์œ ์ผ์„ฑ O, ์ตœ์†Œ์„ฑ X
  • Candidate key : ์œ ์ผ์„ฑ O, ์ตœ์†Œ์„ฑ O (ํ‚ค์˜ ์ง‘ํ•ฉ์—์„œ ํ•˜๋‚˜๋ผ๋„ ์‚ญ์ œํ•˜๋ฉด ์œ ์ผ์„ฑ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ์„ฑ์งˆ)
  • Primary key : ํ›„๋ณด ํ‚ค ์ค‘์—์„œ ์„ ์ •๋œ ํ‚ค. ์œ ์ผ์„ฑ O, ์ตœ์†Œ์„ฑ O / Null๊ฐ’ ๊ฐ€์งˆ์ˆ˜ ์—†๋‹ค
  • Alternate Key : ํ›„๋ณด ํ‚ค์—์„œ ๊ธฐ๋ณธํ‚ค๋ฅผ ๋บ€ ๋ชจ๋“  ํ›„๋ณด ํ‚ค
  • Foreign Key : ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ Primary key๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ
ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

ํŠธ๋ฆฌ๊ฑฐ(Trigger)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํŠน์ • ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ(INSERT, UPDATE, DELETE)**๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ **์ž๋™์œผ๋กœ ์‹คํ–‰๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ”„๋กœ์‹œ์ €**์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์ž๋™ ์‹คํ–‰๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€๋‚˜ ๋กœ๊ทธ ๊ธฐ๋ก, ๊ด€๋ จ ํ…Œ์ด๋ธ” ๋™๊ธฐํ™” ๋“ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ๊ฑฐ๋Š” BEFORE ๋˜๋Š” AFTER ์˜ต์…˜์„ ํ†ตํ•ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ์ ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์žฅ์ ์œผ๋กœ๋Š” ๋ฐ˜๋ณต์ ์ธ ์ž‘์—… ์ž๋™ํ™”์™€ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๊ฐ€ ์žˆ์ง€๋งŒ, ๋ณต์žกํ•œ ๋กœ์ง์€ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋””๋ฒ„๊น… ์–ด๋ ค์›€์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์–ด ์‹ ์ค‘ํ•˜๊ฒŒ ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ •๊ทœํ™”์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ๊ณผ์ •์—์„œ ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์‚ฝ์ž…/๊ฐฑ์‹ /์‚ญ์ œ ์ด์ƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ตœ์†Œํ™” โ†’ ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ โ†’ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
  • ์‚ฝ์ž…ยท๊ฐฑ์‹ ยท์‚ญ์ œ ์ด์ƒ ๋ฐฉ์ง€ โ†’ ๋น„์ •์ƒ์ ์ธ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐฉ์ง€
  • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด โ†’ ๋ณ€๊ฒฝ์ด ์žˆ์–ด๋„ ๊ตฌ์กฐ์ ์œผ๋กœ ์•ˆ์ •์ 
  • ์ •๊ทœํ™”์˜ ๋‹จ๊ณ„
    • ์ •๊ทœํ™”๋Š” 1NF โ†’ 2NF โ†’ 3NF โ†’ BCNF โ†’ 4NF โ†’ 5NF ์ˆœ์œผ๋กœ ์ง„ํ–‰๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 3NF ๋˜๋Š” BCNF๊นŒ์ง€๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
๋ฌด๊ฒฐ์„ฑ์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฌด๊ฒฐ์„ฑ(Integrity)์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋˜๋ฉฐ, ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Œ์„ ๋ณด์žฅํ•˜๋Š” ์„ฑ์งˆ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์‹œ์Šคํ…œ ๋ณด์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ •๋ณด๊ฐ€ ์†์ƒ๋˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜ ์—†์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

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

์ •๊ทœํ™”์˜ ๋ชฉ์ ๊ณผ ๋‹จ๊ณ„๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์ •๊ทœํ™”์˜ ๋ชฉ์ 
    • ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ตœ์†Œํ™” โ†’ ์ €์žฅ ๊ณต๊ฐ„ ์ ˆ์•ฝ
    • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ โ†’ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
    • ์‚ฝ์ž…ยท๊ฐฑ์‹ ยท์‚ญ์ œ ์ด์ƒ ๋ฐฉ์ง€ โ†’ ๋น„์ •์ƒ์ ์ธ ๋ฐ์ดํ„ฐ ์กฐ์ž‘ ๋ฐฉ์ง€
    • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด โ†’ ๋ณ€๊ฒฝ์ด ์žˆ์–ด๋„ ๊ตฌ์กฐ์ ์œผ๋กœ ์•ˆ์ •์ 
  • ์ •๊ทœํ™”์˜ ๋‹จ๊ณ„
    • ์ •๊ทœํ™”๋Š” 1NF โ†’ 2NF โ†’ 3NF โ†’ BCNF โ†’ 4NF โ†’ 5NF ์ˆœ์œผ๋กœ ์ง„ํ–‰๋˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ 3NF ๋˜๋Š” BCNF๊นŒ์ง€๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
์ด์ƒํ˜„์ƒ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

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

NoSQL์˜ ์žฅ๋‹จ์ ์€?

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

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

Statement vs PreparedStatement ๋ฅผ ๋น„๊ตํ•ด์ฃผ์„ธ์š”.
  • Statement๋Š” ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค SQL์„ ์ปดํŒŒ์ผํ•˜๋ฏ€๋กœ ๋ฐ˜๋ณต ์‹คํ–‰ ์‹œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๊ณ , SQL Injection ๊ณต๊ฒฉ์— ์ทจ์•ฝํ•˜๋‹ค.
  • PreparedStatement: ๋ฏธ๋ฆฌ SQL์„ ์ปดํŒŒ์ผ ํ•œ ํ›„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๋ฏ€๋กœ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ณ , ๋ณด์•ˆ์ƒ SQL Injection์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์šด์˜์ฒด์ œ

์šด์˜์ฒด์ œ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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

์šด์˜์ฒด์ œ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”?

์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์ž๋Š” ์šด์˜์ฒด์ œ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œํ•œํ…Œ ๋„์›€์„ ๋ฐ›์•„์„œ ์‹คํ–‰๋˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„์ฑˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•œ ๊ทผ์›์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ธ ์šด์˜์ฒด์ œ๋ฅผ ์ž˜ ์•Œ์•„์•ผ ํ•œ๋‹ค.

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

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

์—ฐ์† ํ• ๋‹น (Contiguous Allocation)

  • ๊ณ ์ • ๋ถ„ํ•  (Fixed Partition):
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ํ• ๋‹น
    • ๋‚ด๋ถ€ ๋‹จํŽธํ™”(Internal Fragmentation) ๋ฐœ์ƒ
  • ๊ฐ€๋ณ€ ๋ถ„ํ•  (Variable Partition):
    • ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ์— ๋งž๊ฒŒ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ๋™์ ์œผ๋กœ ํ• ๋‹น
    • ์™ธ๋ถ€ ๋‹จํŽธํ™”(External Fragmentation) ๋ฐœ์ƒ

๋น„์—ฐ์† ํ• ๋‹น (Non-contiguous Allocation)

  • ํŽ˜์ด์ง• (Paging):
    • ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ณ ์ • ํฌ๊ธฐ์˜ ํ”„๋ ˆ์ž„์œผ๋กœ, ๋…ผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํŽ˜์ด์ง€๋กœ ๋ถ„ํ• 
    • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”๋กœ ์ฃผ์†Œ ๋ณ€ํ™˜ ๊ด€๋ฆฌ
    • ๋‚ด๋ถ€ ๋‹จํŽธํ™” ๋ฐœ์ƒ
  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (Segmentation):
    • ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„(์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ์Šคํƒ ๋“ฑ)๋ณ„๋กœ ๋ถ„ํ• 
    • ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ”๋กœ ์ฃผ์†Œ ๋ณ€ํ™˜
    • ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฐœ์ƒ
  • ํŽ˜์ด์ง€๋“œ ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜ (Paged Segmentation):
    • ์„ธ๊ทธ๋จผํŠธ๋ฅผ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ
    • ๋‘ ๋ฐฉ์‹์˜ ์žฅ์  ๊ฒฐํ•ฉ
ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.
  • Process : ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›์€ ์ž‘์—…์˜ ๋‹จ์œ„
  • Thread : ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰ ํ๋ฆ„์˜ ๋‹จ์œ„

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์Šค๋ ˆ๋“œ๋“ค์€ ๊ฐ๊ฐ stack์˜์—ญ๋งŒ ๋”ฐ๋กœ ํ• ๋‹น๋ฐ›๊ณ  code, data, heap์˜์—ญ์€ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

Multi-Process : ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…(task)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

  • ์žฅ์  : ํ•˜๋‚˜์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์˜ํ–ฅ์ด ์ „ํŒŒ๋˜์ง€ ์•Š์Œ
  • ๋‹จ์  : ์žฆ์€ Context Switching์œผ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด ํ†ต์‹ ์ด ์–ด๋ ค์›€(IPC)

Multi-Thread : ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…(task)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

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

๋‚ด๋ถ€ ๋‹จํŽธํ™”๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ • ํฌ๊ธฐ๋กœ ๋ถ„ํ• ํ•  ๋•Œ, ์‹ค์ œ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„๋ณด๋‹ค ํฐ ๋ธ”๋ก์ด ํ• ๋‹น๋˜์–ด ๋‚จ๋Š” ๊ณต๊ฐ„์ด ๋ธ”๋ก ๋‚ด๋ถ€์— ๋‚ญ๋น„๋˜๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 100KB์งœ๋ฆฌ ๋ธ”๋ก์— 70KB๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋‚จ์€ 30KB๋Š” ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

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

๋ฐ๋“œ๋ฝ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋ฐ๋“œ๋ฝ(Deadlock)์€ ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ์ ์œ ํ•œ ์ฑ„ ์„œ๋กœ์˜ ์ž์›์ด ํ’€๋ฆฌ๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฌดํ•œ ๋Œ€๊ธฐ ์ƒํƒœ์— ๋น ์ง€๋Š” ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋” ์ด์ƒ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์ž์› ํ๋ฆ„์ด ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

๋ฐ๋“œ๋ฝ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด์ด ๋ชจ๋‘ ๋งŒ์กฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion): ์ž์›์€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ ์œ ์™€ ๋Œ€๊ธฐ(Hold and Wait): ์ž์›์„ ์ ์œ ํ•œ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋น„์„ ์ (No Preemption): ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ  ์ค‘์ธ ์ž์›์„ ๊ฐ•์ œ๋กœ ๋นผ์•—์„ ์ˆ˜ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ํ™˜ํ˜• ๋Œ€๊ธฐ(Circular Wait): ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž์›์„ ์ˆœํ™˜์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜•ํƒœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ์‚ฌ์ „์— ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ํšŒํ”ผํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž์› ์š”์ฒญ ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•ด ํ™˜ํ˜• ๋Œ€๊ธฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜, ์€ํ–‰๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ฒ˜๋Ÿผ ์•ˆ์ „ ์ƒํƒœ๋งŒ ํ—ˆ์šฉํ•ด ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํƒ€์ž„์•„์›ƒ, ์ž์› ์„ ์ , ๊ต์ฐฉ ์ƒํƒœ ํƒ์ง€ ๋ฐ ๋ณต๊ตฌ ๊ฐ™์€ ์‹คํ–‰ ์ค‘ ๋Œ€์‘ ๋ฐฉ์‹๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง• ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

ํŽ˜์ด์ง• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์—์„œ ํŽ˜์ด์ง€ ๊ต์ฒด๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์–ด๋–ค ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ œํ•œ๋œ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์—†์„ ๊ฒฝ์šฐ ํŽ˜์ด์ง€ ๋ถ€์žฌ(Page Fault)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋•Œ ์ ์ ˆํ•œ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์ ์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ํŽ˜์ด์ง• ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” FIFO(์„ ์ž…์„ ์ถœ), LRU(Least Recently Used), Optimal(์ตœ์ ), LFU(Least Frequently Used) ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ ๊ต์ฒด ๊ธฐ์ค€์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด LRU๋Š” ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , Optimal์€ ์•ž์œผ๋กœ ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ฑฐํ•˜์ง€๋งŒ ์‹ค์ œ ๊ตฌํ˜„์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์€ ํŽ˜์ด์ง€ ๋ถ€์žฌ์œจ์„ ๋‚ฎ์ถ”๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํšจ์œจ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์Šค์ผ€์ฅด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•„๋Š”๋Œ€๋กœ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” FCFS(First Come First Serve), SJF(Shortest Job First), Priority Scheduling, Round Robin, MLFQ(Multi-Level Feedback Queue) ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. FCFS๋Š” ๋‹จ์ˆœํ•˜์ง€๋งŒ ๊ธด ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , SJF๋Š” ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ์งง์ง€๋งŒ ์‹คํ–‰ ์‹œ๊ฐ„ ์˜ˆ์ธก์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Round Robin์€ ์‹œ๋ถ„ํ•  ๋ฐฉ์‹์œผ๋กœ ๊ณต์ •์„ฑ์„ ๋ณด์žฅํ•˜๋ฉฐ, MLFQ๋Š” ์šฐ์„ ์ˆœ์œ„์™€ ์‹œ๊ฐ„ ํ• ๋‹น์„ ์กฐ์ ˆํ•ด ๋‹ค์–‘ํ•œ ์ž‘์—…์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.

starvation๊ณผ convoy effect์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

Starvation(๊ธฐ์•„ ํ˜„์ƒ)์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์žฅ๊ธฐ๊ฐ„ ํ• ๋‹น๋ฐ›์ง€ ๋ชปํ•ด ์˜๊ตฌ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง์—์„œ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—…์ด ๊ณ„์† ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ์ž‘์—…์ด ๊ณ„์† ๋ฐ€๋ ค ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Convoy Effect(ํ˜ธ์œ„ ํšจ๊ณผ)๋Š” ํ•˜๋‚˜์˜ ๊ธด ์ž‘์—…์ด ์ž์›์„ ์ ์œ ํ•œ ๋™์•ˆ, ์งง์€ ์ž‘์—…๋“ค์ด ์ค„์ค„์ด ๋Œ€๊ธฐํ•˜๋ฉฐ ์ „์ฒด ์‹œ์Šคํ…œ ํšจ์œจ์ด ์ €ํ•˜๋˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฃผ๋กœ FCFS ๊ฐ™์€ ์„ ์ž…์„ ์ถœ ์Šค์ผ€์ค„๋ง์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ, ํ•œ ์ž‘์—…์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋‚˜๋จธ์ง€๋“ค์ด ๋ฌถ์—ฌ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ตฌ์กฐ์  ๋ณ‘๋ชฉ์ด ์›์ธ์ž…๋‹ˆ๋‹ค.

์บ์‹œํžˆํŠธ์™€ ์บ์‹œ๋ฏธ์Šค์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

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

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋ž€ ๋ญ”๊ฐ€์š”?

ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”๋Š” ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋‚˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ์ž์›์— ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ œ์–ด ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ž„๊ณ„ ๊ตฌ์—ญ(Critical Section) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ๋ฎคํ…์Šค(Mutex), ์„ธ๋งˆํฌ์–ด(Semaphore), ๋ชจ๋‹ˆํ„ฐ(Monitor) ๋“ฑ์˜ ๋™๊ธฐํ™” ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ž˜๋ชป๋œ ๋™๊ธฐํ™”๋Š” ๊ต์ฐฉ ์ƒํƒœ๋‚˜ ๋ฌดํ•œ ๋Œ€๊ธฐ ๋“ฑ์˜ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์–ด, ์ ์ ˆํ•œ ์„ค๊ณ„์™€ ๊ตฌํ˜„์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

busy waiting์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

์ด ๋ฐฉ์‹์€ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฅด์ง€๋งŒ, CPU ์ž์›์„ ๋‚ญ๋น„ํ•˜๋ฏ€๋กœ ํšจ์œจ์ด ๋‚ฎ๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์„ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ๋‚˜ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์—์„œ๋Š” ๋ณดํ†ต Busy Waiting ๋Œ€์‹  ๋ธ”๋กœํ‚น ๊ธฐ๋ฐ˜ ๋Œ€๊ธฐ ๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค์˜ ์ฐจ์ด๋Š”?

๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด์™€ ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด์˜์˜ ์ฐจ์ด๋Š”?

๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด์™€ ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋Š” ๊ธฐ๋ณธ ๊ตฌ์กฐ๋Š” ๊ฐ™์ง€๋งŒ, ์นด์šดํ„ฐ ๊ฐ’์˜ ๋ฒ”์œ„์™€ ์šฉ๋„์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด๋Š” ๊ฐ’์ด 0 ๋˜๋Š” 1๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด, ๋‹จ์ผ ์ž์› ์ œ์–ด ๋˜๋Š” ์Šค๋ ˆ๋“œ ๊ฐ„ ์‹ ํ˜ธ ์ „๋‹ฌ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ฎคํ…์Šค์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์†Œ์œ ๊ถŒ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์Šค๋ ˆ๋“œ๋“  ํ•ด์ œ(signal)ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋Š” 0 ์ด์ƒ์˜ ์ •์ˆ˜ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ์—ฌ๋Ÿฌ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๋™์‹œ์— ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ž์›์ด 3๊ฐœ๋ผ๋ฉด ์ดˆ๊ธฐ๊ฐ’์„ 3์œผ๋กœ ๋‘๊ณ , ๋™์‹œ์— ์ตœ๋Œ€ 3๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด, ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด๋Š” ๋‹จ์ผ ์ž์›์šฉ, ์นด์šดํŒ… ์„ธ๋งˆํฌ์–ด๋Š” ๋‹ค์ค‘ ์ž์›์šฉ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋ฎคํ…์Šค์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์†Œ์œ ๊ถŒ ์—†์ด ๋” ์œ ์—ฐํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

(์นด์šดํŒ…)์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค์˜ ์ฐจ์ด๋Š”?
  1. Mutex๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์งย 1๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ,ย Semaphore๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด 1๊ฐœ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  2. Mutex๋Š” ์ž์›์„ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฑ…์ž„์„ ๊ฐ€์ง€๋Š” ๋ฐ˜๋ฉดย Semaphore๋Š” ์ž์› ์†Œ์œ ๊ฐ€ ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. Mutex๋Š” ์ƒํƒœ๊ฐ€ 0, 1 ๋ฟ์ด๋ฏ€๋กœ Lock์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋งŒ์ด ์ด Mutex๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉดย Semaphore๋Š” Semaphore๋ฅผ ์†Œ์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ Semaphore๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. Semaphore๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ ์žˆ๊ณ , ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, Mutex๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ Clean up ๋ฉ๋‹ˆ๋‹ค.
๋ฐ”์ด๋„ˆ๋ฆฌ ์„ธ๋งˆํฌ์–ด์™€ ๋ฎคํ…์Šค์˜ ์ฐจ์ด๋Š”?
  1. Mutex๋Š” ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์งย 1๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ,ย Binary Semaphore๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 1๊ฐœ์˜ ์ž์›์— ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ฃผ๋กœ ์Šค๋ ˆ๋“œ ๊ฐ„ ์‹ ํ˜ธ ์ „๋‹ฌ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. Mutex๋Š” ์ž์›์„ ์†Œ์œ ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฑ…์ž„์„ ๊ฐ€์ง€๋Š” ๋ฐ˜๋ฉดย Binary Semaphore๋Š” ์ž์› ์†Œ์œ  ๊ฐœ๋…์ด ์—†์œผ๋ฉฐ, ์†Œ์œ ํ•˜์ง€ ์•Š์€ ์Šค๋ ˆ๋“œ๋„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. Mutex๋Š” ์ƒํƒœ๊ฐ€ 0, 1 ๋ฟ์ด๋ฏ€๋กœ Lock์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ๋ฝ์„ ์†Œ์œ ํ•œ ์Šค๋ ˆ๋“œ๋งŒ์ด ์ด Mutex๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Binary Semaphore๋Š” ์†Œ์œ ๊ถŒ์ด ์—†์–ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด์ œ(signal)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. Binary Semaphore๋Š” ์‹œ์Šคํ…œ ๋ฒ”์œ„์— ๊ฑธ์ณ ์žˆ๊ณ , ํŒŒ์ผ ์‹œ์Šคํ…œ ์ƒ์˜ ํŒŒ์ผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, Mutex๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋  ๋•Œ ์ž๋™์œผ๋กœ Clean up ๋ฉ๋‹ˆ๋‹ค.
๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ (Virtual Memory)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

Multi-Process : ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…(task)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

  • ์žฅ์  : ํ•˜๋‚˜์˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์˜ํ–ฅ์ด ์ „ํŒŒ๋˜์ง€ ์•Š์Œ
  • ๋‹จ์  : ์žฆ์€ Context Switching์œผ๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด ํ†ต์‹ ์ด ์–ด๋ ค์›€(IPC)

Multi-Thread : ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž‘์—…(task)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ

  • ์žฅ์  : ์‹œ์Šคํ…œ ์ž์› ํšจ์œจ์„ฑ ์ฆ๊ฐ€, ์ฒ˜๋ฆฌ ๋น„์šฉ ๊ฐ์†Œ, ์ž์› ๊ณต์œ 
  • ๋‹จ์  : ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์ด ๊ฐ, ์ž์› ๊ณต์œ ๋กœ ์ธํ•œ ๋™๊ธฐํ™” ๋ฌธ์ œ, ๋””๋ฒ„๊น…์ด ๊นŒ๋‹ค๋กœ์›€
ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์ „์ด๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • New โ†’ Ready: ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ํ›„ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „์ด
  • Ready โ†’ Running: CPU ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์„ ํƒ๋˜์–ด ์‹คํ–‰
  • Running โ†’ Ready: ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค ์ข…๋ฃŒ๋‚˜ ์„ ์ ์œผ๋กœ ์ธํ•ด ๋‹ค์‹œ ์ค€๋น„ ์ƒํƒœ๋กœ
  • Running โ†’ Waiting: I/O ์š”์ฒญ์ด๋‚˜ ์ด๋ฒคํŠธ ๋Œ€๊ธฐ๋กœ ์ธํ•ด ๋Œ€๊ธฐ ์ƒํƒœ๋กœ
  • Waiting โ†’ Ready: I/O ์™„๋ฃŒ๋‚˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ ํ›„ ๋‹ค์‹œ ์ค€๋น„ ์ƒํƒœ๋กœ
  • Running โ†’ Terminated: ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์™„๋ฃŒ
๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ „๋žต์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์šด์˜์ฒด์ œ๋Š” ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ํŽ˜์ด์ง•, ์„ธ๊ทธ๋จผํ…Œ์ด์…˜ ๋“ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ํŽ˜์ด์ง•
    • ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ธ”๋ก์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ๋‹จํŽธํ™”๋ฅผ ์ค„์ธ๋‹ค.
    • ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ๋ถ„ํ• ๋˜์–ด ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์ž‘์€ ๊ณต๊ฐ„์ด ๋‚จ๋”๋ผ๋„ ์ด๋ฅผ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋กœ ํ•ฉ์ณ ํฐ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ถ€ ๋‹จํŽธํ™” ํ•ด๊ฒฐ
  2. ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜
    • ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํ™œ์šฉ๋„๋ฅผ ๋†’์ธ๋‹ค.
    • ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ์— ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ์–ด ๋‚ด๋ถ€ ๋‹จํŽธํ™” ํ•ด๊ฒฐ
์บ์‹œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์บ์‹œ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. CPU๋Š” ์บ์‹œ ์ ์ค‘๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ง€์—ญ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. (์บ์‹œ ์ ์ค‘๋ฅ  = ์บ์‹œ ์ ์ค‘ ํšŸ์ˆ˜ / ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํšŸ์ˆ˜)

์บ์‹œ์™€ CDN์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

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

context switching (๋ฌธ๋งฅ ๊ตํ™˜)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ , ๋‹ค์Œ ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ์ž‘์—…

์ด๋ฅผ ํ†ตํ•ด CPU๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋…์ ํ•˜์ง€ ์•Š๊ณ , ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณต์ •ํ•˜๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


๋„คํŠธ์›Œํฌ

HTTP๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋‹ต๋ณ€

HTTP๋Š” HyperTextTransferProtocol์˜ ์ค„์ž„๋ง๋กœ ์›น์ƒ์—์„œ HyperText์ฆ‰, HTMLํŒŒ์ผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

์—ฌ๋‹ด1) HyperText๋Š” ๋ง ๊ทธ๋Œ€๋กœ Text๋ฅผ ์ดˆ์›”ํ•œ Text์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ธ€์ž ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ํ•˜๋Š” ๊ธ€์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด ํ•˜์ดํผ๋งํฌ๊ฐ™์ด ๊ธ€์ž์— ๋งํฌ๋ฅผ ๋‹ค๋Š” ๊ฒƒ ๊ฐ™์€ ์‹œ๊ฐ์ ์œผ๋กœ ์ฝ๋Š”๊ฒƒ ์™ธ์—๋„ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๊ธ€์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋‹ด2) HTML์€ HyperTextMarkupLanguage์ž…๋‹ˆ๋‹ค. HyperText๋Š” ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๊ณ , Markup์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค. (Mark-up์ด์•„๋‹ˆ๋ผ Markup์ด ํ•˜๋‚˜์˜ ๋‹จ์–ด์ž…๋‹ˆ๋‹ค) markup์€ ๋ฌธ์„œ์˜ ๋‚ด์šฉ(๋ฌธ์ž)์™ธ์— ๋ฌธ์„œ์˜ ์„œ์‹,๊ตฌ์กฐ๋“ฑ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์ด๋ฅผ ๋งˆ์น˜ ์–ธ์–ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด์„œ markup langague๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์ •๋ฆฌ) ๋งˆํฌ์—… ์–ธ์–ด๋Š” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์–ธ์–ด์ด๋‹ค.

์—ฌ๋‹ด3) ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. ํ”„๋กœํ† ์ฝœ์˜ ์šฉ์–ด ์ž์ฒด๋Š” โ€˜ํ†ต์‹  ์žฅ๋น„ ์‚ฌ์ด์— ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์–‘์‹ ํ˜น์€ ๊ทœ์น™โ€™์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ”ํžˆ ์ „๊ณต์ฑ…์œผ๋กœ ๋ณธ, โ€˜Computer Network - Topdown approachโ€™์—์„  syntax,sementics,timing ์„ธ๊ฐ€์ง€ ๋‹จ์–ด๋กœ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • Syntax(๋ฌธ๋ฒ•) : ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋‚˜ ํ˜•์‹
  • Sementic(์˜๋ฏธ): ํ˜•์‹์˜ ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ• ์ง€
  • Timing (ํƒ€์ด๋ฐ) : ํ˜•์‹์— ๋งž์ถ˜ ์˜๋ฏธ๋ฅผ ๋‹ด์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์ˆœ์„œ๋กœ ์˜ค๊ฐ€์•ผํ• ์ง€

์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€ ๋‹จ์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ์ฝœ์„ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP์˜ ํŠน์ง•

HTTP๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๊ณ , ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ๋งŒ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ณ  ์‘๋‹ต ์ดํ›„ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ๋น„์—ฐ๊ฒฐ์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP ๋ฒ„์ „์˜ ๋ฐœ์ „ ๋‹จ๊ณ„
  • HTTP 0.9์ดˆ๊ธฐ๋ชจ๋ธ์ธ HTTP 0.9๋Š” GET๋ฉ”์„œ๋“œ๋งŒ ์ง€์›์„ ํ•ด์ฃผ์—ˆ๊ณ  HTTP ํ—ค๋”์กฐ์ฐจ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  • HTTP 1.0HTTP 1.0์—์„œ๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ณ , ํ—ค๋”๋„ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ•œ๋ฒˆ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด ์—ฐ๊ฒฐ๊ณผ ํ•ด์ œ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๋น„ํšจ์œจ์ ์ธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  • HTTP 1.1์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HTTP 1.1์—์„œ๋Š” keep-alive์†์„ฑ์ด ํ—ค๋”์— ์ถ”๊ฐ€๋˜์–ด ์ง€์†์ ์ธ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ๋ฒˆ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ํ•˜๋”๋ผ๋„, ํ•œ๋ฒˆ์˜ ์—ฐ๊ฒฐ๊ณผ ํ•œ๋ฒˆ์˜ ํ•ด์ œ๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • HTTP 2.0HTTP 2.0์—์„œ๋Š” ์ด์ „๋ฒ„์ „์˜ HOL(Head Of Line Blocking)๋ฌธ์ œ: ๋ฌด๊ฑฐ์šด ํ—ค๋”๋กœ ์ธํ•ด ์ดํ›„์˜ ํŒจํ‚ท์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ์„ ์ง€์›ํ•˜์—ฌ ๋‹จ์ผ TCP์—ฐ๊ฒฐ์—๋„ ์—ฌ๋Ÿฌ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ—ค๋”์••์ถ•๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • HTTP 3.0HTTP 2.0์˜ ๊ธด ์™•๋ณต์ง€์—ฐ์‹œ๊ฐ„(RTT)์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด TCP๊ธฐ๋ฐ˜์„ UDP๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ”๊พธ์–ด ์ง€์—ฐ์‹œ๊ฐ„์„ 3-RTT์—์„œ 1-RTT๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค.
HTTPS์™€ HTTP์˜ ์ฐจ์ด

HTTP์™€ HTTPS๋Š” ์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ”„๋กœํ† ์ฝœ์ด์ง€๋งŒ, ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTPS๋Š” HTTP์— SSL/TLS ํ”„๋กœํ† ์ฝœ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, HTTPS์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ธฐ๋ณธ ํฌํŠธ๋ฒˆํ˜ธ๋„ HTTP์˜ ๊ฒฝ์šฐ๋Š” 80, HTTPS์˜ ๊ฒฝ์šฐ๋Š” 443์ž…๋‹ˆ๋‹ค.

HTTP์˜ ๋ฉฑ๋“ฑ์„ฑ

HTTP ๋ฉฑ๋“ฑ์„ฑ(idempotent)์ด๋ž€ ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ๋ฒˆ ๋™์ผํ•œ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ ์„œ๋ฒ„๊ฐ€ ๊ฐ™์€ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ ๋ฉฑ๋“ฑ์„ฑ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ GET, PUT, DELETE์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–๊ณ , POST๋‚˜ PATCH์˜ ๊ฒฝ์šฐ๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PUT๊ณผ PATCH์˜ ์ฐจ์ด

PUT์˜ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ๋•Œ ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์•ผํ•˜๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

PATCH์˜ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ๋•Œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ณด๋‚ด๋„ ๋ฉ๋‹ˆ๋‹ค.

HTTP์˜ ์ƒํƒœ ์ฝ”๋“œ
  • 100 : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ž˜ ๋ฐ›์•˜๊ณ , ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ„์† ์ด์–ด๊ฐ€๋ผ๋Š” ์ฝ”๋“œ
  • 200 : ์š”์ฒญ ์„ฑ๊ณต
  • 201 : ์š”์ฒญ ์„ฑ๊ณต ๋ฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • 301 : ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธ
  • 400 : ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Œ
  • 401 : ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ๋ฌธ์ œ
  • 404 : ์š”์ฒญ๋ฐ›์€ ์ปจํ…์ธ ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
  • 500 : ์„œ๋ฒ„ ์˜ค๋ฅ˜
  • 502 : ๊ฒŒ์ดํŠธ์›จ์ด ๋˜๋Š” ํ”„๋ก์‹œ์„œ๋ฒ„ ์˜ค๋ฅ˜
  • 504 : Timeout ์‹œ๊ฐ„๋™์•ˆ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
DNS์˜ ์—ญํ• ๊ณผ ๋™์ž‘ ์›๋ฆฌ์— ๋Œ€ํ•ด ์„ค๋ช…

DNS(Domain Name System)๋Š” ๋„๋ฉ”์ธ ๋„ค์ž„์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

DNS๋Š” ๋จผ์ € ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ, ๋กœ์ปฌ ์บ์‹œ, ๋กœ์ปฌ DNS ์„œ๋ฒ„ ์ˆœ์œผ๋กœ IP์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์บ์‹ฑ๋œ ์ •๋ณด๊ฐ€ ์—†๋‹ค๋ฉด, ๋ฃจํŠธ ๋„ค์ž„ ์„œ๋ฒ„์— TLD(Top-Level Domain) ๋„ค์ž„ ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด, ์›ํ•˜๋Š” ์ฃผ์†Œ์— ๋Œ€ํ•œย ๋„ค์ž„์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLD๋ฅผ ํ†ตํ•ด ์•Œ์•„๋‚ธย ๊ถŒํ•œ ๋„ค์ž„ ์„œ๋ฒ„์— ์ตœ์ข…์ ์œผ๋กœ ์‹ค์ œ ์ฃผ์†Œ์˜ IP์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐ›์€ IP์ฃผ์†Œ๋Š” ์บ์‹ฑํ•˜์—ฌ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์›น ์†Œ์ผ“์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€

**์›น ์†Œ์ผ“(WebSocket)**์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ, ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

์›น์†Œ์ผ“์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์›น์†Œ์ผ“ ํ•ธ๋“œ์‰์ดํฌ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๊ฒŒ ๋˜๋ฉด, ๊ธฐ์กด HTTP ์—ฐ๊ฒฐ์„ ์›น์†Œ์ผ“์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

CDN์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

CDN(Content Delivery Network)์€ ์›น ์ฝ˜ํ…์ธ (HTML, CSS, JavaScript, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ)๋ฅผ ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜์—ฌ ๋กœ๋”ฉ ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ถ„์‚ฐ ๋„คํŠธ์›Œํฌ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

TCP์™€ UDP์˜ ์ฐจ์ด

TCP์™€ UDP๋Š” ๋‘˜๋‹ค OSI 7๊ณ„์ธต ์ค‘ ์ „์†ก๊ณ„์ธต์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค.

TCP๋Š” ๊ฐ€์ƒํšŒ์„ (Virtual Circuit)์„ ์‚ฌ์šฉํ•˜๊ณ  UDP๋Š” ๋ฐ์ดํ„ฐ๊ทธ๋žจ(Datagram)๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ƒํšŒ์„  ๋ฐฉ์‹

๊ฐ€์ƒํšŒ์„  ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ๊ฐ์˜ ํŒจํ‚ท์€ ๋…๋ฆฝ์ ์ด์ง€ ์•Š์•„์„œ ๊ณ ์žฅ๋‚œ ๋งํฌ๋‚˜ ๋…ธ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” stateful๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹

๋ฐ์ดํ„ฐ๊ทธ๋žจ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ์„ค์ •์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ๊ฐ๊ฐ์˜ ํŒจํ‚ท์€ ๋…๋ฆฝ์ ์œผ๋กœ ํฌ์›Œ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๋‚ธ์ˆœ์„œ์™€ ๋ฐ›๋Š”์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ์›Œ๋”ฉ ๊ณผ์ • ์ค‘ ๊ณ ์žฅ๋‚œ ๋งํฌ๋‚˜ ๋…ธ๋“œ๋ฅผ ์šฐํšŒํ•˜์—ฌ ๋ผ์šฐํŒ…์„ ํ•˜๋Š” stateless๋ฐฉ์‹์ด์ง€๋งŒ ์ธํ„ฐ๋„ท์˜ ๊ฒฝ์šฐ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์— timeout(TTL)์„ ๋‘์–ด stateful๊ณผ stateless๊ฐ€ ๊ณต์กดํ•˜๋Š” soft state์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ฐจ์ด ์ •๋ฆฌ

์œ„์™€๊ฐ™์€ ์ฐจ์ด๋ฅผ ํ†ตํ•ด TCP๋Š” ์‹ ๋ขฐ์„ฑ์ด ๋†’๊ณ , UDP๋Š” ์‹ ๋ขฐ์„ฑ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

์ฆ‰, TCP๋Š” ํŒจํ‚ท์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€๋งŒ UDP๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์•„ ์“ฐ์ž„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์†๋„ ์ธก๋ฉด์—์„œ๋„ TCP๋Š” ๋А๋ฆฌ๊ณ  UDP๋Š” ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ, UDP๋Š” ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

UDP vs QUIC

UDP๋Š” ์—ฐ๊ฒฐ ์„ค์ • ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ˆœํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ๋กœ, ์ง€์—ฐ์ด ์ ๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ž‘์ง€๋งŒ ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ, ์ˆœ์„œ ๋ณด์žฅ, ํ˜ผ์žก ์ œ์–ด ๋“ฑ์˜ ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์ด๋‚˜ ๊ฒŒ์ž„ ๋“ฑ ์ง€์—ฐ์— ๋ฏผ๊ฐํ•œ ์„œ๋น„์Šค์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

QUIC์€ UDP ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉด์„œ TCP์˜ ์‹ ๋ขฐ์„ฑ, TLS ๊ธฐ๋ฐ˜์˜ ๋ณด์•ˆ, ๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ, ์—ฐ๊ฒฐ ์ด๊ด€ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•œ ์‹ ํ˜• ์ „์†ก ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅธ ์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ๊ณผ ์ง€์—ฐ ์ตœ์†Œํ™”๋ฅผ ํ†ตํ•ด HTTP/3์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋ฉฐ, ์ „์†ก ๊ณ„์ธต๊ณผ ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ํ†ตํ•ฉํ•ด ์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ์„ ๋™์‹œ์— ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

OSI 7๊ณ„์ธต๊ณผ TCP/IP 4๊ณ„์ธต์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • OSI 7๊ณ„์ธต
    • ์‘์šฉ ๊ณ„์ธต (Application): ์ตœ์ข… ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์—ฐ๊ฒฐ (HTTP, FTP, DNS)
    • ํ‘œํ˜„ ๊ณ„์ธต (Presentation): ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ (์•”ํ˜ธํ™”, ์••์ถ•)
    • ์„ธ์…˜ ๊ณ„์ธต (Session): ์—ฐ๊ฒฐ ๊ด€๋ฆฌ (์†Œ์ผ“)
    • ์ „์†ก ๊ณ„์ธต (Transport): ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก (TCP, UDP)
    • ๋„คํŠธ์›Œํฌ ๊ณ„์ธต (Network): IP ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ํŒจํ‚ท ๋ผ์šฐํŒ… (IP, ๋ผ์šฐํ„ฐ)
    • ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต (Data Link): MAC ์ฃผ์†Œ ๊ธฐ๋ฐ˜ ํ†ต์‹  (์ด๋”๋„ท, ์Šค์œ„์น˜)
    • ๋ฌผ๋ฆฌ ๊ณ„์ธต (Physical): ์ „๊ธฐ์  ์‹ ํ˜ธ, ๋น„ํŠธ ์ „์†ก (LAN ์ผ€์ด๋ธ”, ๊ด‘์„ฌ์œ )
  • TCP/IP 4๊ณ„์ธต
    • ์‘์šฉ ๊ณ„์ธต (์„ธ์…˜ + ํ‘œํ˜„ + ์‘์šฉ ๊ณ„์ธต)
    • ์ „์†ก ๊ณ„์ธต (์ „์†ก ๊ณ„์ธต, TCP/UDP)
    • ์ธํ„ฐ๋„ท ๊ณ„์ธต (๋„คํŠธ์›Œํฌ ๊ณ„์ธต)
    • ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต (๋ฌผ๋ฆฌ + ๋ฐ์ดํ„ฐ ๋งํฌ)
TCP์˜ 3-way handshake์™€ 4-way handshake

TCP์˜ ์—ฐ๊ฒฐ๊ณผ์ •๊ณผ ํ•ด์ œ๊ณผ์ •์€ ๊ฐ๊ฐ 3-way handshake, 4-way handshake ๊ณผ์ •์„ ๊ฒช์Šต๋‹ˆ๋‹ค.

3-way handshake๊ณผ์ •

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ SYN๋ฅผ ๋ณด๋‚ด ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ SYN + ACK๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ˆ˜์‹ ๋ฐ›์œผ๋ฉด ์„œ๋ฒ„๋กœ ACK๋ฅผ ๋ณด๋‚ด๋ฉฐ TCP๊ฐ€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

4-way handshake๊ณผ์ •

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด FIN์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๋ฐ›์•„ ACK๋ฅผ ๋ณด๋‚ด๊ณ  ๋‚จ์€ ์š”์ฒญ๋“ค์„ ์ฒ˜๋ฆฌ ํ›„ FIN์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ACK๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ด๊ณ , ํ˜น์‹œ๋‚˜ ์ง€์—ฐ๋œ ๋ฐ์ดํ„ฐ์‘๋‹ต์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ์— ์ผ์ •์‹œ๊ฐ„ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

TCP์˜ ์—ฐ๊ฒฐ ์„ค์ • ๊ณผ์ •(3๋‹จ๊ณ„)๊ณผ ์—ฐ๊ฒฐ ์ข…๋ฃŒ ๊ณผ์ •(4๋‹จ๊ณ„)์ด ๋‹จ๊ณ„๊ฐ€ ์ฐจ์ด๋‚˜๋Š” ์ด์œ ๋Š”?

TCP์˜ ์—ฐ๊ฒฐ ์„ค์ •์€ ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ์†ก์ˆ˜์‹  ๊ฐ€๋Šฅ ์ƒํƒœ์ž„์„ ํ™•์ธํ•˜๋Š” 3-way handshake ๋ฐฉ์‹์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€๋งŒ, ์—ฐ๊ฒฐ ์ข…๋ฃŒ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์–‘์ชฝ์ด ๊ฐ๊ฐ ์ข…๋ฃŒ ์˜์‚ฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ‘œํ˜„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ 4-way handshake๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ๊ณผ์ •์—์„œ๋Š” ์–‘์ธก์ด ๋…๋ฆฝ์ ์œผ๋กœ FIN๊ณผ ACK๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ์˜ ์ข…๋ฃŒ ์š”์ฒญ๊ณผ ๋‘ ๋ฒˆ์˜ ํ™•์ธ ์‘๋‹ต์ด ํ•„์š”ํ•ด ๋‹จ๊ณ„ ์ˆ˜๊ฐ€ ๋” ๋งŽ์•„์ง‘๋‹ˆ๋‹ค.

TCP ์—ฐ๊ฒฐ ํ•ด์ œ ๊ณผ์ •์—์„œ TIME_WAIT์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

TIME_WAIT์€ TCP ์—ฐ๊ฒฐ ์ข…๋ฃŒ ๊ณผ์ •์—์„œ ๋งˆ์ง€๋ง‰ ACK๋ฅผ ๋ณด๋‚ธ ์ธก์ด ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ƒํƒœ๋กœ, ์žฌ์ „์†ก๋˜๋Š” FIN ํŒจํ‚ท์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๊ณ  ์ง€์—ฐ๋œ ํŒจํ‚ท์ด ์ƒˆ ์—ฐ๊ฒฐ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—ฐ๊ฒฐ ์ข…๋ฃŒ๊ฐ€ ์™„์ „ํžˆ ๋ณด์žฅ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๊ณ , ๋™์ผํ•œ ์†Œ์ผ“ ์Œ(IP์™€ ํฌํŠธ)์ด ์žฌ์‚ฌ์šฉ๋  ๋•Œ ์ด์ „ ์—ฐ๊ฒฐ์˜ ์ž”์—ฌ ํŒจํ‚ท์ด ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ TCP์˜ ์‹ ์ค‘ํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ Server์—์„œ FIN ํ”Œ๋ž˜๊ทธ๋ฅผ ์ „์†กํ•˜๊ธฐ ์ „์— ์ „์†กํ•œ ํŒจํ‚ท์ด Routing ์ง€์—ฐ์ด๋‚˜ ํŒจํ‚ท ์œ ์‹ค๋กœ ์ธํ•œ ์žฌ์ „์†ก ๋“ฑ์œผ๋กœ ์ธํ•ด FIN ํŒจํ‚ท๋ณด๋‹ค ๋Šฆ๊ฒŒ ๋„์ฐฉํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

TCP๋Š” ์‹œํ€€์Šค ๋ฒˆํ˜ธ๋กœ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋ฏ€๋กœ, ์„œ๋ฒ„๊ฐ€ FIN์„ ์ „์†กํ•œ ๋’ค์— ์ด์ „ ์‹œํ€€์Šค์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ง€์—ฐ๋˜์–ด ๋‚˜์ค‘์— ๋„์ฐฉํ•ด๋„ ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹  ์ธก์€ FIN ์ดํ›„ ๋„์ฐฉํ•œ ์„ธ๊ทธ๋จผํŠธ๋ผ๋„ ์ˆœ์„œ์ƒ ์œ ํšจํ•˜๋ฉด ์ˆ˜์‹  ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ณ , ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•œ ํ›„์—์•ผ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. FIN์€ ์ „์†ก ์ข…๋ฃŒ ์˜์‚ฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹ ํ˜ธ์ผ ๋ฟ, ์ดํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์‹œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ TCP์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์ˆœ์„œ ๋ณด์žฅ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

TCP/IP 4๊ณ„์ธต์—์„œ์˜ ๋ฐ์ดํ„ฐ ์บก์Аํ™” ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

TCP/IP 4๊ณ„์ธต์—์„œ์˜ ๋ฐ์ดํ„ฐ ์บก์Аํ™” ๊ณผ์ •์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ฌผ๋ฆฌ ๊ณ„์ธต์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ๊ฐ ๊ณ„์ธต๋งˆ๋‹ค ํ—ค๋” ์ •๋ณด๋ฅผ ๋ง๋ถ™์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋จผ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ๋Š” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ „์†ก ๊ณ„์ธต์€ ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋ถ„ํ• ํ•œ ๋’ค ์†ก์‹ ์ง€ ๋ฐ ์ˆ˜์‹ ์ง€ ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋œ TCP ๋˜๋Š” UDP ํ—ค๋”๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ์ดํ›„ ์ธํ„ฐ๋„ท ๊ณ„์ธต์—์„œ๋Š” IP ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•ด IP ํŒจํ‚ท์„ ๋งŒ๋“ค๊ณ , ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ผ์šฐํŒ…๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต์—์„œ๋Š” MAC ์ฃผ์†Œ ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ”„๋ ˆ์ž„ ํ—ค๋”์™€ ํŠธ๋ ˆ์ผ๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•ด ์‹ค์ œ ์ „์†ก ๊ฐ€๋Šฅํ•œ ํ”„๋ ˆ์ž„์„ ์™„์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋ฌผ๋ฆฌ ๋งค์ฒด๋ฅผ ํ†ตํ•ด ์ „์†กํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

HTTPS์—์„œ TLS ํ•ธ๋“œ์…ฐ์ดํฌ ๊ณผ์ •
  • ํด๋ผ์ด์–ธํŠธ Helloํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์š”์ฒญ(TLS๋ฒ„์ „, ์ง€์›๊ฐ€๋Šฅํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฉ๋ก, ๋žœ๋˜ ๊ฐ’ ๋“ฑ)
  • ์„œ๋ฒ„ Hello์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•˜๋ฉฐ TLS ์„ค์ •์„ ํ˜‘์ƒ(์„œ๋ฒ„๊ฐ€ ์„ ํƒํ•œ TLS๋ฒ„์ „, ์„ ํƒํ•œ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜, SSL/TLS ์ธ์ฆ์„œ)
  • ์„œ๋ฒ„ ์ธ์ฆ์„œ ๊ฒ€์ฆํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ์ธ์ฆ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ธ์ง€ ๊ฒ€์ฆ(์œ„์กฐ์—ฌ๋ถ€, ๋งŒ๋ฃŒ์—ฌ๋ถ€, ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ด€์—์„œ ๋ฐ›์•˜๋Š”์ง€ ๋“ฑ)
  • ํ‚ค ๊ตํ™˜
    • ์„œ๋ฒ„๊ฐ€ ๊ณต๊ฐœํ‚ค ์ „๋‹ฌ
    • ํด๋ผ์ด์–ธํŠธ๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•ด ์ž„์‹œ ํ‚ค๋ฅผ ์ƒ์„ฑ
    • ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†ก
    • ์„œ๋ฒ„๋Š” ๋น„๊ณต๊ฐœํ‚ค๋กœ ๋ณตํ˜ธํ™”ํ•˜์—ฌ Premaster Secretํš๋“
    • Client Random + Server Random + Premaster Secret๋กœ ๋Œ€์นญํ‚ค(์„ธ์…˜ ํ‚ค) ์ƒ์„ฑ
  • ํ•ธ๋“œ์…ฐ์ดํฌ ์™„๋ฃŒํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑํ•œ ์„ธ์…˜ ํ‚ค๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜
CORS๋ž€?

CORS(cross origin resource sharing)๋ž€ HTTP ํ—ค๋”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ฆฌ์ง„์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ๋ฅผ ํ—ˆ์šฉํ• ์ง€ ๋ง์ง€์— ๋Œ€ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

SOP ์ •์ฑ…

SOP(Same Origin Policy)๋Š” ๊ฐ™์€ ์˜ค๋ฆฌ์ง„๋ผ๋ฆฌ๋งŒ ์š”์ฒญ์„ ํ—ˆ๊ฐ€ํ•˜๋Š” ์ •์ฑ…์ธ๋ฐ ๋‹ค๋ฅธ ์˜ค๋ฆฌ์ง„๋ผ๋ฆฌ๋„ ์š”์ฒญ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ CORS๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CORS์˜ ๊ณผ์ • ๋ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

simple request์™€ preflight request๋ผ๋Š” ๋‘๊ฐ€์ง€์˜ ์š”์ฒญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

simple request์˜ ๊ฒฝ์šฐ๋Š” ํ—ˆ์šฉ๋œ ๋ฉ”์„œ๋“œํƒ€์ž…, ํ—ค๋”์— ํ•ด๋‹น๋œ ๋‚ด์šฉ์ด๋ฉด ์‚ฌ์ „์š”์ฒญ์—†์ด ๋ฐ”๋กœ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, preflight request๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œํƒ€์ž…์ด๋‚˜ ํ—ค๋”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณด์•ˆ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด OPTION์š”์ฒญ์„ ๋จผ์ € ๋ณด๋‚ด๊ณ  ์ด๋ฅผ ์„œ๋ฒ„์—์„œ ์ˆ˜๋ฝํ•˜๋ฉด ์‹ค์ œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„์—์„œ๋Š” Access-control-๊ณผ ๊ฐ™์€ ํ—ค๋”๋กœ ์‘๋‹ตํ•˜์—ฌ ํ•ด๋‹น ํ—ค๋”์— ์š”์ฒญํ•œ ์˜ค๋ฆฌ์ง„์ด ์—†๋‹ค๋ฉด CORS์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๊ณ  ์š”์ฒญํ•œ ์˜ค๋ฆฌ์ง„์ด ์žˆ๋‹ค๋ฉด ์ •์ƒ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

CORS๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์„œ๋ฒ„๋‹จ์—์„œ Access-Control-Allow-Origin์„ ์„œ๋ฒ„ ์‘๋‹ต ํ—ค๋”์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋„๋ฉ”์ธ์—์„œ๋งŒ ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ์—”๋“œ๋‹จ์—์„œ๋„ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ๋ฐ ์ด๋Š” proxy๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ฐ™์€ ์˜ค๋ฆฌ์ง„์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์ ‘์†๊ณผ์ •
  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” DNS์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋„๋ฉ”์ธ์„ IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ์‹ค์ œ IP์ฃผ์†Œ๋ฅผ ์–ป์—ˆ๋‹ค๋ฉด 3-way handshake๋กœ TCP ์—ฐ๊ฒฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
  3. HTTPS๋ผ๋ฉด ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ฒ„๋กœ HTTP์š”์ฒญ์„ ๋ณด๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋ Œ๋”๋ง์„ ํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์„ค๋ช…
  1. HTML์„ ํŒŒ์‹ฑํ•˜์—ฌ DOM ํŠธ๋ฆฌ ๊ตฌ์ถ•
  2. CSSํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ CSSOM ํŠธ๋ฆฌ ๊ตฌ์ถ•
  3. <script>ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๋ฉด JavaScript ์‹คํ–‰
  4. DOM๊ณผ CSSOM์„ ๊ฒฐํ•ฉํ•œ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑ
  5. ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ(Reflow)
  6. ํŽ˜์ธํŒ…
๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ ๋™์ž‘ ๋ฐฉ์‹

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญ์„ ํ•  ๋•Œ, ์บ์‹œ์— ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์œ ํšจํ•œ์ง€ ํ™•์ธ ํ›„ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ํ˜น์€ ๋””์Šคํฌ ์บ์‹œ์— ์ €์žฅ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ์—ด๋ฆฐ ํƒญ์—์„œ ์ €์žฅํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžˆ๋ฉด ์‚ฌ๋ผ์ง€์ง€๋งŒ, ๋””์Šคํฌ ์บ์‹œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŒŒ์ผ์„ ๋””์Šคํฌ์— ์ €์žฅํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€๋ฐฉ๋ฒ•

๋ธŒ๋ผ์šฐ์ €์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ „์—ญ๋ณ€์ˆ˜๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
    • var๋ฅผ ํ†ตํ•ด ์„ ์–ธ๋œ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์† ์œ ์ง€๋˜๋ฏ€๋กœ, ์‚ฌ์šฉ์„ ์ตœ์†Œํ™” ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋ฏธ์ œ๊ฑฐ
    • removeEventListener()์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•„์š”์—†๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋กœ์ €๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜
    • ์„ ์–ธํ•œ ํด๋กœ์ €์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํด๋กœ์ €์˜ ๋‚ด๋ถ€์— ํ•„์š”์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €์˜ ์ฃผ์š” ์—”์ง„(๋ Œ๋”๋ง ์—”์ง„, JavaScript์—”์ง„)์— ๋Œ€ํ•ด ์„ค๋ช…

๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง์„ ๋‹ด๋‹นํ•˜๋Š” ์ฃผ์š” ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • Webkit : Safari์™€ ์ด์ „ Chrome์—์„œ ์‚ฌ์šฉํ–ˆ๊ณ , iOS์˜ ๊ธฐ๋ณธ์—”์ง„์ž…๋‹ˆ๋‹ค.
  • Blink : Chrome, Edge, Opera์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Gecko : Firefox์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Trident : ์ด์ „ Internet Explorer์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์—ฌ๋Ÿฌ ์—”์ง„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • V8 : Chrome๊ณผ Node.js์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—”์ง„์ด๊ณ , ๋งค์šฐ ๋น ๋ฅด๋ฉฐ JIT(Just-In-Time)์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • SpiderMonkey : Firefox์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ ์ตœ์ดˆ์˜ ์—”์ง„์œผ๋กœ JIT ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • JavaScriptCore : Safari์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜์‘์„ฑ๊ณผ ๋ถ€ํ•˜์˜ ์ฐจ์ด

๋ฐ˜์‘์„ฑ์€ ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ์‘๋‹ตํ•˜๋Š”๊ฐ€์˜ ์˜๋ฏธ์ด๊ณ , ๋ถ€ํ•˜๋Š” ์‹œ์Šคํ…œ์ด ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ž‘์—…๋Ÿ‰์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฟ ํ‚ค, ์„ธ์…˜, ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…

์„ธ๊ฐ€์ง€ ์ „๋ถ€ ๋ธŒ๋ผ์šฐ์ €์— ์บ์‹ฑ์„ ํ•จ์œผ๋กœ์จ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ  ๋” ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐจ์ด์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€์ €์žฅ์šฉ๋Ÿ‰์€ ์„ธ์…˜๊ณผ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๊ฐ€ ์ฟ ํ‚ค๋ณด๋‹ค ๋งŽ์Šต๋‹ˆ๋‹ค.

์ ‘๊ทผ๋ฒ”์œ„๋Š” ์„ธ์…˜์€ ํƒญ์ด์ง€๋งŒ, ์ฟ ํ‚ค์™€ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋Š” ์˜ค๋ฆฌ์ง„์ž…๋‹ˆ๋‹ค.

๋งŒ๋ฃŒ๊ธฐํ•œ์€ ์ฟ ํ‚ค๋Š” ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์„ธ์…˜์€ ํƒญ์„ ๋‹ซ์œผ๋ฉด ์†Œ๋ฉธ๋˜๊ณ , ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋Š” ์˜๊ตฌ์ ์ž…๋‹ˆ๋‹ค.

์ฟ ํ‚ค๋Š” ์„ธ์…˜๊ณผ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์™€ ๋‹ค๋ฅด๊ฒŒ ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์„œ๋ฒ„์— ์ž๋™์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์ธ์ฆ๊ณผ ์ธ๊ฐ€์— ๋Œ€ํ•ด ์„ค๋ช…

์ธ์ฆ์€ ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ด๊ณ , ์ธ๊ฐ€๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ฆฌ์†Œ์Šค๋‚˜ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ๋ฐฉ์‹์— ๋Œ€ํ•ด ์„ค๋ช…

์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•œ ํ›„์— Access Token, Refresh Token์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ดํ›„ ์š”์ฒญ ์‹œ์— ํ—ค๋”์— ํ† ํฐ์„ ํฌํ•จํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ Refresh Token์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰๋ฐ›์Šต๋‹ˆ๋‹ค.

JWT(JSON Web Token)์˜ ๋ณด์•ˆ์ ์ธ ์ทจ์•ฝ์ 

JWT๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๊ด€ํ•˜๋ฏ€๋กœ XSS๊ณต๊ฒฉ์œผ๋กœ ์‰ฝ๊ฒŒ ์œ ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋Œ€์‹  HttpOnly ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋˜์ง€, ํ† ํฐ์„ ์งง๊ฒŒ ์œ ์ง€ํ•˜๊ณ  Refresh Token์„ ์ €์žฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

XSS(Cross-Site Scripting) ๊ณต๊ฒฉ์ด ๋ฌด์—‡์ด๊ณ , ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…

XSS๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›น์‚ฌ์ดํŠธ์— ์‚ฝ์ž…ํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ์ฟ ํ‚ค ํƒˆ์ทจ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด HttpOnly ์†์„ฑ์„ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ Secure ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ HTTPS ํ™˜๊ฒฝ์—์„œ๋งŒ ์ฟ ํ‚ค๊ฐ€ ์ „์†ก๋˜๋„๋ก ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”

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

ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์›น ํ‘œ์ค€์— ๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ๊ธฐ๋ณธ ์Šคํƒ€์ผ์ด ๋‹ค๋ฅด๋ฏ€๋กœ reset.css ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ ์ตœ์‹  JavaScript ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํด๋ฆฌํ•„์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
REST API์— ๋Œ€ํ•ด ์„ค๋ช…

REST API๋Š” REST(Representational State Transfer) ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š” API๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. REST๋Š” ์ž์›์„ HTTP URI๋กœ ํ‘œํ˜„ํ•˜๊ณ , HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

REST์™€ RESTful์˜ ์ฐจ์ด

REST๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๊ณ , RESTful์€ REST์›์น™์„ ์ง€ํ‚จ API์ž…๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ์˜ ์ฐจ์ด

๋ฆฌํ”Œ๋กœ์šฐ๋Š” ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—ฐ์‚ฐ์œผ๋กœ, ์š”์†Œ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

๋ฆฌํŽ˜์ธํŠธ๋Š” ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ์—†์ด ํ™”๋ฉด์˜ ํ”ฝ์…€์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ๋ณ€ํ™”๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌํŽ˜์ธํŠธ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ

๋ฆฌํ”Œ๋กœ์šฐ๋Š” DOM ์š”์†Œ์˜ ํฌ๊ธฐ, ์œ„์น˜, ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, DOM์š”์†Œ๊ฐ€ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ด€๋ จ๋œ CSS(width, height, margin, padding, display ๋“ฑ)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ, ์Šคํฌ๋กค ๋ฐœ์ƒ ๋“ฑ ๋‹ค์–‘ํ•œ ์ด์œ ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ ์ตœ์†Œํ™” ๋ฐฉ๋ฒ•

์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ transform์ด๋‚˜ opacity๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๋ฆฌํŽ˜์ธํŠธ๋งŒ ๋ฐœ์ƒ)

๋ ˆ์ด์•„์›ƒ์„ ๋ณ€๊ฒฝํ•  ์š”์†Œ๋“ค์€ position์„ absolute๋‚˜ fixed๋กœ ์„ค์ •ํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

SEO์— ๋Œ€ํ•ด ์„ค๋ช…

**SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)**๋Š” ์›น์‚ฌ์ดํŠธ๋‚˜ ์›น ํŽ˜์ด์ง€๊ฐ€ ๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ๋” ์ž˜ ๋…ธ์ถœ๋˜๋„๋ก ํ•˜๋Š” ์ผ๋ จ์˜ ์ตœ์ ํ™” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋ฉ”ํƒ€ ํƒœ๊ทธ, ํ—ค๋” ํƒœํฌ ํ˜น์€ ์‹œ๋ฉ˜ํ‹ฑ ํƒœ๊ทธ ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ SEO๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฏธ์ง€์— Alt์„ค๋ช…์„ ๋„ฃ๋Š” ๊ฒƒ๋„ SEO๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.