Skip to content

Latest commit

ย 

History

History
455 lines (338 loc) ยท 30.7 KB

File metadata and controls

455 lines (338 loc) ยท 30.7 KB

FLAB AI Q&A

๐Ÿ“‹ FLAB์—์„œ GOOGLE ๋…นํ™” ์Œ์„ฑ์„ ํ†ตํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ ์งˆ๋ฌธ์‚ฌํ•ญ์„ ๋”ฐ๋กœ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿต Java

์–ด๋ ˆ์ด ๋ฆฌ์ŠคํŠธ์™€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ArrayList๋Š” ๋‚ด๋ถ€๊ฐ€ ๋ฐฐ์—ด์ด๋ผ ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŠน์ • ์š”์†Œ ์กฐํšŒ๋Š” O(1)์ด์ง€๋งŒ, ์ค‘๊ฐ„์ด๋‚˜ ์•ž์—์„œ ์‚ฝ์ž…ยท์‚ญ์ œ๋ฅผ ํ•˜๋ฉด ๋’ค์˜ ์š”์†Œ๋“ค์„ ์ „๋ถ€ ๋ฐ€์–ด์•ผ ํ•˜๋ฏ€๋กœ O(N)์ด ๊ฑธ๋ฆฐ๋‹ค.
  • LinkedList๋Š” ๋…ธ๋“œ๋“ค์ด ํฌ์ธํ„ฐ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ๋ผ ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด์„œ ์กฐํšŒ๋Š” ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ O(N)์ด๊ณ , ๋Œ€์‹  ๋งจ ์•ž์ด๋‚˜ ๋งจ ๋’ค์—์„œ์˜ ์‚ฝ์ž…ยท์‚ญ์ œ๋Š” ํฌ์ธํ„ฐ๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜์–ด O(1)์ด๋‹ค(๋‹จ, ๋งจ ๋’ค O(1)์€ tail ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์„ ๋•Œ ๊ธฐ์ค€์ด๋‹ค).
  • ์ด๋Ÿฐ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์Šคํƒ์ฒ˜๋Ÿผ ๋’ค์—์„œ๋งŒ ๋„ฃ๊ณ  ๋นผ๋Š” ๊ตฌ์กฐ๋Š” ArrayList๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ํ๋‚˜ ๋ฑ์ฒ˜๋Ÿผ ์•ž๊ณผ ๋’ค์—์„œ ์ž์ฃผ ์‚ฝ์ž…ยท์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ตฌ์กฐ๋Š” LinkedList๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.



JVM์˜ ์—ญํ• ๊ณผ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‚˜์š”?

JVM์€ OS(์šด์˜์ฒด์ œ) ์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค.
์œˆ๋„์šฐ, ๋ฆฌ๋ˆ…์Šค, ๋งฅ์šฉ JVM์ด ๊ฐ๊ฐ ๋”ฐ๋กœ ์žˆ์œผ๋ฉฐ,
์ด ๊ตฌ์กฐ ๋•๋ถ„์— ๊ฐœ๋ฐœ์ž๋Š” "Write Once, Run Anywhere"๋ผ๋Š” ๋ง์ฒ˜๋Ÿผ
OS์— ์ƒ๊ด€์—†์ด ๋™์ผํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

JVM์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ

  1. ํด๋ž˜์Šค ๋กœ๋” (Class Loader)
    • ์ž‘์„ฑํ•œ .class ํŒŒ์ผ๋“ค์„ ์ฝ์–ด์„œ JVM ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋ฐฐ์น˜ํ•œ๋‹ค. (๋ฐฐ๋‹ฌ์› ์—ญํ• )
  2. ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ (Runtime Data Areas):
    • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ์ด์•ผ๊ธฐํ•œ Stack๊ณผ Heap์ด ๋ฐ”๋กœ ์ด ์•ˆ์— ํฌํ•จ๋œ๋‹ค.
  3. ์‹คํ–‰ ์—”์ง„ (Execution Engine):
    • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ๋‹ค.
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹๊ณผ ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ฃผ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์„ ์„ž์–ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  4. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ (Garbage Collector):
    • ํž™ ์˜์—ญ์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.



JIT ์ปดํŒŒ์ผ๋Ÿฌ

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



๐Ÿชœ ๊ฐ์ฒด์ง€ํ–ฅ

๊ฐ์ฒด์™€ ๊ฐ์ฒด์ง€ํ–ฅ์ด ๋ญ”์ง€

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

์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ

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



๊ฐ์ฒด์ง€ํ–ฅ์˜ ํ•ต์‹ฌ ์›์น™๊ณผ SOLID์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

SRP์™€ ์‘์ง‘๋„

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

๋‹จ์ผ ์ฑ…์ž„ ์›์น™์—์„œ ์ฑ…์ž„์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ์ฑ…์ž„์ด๋ž€, '๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉ์ ์„ ๊ฐ€์ง„ ๊ธฐ๋Šฅ๋“ค์˜ ์ง‘ํ•ฉ' ์ž…๋‹ˆ๋‹ค.
    ex) ๊ณ„์‚ฐ๊ธฐ ํด๋ž˜์Šค์˜ ๋ง์…ˆ(), ๋บ„์…ˆ(), ๊ณฑ์…‰() ์นดํ…Œ๊ณ ๋ฆฌ

OCP์™€ DI, ๊ฒฐํ•ฉ๋„

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

LSP (Liskov Substitution Principle, ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)

  • ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ์˜ ์˜๋„๋ฅผ ๋ง๊ฐ€๋œจ๋ฆฌ๋ฉด ์•ˆ๋œ๋‹ค.
  • ์˜ˆ์‹œ: List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ArrayList๋ฅผ ์“ฐ๋‹ค๊ฐ€ LinkedList๋กœ ๋ฐ”๊ฟ”๋„ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ LinkedList๋กœ ๋ฐ”๊ฟจ๋”๋‹ˆ ๊ฐ‘์ž๊ธฐ ์—๋Ÿฌ๊ฐ€ ํ„ฐ์ง„๋‹ค๋ฉด LSP ์œ„๋ฐ˜์ด๋‹ค.

ISP (Interface Segregation Principle, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™)

  • ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‚ซ๋‹ค.
  • ์˜ˆ์‹œ: ํ”„๋ฆฐํŠธ, ํŒฉ์Šค, ์Šค์บ” ๊ธฐ๋Šฅ์„ ๋„ฃ์€ ํ”„๋ฆฐํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๋ฉด, ์ตœ์‹  ๊ธฐ๊ณ„๋Š” ์ƒ๊ด€ ์—†์ง€๋งŒ, ์˜›๋‚  ๊ธฐ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์•ˆ๋˜๋Š” ํŒฉ์Šค, ์Šค์บ”๊นŒ์ง€ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

