Skip to content

Latest commit

ย 

History

History
718 lines (511 loc) ยท 24.9 KB

README.md

File metadata and controls

718 lines (511 loc) ยท 24.9 KB

๋ธ”๋กœ๊ทธ

๋ชจ๋“  ํฌ์ŠคํŒ…์€ ํ‹ฐ์Šคํ† ๋ฆฌ ๋ธ”๋กœ๊ทธ์—์„œ๋„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ


๋‚ด๊ฐ€ ๋ณด๊ธฐ ์œ„ํ•œ CS ์ดˆ๊ฐ„๋‹จ ์š”์•ฝ

  • ์ ๋‹นํžˆ ์ •๋ฆฌ ๋˜๋ฉด ํŒŒ์ผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋งํฌ ์˜ˆ์ •

์ž๋ฐ”

  • ๊ฐ์ฒด์ง€ํ–ฅ
    • ์ถ”์ƒํ™”: ํ˜„์‹ค์„ธ๊ณ„์˜ ๊ฐœ๋…์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ. ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•, ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ๋„์ถœํ•œ๋‹ค.
    • ์บก์Šํ™”: ๊ฐ์ฒด์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ•˜๋‚˜์˜ ๋ชฉ์ ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ๋“ค์„ ๋ฌถ๋Š” ๊ฒƒ
    • ์ƒ์†์„ฑ: ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๊ฐ€ ๊ธฐ์กด์˜ ํด๋ž˜์Šค์˜ ์ž๋ฃŒ์™€ ์—ฐ์‚ฐ์„ ์ด์šฉํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ
    • ๋‹คํ˜•์„ฑ: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. (์˜ค๋ฒ„๋ผ์ด๋”ฉ,์˜ค๋ฒ„๋กœ๋”ฉ)
  • SOLID
    • SRP: ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(Single Responsibility)
    • OCP: ๊ฐœ๋ฐฉ/ํ์‡„ ์›์น™(Open/Closed)
    • LSP: ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™(Liskov Substitution)
    • ISP ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™(Interface Segregation)
    • DIP: ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™(Dependency Inversion)

๋ฐ”์ดํŠธ์ฝ”๋“œ

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

์ž๋ฃŒํ˜•

  • ์ž๋ฐ”์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค. ์ข€ ๋” ์—„๋ฐ€ํ•˜๊ฒŒ ์–˜๊ธฐํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ๋•Œ ๊ทธ ๊ณต๊ฐ„์˜ ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์€ ๋ณ€์ˆ˜์— ๊ฐ’ ์ž์ฒด๊ฐ€ ์ €์žฅ๋œ๋‹ค. ๋ฐ˜๋ฉด ์ฐธ์กฐ ์ž๋ฃŒํ˜•์€ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋œ๋‹ค. ๊ฐ์ฒด๋Š” ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋œ๋‹ค.

  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•

    • ์ •์ˆ˜ํ˜•
      • byte: 1byte == 8bit == 2^8
      • short: 2byte == 16bit == 2^16
      • int: 4byte == 32bit == 2^32
      • long: 8byte == 64bit = 2^64
    • ๋ฌธ์žํ˜•
      • char: 2byte == 16bit == 2^16
    • ์‹ค์ˆ˜ํ˜•
      • float : 4byte == 32bit == 2^32
      • double: 8byte == 64bit == 2^64
    • ๋…ผ๋ฆฌํ˜•
      • boolean: 1byte == 8bit == 2^8
  • ์ฐธ์กฐ ์ž๋ฃŒํ˜•

    • ๋ฐฐ์—ด(Array)
    • ์—ด๊ฑฐ(Enumeration)
    • ํด๋ž˜์Šค(Class)
    • ์ธํ„ฐํŽ˜์ด์Šค(Interface)
  • ์ž๋ฃŒํ˜•๊ณผ ๋ณ€์ˆ˜์˜ ์ฐจ์ด๋Š”?

    • ๋ณ€์ˆ˜: ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„
    • ์ž๋ฃŒํ˜•: ๊ทธ ๊ณต๊ฐ„์˜ ํŠน์„ฑ
  • Wrapper Class

    • ๋ฐ•์‹ฑ: Primative -> Wrapper Class
    • ์–ธ๋ฐ•์‹ฑ: Wrapper Class -> Primative
    • ์ž๋ฐ” 1.5๋ถ€ํ„ฐ๋Š” ์˜คํ† ๋ฐ•์‹ฑ๊ณผ ์˜คํ† ์–ธ๋ฐ•์‹ฑ์„ ์ง€์›