DIP (Dependency Inversion Principle, ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™)

  • ์˜๋ฏธ: ๊ตฌํ˜„ ํด๋ž˜์Šค(Concrete Class)๋ฅผ ์ง์ ‘ ๋ฐ”๋ผ๋ณด์ง€ ๋ง๊ณ , ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ๋ฐ”๋ผ๋ด์•ผํ•œ๋‹ค.
  • Spring์˜ DI(Dependency Injection)๊ฐ€ ์ด ์›์น™์„ ๋”ฐ๋ฆ„



DI์™€ IOC์˜ ์ฐจ์ด์™€ ๊ฐ๊ฐ์˜ ์—ญํ• ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

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



AOP

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



ํŠธ๋žœ์žญ์…”๋„ AOP๊ฐ€ ๋ฌด์—‡์ด๊ณ , ํŠธ๋žœ์žญ์…”๋„ ์–ด๋…ธํ…Œ์ด์…˜์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•  ๋•Œ AOP๊ฐ€ ์—†์œผ๋ฉด, ๋ชจ๋“  ์„œ๋น„์Šค ๋ฉ”์†Œ๋“œ๋งˆ๋‹คtry-catch ๋ฌธ์„ ์•ˆ์—์„œ DB ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์™€ commit()์ด๋‚˜ rollback()์„ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Spring์ด @Transactional์ด ๋ถ™์€ ๋นˆ(Bean)์„ ๋ฐœ๊ฒฌํ•˜๋ฉด, ์‹ค์ œ ๊ฐ์ฒด ๋Œ€์‹  ์ด๋ฅผ ๊ฐ์‹ธ๋Š” ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋นˆ ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
    1. ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์‹คํ–‰ํ•˜๋ฉด ํ”„๋ก์‹œ๊ฐ€ ๊ฐ€๋กœ์ฑ„์„œ Transaction Advisor์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
    2. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” TransactionManager๊ฐ€ TransactionSynchronizationManager(์Šค๋ ˆ๋“œ๋กœ์ปฌ)๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์˜จ๋‹ค
    3. ์˜คํ† ์ปค๋ฐ‹์„ false๋กœ ํ•œ๋‹ค.
    4. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌํ•œ๋‹ค.
    5. ์„ฑ๊ณต์‹œ ์ปค๋ฐ‹, ์‹คํŒจ์‹œ ๋กค๋ฐฑ
    6. ์ž์›๋ฐ˜๋‚ฉ



โš™๏ธ OS

์“ฐ๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

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

IPC

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



์“ฐ๋ ˆ๋“œ

  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ Heap ์˜์—ญ์ด๋‚˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ๊ณต์œ  ์ž์›(์ž„๊ณ„์˜์—ญ)์— ๋™์‹œ์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ, ๊ฐ’์ด ๊ผฌ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด
    • ์šด์˜์ฒด์ œ์—์„œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์—ด์‡ ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
    • ๋ฎคํ…์Šค: Mutual Exclusion(์ƒํ˜ธ ๋ฐฐ์ œ)์˜ ์ค„์ž„๋ง๋กœ 1๋ช…์ด ์—ด์‡ ๋ฅผ ๋“ค๊ณ  ๋“ค์–ด๊ฐ€์„œ ๋ฌธ์„ ์ž ๊ทธ๊ณ , ๋‚˜์˜ฌ๋•Œ ์—ด์‡ ๋ฅผ ๋ฐ˜๋‚ฉํ•œ๋‹ค.
    • ์„ธ๋งˆํฌ์–ด: ์œ ๋Ÿ‰์ œ์–ด(Read)์šฉ
  • volatile: CPU ์บ์‹œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋„๋ก ๊ฐ•์ œํ•˜๋Š” ํ‚ค์›Œ๋“œ
  • CAS(=๋‚™๊ด€์  ๋ฝ, ์•„ํ† ๋ฏน): ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ ์ „๋ถ€ํ„ฐ ๋ˆ„๊ฐ€ ๊ฑด๋“œ๋ฆด ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ผ๋‹จ ๋ฌธ๋ถ€ํ„ฐ ์ž ๊ทธ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฝ(๋น„๊ด€์  ๋ฝ)๊ณผ ๋‹ค๋ฅด๊ฒŒ, ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ๋ฌธ์„ ์ž ๊ทธ์ง€์•Š๊ณ  ๊ณ„์‚ฐํ•œ ํ›„์—, ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•( ๋งŒ์•ฝ์— ๋ˆ„๊ฐ€ ๊ฑด๋“œ๋ ธ์œผ๋ฉด ์ˆ˜์ •์ทจ์†Œ๋จ )
    • ConcurrentHashMap: ์ผ๋ฐ˜์ ์ธ Hashtable์€ ์‹ฑํฌ๋กœ๋‚˜์ด์ฆˆ๋ฅผ ๋ถ™์—ฌ์„œ ๋ฎคํ…์Šค๋ฝ์„ ์‚ฌ์šฉํ•˜๋‹ˆ ๋ˆ„๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋งŒ ๊ณ ์ณ๋„, ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์ž ๊ถˆ๋ฒ„๋ฆฌ์ง€๋งŒ, ์–˜๋Š” ๊ตฌ์—ญ๋ณ„๋กœ ๋‚˜๋ˆ ์„œ ๋งŒ์ง€๋Š” ๋ถ€๋ถ„๋งŒ ์ž ๊ทผ๋‹ค. ํ•ด์‹œ๋งต์€ ์•”๊ฒƒ๋„ ์•ˆ์จ์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•จ



์Šคํƒ๊ณผ ํž™์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์Šคํƒ (Stack): ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

  • ์šฉ๋„: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.
  • ๊ตฌ์กฐ: LIFO(Last In, First Out) ๊ตฌ์กฐ๋กœ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค.
  • ์ปดํŒŒ์ผ ์‹œ์ ์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

ํž™ (Heap): ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

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



๐Ÿ•ธ๏ธ ๋„คํŠธ์›Œํฌ

TCP/IP (์ „์†ก ์ œ์–ด ํ”„๋กœํ† ์ฝœ)

  • TCP/IP๋Š” ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ์ „์ฒด์ ์ธ ๊ทœ์น™์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ์—ฐ๊ฒฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ๊ณ , ๋ณด๋‚ด๊ณ , ํ™•์ธํ•˜๋Š” ์ „ ๊ณผ์ •์„ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ปค๋„ฅ์…˜ ์‹๋ณ„ (5-Tuple): ์—ฐ๊ฒฐ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ 5๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ถœ๋ฐœ์ง€ IP / ์ถœ๋ฐœ์ง€ ํฌํŠธ ๋ฒˆํ˜ธ / ๋ชฉ์ ์ง€ IP / ๋ชฉ์ ์ง€ ํฌํŠธ ๋ฒˆํ˜ธ /ํ”„๋กœํ† ์ฝœ (TCP)
  • ์ฃผ์š” ์žฅ์ :
    • ์‹ ๋ขฐ์„ฑ(Reliable): ๋ฐ์ดํ„ฐ ์œ ์‹ค ์‹œ ์žฌ์ „์†ก์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆœ์„œ ๋ณด์žฅ: ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์„ž์—ฌ ๋„์ฐฉํ•ด๋„ ์›๋ž˜ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ œ์–ด ๊ธฐ๋Šฅ: ํ๋ฆ„ ์ œ์–ด(๋ฐ›๋Š” ์ชฝ ์†๋„์— ๋งž์ถค), ํ˜ผ์žก ์ œ์–ด(๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋งž์ถค)๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



3-Way Handshake (์—ฐ๊ฒฐ ์ˆ˜๋ฆฝ ๊ณผ์ •)

  • TCP์˜ ํŠน์ง•์ธ '์‹ ๋ขฐ์„ฑ'์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „ ์ƒ๋Œ€๋ฐฉ๊ณผ ํ†ต์‹  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ์„ธ ๋ฒˆ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ํ™•์ธํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

์ง„ํ–‰ ์ ˆ์ฐจ

  1. [SYN] ๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ "ํ†ต์‹  ์‹œ์ž‘ํ• ๊นŒ? ๋‚ด ๋ฒˆํ˜ธ๋Š” ์ด๊ฑฐ์•ผ(Sequence Number)"๋ผ๊ณ  ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. [SYN + ACK] ๋‹จ๊ณ„: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ํ™•์ธํ•˜๊ณ  "์‘, ๋‚˜๋„ ์ค€๋น„๋์–ด! ๋‚ด ๋ฒˆํ˜ธ๋Š” ์ด๊ฑฐ๊ณ , ๋„ค ๋ฒˆํ˜ธ ์ž˜ ๋ฐ›์•˜์–ด(Acknowledgment Number)"๋ผ๊ณ  ๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  3. [ACK] ๋‹จ๊ณ„: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ "ํ™•์ธ ์™„๋ฃŒ! ์ด์ œ ์ง„์งœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ผ๊ฒŒ"๋ผ๊ณ  ๋‹ตํ•˜๋ฉฐ ์—ฐ๊ฒฐ์ด ์ตœ์ข… ์„ฑ๋ฆฝ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง• ๋ฐ ๋‹จ์ 

  • ์ง€์—ฐ ์‹œ๊ฐ„(Latency): ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ๋„ ์ „์— ์ตœ์†Œ 3๋ฒˆ์˜ ์™•๋ณต์ด ํ•„์š”ํ•˜์—ฌ ๋ฌผ๋ฆฌ์ ์ธ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ์ทจ์•ฝ์  (SYN Flooding): ๊ณต๊ฒฉ์ž๊ฐ€ SYN๋งŒ ๊ณ„์† ๋ณด๋‚ด๊ณ  ๋งˆ์ง€๋ง‰ ACK๋ฅผ ๋ณด๋‚ด์ง€ ์•Š์•„ ์„œ๋ฒ„์˜ ์—ฐ๊ฒฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฝ‰ ์ฑ„์›Œ๋ฒ„๋ฆฌ๋Š” ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



ํฌ์›จ์ด ํ•ธ๋“œ์…ฐ์ดํ‚น์€ ์–ธ์ œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ทธ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • 4-way-handshake์€ ์—ฐ๊ฒฐ์ข…๋ฃŒ์‹œ์— ์‚ฌ์šฉ๋œ๋‹ค.
  1. FIN: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด์ œ ๋ณด๋‚ผ๊ฑฐ ๋‹ค ๋ณด๋ƒ„
  2. ACK: ์„œ๋ฒ„๊ฐ€ ์ผ๋‹จ ํ™•์ธํ–ˆ๊ณ , ์ด์ œ ๋ณด๋‚ผ ๊ฒŒ ๋‚จ์•˜์œผ๋‹ˆ ์กฐ๊ธˆ ๊ธฐ๋‹ค๋ฆฌ๋ผ๋Š” Half-Close์ƒํƒœ๊ฐ€ ๋จ
  3. FIN: ์„œ๋ฒ„๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ณด๋‚ด๊ณ  ๋Š์ž๋Š” ์˜๋ฏธ๋กœ ๋ณด๋ƒ„
  4. ACK: ํด๋ผ์ด์–ธํŠธ๋„ ํ™•์ธํ•จ
  • TIME_WAIT์ด๋ผ๊ณ  ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋งˆ์ง€๋ง‰ ACK์„ ๋ณด๋‚ด๊ณ  ์ง€์—ฐํŒจํ‚ท์ด ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋ฉด์„œ ์ž ๊น ์ ์œ ํ•˜๊ฒŒ ๋œ๋‹ค. (์ž์›๋‚ญ๋น„)
  • ๋ณดํ†ต 2๋ถ„ ์ •๋„ ๊ธฐ๋‹ค๋ฆผ

TIME_WAIT ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ACK์„ ๋ณด๋ƒˆ์ง€๋งŒ ์ค‘๊ฐ„์— ์œ ์‹ค๋˜๋ฉด ์„œ๋ฒ„๋Š” ๊ณ„์† FIN์„ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค. TIME_WAIT์ƒํƒœ ๋•๋ถ„์— ACK์ด ์•ˆ๊ฐ”๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.
  • ACK์„ ๋ณด๋‚ด๊ณ  ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‚˜์ค‘์— ์ƒˆ ์—ฐ๊ฒฐ์„ ํ•  ๋•Œ ๋– ๋Œ๋˜ ํŒจํ‚ท์ด ๊ฐ‘์ž๊ธฐ ๋„์ฐฉํ•ด๋ฒ„๋ ค์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค์—ผ๋จ