์˜ˆ์•ฝ์–ด

์ž๋ฐ”์— ๋“ฑ๋ก๋˜์–ด ํŠน์ • ๋ชฉ์ ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด. ์˜ˆ์•ฝ์–ด๋Š” ๋ณ€์ˆ˜๋ช…, ๋ฉ”์†Œ๋“œ๋ช… ๋“ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋ช‡๊ฐ€์ง€ ์ฃผ์š” ์˜ˆ์•ฝ์–ด ํŠน์ง• ์ •๋ฆฌ.

  • final: ํ•œ๋ฒˆ ๊ฐ’์ด ํ• ๋‹น์ด ๋˜๋ฉด ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜์— ๋ถ™์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋ž˜์Šค: ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ฉ”์†Œ๋“œ: ์˜ค๋ฒ„๋ผ์ด๋“œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ณ€์ˆ˜: ์›์‹œ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ์ƒ์ˆ˜๊ฐ’์ด ๋œ๋‹ค. ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฒฝ์šฐ ํ• ๋‹น๋œ ๊ฐ์ฒด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์ง€, ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’์€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • static: static ์˜์—ญ์— ํ• ๋‹น๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์œ ์ง€๋œ๋‹ค. ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด ์–ด๋””์„œ๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ GC์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ์•…์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. Method Area์— ์žˆ์—ˆ์œผ๋‚˜ ์ž๋ฐ”8๋ถ€ํ„ฐ Heap์œผ๋กœ.
  • synchronized: ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ž์›์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ, ๋‹จ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค.

์ ‘๊ทผ์ œ์–ด์ž

๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์œผ๋กœ์˜ ์ ‘๊ทผ ์ œํ•œ์„ ์„ค์ •ํ•˜๋Š” ์˜ˆ์•ฝ์–ด. ๋Œ€์ƒ์ด ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ ๋  ๊ณณ์—์„œ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  • public: ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • protected: ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋ฐ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • default: ๊ฐ™์€ ํŒจํ‚ค์ง€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • private: ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

์ปฌ๋ ‰์…˜

  • Set: ์ˆœ์„œ์—†์Œ. ์ค‘๋ณต ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ.
  • Map: Hash. ํ‚ค ์ˆœ์„œ ์—†์Œ. ํ‚ค๋Š” ์ค‘๋ณต ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ.
  • List: ์ˆœ์„œ์žˆ์Œ. ์ค‘๋ณต ํ—ˆ์šฉ.

์ œ๋„ค๋ฆญ

  • ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

Stack vs Heap

  • Stack

    • ์ •์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
    • Primative ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋œ๋‹ค.
    • Heap์— ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ์˜ ์ฐธ์กฐ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
    • Thread๋งˆ๋‹ค ๊ณ ์œ ์˜ Stack์„ ๊ฐ€์ง„๋‹ค.
    • ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค.(์ „์—ญ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์—)
    • ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ.
  • Heap

    • ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.
    • ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
    • ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ๋กœ.