TCP์™€ UDP์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • UDP๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ๋˜์ง€๊ณ , ํ™•์ธํ•˜์ง€ ์•Š์•„ ๋น ๋ฅด๋‹ค.(๊ฒŒ์ž„, ์ŠคํŠธ๋ฆฌ๋ฐ๋“ฑ)
  • TCP๋Š” 3way-handshake์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ์„ ํ•˜๊ณ , ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋˜๋ฉด ๋‹ค์‹œ ๋ณด๋‚ด๊ฒŒ๋œ๋‹ค. (์ด๋ฉ”์ผ, ํŒŒ์ผ์ „์†ก ๋“ฑ)



HTTP 1.0์˜ Keep-Alive์™€ HTTP 1.1์˜ ์ง€์† ์ปค๋„ฅ์…˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • HTTP 1.0์˜ Keep-Alive๋Š” ๋น„ํ‘œ์ค€ ๊ธฐ๋Šฅ์ด๋ผ์„œ ๋ฉ์ฒญํ•œ ํ”„๋ก์‹œ๊ฐ€ ํ—ค๋”๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌ๋งŒ ํ•˜๊ณ  ์ž์‹ ์€ ์—ฐ๊ฒฐ์„ ๋Š์–ด์„œ ํ†ต์‹ ์ด ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค.
  • HTTP 1.1์—์„œ๋Š” ์ง€์† ์ปค๋„ฅ์…˜์„ ๊ทœ์•ฝ์œผ๋กœ ํ‘œ์ค€ํ™”ํ•ด์„œ ์ „์ฒด ๊ตฌ๊ฐ„์—์„œ ์ง€์†์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.



HOL(Head-of-Line Blocking)

  • ์•ž์—์žˆ๋Š” ๋„คํŠธ์›Œํฌ ํŒจํ‚ท์ด ์ „์†ก๋˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์–ด์„œ ๋’ค์— ์žˆ๋Š” ํŒจํ‚ท๋“ค ์ „์ฒด์˜ ์ „์†ก์ด ์ง€์—ฐ๋˜๋Š” ๊ฒƒ

HTTP/1.1

  • HTTP/1.1์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์š”์ฒญ ํ•˜๋‚˜๋ฅผ ๋ณด๋‚ด๋ฉด ์‘๋‹ต์ด ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ทน๋ณตํ•˜๋ ค๊ณ  ํŒŒ์ดํ”„๋ผ์ด๋‹(Pipelining)์„ ๋„์ž…ํ–ˆ์ฃ .
    • ํŒŒ์ดํ”„๋ผ์ด๋‹: ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๊ฐœ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ
    • ์š”์ฒญ์€ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐœ ๋ณด๋‚ด๋„, ์„œ๋ฒ„๋Š” ๋ฐ›์€ ์ˆœ์„œ๋Œ€๋กœ ์‘๋‹ตํ•ด์•ผ๋˜๋‹ˆ๊นŒ, ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋ฉด ๋’ค์— ๊ฐ€๋ฒผ์šด ๋ฐ์ดํ„ฐ๋“ค๊นŒ์ง€ ๋А๋ ค์ง€๋Š” HTTP๋ ˆ๋ฒจ์˜ HOL ๋ฐœ์ƒ

HTTP/2

  • HTTP๋ ˆ๋ฒจ์˜ HOL ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ํ”„๋ ˆ์ž„ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์„œ ๋ฌด์ž‘์œ„๋กœ ๋ณด๋ƒ„(๋ฉ€ํ‹ฐํ”Œ๋ ‰์‹ฑ Multiplexing)
  • ํ•˜์ง€๋งŒ TCP ํ”„๋กœํ† ์ฝœ๋กœ ์ „์†กํ•˜๋‹ค๋ณด๋‹ˆ, 1๋ฒˆ์˜ ์กฐ๊ฐ์ด ๋ชจ๋‘ ๋‹ค ์˜ฌ๋•Œ๊นŒ์ง€ 2๋ฒˆ์ดํ›„๋กœ๋ถ€ํ„ฐ ๋‹ค ๊ธฐ๋‹ค๋ฆฌ๋Š” TCP ๋ ˆ๋ฒจ์˜ HOL์— ๊ฑธ๋ฆผ

HTTP/3

  • ์œ„์˜TCP ๋ ˆ๋ฒจ์˜ HOL์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๊ธ€์—์„œ QUIC์ด๋ผ๋Š” UDP๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ๋…๋ฆฝ์ ์ธ ํ†ต๋กœ๋กœ ๋ณด๋‚ด์„œ ํ†ต๊ณผํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜)์œผ๋กœ ์˜ฌ๋ฆฌ๊ณ , ๋น ์ง„ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์‹œ ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค.



TCP์˜ ์„ฑ๋Šฅ๊ณผ ๊ด€๋ จ๋œ ์ฃผ์š” ์ด์Šˆ์™€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”?

์„ฑ๋Šฅ์ด์Šˆ

  1. ์ง€์—ฐ ์‹œ๊ฐ„: ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „์— 3-way-handshake๋ฅผ ํ•ด์•ผํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.
  2. ํ˜ผ์žก: ๋„คํŠธ์›Œํฌ ํ†ต๋กœ๊ฐ€ ์ข์•„์ง€๋ฉด ํŒจํ‚ท์„ ์žƒ์–ด๋ฒ„๋ฆฌ๊ณ , ์žฌ์ „์†กํ•˜๋ฉด์„œ ์†๋„๊ฐ€ ๋А๋ ค์ง„๋‹ค.
  3. HOL Blocking: ํŒจํ‚ท ํ•˜๋‚˜๊ฐ€ ์œ ์‹ค๋˜๋ฉด ๊ทธ ๋‹ค์Œ ํŒจํ‚ท๋“ค์ด ์ž˜ ๋„์ฐฉํ•ด๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „๋‹ฌ๋˜์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค.

ํ˜ผ์žก์ œ์–ด

  • ๋„คํŠธ์›Œํฌ ๋‚ด์— ์ „์†กํ•˜๋Š” ํŒจํ‚ท์˜ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ ธ์„œ ์ „์†ก์†๋„๊ฐ€ ๋Šฆ์–ด์ง€๋Š”๊ฑธ ๋ง‰์Œ
  • Slow Start: ์ฒ˜์Œ์—๋Š” ์กฐ๊ธˆ์”ฉ ๋ณด๋‚ด๋ฉด์„œ ์„ฑ๊ณต์˜ ์˜๋ฏธ๋กœ ACK์„ ๋ฐ›์œผ๋ฉด 2๋ฐฐ์”ฉ ๋Š˜๋ฆฌ๋ฉด์„œ ๋ณด๋ƒ„