Stack Overflow
์Šคํƒ ํ”„๋ ˆ์ž„์ด ์Šคํƒ ์˜์—ญ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด์„œ์„œ ํž™ ์˜์—ญ๊ณผ ๊ฒน์น˜๊ฒŒ ๋˜๋Š” ์˜ค๋ฅ˜


  • Stack์˜ ๋ณ€์ˆ˜๋Š” Heap์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ๋ณ€์ˆ˜์™€ ์˜ค๋ธŒ์ ํŠธ์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ์ƒํƒœ๋ฅผ Unreachable, JVM GC๋Š” ์ด ์ƒํƒœ์˜ ์˜ค๋ธŒ์ ํŠธ์— ๋Œ€ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.
  • Heap์€ Young๊ณผ Old๋กœ ๊ตฌ๋ถ„๋˜๊ณ , Young์€ ๋˜ Eden๊ณผ Survival๋“ค๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ๊ฐ ์˜์—ญ์ด ์ฐฐ ๋•Œ GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์‚ด์•„๋‚จ์€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ์˜์—ญ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. Young์„ Minor GC, Old๋ฅผ Major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ์˜ค๋ธŒ์ ํŠธ๋Š” ์ฒ˜์Œ Eden์— ์ƒ์„ฑ. Eden์—์„œ ์‚ด์•„๋‚จ์œผ๋ฉด Survival๋กœ ์ด๋™. Survival์—์„œ ์‚ด์•„๋‚จ์€ ๊ฑด ๋‹ค๋ฅธ Survival๋กœ ์ด๋™. ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋‹ค๊ฐ€ ํŠน์ • age์— ๋„๋‹ฌํ•˜๋ฉด Old๋กœ ์ด๋™.
  • GC ์ „๋žต์—๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ?

  • ๋ฆฌํ„ฐ๋Ÿด๊ณผ new์˜ ์ฐจ์ด
  • String Constant Pool
  • hashCode

  • ์ž๋ฐ”๋Š” Call by Value
  • ํด๋ž˜์Šค๋Š” Call by Reference์ฒ˜๋Ÿผ ๋ณด์ž„
  • Wrapper ํด๋ž˜์Šค๋Š” ๋ถˆ๋ณ€์ด๋ผ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์„ ๋ฐ”๊ฟˆ

String vs StringBuilder vs StringBuffer

  • String
    • ๋ถˆ๋ณ€ ์†์„ฑ
    • String ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๊ณ , ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด
    • ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๋Š” GC ๋Œ€์ƒ์ด ๋˜์–ด, ๋ฌธ์ž์—ด ์ˆ˜์ •์ด ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • StringBuilder vs StringBuffer
    • ๊ฐ€๋ณ€ ์†์„ฑ
    • ๋ฌธ์ž์—ด์ด ๋ฐ”๋€Œ์–ด๋„ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ๋งŽ์„ ๊ฒฝ์šฐ ์ด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
    • ์ฐจ์ด์ ์€ StringBuidler๋Š” ๋น„๋™๊ธฐ์ด๋‚˜ StringBuffer๋Š” ๋™๊ธฐ
    • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™๊ธฐ์ ์ธ StringBuffer๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
    • ๋‹จ์ผ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋น„๋™๊ธฐ์ ์ธ StringBuilder ์„ฑ๋Šฅ์ด ์ข‹์Œ

String Constant Pool


String ๋ถˆ๋ณ€๊ฐ์ฒด์ธ ์ด์œ 

  • ํž™ ๊ณต๊ฐ„ ์ ˆ์•ฝ
  • Thread Safe

์˜ค๋ฒ„๋กœ๋”ฉ vs ์˜ค๋ฒ„๋ผ์ด๋”ฉ

  • ์˜ค๋ฒ„๋กœ๋”ฉ
    • ์ˆ˜ํ‰์ 
    • ๋™์ผํ•œ ๋ฉ”์†Œ๋“œ๋ช…์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ
    • ์ˆ˜์ง์ 
    • ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๋Š” ๊ฒฝ์šฐ

Checked Exception vs Unchecked Exception


์Šคํ”„๋ง

MVC ํŒจํ„ด

  • Controller: ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›๋Š” ์˜์—ญ
  • Model: ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์˜์—ญ
  • View: ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‘๋‹ต์„ ํ‘œ์‹œํ•˜๋Š” ์˜์—ญ

@Transactional

  • Propagation

    ํŠธ๋žœ์žญ์…˜ ์ง„ํ–‰ ์ค‘ ํŠธ๋žœ์žญ์…˜ ๋ฏธ์ง„ํ–‰
    REQUIRED ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ
    MANDATORY ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ ์˜ˆ์™ธ ๋ฐœ์ƒ
    REQUIRES_NEW ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋ณด๋ฅ˜, ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ
    SUPPORTS ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉ ํŠธ๋žœ์žญ์…˜ ์—†์ด ์ง„ํ–‰
    NOT_SUPPORTED ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜ ๋ณด๋ฅ˜ ํŠธ๋žœ์žญ์…˜ ์—†์ด ์ง„ํ–‰
    NEVER ์˜ˆ์™ธ ๋ฐœ์ƒ ํŠธ๋žœ์žญ์…˜ ์—†์ด ์ง„ํ–‰
    NESTED ์ค‘์ฒฉ ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ
  • isolation

    • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์ง€์ •
  • rollbackFor

    • ๋กค๋ฐฑํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ง€์ •
  • noRollbackFor

    • ๋กค๋ฐฑํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋ฅผ ์ง€์ •

  • ์ƒ์„ฑ์ž ์ฃผ์ž…
    • ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐฉ์ง€
    • ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ ํ™•๋ณด
    • ์Šคํ”„๋ง์— ์ง์ ‘์ ์ธ ์˜์กด ๋ฐฉ์ง€
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ํŽธ์˜
    • final + lombok
  • ์ˆ˜์ •์ž ์ฃผ์ž…(Setter)
  • ํ•„๋“œ ์ฃผ์ž…(@Autowired)

Dispatcher Servlet

  • sevlet container -> dispatcher servlet -> handler

JPA

OSIV

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

  • ์—”ํ‹ฐํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ
    • ์˜์†, ์ค€์˜์†, ๋น„์˜์†, ์‚ญ์ œ
  • ์žฅ์ 
    • ๋™์ผ์„ฑ ๋ณด์žฅ(PK ๋น„๊ต)
    • 1์ฐจ ์บ์‹œ
    • ํŠธ๋žœ์žญ์…˜ ์“ฐ๊ธฐ ์ง€์—ฐ
    • ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)
    • ์ง€์—ฐ ๋กœ๋”ฉ

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

OSI 7 Layer

  • Physical Layer: ๋น„ํŠธ๋ฅผ ์ „์ž๊ธฐํŒŒ๋กœ ๋ฐ”๊พธ๋Š” ์—ญํ• . PHY์˜€๋‚˜? ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
  • Data Link Layer: ๋‚ด์šฉ ์•ž๋’ค๋กœ ๊ตฌ๋ถ„์ž(?)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• . Lan ์นด๋“œ์ธ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.
  • Network Layer: ์ฃผ์†Œ ์ถ”๊ฐ€.
  • Transport Layer: ํฌํŠธ ์ถ”๊ฐ€.
  • Session Layer
  • Presentation Layer
  • Application Layer

TCP/IP 4 Layer

  • Link Layer: OSI 7์—์„œ Phsyical ~ Data Link์— ํ•ด๋‹น

  • Internet Layer: OSI 7์—์„œ Network์— ํ•ด๋‹น

  • Transport Layer

  • Application Layer: OSI 7์—์„œ Session ~ Presentation์— ํ•ด๋‹น

HTTP ํ”„๋กœํ† ์ฝœ

  • Hyper Text Transfer Protocol
  • ๊ตฌ์„ฑ
    • Header
    • Body

Restful API

  • ์•„ํ‚คํ…์ฒ˜
  • Representational State Transfer
  • HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œ.
  • HTTP Method์™€ ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation ๋งคํ•‘
    • POST: ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ. Create
    • GET: ๋ฐ์ดํ„ฐ ์กฐํšŒ ์š”์ฒญ.Read
    • PUT: ๋ฐ์ดํ„ฐ ์ˆ˜์ • or ์ƒ์„ฑ ์š”์ฒญ. Create or Update
    • DELETE: ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์š”์ฒญ. Delete
    • PATCH: ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์š”์ฒญ. Update
  • ์žฅ์ 
    • ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ 
    • ํ‘œ์ค€์ด ์—†๋‹ค.

HTTP vs HTTPS

  • HTTP์— ๋ณด์•ˆ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํŒจํ‚ท ์•”ํ˜ธํ™”.