ํ๋ฆ„์ œ์–ด

  • ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž์˜ ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฒ„ํผ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ณด๊ณ  ์—ฌ์œ ๊ฐ€ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€๋ฅผ ๋ณด๊ณ  ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ ˆํ•˜๊ฑฐ๋‚˜, ack์ด ์˜ฌ๋•Œ๊นŒ์ง€ ๋ฌด์กฐ๊ฑด ๋ฉˆ์ถฐ์„œ ๊ธฐ๋‹ค๋ฆผ



์Šฌ๋กœ์šฐ ์Šคํƒ€ํŠธ์™€ ๋„ค์ด๊ธ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์Šฌ๋กœ์šฐ ์Šคํƒ€ํŠธ

  • ํ•œ ๋ฒˆ์— ๋งŽ์ด ๋ณด๋‚ด์„œ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ„ฐ์ง€๋Š”, ๋„คํŠธ์›Œํฌ ํ˜ผ์žก ๋ฐฉ์ง€๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.
  • ์ดˆ๊ธฐ ์ „์†ก์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

๋„ค์ด๊ธ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์ž‘์€ ํŒจํ‚ท์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋ณด๋‚ด์„œ ๋Œ€์—ญํญ์ด ๋‚ญ๋น„๋˜๋Š”, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ ๋‚ญ๋น„๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค.
  • ACK์„ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ ์ง€์—ฐ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•œ๋‹ค.



๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์˜ ๋™์ž‘ ํ๋ฆ„์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

DispatcherServlet(์š”์ฒญ ๋ฐ›์Œ) > HandlerMapping(์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์Œ) > HandlerAdapter(์ปจํŠธ๋กค๋Ÿฌ ์‹คํ–‰ ๋„๊ตฌ๋ฅผ ์ฐพ์Œ) > Controller(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ˆ˜ํ–‰) > ViewResolver(ํ™”๋ฉด ์ค€๋น„) > DispatcherServlet(๊ฒฐ๊ณผ๋ฌผ ๋ฐ›์Œ) > HTTP ์‘๋‹ต



๐Ÿงบ DB

ํŠธ๋žœ์žญ์…˜์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ผ์„ 'ํ•˜๋‚˜์˜ ๋ฉ์–ด๋ฆฌ'๋กœ ๋ฌถ๋Š” ๊ฒƒ์œผ๋กœ, ๋ฌด์กฐ๊ฑด ๋‹ค ๊ฐ™์ด ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ๋‹ค ๊ฐ™์ด ์ทจ์†Œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™”๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ๊ณผ๊ฑฐ์—๋Š” DB ์ž‘์—…์„ ์œ„ํ•ด Connection ๊ฐ์ฒด๋ฅผ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ง€์ €๋ถ„ํ•ด์ง€๋ฏ€๋กœ, ์ปค๋„ฅ์…˜ ๊ฐ์ฒด๋ฅผ ThreadLocal์— ๋„ฃ์–ด๋‘๊ณ , ์ปค๋„ฅ์…˜์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊บผ๋‚ด์“ฐ๋„๋ก ๋งŒ๋“ ๊ฒƒ



ํŠธ๋žœ์žญ์…˜์˜ ACID ์›์น™์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

Atomicity (์›์ž์„ฑ) - "All or Nothing"

  • ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ์ž‘์—…์€ ๋ชจ๋‘ ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ์•„์˜ˆ ์—†๋˜ ์ผ์ฒ˜๋Ÿผ ์‹คํŒจํ•ด์•ผํ•œ๋‹ค.
  • A์˜ ์ž”๊ณ ์—์„œ 1๋งŒ ์›์„ ๋บ๋Š”๋ฐ, B์˜ ๊ณ„์ขŒ์— ๋„ฃ๋Š” ๊ณผ์ •์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์œผ๋ฉด A์˜ ๋ˆ๋„ ์›์ƒ๋ณต๊ตฌ ๋˜์–ด์•ผํ•œ๋‹ค.

Consistency (์ผ๊ด€์„ฑ) - "๋ฒ•์น™ ์ค€์ˆ˜"

  • '์ž”๊ณ ๋Š” 0์› ๋ฏธ๋งŒ์ด ๋  ์ˆ˜ ์—†๋‹ค'๋Š” ์ œ์•ฝ์กฐ๊ฑด์ด ์žˆ๋‹ค๋ฉด, ์ž”๊ณ ๊ฐ€ ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ์˜ ์†ก๊ธˆ ํŠธ๋žœ์žญ์…˜์€ ์•„์˜ˆ ๊ฑฐ๋ถ€๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์–ธ์ œ๋‚˜ ์ผ๊ด€๋œ ์ƒํƒœ(๊ทœ์น™์ด ์ง€์ผœ์ง„ ์ƒํƒœ)์—ฌ์•ผ ํ•œ๋‹ค.

Isolation (๊ฒฉ๋ฆฌ์„ฑ) - "๋ผ์–ด๋“ค๊ธฐ ๊ธˆ์ง€"

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

Durability (์ง€์†์„ฑ) - "์˜๊ตฌ ๋ณด์กด"

  • ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ(Commit)๋˜์—ˆ๋‹ค๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค.



MVCC์™€ ์–ธ๋‘ ๋กœ๊ทธ์˜ ์ƒ๊ด€๊ด€๊ณ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ์ด์ „์—๋Š” ๋ฝ์ด ๊ฑธ๋ ค์žˆ์œผ๋ฉด ์“ฐ๋Š” ์ค‘์— ์ฝ๋Š”๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•ด ์ง€์—ฐ์ด ๋งŽ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ MVCC๋Š” Undo ๋กœ๊ทธ๋ฅผ ์ด์šฉํ•ด ์“ฐ๊ธฐ ์ค‘์—๋„ ์ฝ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•จ์œผ๋กœ์จ, ๋ฝ(Lock) ์—†์ด ๋ฐ์ดํ„ฐ์˜ ๊ณผ๊ฑฐ ๋ฒ„์ „์„ ์กฐํšŒํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.