TCP vs UDP

  • TCP: ์ƒํ˜ธ์ž‘์šฉ. ํŒŒ์ผ ์ „์†ก ๋“ฑ ์‹ ๋ขฐ์„ฑ ์ค‘์š”.
    • 3 way handshake: ๊ฐ€์ƒํšŒ์„  ์ˆ˜๋ฆฝ. SYN(n) -> ACK(n+1) + SYN(m) -> ACK(m+1).
    • 4 way handshake: ์—ฐ๊ฒฐ ํ•ด์ œ.
  • UDP: ๋ณด๋‚ด๊ณ  ๋. ๋น ๋ฆ„. ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ ํšจ์œจ์„ฑ ์ค‘์š”.

์ฟ ํ‚ค์™€ ์„ธ์…˜

  • ์ฟ ํ‚ค
    • ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋˜๋Š” ํ‚ค์™€ ๊ฐ’
    • ์œ ํšจ ์‹œ๊ฐ„ ๋ช…์‹œ ๊ฐ€๋Šฅ
    • Response Header์—์„œ ์ฟ ํ‚ค ์„ธํŒ… ๊ฐ€๋Šฅ
    • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•Œ์•„์„œ Request Header์— ์„ธํŒ…ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†ก
  • ์„ธ์…˜
    • ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์„ธ์…˜ID๋ฅผ ์ฟ ํ‚ค์— ์ €์žฅํ•˜์—ฌ, ์š”์ฒญ์‹œ๋งˆ๋‹ค ์ „๋‹ฌ
    • ๋ณด์•ˆ๋ฉด์—์„œ ์ฟ ํ‚ค๋ณด๋‹ค ์šฐ์ˆ˜

  • Uniform Resource

    • Identifier
    • Locator
    • Name
  • URI ๊ตฌ์กฐ

    • scheme://[userinfo@]host[:port][/path][?query][#fragment]
      

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

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋Šฅ์„ ๋…ผ๋ฆฌ์  ์ž‘์—…์œผ๋กœ์„œ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์€ ์ง‘ํ•ฉ.

  • ACID

    • Atomicity(์›์ž์„ฑ): ์ปค๋ฐ‹ || ๋กค๋ฐฑ -> ์ง‘ํ•ฉ์˜ ๊ฐ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ๋ฐ˜์˜๋˜๊ฑฐ๋‚˜, ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜์˜๋˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    • Consistency(์ผ๊ด€์„ฑ): ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ์ผ๊ด€์ ์ด์–ด์•ผ ํ•œ๋‹ค.
    • Isolation(๋…๋ฆฝ์„ฑ): ์—ฌ๋Ÿฌ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰ ์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ๊ฐ„์„ญํ•  ์ˆ˜ ์—†๋‹ค. -> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ
    • Durability(์ง€์†์„ฑ): ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ ๊ฒฐ๊ณผ๋Š” ์˜๊ตฌ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ

    • ex) 100,000์› ๊ณ„์ขŒ์—์„œ 10,000์› ์ถœ๊ธˆ ์š”์ฒญ A์™€ 10,000์› ์ถœ๊ธˆ ์š”์ฒญ B๊ฐ€ 0.1์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค๋ฉด? 1. A๊ฐ€ ํ˜„์žฌ ์ž”์•ก 100,000์› ์กฐํšŒ

        2. B๊ฐ€ ํ˜„์žฌ ์ž”์•ก 100,000์› ์กฐํšŒ
        3. A๊ฐ€ 10,000์› ๋บ€ 90,000์› ์—…๋ฐ์ดํŠธ
        4. B๊ฐ€ 10,000์› ๋บ€ 90,000์› ์—…๋ฐ์ดํŠธ
        5. ๋‚จ์€ ์ž”์•ก์€ 90,000์›? -> ์ด๋Ÿผ ์•ˆ๋œ๋‹ค.
      
  • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

    • Read uncommited: ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ์ œ์ผ ๋‚ฎ์Œ. ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ž‘์—…๋‚ด์—ญ๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Œ.
      • Dirty Read
    • Read commited: ์ปค๋ฐ‹๋œ ์ž‘์—…๋งŒ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Œ. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ๋ฒˆ ์กฐํšŒ์‹œ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€.
      • Unrepeatable read
    • Repeatable read
      • Phantom read
    • Serializable: ๋ฝ์ด ๊ฑธ๋ฆผ. ์ตœ๊ณ  ์ˆ˜์ค€์˜ ๊ฒฉ๋ฆฌ์ด๋‚˜ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์ง.

    ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๊ณผ ๋™์‹œ์„ฑ์˜ trade-off ๋•Œ๋ฌธ์— ํ˜„์‹ค์ ์œผ๋กœ๋Š” ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๊ณ ๋ คํ•œ๋‹ค.

    ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ Read Commited - Repetable Read ์‚ฌ์ด์—์„œ ์„ ํƒ.


์ •๊ทœํ™”

๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ. ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์ œ1์ •๊ทœํ™”: ์ปฌ๋Ÿผ์ด ์›์ž๊ฐ’์„ ๊ฐ–๋„๋ก ํ•œ๋‹ค.

    • ์ •๊ทœํ™” ์ „

      ์ด๋ฆ„ ๊ทธ๋ฃน๋ช…
      ๋žฉ๋ชฌ์Šคํ„ฐ ๋ฐฉํƒ„์†Œ๋…„๋‹จ
      ํ™ฉ๋ฏผํ˜„ ๋‰ด์ด์ŠคํŠธ, ์›Œ๋„ˆ์›
      ์œˆํ„ฐ ์—์ŠคํŒŒ
    • ์ •๊ทœํ™” ํ›„

      ์ด๋ฆ„ ๊ทธ๋ฃน๋ช…
      ๋žฉ๋ชฌ์Šคํ„ฐ ๋ฐฉํƒ„์†Œ๋…„๋‹จ
      ํ™ฉ๋ฏผํ˜„ ๋‰ด์ด์ŠคํŠธ
      ํ™ฉ๋ฏผํ˜„ ์›Œ๋„ˆ์›
      ์œˆํ„ฐ ์—์ŠคํŒŒ
  • ์ œ2์ •๊ทœํ™”: PK์— ์ข…์†๋œ ์ปฌ๋Ÿผ์ด ํฌํ•จ๋˜์–ด์„  ์•ˆ ๋œ๋‹ค.

    • ์ •๊ทœํ™” ์ „

      ์ด๋ฆ„(PK) ๊ทธ๋ฃน๋ช…(PK) ์†Œ์†์‚ฌ
      ๋žฉ๋ชฌ์Šคํ„ฐ ๋ฐฉํƒ„์†Œ๋…„๋‹จ ๋น…ํžˆํŠธ
      ํ™ฉ๋ฏผํ˜„ ๋‰ด์ด์ŠคํŠธ ํ”Œ๋ ˆ๋””์Šค
      ํ™ฉ๋ฏผํ˜„ ์›Œ๋„ˆ์› YMC
      ์œˆํ„ฐ ์—์ŠคํŒŒ SM
    • ์ •๊ทœํ™” ํ›„

      ์ด๋ฆ„(PK) ๊ทธ๋ฃน๋ช…(PK)
      ๋žฉ๋ชฌ์Šคํ„ฐ ๋ฐฉํƒ„์†Œ๋…„๋‹จ
      ํ™ฉ๋ฏผํ˜„ ๋‰ด์ด์ŠคํŠธ
      ํ™ฉ๋ฏผํ˜„ ์›Œ๋„ˆ์›
      ์œˆํ„ฐ ์—์ŠคํŒŒ
      ๊ทธ๋ฃน๋ช…(PK) ์†Œ์†์‚ฌ
      ๋ฐฉํƒ„์†Œ๋…„๋‹จ ๋น…ํžˆํŠธ
      ๋‰ด์ด์ŠคํŠธ ํ”Œ๋ ˆ๋””์Šค
      ์›Œ๋„ˆ์› YMC
      ์—์ŠคํŒŒ SM
  • ์ œ3์ •๊ทœํ™”

    • PK๊ฐ€ ์•„๋‹Œ ์ปฌ๋Ÿผ์— ์ข…์†๋œ ์ปฌ๋Ÿผ์ด ์ƒ๊ฒจ์„  ์•ˆ ๋จ.
  • BCNF ์ •๊ทœํ™”

    • ๋ชจ๋“  ๊ฒฐ์ •์ž๊ฐ€ ํ›„๋ณดํ‚ค๊ฐ€ ๋˜๋„๋ก ํ…Œ์ด๋ธ”์„ ๋ถ„ใ…‚ํ•ดํ•œ๋‹ค.
  • ๋ฐ˜์ •๊ทœํ™”

    • ํšจ์œจ์„ ์œ„ํ•ด์„œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ.
    • Join์˜ ์—„์ฒญ๋‚œ ์—ฐ์‚ฐ๋Ÿ‰์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
    • ์ •๊ทœํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ„.

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”
  • B-Tree
  • B+Tree