์–ธ๋‘ ๋กœ๊ทธ(undo log)๊ฐ€ ๋ฌด์—‡์ด๋ฉฐ ์–ธ์ œ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ์‹คํ–‰ ์ทจ์†Œ์‹œ: ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‹œ ์ด์ „ ๊ฐ’์„ ์–ธ๋‘๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฟผ๋ฆฌ ์‹คํ–‰ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, Rollback์‹œ ์‚ฌ์šฉ๋œ๋‹ค.
  • MVCC์—์„œ ๊ณผ๊ฑฐ ๋ฒ„์ „ ๋ณด์—ฌ์ค„ ๋•Œ: ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •์ค‘์ผ ๋•Œ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋ฉด ์ˆ˜์ •์ „์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์คŒ
  • ์žฅ์•  ๋ณต๊ตฌ์‹œ: ์‹œ์Šคํ…œ์ด COMMIT์ด์ „์— ์ข…๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ, Redo๋ฅผ ํ†ตํ•ด ๋งˆ์ง€๋ง‰ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ , ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์–ธ๋‘ ๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ชจ๋‘ ๋กค๋ฐฑ์‹œํ‚จ๋‹ค.



ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ๋ ˆ๋ฒจ 4๊ฐ€์ง€๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ๊ฐ ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋ง์”€ํ•ด ์ฃผ์„ธ์š”.

  1. READ UNCOMMITTED (์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ฝ๊ธฐ)
    • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ •ํ•œ ํ›„ ์•„์ง ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
    • Dirty Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • A๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ B๊ฐ€ ๊ทธ ๊ฐ’์„ ์ฝ์Œ. ๋งŒ์•ฝ A๊ฐ€ ๋กค๋ฐฑํ•˜๋ฉด B๋Š” ์กด์žฌํ•˜์ง€๋„ ์•Š๋Š” ๊ฐ€์งœ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ค๊ณ  ์žˆ๊ฒŒ ๋จ.
  2. READ COMMITTED (์ปค๋ฐ‹๋œ ์ฝ๊ธฐ)
    • ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Oracle์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ, MVCC(Undo ๋กœ๊ทธ)๋ฅผ ์‚ฌ์šฉํ•ด ์ปค๋ฐ‹ ์ „์—๋Š” ์ด์ „ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.
    • Non-Repeatable Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ, ๊ทธ ์‚ฌ์ด์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ’์„ ์ˆ˜์ •/์ปค๋ฐ‹ํ•˜๋ฉด ๋‘ ๋ฒˆ์˜ ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚จ.
  3. REPEATABLE READ (์ผ๊ด€๋œ ์ฝ๊ธฐ)
    • ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ์ปค๋ฐ‹๋œ ๋‚ด์šฉ๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค. InnoDB์˜ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • InnoDB๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ณ ์œ  ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•ด ์ž์‹ ๋ณด๋‹ค ๋Šฆ์€ ๋ฒˆํ˜ธ์˜ ๋ฐ์ดํ„ฐ๋Š” Undo ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๋‚ด ๋ฒˆํ˜ธ๋ณด๋‹ค ์ด์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
    • Phantom Read๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • InnoDB์˜ ๋กœ์šฐ ๋ฝ์€ ์‹ค์กดํ•˜๋Š” ํ–‰๋งŒ ์ž ๊ถˆ '๋นˆ ๊ณต๊ฐ„'์„ ๋ฐฉ์–ดํ•˜์ง€ ๋ชปํ•˜๋ฉฐ, ์ƒˆ๋กœ ์‚ฝ์ž…๋œ ํ–‰์€ '์ด์ „ ๊ธฐ๋ก(Undo)'์ด ์กด์žฌํ•˜์ง€ ์•Š์•„ ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š๊ณ  ์œ ๋ น์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚œ๋‹ค.
    • ๊ทธ๋ž˜์„œ ๊ฐญ๋ฝ(๋นˆ ๊ณต๊ฐ„์„ ์ž ๊ธˆ), ๋„ฅ์ŠคํŠธ ํ‚ค ๋ฝ(๋ ˆ์ฝ”๋“œ+๊ฐญ ๋ฝ)์„ ์‚ฌ์šฉํ•ด์„œ ๋นˆ ๊ณต๊ฐ„์„ ๋‹ค ์ž ๊ถˆ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. SERIALIZABLE (์ง๋ ฌํ™” ๊ฐ€๋Šฅ)
    • ์ œ์ผ ๊ฐ•ํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ž‘์—…์—๋„ ๊ณต์œ  ์ž ๊ธˆ(Shared Lock)์„ ๊ฑธ์–ด, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋Œ€ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ฝ์ž…ํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • ๋А๋ฆฌ๋‹ค.



DB ์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  1. ์ธ๋ฑ์Šค๊ฐ€ ์—†์œผ๋ฉด ํ…Œ์ด๋ธ” ํ’€ ์Šค์บ”์„ ๋•Œ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก ์กฐํšŒ๊ฐ€ ๋А๋ ค์ง„๋‹ค.
  2. ๊ทธ๋ž˜์„œ B(Balanced)-Tree๋ฅผ ๋„์ž…ํ•ด์„œ ํ•ญ์ƒ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์„œ ๊ฐ’์„ ์ฐพ์„๋•Œ ํ’€์Šค์บ”(O(N)์„ ํ•˜๋Š” ๋Œ€์‹ ์—, O(logN)์˜ ์†๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  3. ๊ธฐ์ˆ˜์„ฑ(์นด๋””๋„๋ฆฌํ‹ฐ)์ด ๋†’์€ ๊ฐ’์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค. (๊ธฐ์ˆ˜์„ฑ์ด ๋†’์œผ๋ฉด ๊ฐ’์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ๊ณ  ์ค‘๋ณต์ด ์ ์Œ) ex) ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ID, email๋“ฑ
  4. CUD๋Š” ๋งค๋ฒˆ ์ •๋ ฌ์„ ํ•ด์•ผํ•ด์„œ R์„ ์œ„ํ•ด ํฌ์ƒ์‹œํ‚ค๋Š” ๊ตฌ์กฐ์ž„
  5. ์ธ๋ฑ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ์–ด๋–ค ์ธ๋ฑ์Šค๋ฅผ ์“ธ์ง€ ๊ณ ๋ฏผํ•˜๊ณ , ์‹คํ–‰๊ณ„ํš์„ ์„ธ์šฐ๋А๋ผ ์‹œ๊ฐ„์ด ๋งŽ์ด๊ฑธ๋ฆฐ๋‹ค.
  6. ๋”ฐ๋ผ์„œ ์กฐ๊ฑด์ ˆ์— ์ž์ฃผ ๋“ฑ์žฅํ•˜๊ฑฐ๋‚˜, ๋ฐ์ดํ„ฐ ์ˆ˜์ •๋ณด๋‹ค ์กฐํšŒ๊ฐ€ ๋งŽ๊ณ , ๋ฐ์ดํ„ฐ ๊ทœ๋ชจ๊ฐ€ ํด ๋•Œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • ์กฐ๊ฑด์ ˆ๋กœ ์กฐํšŒํ•˜๋ฉด DB๋Š” ํ…Œ์ด๋ธ” ๋Œ€์‹  B-Tree ์ธ๋ฑ์Šค๋ฅผ ๋จผ์ € ๋ณด๊ณ , ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ์œ„์น˜์˜ ๋ฆฌํ”„ ๋…ธ๋“œ ์ฃผ์†Œ๋ฅผ ์ฐพ์•„๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•จ