์‹คํ–‰๊ณ„ํš

  • ํ•ด์„ ์ˆœ์„œ
  • ์˜ตํ‹ฐ๋งˆ์ด์ €
  • ์Šค์บ”

์šด์˜์ฒด์ œ

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

์˜์—ญ ์„ค๋ช…
์ฝ”๋“œ(ํ…์ŠคํŠธ) ์ฝ”๋“œ ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ.
๋ฐ์ดํ„ฐ ์ „์—ญ ๋ณ€์ˆ˜, ์ •์ ๋ณ€์ˆ˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘์‹œ ํ• ๋‹น, ์ข…๋ฃŒ์‹œ ์†Œ๋ฉธ.
ํž™ ์ธ์Šคํ„ด์Šค ๋Ÿฐํƒ€์ž„์—์„œ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋จ. ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น.
์Šคํƒ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ปดํŒŒ์ผ์—์„œ ํฌ๊ธฐ ๊ฒฐ์ •. ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น.

๋™์ ํ• ๋‹น

ํ”„๋กœ์„ธ์Šค vs ์“ฐ๋ ˆ๋“œ

  • Multi Process
    • ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ.
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ Task๋ฅผ ์ฒ˜๋ฆฌ.
    • ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๊ฐ€ ์ž˜๋ชป ๋˜์–ด๋„ ๋™์ž‘์€ ํ•˜๋‚˜, Context Switching ๋น„์šฉ ๋ฐœ์ƒ
  • Multi Thread
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ.
    • ๊ฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ Task๋ฅผ ์ฒ˜๋ฆฌ.
    • ์‹œ์Šคํ…œ ์ž์› ์†Œ๋ชจ, ์ฒ˜๋ฆฌ ๋น„์šฉ ๋“ฑ์ด ๊ฐ์†Œ๋˜๋‚˜ ๋™๊ธฐํ™” ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.
    • ์“ฐ๋ ˆ๋“œ ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๋กœ ์ „์ฒด ํ”„๋กœ์„ธ์Šค ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.
  • Context Switching
    • CPU์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ์•„๊ฐ€๋ฉฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •
  • Thread Safe
    • Multi-Thread ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๋‹ค.
    • ํ•จ์ˆ˜๊ฐ€ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Thread-Safe ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ
    • synchronized ๋ธ”๋ก

  • ์™ธ๋ถ€ ๋‹จํŽธํ™”

  • ๋ฉ”๋ชจ๋ฆฌ ์ปดํŒฉ์…˜

  • ํŽ˜์ด์ง•

  • ๋‚ด๋ถ€ ๋‹จํŽธํ™”

  • ์„ธ๊ทธ๋ฉ˜ํ…Œ์ด์…˜

  • ๋ฉ”๋ชจ๋ฆฌ ํ’€

  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜


CPU ์Šค์ผ€์ค„๋ง

  • ์„ ์ 
    • Round Robin
      • ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๋™์ผํ•œ ์‹œ๊ฐ„ ํ• ๋‹น
      • ํ• ๋‹น ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ํฌ๋ฉด FCFS์™€ ์ฐจ์ด ์—†์Œ
      • ํ• ๋‹น ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ ์ฆ๊ฐ€
    • SRT(Shortest Remain Time)
    • Multi Level Queue(๋‹ค๋‹จ๊ณ„ ํ)
    • Multi Level Feedback Queue
  • ๋น„์„ ์ 
    • First Come First Service == FIFO
      • ๋จผ์ € ์˜จ ๊ฒƒ ๋จผ์ € ์ฒ˜๋ฆฌ
      • ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Œ
    • Shortest Job First
      • ์‹คํ–‰ ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค ๋จผ์ € ์ˆ˜ํ–‰
      • ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง์Œ
      • ์‹คํ–‰ ์‹œ๊ฐ„ ๊ธด ํ”„๋กœ์„ธ์Šค ์ฐจ๋ก€๊ฐ€ ์˜ค์ง€ ์•Š๋Š” ๊ธฐ์•„ ํ˜„์ƒ ๋ฐœ์ƒ
    • Highest Respons-ratio Next

ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • OPT(Optimal)
    • ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ํŽ˜์ด์ง€ ๊ต์ฒด
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•ž์œผ๋กœ ์‚ฌ์šฉํ•  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์•„์•ผ ํ•จ
    • ์ด์ƒ์ ์ด๋‚˜ ์‹คํ˜„ ๋ถˆ๊ฐ€๋Šฅ
    • ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ์˜ ์„ฑ๋Šฅ ๋น„๊ต ๋ชฉ์ 
  • LRU(Least Recently Used)
    • ๊ฐ€์ •: ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ผ๋ฉด ์•ž์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ํ™•๋ฅ ์ด ์ ์„ ๊ฒƒ์ด๋‹ค.
  • FIFO(First In First Outs)
    • ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜จ ํŽ˜์ด์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋‚ด๋ณด๋ƒ„
    • ๋‹จ์ :
  • LFU(Least Frequently Used)
  • MFU(Most Frequently Used)
  • NUR(Not Used Recently)

์†Œํ”„ํŠธ์›จ์–ด ์ผ๋ฐ˜

์Šค์ผ€์ผ์•„์›ƒ vs ์Šค์ผ€์ผ์—…

  • ์Šค์ผ€์ผ์•„์›ƒ์€ ์„œ๋ฒ„์˜ ๋Œ€์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ , ์Šค์ผ€์ผ์—…์€ ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ๋Š˜๋ฆฐ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ

  • ํ•ต์‹ฌ์€ ์ œ์–ด์˜ ์ฃผ๋„๊ถŒ. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•œ๋‹ค. ๋ฐ˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ •ํ•ด์ง„ ์ƒ๋ช… ์ฃผ๊ธฐ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ๊ณ , ๊ทธ ํ๋ฆ„ ์•ˆ์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

MSA

  • ์žฅ์ : ์ผ๋ถ€ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด ์„œ๋น„์Šค์— ์ฃผ๋Š” ์˜ํ–ฅ์ด ์ ๋‹ค. ๊ฐ ์„œ๋น„์Šค์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ : ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค. ํ†ต์‹  ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • MSA ํŠธ๋žœ์žญ์…˜์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ?
    • SAGA ํŒจํ„ด

์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

Stack์œผ๋กœ ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„


Stack 2๊ฐœ๋กœ Queue ๊ตฌํ˜„

  • inStack๊ณผ outStack. outStack์ด ๋น„์—ˆ์„ ๋•Œ๋งŒ inStack -> outStack.

DFS && BFS

  • DFS -> Stack
  • BFS -> Queue

MyBatis vs JPA


Kafka vs RabbitMQ

๋ฉ”์‹œ์ง€ ํ

  • ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ
  • Producer - Queue - Consumer
  • ํŠน์ง•
    • ๋น„๋™๊ธฐ
    • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„
    • ํ™•์žฅ์„ฑ
    • ํƒ„๋ ฅ์„ฑ
    • ๋ณด์žฅ์„ฑ

RabbitMQ

  • AMQP ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„

  • Exchange์—์„œ Queue๋กœ ๋ผ์šฐํŒ…

  • Manage UI ์ œ๊ณต

  • ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋†’์€ ํ™•์žฅ์„ฑ

Kafka


์ฐธ๊ณ