์ด์ง„ํŠธ๋ฆฌ์™€ B-Tree์˜ ์ฐจ์ด

  • ์ด์ง„ํŠธ๋ฆฌ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ, B-Tree๋Š” M๊ฐœ
  • ์ด์ง„ํŠธ๋ฆฌ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์œ„ ์•„๋ž˜๋กœ ๊ธธ์–ด์ง€๊ณ (๋ฐ์ดํ„ฐ๊ฐ€ , B-Tree๋Š” ์–‘์˜†์œผ๋กœ ๋šฑ๋šฑํ•ด์ง



ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค

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

PK๊ฐ€ ์—†์„ ๋•Œ

  1. PK๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ธฐ์ค€
  2. Not Null ์˜ต์…˜์˜ ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค ์ค‘ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค๋กœ ์„ ํƒ
  3. ๊ทธ๊ฑฐ ๋งˆ์ € ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋„๋ก ์ฆ๊ฐ€ํ•˜๋Š” ์นผ๋Ÿผ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถ”๊ฐ€ํ•จ

ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค์˜ ์žฅ๋‹จ์ 

  • ์žฅ์ 
    • PK๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋‹ค. (ํŠนํžˆ ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„)
    • ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค๋กœ ๋ฐ”๋กœ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    • ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค ๊ฐ’์ด ํด์ˆ˜๋ก ์ „์ฒด์ ์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์ปค์ง(์„ธ์ปจ๋”๋ฆฌ, ํ”„๋ผ์ด๋จธ๋ฆฌํ‚ค)
    • ์„ธ์ปจ๋”๋ฆฌ๋ฅผ ํ†ตํ•ด PK๋ฅผ ํ•œ ๋ฒˆ ๋” ์กฐํšŒํ•ด์•ผํ•ด์„œ ์„ฑ๋Šฅ์ด ๋А๋ฆผ
    • Insert์‹œ์— ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ์˜ํ•ด ๋ ˆ์ฝ”๋“œ ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜์–ด์„œ ๋А๋ฆผ(์ˆ˜์ •์‹œ์—๋„ ์‚ญ์ œ ์‚ฝ์ž…์ด๋ผ ๋А๋ฆผ)



์ •๊ทœํ™”๋ฅผ ํ•˜๋Š” ์ด์œ 

์ด์ƒํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด

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

์ •๊ทœํ™”

  1. ์ œ1์ •๊ทœํ˜•: ๋ชจ๋“  ์นธ์—๋Š” ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค.
  2. ์ œ2์ •๊ทœํ˜•: ๊ธฐ๋ณธํ‚ค์˜ ์ผ๋ถ€๋ถ„์—๋งŒ ์˜์กดํ•˜๋Š” ์—ด์ด ์—†์–ด์•ผํ•œ๋‹ค.(๋ถ€๋ถ„ ํ•จ์ˆ˜ ์ข…์† ์ œ๊ฑฐ)
  3. ์ œ3์ •๊ทœํ˜•: ๊ธฐ๋ณธํ‚ค๊ฐ€ ์•„๋‹Œ ์—ด๋ผ๋ฆฌ ์˜์กดํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ์žˆ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.(A->B, B->C๋ผ๋Š” ์ดํ–‰ ์ข…์†์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค.)



ํŠธ๋žœ์žญ์…˜ ์–ด๋…ธํ…Œ์ด์…˜์ด JPA, MyBatis ๋“ฑ์—์„œ ๋ณ€๊ฒฝ ์—†์ด ๋™์ž‘ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ์Šคํ”„๋ง์ด ํŠธ๋žœ์žญ์…˜ ์ถ”์ƒํ™”๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์–ด๋–ค DB๊ฐ€ ๋“ค์–ด์˜ค๋“  PlatformTransactionManager๋ผ๋Š” ์•ฝ์†์ด ์žˆ๋‹ค.
  • ์–ด๋–ค ๊ธฐ์ˆ ์ด๋“  ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘์€ getTransaction(), ์ปค๋ฐ‹์€ commit(), ๋กค๋ฐฑ์€ rollback()
  • ๊ทธ๋Ÿฌ๋ฉด JPA๋Š” ์—”ํ‹ฐํ‹ฐ๋งค๋‹ˆ์ € ์“ฐ๊ณ , ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๋Š” ์ปค๋„ฅ์…˜ ์”€



๋ฐ๋“œ๋ฝ ์ƒํ™ฉ

  • ์š”๋ฆฌ์‚ฌ A์™€ B๊ฐ€ ์žˆ๊ณ , ์ฃผ๋ฐฉ์—๋Š” ์นผ๊ณผ ๋„๋งˆ๊ฐ€ ๋”ฑ ํ•˜๋‚˜์”ฉ๋งŒ ์žˆ์Œ
  1. ์š”๋ฆฌ์‚ฌ A๊ฐ€ ์นผ์„ ๋จผ์ € ์ง‘์—ˆ์Šต๋‹ˆ๋‹ค. (Lock 1)
  2. ๊ทธ์‚ฌ์ด ์š”๋ฆฌ์‚ฌ B๊ฐ€ ๋„๋งˆ๋ฅผ ์ง‘์—ˆ์Šต๋‹ˆ๋‹ค. (Lock 2)
  3. ์š”๋ฆฌ์‚ฌ A๋Š” ์ด์ œ ๋„๋งˆ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, B๊ฐ€ ๋“ค๊ณ  ์žˆ์–ด์„œ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  4. ์š”๋ฆฌ์‚ฌ B๋Š” ์ด์ œ ์นผ์ด ํ•„์š”ํ•œ๋ฐ, A๊ฐ€ ๋“ค๊ณ  ์žˆ์–ด์„œ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ: ๋‘ ์š”๋ฆฌ์‚ฌ๋Š” ์„œ๋กœ์˜ ๋„๊ตฌ๋ฅผ ์˜์›ํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š”๋ฐ ์ด๊ฒŒ ๊ต์ฐฉ์ƒํƒœ์ด๋‹ค.

๋ฐ๋“œ๋ฝ์˜ ์กฐ๊ฑด

  • ์•„๋ž˜์˜ 4๊ฐœ๊ฐ€ ๋™์‹œ์— ๋งŒ์กฑ๋˜์–ด์•ผํ•จ
  1. ์ƒํ˜ธ ๋ฐฐ์ œ: ์ž์›์€ ํ•œ ๋ฒˆ์— ํ•œ ํ”„๋กœ์„ธ์Šค๋งŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ( ์นผ ํ•˜๋‚˜๋ฅผ ๋‘๋ช…์ด์„œ ์žก๊ณ  ์ฐ ์ˆ˜ ์—†์Œ )
  2. ์ ์œ ์™€ ๋Œ€๊ธฐ: ์ž์›์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ( A๋Š” ์นผ๋“  ์ฑ„๋กœ ๋„๋งˆ๊ฐ€ ๋‚˜์˜ค๊ธธ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. )
  3. ๋น„์„ ์ : ๋‚จ์ด ๊ฐ€์ง„ ์ž์›์„ ๊ฐ•์ œ๋กœ ๋บ์„ ์ˆ˜ ์—†๋‹ค. ( A๊ฐ€ B์˜ ๋„๋งˆ๋ฅผ ๋บ์ง€๋ชปํ•จ )
  4. ํ™˜ํ˜•๋Œ€๊ธฐ: ๋Œ€๊ธฐ ๊ด€๊ณ„๊ฐ€ ์›์„ ์ด๋ฃฌ๋‹ค. ( A๋Š” B๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  B๋Š” A๋ฅผ ๊ธฐ๋‹ค๋ฆผ )



DB ๋ฝ์—์„œ ๋ฆฌ๋“œ๋ฝ๊ณผ ๋ผ์ดํŠธ๋ฝ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ๋ฆฌ๋“œ๋ฝ: ๋‚ด๊ฐ€ ์ฝ์„ ๋•Œ, ๋‚จ์ด์™€์„œ ์ฝ๋Š”๊ฑด ๋˜์ง€๋งŒ ์“ฐ๋Š”๊ฑด ์•ˆ๋œ๋‹ค.
  • ์“ฐ๊ธฐ๋ฝ: ๋‚ด๊ฐ€ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์“ฐ๊ณ ์žˆ์„ ๋•Œ, ๋‚จ์€ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š”๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.



MySQL์˜ ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ(Master-Slave)

  • ๋งˆ์Šคํ„ฐ(Master): ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž์‹ ์˜ Binlog์— ๊ธฐ๋ก

  • ์Šฌ๋ ˆ์ด๋ธŒ(Slave)์˜ I/O ์Šค๋ ˆ๋“œ: ๋งˆ์Šคํ„ฐ์˜ Binlog๋ฅผ ์ฝ์–ด์™€์„œ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์˜ Relay Log์— ์ €์žฅ

  • ์Šฌ๋ ˆ์ด๋ธŒ(Slave)์˜ SQL ์Šค๋ ˆ๋“œ: Relay Log์— ๊ธฐ๋ก๋œ ์ฝ์–ด ์‹ค์ œ DB์—”์ง„์— ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•จ

  • ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๊ณผ๋ถ€ํ™”๊ฐ€ ์˜ค๋ฉด ๋งˆ์Šคํ„ฐ๊ฐ€ ๊ณ„์† ๋ฐ์ดํ„ฐ๋ฅผ pushํ•˜๋ฉด ํ„ฐ์งˆ ์ˆ˜๋„ ์žˆ์–ด์„œ ํด๋ง์œผ๋กœ ์‚ฌ์šฉํ•จ



OSI 7๊ณ„์ธต์ด ์™œ ์กด์žฌํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

JPA์—์„œ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

JPA์—์„œ Enum ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • EnumType.ORDINAL์„ ์“ฐ์ง€ ๋ง๊ฒƒ: ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ Enum์˜ ์ˆœ์„œ(0, 1, 2...)๋ฅผ DB์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— Enum ์‚ฌ์ด์— ์ƒˆ๋กœ์šด ๊ฐ’์ด ์ถ”๊ฐ€๋˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ๊ฐ€ ์™„์ „ํžˆ ๋’ค์„ž์—ฌ๋ฒ„๋ฆฌ๋Š” ๋Œ€์ฐธ์‚ฌ๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
  • EnumType.STRING์„ ์จ์•ผํ•จ: Enum์˜ ์ด๋ฆ„์„ ๋ฌธ์ž์—ด ๊ทธ๋Œ€๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋Š” ์กฐ๊ธˆ ๋” ์ปค์ง€์ง€๋งŒ, ๋ณ€๊ฒฝ์— ์•ˆ์ „ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ํ›จ์”ฌ ์ข‹์Šต๋‹ˆ๋‹ค.

GC๊ตฌ์—ญ๋ณ„ ์ •๋ฆฌ

  • ๊ธˆ๋ฐฉ ์ฃฝ์„ ๊ฐ์ฒด(Young)๋Š” ์ž‘์€ ๊ตฌ์—ญ์—์„œ ์ž์ฃผ ๋นจ๋ฆฌ ์น˜์šฐ๊ณ , ์˜ค๋ž˜ ๋ฒ„ํ‹ฐ๋Š” ๊ฐ์ฒด(Old)๋Š” ํฐ ๊ตฌ์—ญ์œผ๋กœ ๋ณด๋‚ด์„œ ๊ฐ€๋” ๊ผผ๊ผผํžˆ ์น˜์šฐ๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์—ญ์˜ ๊ตฌ๋ถ„๊ณผ GC์˜ ์ผ๋ฐ˜์ ์ธ ๋™์ž‘ํ๋ฆ„์œผ๋กœ Eden -> Minor GC -> ์„œ๋ฐ”์ด๋ฒŒ -> ์ƒ์ข…๊ฒฝ์Ÿํ›„ ์Šน๊ฒฉ -> ๋ฉ”์ด์ € GC์˜ ๊ณผ์ • ๊ณต๋ถ€
  • ๋ฒ„์ „๋ณ„๋กœ ๋‹ค๋ฅด์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ค๋ช…์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋“ค๋กœ ๊ณต๋ถ€
    • Parallel GC, G1 GC, ZGC๋“ฑ

JPA์—์„œ OneToMany ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ID ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„ํ•  ๋•Œ์˜ ์ฐจ์ด์ ๊ณผ ๊ทธ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

ORM์ด ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๋ž€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.

์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Stream)์˜ ํŠน์ง•๊ณผ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.