Skip to content

bghgu/Answer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

28 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋ฉด์ ‘ ์งˆ๋ฌธ ๋ฆฌ์ŠคํŠธ

[TOC]

DB

ORM(Object Relational Mapping)

  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„์™€์˜ ์„ค์ •
  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB๋ฅผ Mappingํ•ด์ค€๋‹ค.
  • ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ Mappingํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL์„ ์ง์ ‘ ๋‚ ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋งˆ์น˜ ์ž๋ฐ”์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜๋“ฏ์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ์—๋น„์Šค์™€์˜ ์„ค์ •์„ ์ž๋™์œผ๋กœ ํ•ด์ค€๋‹ค.
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒดํ˜• ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JPA, Hibernate, MyBatis
  • ์žฅ์ 
    • ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ๋กœ ์ธํ•ด ๋” ์ง๊ด€์ ์ด๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.
    • ์„ ์–ธ, ํ• ๋‹น, ์ข…๋ฃŒ ๊ฐ™์€ ๋ถ€์ˆ˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.
    • ์žฌ์‚ฌ์šฉ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜์˜ ํŽธ๋ฆฌ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
    • DBMS์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.
    • ์ ˆ์ฐจ์ , ์ˆœ์ฐจ์  ์ ‘๊ทผ์ด ์•„๋‹Œ ๊ฐ์ฒด ์ง€ํ–ฅ์  ์ ‘๊ทผ์œผ๋กœ ์ธํ•ด ์ƒ์‚ฐ์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๋‹จ์ 
    • ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ORM์œผ๋กœ๋งŒ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด ์“ฐ๊ธฐ ์–ด๋ ต๋‹ค.
    • ๋งŽ์€ ์ˆ˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์žฆ์€ ๋นˆ๋„๋กœ ๋ฒŒํฌ ์ˆ˜ํ–‰
    • ORM์œผ๋กœ๋งŒ ์™„๋ฒฝํ•˜๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.
    • ํ”„๋กœ์‹œ์ €๊ฐ€ ๋งŽ์€ ์‹œ์Šคํ…œ์—์„  ORM์˜ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์žฅ์ ์„ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

MySQL ์—”์ง„

  • InnoDB
    • ๊ธฐ๋ณธ๊ฐ’ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„
    • ํŠธ๋žœ์žญ์…˜ safe, ์ปค๋ฐ‹๊ณผ ๋กค๋ฐฑ, ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
    • row-level locking์„ ์ œ๊ณตํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ clusterd index์— ์ €์žฅํ•˜์—ฌ pk๊ธฐ๋ฐ˜ query์˜ I/O ๋น„์šฉ์„ ์ค„์ธ๋‹ค.
    • fk์ œ์•ฝ์„ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • MyISAM
    • ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ํ…Œ์ด๋ธ” ๋‹จ์œ„์˜ locking์„ ์ œ๊ณตํ•œ๋‹ค.
    • ํŠน์ • ์„ธ์…˜์ด ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ํ…Œ์ด๋ธ” ๋‹จ์œ„๋กœ lock์ด ์žกํžŒ๋‹ค.
  • Archive
    • ๋กœ๊ทธ ์ˆ˜์ง‘์— ์ ํ•ฉํ•œ ์—”์ง„
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์••์ถ•๋˜๊ณ  ์••์ถ•๋œ ์ƒํƒœ๋กœ ๋””์Šคํฌ์— ์ €์žฅ๋œ๋‹ค.
    • row-level locking์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํ•œ๋ฒˆ insert๋œ ๋ฐ์ดํ„ฐ๋Š” update/delete๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ธ๋ฑ์Šค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ฑฐ์˜ ๊ฐ€๊ณตํ•˜์ง€ ์•Š์„ ์œˆ์‹œ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํšจ์œจ์ ์ด๊ณ , ํ…Œ์ด๋ธ” ํŒŒํ‹ฐ์…”๋‹๋„ ์ง€์›ํ•œ๋‹ค.
    • ํŠธ๋žœ์žญ์…˜์€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ธ๋ฑ์Šค

  • RDBMS์—์„œ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ 
  • ์ƒ‰์ธ
  • ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ์ƒ‰์ธํ™”(๋”ฐ๋กœ ํŒŒ์ผ๋กœ ์ €์žฅ)ํ•˜์—ฌ ๊ฒ€์ƒ‰์‹œ ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ full scan ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒ‰์ธํ™” ๋˜์–ด์žˆ๋Š” index ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•œ๋‹ค.
  • B+ ํŠธ๋ฆฌ๋กœ ์ €์žฅ๋œ๋‹ค.
  • index๋กœ ์„ค์ •ํ•œ ์ปฌ๋Ÿผ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜๋ฉด, ์ธ๋ฑ์Šค ์—ญ์‹œ ๋ณ€๊ฒฝ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์ ˆํ•˜๊ฒŒ ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ index์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค. ๋งค๋ฒˆ B+ํŠธ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • index๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.(10%)
  • index๋Š” B+ ํŠธ๋ฆฌ์—์„œ key๊ฐ’์œผ๋กœ column์˜ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— SELECT ์กฐํšŒ ์‹œ index๋กœ ์„ค์ •ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒํ•œ๋‹ค๋ฉด ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋งŒ ์กฐํšŒํ•œ๋‹ค. (covering index)
  • index๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋‹ค.
  • SELECT์˜ WHERE / JOIN / GROUP BY ์‹œ์—๋งŒ ์ธ๋ฑ์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ SELECT์˜ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๋Š”๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.
  • WHERE์˜ ํƒ€๊ฒŸ์ด ๋˜๋Š” ์ปฌ๋Ÿผ์„ ์ธ๋ฑ์Šค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต๋„๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์€ ์ธ๋ฑ์Šค๋กœ ๋งŒ๋“ค์–ด๋„ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค.
  • ์™ธ๋ž˜ํ‚ค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์ปฌ๋Ÿผ์€ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค๋Š” ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ •๊ทœํ™”

  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ค๊ณ„์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™” ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.
  • ๊ด€๊ณ„๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์ž‘๊ณ  ์ž˜ ์กฐ์ง๋œ ๊ด€๊ณ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์— ์žˆ๋‹ค.
  • ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๋น„์ •๊ทœํ™” ๋  ์ˆ˜ ์žˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜

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

DB Isolation Level

  • ๊ฒฉ๋ฆฌ์„ฑ ๊ด€๋ จ ๋ฌธ์ œ์ 
1.Dirty Read
  • ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ์ˆ˜์ • ์ค‘์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค.
  • ์–ด๋–ค ํŠธ๋žœ์žญ์…˜์—์„œ ์•„์ง ์‹คํ–‰์ด ๋๋‚˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์— ์˜ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
2.Non-Repeatable Read
  • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ SQL์„ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๋‘ SQL์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋น„ ์ผ๊ด€์ ์ธ ํ˜„์ƒ์ด๋‹ค.
  • ํ•œ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ’์„ ์ˆ˜์ •, ์‚ญ์ œํ•จ์œผ๋กœ์จ ๋‚˜ํƒ€๋‚œ๋‹ค.
3.Phantom Read
  • ํ•œ ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ™์€ SQL์„ ๋‘ ๋ฒˆ ์ˆ˜ํ–‰ํ•  ๋•Œ, ์ฒซ๋ฒˆ์งธ SQL์—์„œ ์—†๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‘๋ฒˆ์งธ SQL์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์ด๋‹ค.
  • ํ•œ ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๊ฐ’์„ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ๋‚˜ํƒ€๋‚œ๋‹ค.

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

  • ํŠธ๋žœ์žญ์…˜์—์„œ ์ผ๊ด€์„ฑ์ด ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•˜๋Š” ์ˆ˜์ค€์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ACID ๊ฐ™์ด ํŠธ๋žœ์žญ์…˜์ด ์›์ž์ ์ด๋ฉด์„œ๋„ ๋…๋ฆฝ์ ์ธ ์ˆ˜ํ–‰์„ ํ•˜๋„๋ก ํ•œ๋‹ค.
  • 4๋‹จ๊ณ„์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๋‚˜๋ˆ„์—ˆ๋‹ค.
  • ๋‹จ๊ณ„๋ฅผ ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด ๋†’์•„์ ธ์„œ ์–ธ๊ธ‰๋œ ์ด์Šˆ๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์€ ๋–จ์–ด์ง„๋‹ค.
  • ์‘๋‹ต์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹จ๊ณ„๋ฅผ ์˜ฌ๋ผ๊ฐ„๋‹ค๋ฉด, ์ž˜๋ชป๋œ ๊ฐ’์ด ์ฒ˜๋ฆฌ ๋  ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•˜๋ฉด Lock์ด ๊ฑธ๋ฆฌ๋Š”๋ฐ, SELECT์‹œ์—๋Š” ๊ณต์œ  Lock, CREATE/INSERT/DELETE ์‹œ์—๋Š” ๋ฐฐํƒ€์  Lock์ด ๊ฑธ๋ฆฐ๋‹ค.
1.Read Uncommitted(๋ ˆ๋ฒจ 0)
  • SELECT๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๊ณต์œ  Lock์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์— ์ฒ˜๋ฆฌ์ค‘์ธ ํ˜น์€ ์•„์ง ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ฝ๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ A๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ B๋ผ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€(Uncommitted ํ˜น์€ Dirty) ํŠธ๋žœ์žญ์…˜์ด์ง€๋งŒ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ์ธ B๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์—†๋‹ค.
  • Dirty Read, Non-Repeatable Read, Phantom Read ๋ฐœ์ƒ
2.Read Committed(๋ ˆ๋ฒจ 1)
  • SELECT๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๊ณต์œ  Lock์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜ํ–‰๋˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†์–ด ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ปค๋ฐ‹์ด ์ด๋ฃจ์–ด์ง„ ํŠธ๋žœ์žญ์…˜๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ A๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ B๋ผ๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • SQL Server๊ฐ€ Default๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.
  • Non-Repeatable Read, Phantom Read ๋ฐœ์ƒ
3.Repeatable Read(๋ ˆ๋ฒจ 2)
  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ SELECT๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๊ณต์œ  Lock์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์ด ๋ฒ”์œ„ ๋‚ด์—์„œ ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ์ด ํ•ญ์ƒ ๋™์ผํ•จ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ๊ทธ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.
  • Phantom Read ๋ฐœ์ƒ
4.Serializable(๋ ˆ๋ฒจ 3)
  • ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ SELECT๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๊ณต์œ  Lock์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ์™„๋ฒฝํ•œ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ ๋ชจ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ๊ฐ€์žฅ ์—„๊ฒฉํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์ด๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ๊ทธ ์˜์—ญ์— ํ•ด๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ˆ˜์ • ๋ฐ ์ž…๋ ฅ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์œ„ 3๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๋ชจ๋‘ ์ปค๋ฒ„ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋™์‹œ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์€ ๊ธ‰๊ฒฉํžˆ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

Partitioning(ํŒŒํ‹ฐ์…”๋‹)

  • ์ˆ˜์ง ํŒŒํ‹ฐ์…”๋‹
  • ํฐ ํ…Œ์ด๋ธ”์ด๋‚˜ ์ธ๋ฑ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ฌผ๋ฆฌ์ ์ธ ํŒŒํ‹ฐ์…”๋‹์œผ๋กœ ์ธํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ํ›ผ์† ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ€์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • ํฐ ํ…Œ์ด๋ธ”์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ํŠน์ • DML๊ณผ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
  • ์ฃผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ Write ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ด๋‹ค.
  • ๋งŽ์€ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์ด ์žˆ๋Š” OLTP(Online Transaction Processing) ์‹œ์Šคํ…œ์—์„œ ์‚ฝ์ž… ์ž‘์—…๋“ค์„ ๋ถ„๋ฆฌ๋œ ํŒŒํ‹ฐ์…˜๋“ค๋กœ ๋ถ„์‚ฐ์‹œ์ผœ ๊ฒฝํ•ฉ์„ ์ค„์ธ๋‹ค.
  • ํ…Œ์ด๋ธ”๊ฐ„ join์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๋ฅผ ๋ณ„๋„ ํŒŒํ‹ฐ์…˜ ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ํ…Œ์ด๋ธ”๊ณผ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ™์ด ํŒŒํ‹ฐ์…”๋‹ํ•ด์•ผ ํ•œ๋‹ค.

Sharding(์ƒค๋”ฉ)

  • ์ˆ˜ํ‰ ํŒŒํ‹ฐ์…”๋‹
  • ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ์ˆ˜ํ‰ ๋ถ„ํ• ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ชผ๊ฐœ์„œ ์ €์žฅํ•˜๋Š” ๊ฒƒ
  • ์ƒค๋”ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งค์šฐ ์‰ฝ๊ฒŒ ์ผ๋ฐ˜ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ ˆ๋ฒจ์ด์„œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Replication(๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜)

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ DBMS ์‹œ์Šคํ…œ์„ Master/Slave๋กœ ๋‚˜๋ˆ ์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • Master์—๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐ˜์˜๋งŒ ํ•˜๊ณ  Replication์„ ํ•˜์—ฌ Salve์— ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค.
  • ์‚ฝ์ž…/์ˆ˜์ •/์‚ญ์ œ๋Š” Master๊ฐ€ ๋‹ด๋‹นํ•˜๊ณ  ์กฐํšŒ๋Š” Slave๊ฐ€ ๋‹ด๋‹นํ•ด์„œ ์„ฑ๋Šฅ ํ–ฅ์ƒ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋กœ๊ทธ ๊ธฐ๋ฐ˜ ๋ณต์ œ
    • Statement Based : SQL์„ ๋ณต์‚ฌํ•˜์—ฌ ์ง„ํ–‰
    • Row Based : SQL์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋œ Row๋งŒ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹
    • Mixed : ๊ธฐ๋ณธ์ ์œผ๋กœ statement Based๋กœ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํ•„์š”์— ๋”ฐ๋ผ Row Based๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

MongoDB

  • ๋„ํ๋จผํŠธ ์ง€ํ–ฅ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด๋‹ค.
  • NoSQL
  • ๋˜‘๊ฐ™์€ ์กฐ๊ฑด์œผ๋กœ ์„ค๊ณ„ํ–ˆ์„ ์‹œ RDBMS๋ณด๋‹ค ๋น ๋ฅด๋‹ค.
  • ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋„ํ๋จผํŠธ์˜ ์ง‘ํ•ฉ์„ ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค. = RDBMS์—์„œ ํ…Œ์ด๋ธ”
  • Join์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๋ฐ ์ž…๋ ฅ์ด ๋ฐ”๋กœ ๋””์Šคํฌ์— ์“ฐ์ด์ง€ ์•Š๋Š”๋‹ค.(๋น„๋™๊ธฐ์‹) ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
  • ์ž์ฒด์ ์œผ๋กœ ์Šค์ผ€์ผ ์•„์›ƒ์„ ์ง€์›ํ•œ๋‹ค.

Redis

  • ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • NoSQL
  • ํ‚ค-๊ฐ’ ๊ตฌ์กฐ
  • C ์ฝ”๋“œ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜์ด memcached์— ๋น„ํ•ด ์ ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ƒค๋”ฉ์„ ํ†ตํ•ด ํ™•์žฅํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
    • snapshotting
      • save
        • ์ˆœ๊ฐ„์ ์œผ๋กœ redis๋ฅผ ์ •์ง€์‹œํ‚ค๊ณ , ๊ทธ ๋•Œ์˜ ์Šค๋ƒ…์ƒท์„ ๋””์Šคํฌ์— ์ €์žฅํ•œ๋‹ค.
      • blocking
        • ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์šดํ›„, ๊ทธ ๋‹น์‹œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์Šค๋ƒ…์ƒท์„ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋ฉฐ redis๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.
    • AOF(Append On File)
      • redis์˜ ๋ชจ๋“  write/update ์—ฐ์‚ฐ ์ž์ฒด๋ฅผ ๋ชจ๋‘ log ํŒŒ์ผ์— ๊ธฐ๋กํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์žฌ ์‹œ์ž‘๋  ๋•Œ ๊ธฐ๋ก๋œ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•œ๋‹ค.
      • ๊ธฐ๋ณธ์ ์œผ๋กœ non-blocking call์ด๋‹ค.
  • Single Thread๋กœ ์ž‘๋™ํ•œ๋‹ค.
  • Single Thread๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ช…๋ น์„ script๋กœ ํ•œ ๋ฒˆ์— ์š”์ฒญํ•  ๊ฒฝ์šฐ transaction level serializable๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

Memcached

  • DB / API ํ†ต์‹ ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์บ์‹œ์ด๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค๋„ ์‘๋‹ต ์†๋„๋Š” ์•ˆ์ •์ ์ธ ํŽธ์ด๋‹ค.
  • Redis์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ API๊ฐ€ ๋‹ค์–‘ํ•˜์ง€ ์•Š๋‹ค.
  • Key-Value๋งŒ ์ง€์›ํ•œ๋‹ค.
  • ์บ์‹œ ์†”๋ฃจ์…˜์ด๋‹ค. ๋ ˆ๋””์Šค๋Š” ์—ฌ๊ธฐ์— ์ €์žฅ์†Œ์˜ ๊ฐœ๋…์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.

MariaDB

  • MySQL์ด ์˜ค๋ผํด๋กœ ๋„˜์–ด๊ฐ„ ๋’ค ๋ถˆํ™•์‹คํ•œ ๋ผ์ด์„ ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ์˜คํ”ˆ ์†Œ์Šค DBMS์ด๋‹ค.
  • MySQL์˜ ๋Œ€์ฒด์ œ, ์‚ฌ์šฉ๋ฒ•์ด ๊ฐ™๋‹ค.

Datasocurce

  • ์ปค๋„ฅ์…˜ ํ’€์˜ ์ปค๋„ฅ์…˜์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. (javax.sql.DataSource)
  • Datasource๋ฅผ ๊ตฌํ˜„ํ•œ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๊ฐ€ hikariCP์ด๋‹ค. HikariDataSource
  • ๋ฐ์ดํ„ฐ์†Œ์Šค ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ํ•„์š”ํ•œ ์ปค๋„ฅ์…˜์„ ํš๋“, ๋ฐ˜๋‚ฉํ•œ๋‹ค.
  • JNDI(Java Naming and Directory Interface) Server๋ฅผ ํ†ตํ•ด ์ด์šฉ๋œ๋‹ค.

HikariCP

  • ์Šคํ”„๋ง ๋ถ€ํŠธ 2.0์˜ ๊ธฐ๋ณธ jdbc cp์ด๋‹ค.

Java

Java 8 ๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • ์ธํ„ฐํŽ˜์ด์Šค์— ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
  • ์ŠคํŠธ๋ฆผ api
  • ๋žŒ๋‹ค
  • ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • Optional

Interface(์ธํ„ฐํŽ˜์ด์Šค)

  • ํด๋ž˜์Šค๋“ค์ด ๊ตฌํ˜„ํ•ดํ– ํ•˜๋Š” ๋™์ž‘์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ถ”์ƒํ˜•
  • ๊ทœ์•ฝ, ๊ทœ์ œ
  • ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ
  • ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋‹ค์ค‘ ์ƒ์†(๋‹ค์ค‘ ๊ตฌํ˜„)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ ํ•„์š” ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค๋Š” ์žฅ์ 
  • ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ์†์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ” 8์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ
    • ์ƒ์ˆ˜ ํ•„๋“œ(public static final) : ๊ธฐ์กด, ์ƒ๋žต ๊ฐ€๋Šฅ
    • ์ถ”์ƒ ๋ฉ”์†Œ๋“œ(public abstract) : ๊ธฐ์กด, ์ƒ๋žต ๊ฐ€๋Šฅ
    • ๋””ํด๋“œ ๋ฉ”์†Œ๋“œ(public default) : ์ƒˆ๋กœ ์ถ”๊ฐ€๋จ
      • ์ด์ „์— ๊ฐœ๋ฐœํ•œ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ, ์ƒˆ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š” ํด๋ž˜์Šค๋Š” ๋””ํดํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋‹คํ˜•์„ฑ

  • ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)์€ ๋‹คํ˜•์„ฑ์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ
  • ๋‹คํ˜•์„ฑ์˜ ์กฐ๊ฑด
    • ๊ณตํ†ต์˜ ๋ถ€๋ชจ
    • ๊ณตํ†ต์˜ ๋ฉ”์†Œ๋“œ ์žฌ์ •์˜
    • ๋ถ€๋ชจ ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋กœ ํ˜ธ์ถœ

Generic(์ œ๋„ค๋ฆญ)

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

mutable & immutable

  • mutable
    • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ๊ฐ์ฒด
    • ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด
    • ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์—๋„ ์ž์œ ๋กญ๊ฒŒ ๊ฐ’ ๋ณ€๊ฒจ ๊ฐ€๋Šฅ
  • immutable
    • ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ๊ฐ์ฒด
    • ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด
    • ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„๋กœ๋Š” ๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€

OOP(Object-Oriented Programming, ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

  • ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ ๋งŽ์€ ๊ฐ์ฒด๋ผ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ  ์ด ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ ์ž‘์šฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์„œ์ˆ ํ•˜๋Š” ๋ฐฉ์‹
  • ๊ฐ์ฒด๋“ค์„ ๋ฐ์ดํ„ฐ ๋ฌถ์Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•˜๋‚˜์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์™€ ๋ฐ์ดํ„ฐ์˜ ๋ฌถ์Œ
  • ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋จผ์ € ์ž‘์€ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋“ค๋กœ ๋งŒ๋“  ๋’ค, ์ด ๊ฐ์ฒด๋“ค์„ ์กฐํ•ฉํ•ด์„œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋‚œ ์ƒํ–ฅ์‹(Buttom up) ํ•ด๊ฒฐ๋ฒ• ๋„์ž…
  • ์บก์Аํ™”(Encapsulation)
    • ํ”„๋กœ๊ทธ๋žจ์˜ ์„ธ๋ถ€ ๊ตฌํ˜„์„ ์™ธ๋ถ€๋กœ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋„๋ก ํŠน์ • ๋ชจ๋“ˆ(ํด๋ž˜์Šค) ๋‚ด๋ถ€๋กœ ๊ฐ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ ‘๊ทผ ์ œ์–ด ์ง€์‹œ์ž๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์„ ์ œ์–ดํ•œ๋‹ค.
  • ์ƒ์†(Inheritance)
    • ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ์žฌ์ •์˜๋ฅผ ํ†ตํ•ด ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ ๊ธฐ๋Šฅ๋งŒ๋“ค ์žฌ ์ •์˜ํ•ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹คํ˜•์„ฑ(Polymorphism)
    • ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ค๋ฒ„๋กœ๋”ฉ

Reflection

  • ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด ๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฒ•
  • ์ž๋ฐ”๋Š” ๋™์ ์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ์ˆ ์ด ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๋™์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” Reflection์œผ๋กœ ๊ทธ ์—ญํ• ์„ ๋Œ€์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • Reflection์€ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค ํƒ€์ž…์„ ์•Œ์ง€ ๋ชปํ•ด๋„, ๊ทธ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ, ํƒ€์ž…, ๋ณ€์ˆ˜๋“ค์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ž๋ฐ” API์ด๋‹ค.

Annotation

  • ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ผ์ข…์ด๋‹ค.
  • @๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•œ๋‹ค.
  • JDK 1.5๋ฒ„์ „ ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • CompileTime, Runtime์‹œ์— ํ•ด์„๋  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ›„ JVM์— ํฌํ•จ๋˜์–ด ์ž‘๋™ํ•œ๋‹ค.
  • @Target์œผ๋กœ ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • @Retention์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค์ •ํ•œ๋‹ค.

Enum

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

์ ‘๊ทผ ์ œ์–ด ์ง€์‹œ์ž

์ง€์‹œ์ž ํด๋ž˜์Šค ๋‚ด๋ถ€ ๋™์ผ ํŒจํ‚ค์ง€ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค ์ด์™ธ์˜ ์˜์—ญ
private โญ• โŒ โŒ โŒ
default โญ• โญ• โŒ โŒ
protected โญ• โญ• โญ• โŒ
public โญ• โญ• โญ• โญ•๏ธ
  • private : ํด๋ž˜์Šค ๋‚ด๋ถ€(๋ฉ”์†Œ๋“œ)์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • default : ํด๋ž˜์Šค ๋‚ด๋ถ€์™€ ๋™์ผ ํŒจํ‚ค์ง€์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค.
  • protected : ํด๋ž˜์Šค ๋‚ด๋ถ€์™€ ๋™์ผ ํŒจํ‚ค์ง€ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • public : ์–ด๋””์„œ๋“  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

String, StringBuilder, StringBuffer

  • String์€ immutable, private final char[] ํ˜•ํƒœ
  • immutable์ธ ์ด์œ  : ํผํฌ๋จผ์Šค, ๋™์‹œ์„ฑ, GC
  • StringBuilder, StringBuffer์€ mutable
  • StringBuffer๋Š” Thread safe, StringBuilder๋Š” Thread safeํ•˜์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ Multi Thread ํ™˜๊ฒฝ์—์„œ๋Š” StringBuffer๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

Collection

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์„ ํ•œ ๊ณณ์— ๋ชจ์•„ ๊ด€๋ฆฌํ•˜๊ณ  ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ œ๊ณตํ•œ๋‹ค.
  • ๋ชจ๋“  Collection์˜ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ์จ Collection์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ•ต์‹ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค.
  • List
    • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
    • LinkedList : ์–‘๋ฐฉํ–ฅ ํฌ์ธํ„ฐ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•œ๋‹ค. ์Šคํƒ, ํ, ์–‘๋ฐฉํ–ฅ ํ ๋“ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • ArrayList : ์ƒ๋‹นํžˆ ๋น ๋ฅด๊ณ  ํฌ๊ธฐ๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค. ๋‹จ๋ฐฉํ–ฅ ํฌ์ธํ„ฐ ๊ตฌ์กฐ๋กœ ์ž๋ฃŒ์— ๋Œ€ํ•œ ์ˆœ์ฐจ์ ์ธ ์ ‘๊ทผ์— ๊ฐ•์ ์ด ์žˆ๋‹ค.
  • Set
    • ์ˆœ์„œ๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • HashSet : ๊ฐ€์žฅ ๋น ๋ฅธ ์ž„์˜ ์ ‘๊ทผ ์†๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ˆœ์„œ๋ฅผ ์ „ํ˜€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค.
    • TreeSet : ์ •๋ ฌ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ณด๊ด€ํ•˜๋ฉฐ ์ •๋ ฌ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • LinkedHashSet : ์ถ”๊ฐ€๋œ ์ˆœ์„œ, ๋˜๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Map
    • ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์ด๋‹ค.
    • ์ˆœ์„œ๋Š” ์œ ์ง€๋˜์ง€ ์•Š๊ณ , ํ‚ค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ’์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
    • HashMap : Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด HashTable์„ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค, ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ‚ค์™€ ๊ฐ’์œผ๋กœ null์ด ํ—ˆ์šฉ๋œ๋‹ค.
    • TreeMap : ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ํ‚ค์™€ ๊ฐ’์ด ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ํ‚ค, ๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋ฏ€๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ €์žฅ์‹œ ์ •๋ ฌ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์žฅ์‹œ๊ฐ„์ด ๋‹ค์†Œ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.
    • HashTable : HashMap๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ๋™๊ธฐํ™”๊ฐ€ ์ง€์›๋œ๋‹ค. ํ‚ค์™€ ๊ฐ’์œผ๋กœ null์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • LinkedHashMap : ๊ธฐ๋ณธ์ ์œผ๋กœ HashMap์„ ์ƒ์†๋ฐ›์•„ HashMap๊ณผ ๋งค์šฐ ํก์‚ฌํ•˜๋‹ค. Map์— ์žˆ๋Š” ์—”ํŠธ๋ฆฌ๋“ค์ด ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์œ ์ง€๋˜๋ฏ€๋กœ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜๋ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

JVM(Java Virtual Machine)

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

Class Loader

  • ๊ฐ ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ์„ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • Loader(๋กœ๋”)
    • ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ(๊ธฐ๊ณ„์–ด ํŒŒ์ผ)์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ์˜ ์ฃผ ๊ธฐ์–ต ์žฅ์†Œ๋ฅผ ํ• ๋‹น(Allocation)ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ณ„ ํŽธ์ง‘ํ•˜์—ฌ CPU๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋ณด์กฐ ๊ธฐ์–ต ์žฅ์น˜๋กœ๋ถ€ํ„ฐ ์ปดํ“จํ„ฐ์˜ ์ฃผ ๊ธฐ์–ต ์žฅ์น˜์— ์˜ฌ๋ ค ๋†“๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰
    • ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ๋“ค ๋ผ์ง€ ์—ฐ๊ฒฐ(Linking)์‹œํ‚ค๊ฑฐ๋‚˜, ์ฃผ ๊ธฐ์–ต ์žฅ์น˜๋ฅผ ์žฌ๋ฐฐ์น˜(Relocation)ํ•˜๋Š” ์ฆ ํฌ๊ด„์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰
    • ํ• ๋‹น(Allocation) -> ์—ฐ๊ฒฐ(Linking) -> ์žฌ๋ฐฐ์น˜(Relocation) -> ์ ์žฌ(Loading) ์ˆœ์œผ๋กœ ์ง„ํ–‰
  • Linker : ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋กœ ํ•ฉ์นœ๋‹ค.
  • JVM๋‚ด๋กœ Class(.class)๋ฅผ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
  • Runtime ์‹œ์ ์— Dynamic์œผ๋กœ Class๋ฅผ Loadํ•œ๋‹ค.
  • jar ํŒŒ์ผ ๋‚ด ์ €์žฅ๋œ Class๋“ค์„ JVM ์œ„์— ์˜ฌ๋ฆฌ๊ณ , ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Class๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œํ•œ๋‹ค.
  • class์˜ instance๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Class Loader๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์— Loadํ•˜๊ฒŒ ๋œ๋‹ค.
  • Java๋Š” Dynamic Code
  • Compiletime์ด ์•„๋‹ˆ๋ผ Runtime์‹œ์— ์ฐธ์กฐํ•œ๋‹ค. ์ฆ‰ Class๋ฅผ ์ฒ˜์Œ ์ฐธ์กฐํ•  ๋•Œ, ํ•ด๋‹น Class๋ฅผ Loadํ•˜๊ณ  Linkํ•œ๋‹ค.

Runtime Data Areas

  • JVM์ด ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด OS๋กœ๋ถ€ํ„ฐ ๋ณ„๋„๋กœ ํ• ๋‹น ๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์˜๋ฏธํ•œ๋‹ค.

  • PC Register

    • CPU๋Š” ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ Register๋ผ๊ณ  ํ•˜๋Š” CPU๋‚ด์˜ ๊ธฐ์–ต์žฅ์น˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • Stack - Base๋กœ ๋™์ž‘ํ•œ๋‹ค.
    • ๊ฐ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ, ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ JVM ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.
    • ๋งŒ์•ฝ Native Method๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด PC Register๋Š” undefined ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    • PC Register์— ์ €์žฅ๋˜๋Š” ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋Š” Native Pointer ์ผ ์ˆ˜๋„ ์žˆ๊ณ , Method ByteCode์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
    • Native Method๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ์—์„œ๋Š” JVM์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  API๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  • JVM Stack

    • JVM Stack์€ Thread์˜ ์ˆ˜ํ–‰ ์ •๋ณด๋ฅผ Frame๋ฅผ ํ†ตํ•ด์„œ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.
    • Thread๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋˜๋ฉฐ, ๊ฐ ์“ฐ๋ ˆ๋“œ๋ณ„๋กœ ์ƒ์„ฑ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์—๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
    • ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋ฉ”์†Œ๋“œ์™€ ๋ฉ”์†Œ๋“œ ์ •๋ณด๋Š” ์Šคํƒ์— ์Œ“์ด๊ฒŒ ๋˜๋ฉฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋  ๋•Œ ์Šคํƒ point์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ์ •๋ณด๋Š” ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ๋ณ€์ˆ˜, ์ž„์‹œ๋ณ€์ˆ˜, ์ฃผ์†Œ(๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•œ ์ฃผ์†Œ) ๋“ฑ์„ ์ €์žฅํ•˜๊ณ , ๋ฉ”์†Œ๋“œ ์ข…๋ฃŒ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์‚ฌ๋ผ์ง„๋‹ค.
  • Native Method Stack

    • Java์™ธ์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ Native Code๋“ค์„ ์œ„ํ•œ ์Šคํƒ, ์ฆ‰ JNI(Java Native Interface)๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๋Š” C/C++ ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Stack
  • Method Area(Class Area, Static Area)

    • ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค.
    • Method Area๋Š” Class, Interface, Method, Field, Static ๋ณ€์ˆ˜ ๋“ฑ์˜ Byte Code ๋“ฑ์„ ๋ณด๊ด€ํ•œ๋‹ค.
  • Heap

    • ์ธ์Šคํ„ด์Šค ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์ƒ์—์„œ ๋Ÿฐํƒ€์ž„์‹œ ๋‹ค์ด๋‚˜๋ฏน์œผ๋กœ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
    • .class๋ฅผ ์ด์šฉํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด Heap์— ์ €์žฅ๋œ๋‹ค.
    • new ์—ฐ์‚ฐ์ž๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.
    • ์ดˆ๊ธฐ heap size๋Š” 64m์ด๊ณ  ์ตœ๋Œ€ heap size๋Š” 256m์ด๋‹ค.
    • GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค.
    • ์„ฑ๋Šฅ ์ด์Šˆ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ณต๊ฐ„์ด๋‹ค.
      • Permanent Generation
        • ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋œ ๊ณต๊ฐ„์ด๋‹ค.
      • New/Young Area
        • eden : ์ธ์Šคํ„ด์Šค๋“ค์ด ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ณต๊ฐ„
        • survivor 0/1 : eden์—์„œ ์ฐธ์กฐ๋˜๋Š” ์ธ์Šคํ„ด์Šค๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
      • Old
        • new Area์—์„œ ์ผ์ • ์‹œ๊ฐ„ ์ฐธ์กฐ๋˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
        • eden ์˜์—ญ์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€๋“์ฐจ๊ฒŒ ๋˜๋ฉด ์ฒซ๋ฒˆ์งธ GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
        • eden ์˜์—ญ์— ์žˆ๋Š” ๊ฐ’๋“ค์„ Survivor 1์˜์—ญ์— ๋ณต์‚ฌํ•˜๊ณ , ์ด ์˜์—ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•œ๋‹ค.
  • Runtime Constant Pool

    • ๊ฐ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์ˆ˜, ๋ฉ”์†Œ๋“œ์™€ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด๋‹ค.
    • ๋ฉ”์†Œ๋“œ๋‚˜ ํ•„๋“œ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์ƒ ์ฃผ์†Œ๋ฅผ ์ฐพ์„๋• ํ•ด๋‹น ํ’€์„ ์ฐธ์กฐํ•œ๋‹ค.

Execution Engine

  • Load๋œ Class์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Runtime Module์ด๋‹ค.
  • Class Loader๋ฅผ ํ†ตํ•ด JVM๋‚ด์˜ Runtime Data Areas์— ๋ฐฐ์น˜๋œ ByteCode๋Š” Execution Engine์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฉฐ, ์‹คํ–‰ ์—”์ง„์€ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰ํ•œ๋‹ค.
  • ์ตœ์ดˆ์˜ JVM์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฐ ๋‹จ์ ์ด ์žˆ์—ˆ์ง€๋งŒ, JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ด ์ ์„ ๋ณด์™„ํ–ˆ๋‹ค.
  • JVM์€ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ , ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ผ์ •ํ•œ ๊ธฐ์ค€์„ ๋„˜์–ด์„œ๋ฉด JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

์‹คํ–‰ ๊ณผ์ •

  1. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด JVM์€ OS๋กœ๋ถ€ํ„ฐ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›๋Š”๋‹ค. JVM์€ ์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ(Rumtime Data Areas)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
  2. Java Compiler(Javac)๊ฐ€ Java SourceCode(.java)๋ฅผ ์ฝ์–ด๋“ค์—ฌ Java ByteCode(.class)๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  3. Class Loader๋ฅผ ํ†ตํ•ด class ํŒŒ์ผ๋“ค์„ JVM์œผ๋กœ Loadingํ•œ๋‹ค.
  4. Loading๋œ class ํŒŒ์ผ๋“ค์€ Execution Engine์„ ํ†ตํ•ด ํ•ด์„๋œ๋‹ค.
  5. ํ•ด์„๋œ ByteCode๋Š” Runtime Data Areas์— ๋ฐฐ์น˜๋˜๋ฉฐ ์‹ค์งˆ์ ์ธ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์†์—์„œ ํ•„์š”์— ๋”ฐ๋ผ Thread Synchronization๊ณผ ๊ฐ™์€ GC ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

JIT(Just In Time) Compiler

  • Interpreter ๋ฐฉ์‹์˜ ๋‹จ์ ‘์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ์ปดํŒŒ์ผ๋Ÿฌ

  • ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ผ์ •ํ•œ ๊ธฐ์ค€์„ ๋„˜์–ด์„œ๋ฉด ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

  • ์ดํ›„์—๋Š” ๋”์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์œผ๋กœ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ , ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•œ๋‹ค.

  • NativeCode๋Š” Cache์— ๋ณด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ Compile๋œ Code๋Š” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค.

  • JIT Compiler๊ฐ€ Compileํ•˜๋Š” ๊ณผ์ •์€ ByteCode๋ฅผ Interpretingํ•˜๋Š” ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฏ€๋กœ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋Š” Code๋ผ๋ฉด Interpreter๋ฐฉ์‹์ด ์ ์ ˆํ•˜๋‹ค.

Garbage Collection

Stop-the-world

  • GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ด๋‹ค.
  • GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋Š” ๋ชจ๋‘ ์ž‘์—…์„ ๋ฉˆ์ถ˜๋‹ค.
  • GCํŠœ๋‹์€ ์ด stop-the-world ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.

๊ฐœ๋ก 

  • System.gc()๋ฉ”์†Œ๋“œ๋ฅผ ์ ˆ๋Œ€ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค.
  • ๋” ์ด์ƒ ํ•„์š”์—†๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์น˜์šฐ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.
  • ๋‘ ๊ฐ€์ง€ ๊ฐ€์„ค weak generaional hypothesis
    1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.
  • ์ด ๊ฐ€์„ค์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ HotSpot VM์—๋Š” Young, Old ๋‘ ๊ฐœ์˜ ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„์—ˆ๋‹ค.

Young Generation(Young)

  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์ด ์œ„์น˜ํ•œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • 3 ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค. (Eden + Survivor 2๊ฐœ)
  • ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜ํ•œ๋‹ค.
  • Eden ์˜์—ญ์—์„œ GC๊ฐ€ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•œ ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™๋œ๋‹ค.
  • Eden ์˜์—ญ์—์„œ GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฏธ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” Survivor ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์Œ“์ธ๋‹ค.
  • ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ๊ทธ ์ค‘์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋“ ์ฐฌ Survivor ์˜์—ญ์€ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” ์ƒํƒœ๋กœ ๋œ๋‹ค.
  • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์•„ ์žˆ๋Š” ๊ฐœ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
  • Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋น„์–ด ์žˆ๋Š” ์ƒํƒœ๋กœ ๋‚˜์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋‘ ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ๋‘ ์˜์—ญ ๋ชจ๋‘ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹ˆ๋‹ค.

Old Generation(Old)

  • ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ๋˜์ง€ ์•Š์•„ Young ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์ด๊ณณ์œผ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
  • Young ์˜์—ญ๋ณด๋‹ค๋Š” ํฌ๊ฒŒ ํ• ๋‹นํ•˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ Young ์˜์—ญ๋ณด๋‹ค GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC(Full GC)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ์นด๋“œ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•œ๋‹ค.
  • ์นด๋“œ ํ…Œ์ด๋ธ”
    • Old ์˜์—ญ์—๋Š” 512Byte์˜ ๋ฉ์–ด๋ฆฌ(chunk)๋กœ ๋˜์–ด ์žˆ๋Š” ์นด๋“œ ํ…Œ์ด๋ธ”(Card Table)์ด ์กด์žฌํ•œ๋‹ค.
    • Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋งˆ๋‹ค ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.
    • Young ์˜์—ญ์˜ GC๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์—๋Š” Old ์˜์—ญ์˜ ๋ชจ๋“  ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , ์ด ์นด๋“œ ํ…Œ์ด๋ธ”๋งŒ ๋’ค์ ธ์„œ GC ๋Œ€์ƒ์ธ์ง€ ์‹๋ณ„ํ•œ๋‹ค
    • write barrier๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. Minor GC๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์žฅ์น˜์ด๋‹ค. ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ „๋ฐ˜์ ์ธ GC ์‹œ๊ฐ„์€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

Old GC

  • Serial GC
    • ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • CPU ์ฝ”์–ด๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๋ฐฉ์‹์ด๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์ด ๋งŽ์ด ๋–จ์–ด์ง„๋‹ค.
    • ์ ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.
    • GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋‹ค.
    • Old ์˜์—ญ์˜ GC๋Š” Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
      1. Old ์˜์—ญ์— ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„(Mark)ํ•œ๋‹ค.
      2. Heap์˜ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ํ™•์ธํ•˜์—ฌ ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ๋งŒ ๋‚จ๊ธด๋‹ค.(Sweep)
      3. ๊ฐ ๊ฐ์ฒด๋“ค์ด ์—ฐ์†๋˜๊ฒŒ ์Œ“์ด๋„๋ก Heap์˜ ๊ฐ€์žฅ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์›Œ์„œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.(Compaction)
  • Parallel GC
    • GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋‹ค.
    • Serial GC๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๊ณ  ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•˜๋‹ค.
  • Parallel Old GC(Parallel Compacting GC)
    • Old ์˜์—ญ์˜ GC๋Š” Mark-Summary-Compaction ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.
    • Summary ๋‹จ๊ณ„๋Š” ์•ž์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ๋ณ„๋„๋กœ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.
    • Mark-Sweep-Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ Sweep ๋‹จ๊ณ„์™€ ๋‹ค๋ฅด๋‹ค.
  • Concurrent Mark & Sweep GC(CMS)
    • Stop-the-world ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง๋‹ค.
    • ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•  ๋•Œ CMS GC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • Low Latency GC๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    • ๋‹ค๋ฅธ GC๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.
    • Compaction ๋‹จ๊ณ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
    • ์ดˆ๊ธฐ Initial Mark ๋‹จ๊ณ„์—์„œ๋Š” ํด๋ž˜์Šค ๋กœ๋”์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ์ฒด ์ค‘ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚œ๋‹ค. ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์€ ๋งค์šฐ ์งง๋‹ค.
    • Current Mark ๋‹จ๊ณ„์—์„œ๋Š” ์‚ด์•„์žˆ๋‹ค๊ณ  ํ™•์ธํ•œ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ํ™•์ธํ•œ๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค.
    • Remark ๋‹จ๊ณ„์—์„œ๋Š” Concurrent Mark ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๊ฐ€ ๋Š๊ธด ๊ฐ์ฒด๋ฅผ ํ™•์ธํ•œ๋‹ค.
    • Concurrent Sweep ๋‹จ๊ณ„์—์„œ๋Š” ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ง„ํ–‰ํ•œ๋‹ค.
  • G1(Garbage First) GC
    • ๊ฐ€์žฅ ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋‹ค.
    • ์•„์ง ์•ˆ์ •ํ™” ๋‹จ๊ณ„์ด๋‹ค.

Permanent Genration(Perm)

  • Method Area
  • ๊ฐ์ฒด๋‚˜ ์–ต๋ฅ˜(intern)๋œ ๋ฌธ์ž์—ด ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • Old ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์˜์›ํžˆ ๋‚จ์•„ ์žˆ๋Š” ๊ณณ์€ ์ ˆ๋Œ€ ์•„๋‹ˆ๋‹ค.
  • ์ด ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” GC๋Š” Major GC์˜ ํšŸ์ˆ˜์— ํฌํ•จ๋œ๋‹ค.

Spring

Spring

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

Spring Boot

  • Spring Project์˜ ํ•˜๋‚˜
  • ์ดˆ๊ธฐ ์ˆ˜์ž‘์—…์˜ ์…‹ํŒ…์„ ์ž๋™์œผ๋กœ ํ•ด์ค€๋‹ค.
  • ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์ด๋ฏธ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • Servlet Contatiner๋ฅผ ๊ธฐ๋ณธ ๋‚ด์žฅํ•˜๊ณ  ์žˆ๋‹ค.(Tomcat, Jetty)
  • Pom.xml์—์„œ ์˜์กด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ์กฐํ•ฉ์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ณ  ์Šคํ”„๋ง์„ ๋”์šฑ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

Spring Bean Life Cycle

  1. Bean ์ธ์Šคํ„ด์Šคํ™” ๋ฐ DI
    1. XMLํŒŒ์ผ / Java Config / Annotation์—์„œ bean ์ •์˜๋ฅผ ์Šค์บ”
    2. bean ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    3. bean property์— ์˜์กด์„ฑ ์ฃผ์ž…
  2. ์Šคํ”„๋ง์ธ์ง€ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ
    1. bean์ด BeanNameAware ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์‹œ setBeanName() ํ˜ธ์ถœ
    2. bean์ด BeanClassLoaderAware ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์‹œ setBeanClassLoader() ํ˜ธ์ถœ
    3. bean์ด ApplicationContextAware ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ์‹œ setApplicationContext() ํ˜ธ์ถœ
  3. Bean ์ƒ์„ฑ ์ƒ๋ช…์ฃผ๊ธฐ Callback
    1. @PostConstruct Annotation ์ ์šฉ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
    2. bean์ด initializingBean ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์‹œ afrerPropertiesSet() ํ˜ธ์ถœ
    3. bean์ด init-method ์ •์˜ํ•˜๋ฉด ์ง€์ •ํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  4. Bean ์†Œ๋ฉธ ์ƒ๋ช…์ฃผ๊ธฐ Callback
    1. @PreDestory Annotation ์ ์šฉ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
    2. bean์ด DispoableBean ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์‹œ destroy() ํ˜ธ์ถœ
    3. bean์ด destroy-method ์ •์˜ํ•˜๋ฉด ์ง€์ •ํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

IoC Container

  • ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ณดํ†ต ์ธ์Šคํ„ด์Šค์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋“ค์—๊ฒŒ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋„๋ก ํ•œ๋‹ค.
  • ์ž‘์„ฑํ•œ ์ฝ”๋“œ์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์œ„์ž„๋ฐ›์€ ๋…๋ฆฝ๋ฐ›์€ ์กด์žฌ์ด๋‹ค.
  • ์ ์ ˆํ•œ ์„ค์ •๋งŒ ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฌ์˜ ๋„์›€ ์—†์ด๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์Šค์Šค๋กœ ์ฐธ์กฐํ•œ ๋’ค ์•Œ์•„์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์„ ์ปจํŠธ๋กคํ•ด์ค€๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” IoC๋ฅผ ์ด์ˆ‘ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋นˆ/์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ = IoC์ปจํ…Œ์ด๋„ˆ = DI์ปจํ…Œ์ด๋„ˆ
  • ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
    • BeanFactory
      • DI์˜ ๊ธฐ๋ณธ์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ปจํ…Œ์ด๋„ˆ
      • ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ
      • Bean์„ ์ƒ์„ฑํ•˜๊ณ  ๋ถ„๋ฐฐํ•˜๋Š” ์ฑ…์ž„์„ ์ง€๋Š” ํด๋ž˜์Šค
      • Bean์˜ ์ •์˜๋Š” ์ฆ‰์‹œ ๋กœ๋”ฉํ•˜์ง€๋งŒ, ๋นˆ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์€ Lazy Loadingํ•œ๋‹ค.
      • ์ฒ˜์Œ์œผ๋กœ getBean()์ด ํ˜ธ์ถœ๋œ ์‹œ์ ์—์„œ์•ผ ํ•ด๋‹น ๋นˆ์„ ์ƒ์„ฑํ•œ๋‹ค.(Lazy Loading)
    • ApplicationContext
      • BeanFactory ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.
      • ํ•˜์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ„๋„์˜ BeanFactory๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋‹ค.
      • ์ฆ‰์‹œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.
      • BeanFactory์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์ข€ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
      • ๊ตญ์ œํ™”๊ฐ€ ์ง€์›๋˜๋Š” ํ…์ŠคํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.
      • ์ด๋ฏธ์ง€ ๊ฐ™์€ ํŒŒ์ผ ์ž์›์„ ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๊ด„์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
      • Listener๋กœ ๋“ฑ๋ก๋œ Bean์—๊ฒŒ ์ด๋ฒคํŠธ ๋ฐœ์ƒ์„ ์•Œ๋ ค์ค€๋‹ค.
      • Context์ดˆ๊ธฐํ™” ์‹œ์ ์—์„œ ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค Bean์„ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•œ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ๋™ํ•œ๋‹ค.

IoC(Inversion of Control, ์ œ์–ด์˜ ์—ญ์ „)

  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์†Œ๋ฉธ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋Œ€์‹  ํ•˜๊ฒŒ ๋œ๋‹ค.(์ œ์–ด์˜ ์—ญ์ „)
  • ์ด ์ œ์–ด๊ถŒ์ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด Spring IoC์ด๋‹ค.
  • ์ œ์–ด๊ถŒ์ด ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„˜์–ด๊ฐ์œผ๋กœ์จ DI, AOP๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์†Œ๋ฉธ๊นŒ์ง€์˜ ๊ฐ์ฒด(Bean) ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ปจํ…Œ์ด์„œ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์Šคํ”„๋ง์—์„œ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์ˆœ์„œ
    1. ๊ฐ์ฒด ์ƒ์„ฑ
    2. ์˜์กด์„ฑ ๊ฐ์ฒด ์ฃผ์ž…(์Šค์Šค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ์–ด๊ถŒ์„ ๊ฐ€์ง„ ์Šคํ”„๋ง์—๊ฒŒ ์œ„์ž„ํ•˜์—ฌ ์Šคํ”„๋ง์ด ๋งŒ๋“œ๋Ÿฌ ๋†“์€ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค.)
    3. ์˜์กด์„ฑ ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ

DI(Dependency Injection, ์˜์กด์„ฑ ์ฃผ์ž…)

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

AOP(Aspect Oriented Programming, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์ณ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ๋“ค ์žฌ์‚ฌ์šฉํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ฐ€๋กœ(ํšก๋‹จ) ์˜์—ญ์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ์ž˜๋ผ๋ƒˆ๋‹ค๊ณ  ํ•˜์—ฌ ํฌ๋กœ์Šค ์ปทํŒ…(Cross-Cutting)์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ ๋“ฑ
  • ๋กœ์ง ์ฃผ์ž…
  • ํ”„๋ก์‹œ ํŒจํ„ด๊ณผ ์œ ์‚ฌ
  • ์šฉ์–ด
    • Aspect - ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ถ„์‚ฐ๋œ ์‹ค์ œ ๋น„์ง€๋‹ˆ์Šค ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ฝ”๋“œ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๋งํ•œ๋‹ค. ์Šคํ”„๋ง AOP์—์„œ๋Š” Advice ์™€ Pointcut์„ ํ•ฉ์นœ ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • JoinPoint - ์กฐ์ธ ํฌ์ธํŠธ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ฉ”์†Œ๋“œ๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์‹คํ–‰ ์ง€์ ์ด๋‹ค. ์Šคํ”„๋ง AOP์—์„œ๋Š” ํ•ญ์ƒ ๋ฉ”์†Œ๋“œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค.
    • Advice - ํŠน์ • Joinpoint, ์ฆ‰ ํŠน์ • ์ง€์ ์—์„œ ์‹คํ–‰๋  ํ–‰์œ„์ด๋‹ค. ์Šคํ”„๋ง AOP์—์„œ๋Š” ํŠน์ • ๋ฉ”์†Œ๋“œ์— ์ถ”๊ฐ€ํ•  ์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
    • Pointcut - Advice๋ฅผ ์‹คํ–‰ํ•  Joinpoint๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œํ˜„์‹์ด๋‹ค.
    • Weaving - Pointcut์œผ๋กœ ์ง€์ •ํ•œ ๋ฉ”์†Œ๋“œ์— Advice๋ฅผ ์ ์šฉํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์Šคํ”„๋ง AOP์—์„œ๋Š” Aspect์™€ ํƒ€๊ฒŸ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.
  • AOP ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Spring AOP์™€ AspectJ๊ฐ€ ์žˆ๋‹ค.
    • ์ตœ์‹  ๋ฒ„์ „์˜ Spring AOP๋Š” CGLib Proxy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (JDK Proxy vs CGLib Proxy ๊ทธ๋ฆผ ์ฐธ์กฐ)
    • ๋‘˜์˜ ์ฐจ์ด์ ์€ Weaving์ด๋‹ค.
    • Spring AOP๋Š” CGLib๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ Proxy ํŒจํ„ด์„ ๋งŒ๋“ ๋‹ค.
      • ์ƒ์†์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…€ํ”„ ํ˜ธ์ถœ์—๋Š” Spring AOP๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • AspectJ๋Š” Proxy ํŒจํ„ด์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•œ๋‹ค.
      • ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์…€ํ”„ ํ˜ธ์ถœ์„ ํ•ด๋„ AOP๊ฐ€ ์ ์šฉ๋œ๋‹ค.

JDK Proxy vs CGLib Proxy

Spring MVC

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์ตœ์ดˆ ์ง„์ž… ์ง€์ ์€ DispatcherServlet์ด ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ์ข…์˜ front controller์ด๋‹ค. ์ด servlet์ด ๋‹ค์Œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
  2. DispatcherServlet์€ Spring Bean Definition์— ์„ค์ •๋˜์–ด ์žˆ๋Š” Handler Mapping ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Controller๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. DispatcherServlet์€ ์„ ํƒ๋œ Controller๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  4. Controller๋Š” Business Layer์™€ ํ†ต์‹ ํ•˜์—ฌ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ์š”์ฒญ์— ๋Œ€ํ•œ ์„ฑ๊ณต ์œ ๋ฌด์— ๋”ฐ๋ผ ModelAndView ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ModelAndView ํด๋ž˜์Šค์—๋Š” UI Layer์—์„œ ์‚ฌ์šฉํ•  Model ๋ฐ์ดํ„ฐ์™€ UI Layer๋กœ ์‚ฌ์šฉํ•  View์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
  5. DispatcherServlet์€ ModelAndView์˜ View์˜ ์ด๋ฆ„์ด ๋…ผ๋ฆฌ์ ์ธ View ์ •๋ณด์ด๋ฉด ViewResolver๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ด ๋…ผ๋ฆฌ์ ์ธ View ์ •๋ณด๋ฅผ ์‹ค์งˆ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  View๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
  6. DispatcherServlert์€ ViewResolver๋ฅผ ํ†ตํ•˜์—ฌ ์ „๋‹ฌ๋œ View์—๊ฒŒ ModelAndView๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์›ํ•˜๋Š” UI๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ UI๋ฅผ ์ œ๊ณตํ•  ์ฑ…์ž„์€ View ํด๋ž˜์Šค๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

Spring Data JPA

  • JPA(Java Persistence API) : ์ž๋ฐ” ์˜์†์„ฑ
  • ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ์ฝ”๋“œ์— ์ž ์‹ ๋‹นํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ์ข‹์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํƒ€์ž… ์•ˆ์ •์ ์ธ ์ฟผ๋ฆฌ ์ž‘์„ฑ, Persistent Context๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์บ์‹œ ๊ธฐ๋Šฅ์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์˜์†์„ฑ ๊ด€๋ฆฌ์™€ ORM์„ ์œ„ํ•œ ํ‘œ์ค€ ๊ธฐ์ˆ ์ด๋‹ค.
  • ORM ํ‘œ์ค€ ๊ธฐ์ˆ ๋กœ Hibernate, OpenJPA, EclipseLink, TopLink Essentails๊ณผ ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๊ณ  ์ด์— ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ JPA์ด๋‹ค.

MyBatis

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง€์ •ํ•œ SQL, ์ €์žฅํ”„๋กœ์‹œ์ €, ๊ทธ๋ฆฌ๊ณ  ๋ช‡๊ฐ€์ง€ ๊ณ ๊ธ‰ ๋งคํ•‘์„ ์ง€์›ํ•˜๋Š” Persistent ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.
  • JDBC๋กœ ์ฒ˜๋ฆฌํ•œ๋Š” ์ƒ๋‹น ๋ถ€๋ถ„์˜ ์ฝ”๋“œ์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ • ๋ฐ ๊ฒฐ๊ณผ ๋งคํ•‘์„ ๋Œ€์‹ ํ•ด์ค€๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒฐ๊ณผ์— ์›์‹œ ํƒ€์ž…๊ณผ Map ์ธํ„ฐํŽ˜์ด์Šค ๊ทธ๋ฆฌ๊ณ  POJO๋ฅผ ์„ค์ •ํ•ด์„œ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด XML๊ณผ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • SqlSessionFactory์„ ์‚ฌ์šฉํ•œ๋‹ค. ์‹ค์ œ SQL๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • Java ์†Œ์Šค์—์„œ SQL์„ ๋ถ„๋ฆฌํ•ด์ค€๋‹ค.

์ƒ์„ฑ์ž ์˜์กด์„ฑ ์ฃผ์ž…

  • Spring 4.3+๋ถ€ํ„ฐ ์ƒ์„ฑ์ž๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ @Autowired์—†์ด ์ƒ์„ฑ์ž ์˜์กด์„ฑ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™
    • ์ƒ์„ฑ์ž์˜ ์ธ์ž๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์ฝ”๋“œ๋Ÿ‰๋„ ๋งŽ์•„์ง€๊ณ , ์˜์กด ๊ด€๊ณ„๋„ ๋งŽ์•„์ ธ ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™์— ์œ„๋ฐฐ๋œ๋‹ค.
    • ์˜์กด๊ด€๊ณ„, ๋ณต์žก์„ฑ์„ ์‰ฝ๊ฒŒ ์•Œ์ˆ˜ ์žˆ์–ด ๋ฆฌํŒฉํ† ๋ง์˜ ๋‹จ์ดˆ๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ
    • ํŠน์ • DI ์ปจํ…Œ์ด๋„ˆ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , POJO์—ฌ์•ผ ํ•œ๋‹ค.
    • DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ธ์Šคํ„ด์Šคํ™” ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋‹ค๋ฅธ DI ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • immutability
    • ํ•„๋“œ๊ฐ€ final์ด ๊ฐ€๋Šฅํ•ด ๊ฐ์ฒด๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ์ˆœํ™˜ ์˜์กด์„ฑ
  • ์˜์กด์„ฑ ๋ช…์‹œ

JSP(Java Server Pages)

  • ์‹คํ–‰ ์‹œ ์„œ๋ธ”๋ฆฟ.HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ ์ปดํŒŒ์ผ๋˜์–ด ์‹คํ–‰๋œ๋‹ค.
  • JSP ํŒŒ์ผ์„ ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

Hystrix

Spring Hystrix

  • Netflix OSS์˜ ํ•˜๋‚˜
  • ๋ถ„์‚ฐ ํ™˜๊ฒฝ(MSA)์—์„œ ์žฅ์•  ๋‚ด์„ฑ๊ณผ ์ง€์—ฐ ๋‚ด์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.
  • ์ตœ์†Œํ•œ์˜ ๋ถ€ํ•˜๋กœ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Circuit Breaker, DashBoard ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ RxJava๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
  • Circuit Breaker ๊ตฌํ˜„์ฒด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

Circuit Breaker

  • ์„œ๋น„์Šค๊ฐ„ ์˜์กด์„ฑ์ด ๋ฐœ์ƒํ•˜๋Š” ์ ‘๊ทผ ํฌ์ธํŠธ๋ฅผ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ ์žฅ์•  ์ „ํŒŒ๋ฅผ ๋ง‰๋Š”๋‹ค.
  • Fallback๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‹œ์Šคํ…œ ์žฅ์• ๋กœ๋ถ€ํ„ฐ ๋ณต๊ตฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ์Šค๋ ˆ๋“œ ํ’€ ๋ฐฉ์‹๊ณผ ์„ธ๋งˆํฌ์–ด ๋ฐฉ์‹์ด ์žˆ๋‹ค.
  • ๋™๊ธฐ ๋ฐฉ์‹๊ณผ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Thread Pool
  • ์„œ๋น„์Šค ํ˜ธ์ถœ์ด ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค.
  • Tomcat ์Šค๋ ˆ๋“œ ํ’€๊ณผ ์„œ๋น„์Šค ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ ํ’€์ด ๊ฒฉ๋ฆฌ๋œ๋‹ค.
  • ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.
Semaphore
  • ์„œ๋น„์Šค ํ˜ธ์ถœ์„ ์œ„ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • Tomcat ์Šค๋ ˆ๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

Circuit Breaker ๋ฐœ๋™ ์กฐ๊ฑด(๊ธฐ๋ณธ ๊ฐ’)

  • 20๋ฒˆ์˜ ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ค‘, 10๋ฒˆ ์ด์ƒ ์‹คํŒจ ์‹œ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ์—ด๋ฆฐ๋‹ค.
  • 19๋ฒˆ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋ฌ๋‹ค๋ฉด, ๊ธฐ๋ณธ ์ถฉ์กฑ์ˆ˜ ๋ฏธ๋‹ฌ๋กœ ์„œํ‚ท๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ๋ฐœ๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Circuit Breaker ํ•ด์ œ ์กฐ๊ฑด(๊ธฐ๋ณธ ๊ฐ’)

  • 5์ดˆ ์ด๋‚ด์— ๋‹จ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ ํ›„ ์„ฑ๊ณต ์‹œ ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค๊ฐ€ ๋‹ซํžŒ๋‹ค. ์‹คํŒจํ•  ๊ฒฝ์šฐ ์—ด๋ฆผ์ด ์œ ์ง€ ๋œ๋‹ค.

Circuit Breaker ์ƒ๋ช… ์ฃผ๊ธฐ

  1. HystrixCommand, HystrixObservableCommand ๊ฐ์ฒด ์ƒ์„ฑ
  2. Command ์‹คํ–‰
  3. ์บ์‹œ ์ƒํƒœ ํ™•์ธ
  4. ํšŒ๋กœ ์ƒํƒœ ํ™•์ธ
  5. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Thread Pool / Semaphore๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
  6. HystrixCommand.run() / HystrixObservableCommand.construc() ์‹คํ–‰
  7. Calculate Circuit Health ํ™•์ธ
  8. Fallback ์‹คํ–‰
  9. ์‘๋‹ต ๋ฐ˜ํ™˜

threadPoolProperties ์„ค์ • ๊ฐ’

  • @HystrixCommand Annotation - threadPoolProperties
  • coreSize : Thread Pool ๊ฐฏ์ˆ˜
  • maximumSize : ์ตœ๋Œ€ Thread Pool ๊ฐฏ์ˆ˜
  • allowMaximunSizeToDriverageFromCoreSize : ์ตœ๋Œ€ Queue ํฌ๊ธฐ ์†์„ฑ ํ™œ์„ฑํ™”
  • maxQueueSize : ์ตœ๋Œ€ Queue Size
  • queueSizeRejectionThreshold : ๊ฑฐ์ ˆ๋œ ๋ฉ”์†Œ๋“œ Queue Size, ์ตœ๋Œ€ ํ ํฌ๊ธฐ์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋”๋ผ๋„ ๊ฑฐ๋ถ€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” queue ํฌ๊ธฐ
  • thread.timeoutInMilliseconds : ์“ฐ๋ ˆ๋“œ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„
  • circuitBreaker.requestVolumeThreshold : ๊ฐ์‹œ ์‹œ๊ฐ„ ๋‚ด ์š”์ฒญ ๊ฐฏ์ˆ˜ ์ œํ•œ

Thread Pool์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๊ฒฉ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•œ ์ด์œ 

  • Thread๋ฅผ ๋‚˜๋ˆ„์–ด ๋‹ค๋ฅธ Thread์— ์ ‘๊ทผํ•˜๊ธฐ ์–ด๋ ต๋„๋ก ์ข…์†์„ฑ์„ ์›์ฒœ ์ฐจ๋‹จ
  • Application์€ ์ˆ˜ ์—†์ด ๋งŽ์€ back-end service๋ฅผ ๋์—†์ด ํ˜ธ์ถœํ•œ๋‹ค.
  • ๊ฐ ์„œ๋น„์Šค๋Š” Client library๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • Client library๋Š” ํ•ญ์ƒ ๋ฐ”๋€๋‹ค.
  • Client library๋Š” ์ƒˆ๋กœ์šด ๋„คํŠธ์›Œํฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ , retry, parsing, caching ๋“ฑ์˜ logic์„ ๊ฐ€์ง„๋‹ค.

Thread Pool ์‚ฌ์šฉ ์ƒ ์žฅ, ๋‹จ์ 

  • ์ƒˆ Client library๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ์˜ ์œ„ํ—˜์„ฑ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ์žฅ์• ๋Š” ๊ฒฉ๋ฆฌ๋œ Thread์—์„œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Client library๋กœ ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋œ๋‹ค.
  • queueing, scheduling, Context Switching ๋“ฑ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.

Thread Pool ๋น„์šฉ

  • Hystrix๋Š” ์ž์‹ ์Šค๋ ˆ๋“œ์—์„œ construct(), run()์„ ์‹คํ–‰ํ•  ๋•Œ, ๋ถ€๋ชจ ์Šค๋ ˆ๋“œ์—์„œ ์ด ์ข…๋‹จ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์—ฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ธก์ •ํ•œ๋‹ค.
  • Netflix์—์„œ๋Š” 10์–ต ๊ฑด ์ด์ƒ์˜ Hystrix Command๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๊ฐ API ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค 5-20๊ฐœ์˜ Thread๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Thread Pool์„ 40+๊ฐœ๋ฅผ ์„ค์ •ํ•œ๋‹ค.(๋Œ€๋ถ€๋ถ„์˜ Thread Pool ๋‚ด์˜ Thread ๊ฐœ์ˆ˜๋Š” 10๊ฐœ)

Circut Breaker๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ”์†Œ๋“œ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๊ธฐ๋กํ•˜๋Š”๊ฐ€?

  • HystrixCommandMetric๋Š” Hystrix Command ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์ƒ์„ฑ๋œ๋‹ค.
  • HystrixCommandMetric๋Š” HystrixMetrics๋ฅผ ์ƒ์†ํ•œ๋‹ค.
  • HystrixCommandMetric ์•ˆ์— ์Šค๋ ˆ๋“œ safe ํ•˜๊ธฐ ์œ„ํ•ด private static final ConcurrentHashMap<String, HystrixCommandMetrics> metrics ์†์„ฑ์ด ์žˆ๋‹ค.
  • metrics์— ๋‹ค์‹œ HystrixCommandMetric์ด ์ €์žฅ๋œ๋‹ค.
  • getInstance ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด HystrixCommandMetric๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ €์žฅํ•œ๋‹ค.
  • ๋‚ด๋ถ€์— static ํด๋ž˜์Šค๋กœ HealthCounts๊ฐ€ ์žˆ๋‹ค.
    • private final long totalCount;
    • private final long errorCount;
    • private final int errorPercentage;
    • ์—๋Ÿฌ ํผ์„ผํŠธ๋Š” ์ƒˆ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ณ„์‚ฐํ•œ๋‹ค.
    • ์„ธ ๊ฐœ์˜ ์†์„ฑ์„ ๊ฐ€์ง€๊ณ , ํ•ด๋‹น ์นด์šดํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด plus ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
    • plus ๋ฉ”์†Œ๋“œ์—์„œ๋Š” long[] ํƒ€์ž…์˜ eventTypeCounts๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š”๋‹ค.
    • long successCount = eventTypeCounts[HystrixEventType.SUCCESS.ordinal()];
    • long failureCount = eventTypeCounts[HystrixEventType.FAILURE.ordinal()];
    • long timeoutCount = eventTypeCounts[HystrixEventType.TIMEOUT.ordinal()];
    • long threadPoolRejectedCount = eventTypeCounts[HystrixEventType.THREAD_POOL_REJECTED.ordinal()];
    • long semaphoreRejectedCount = eventTypeCounts[HystrixEventType.SEMAPHORE_REJECTED.ordinal()];
    • ์—ฌ๊ธฐ์— ์ด์ „์˜ long updatedTotalCount = totalCount;, long updatedErrorCount = errorCount; ๋”ํ•œ๋‹ค.
    • updatedTotalCount += (successCount + failureCount + timeoutCount + threadPoolRejectedCount + semaphoreRejectedCount);
    • ์ด ์นด์šดํŠธ : ์„ฑ๊ณต ์นด์šดํŠธ + ์‹คํŒจ ์นด์šดํŠธ + ์‹œ๊ฐ„ ์ดˆ๊ณผ ์นด์šดํŠธ + ์Šค๋ ˆ๋“œ ๊ฑฐ์ ˆ ์นด์šดํŠธ + ์„ธ๋งˆํฌ์–ด ๊ฑฐ์ ˆ ์นด์šดํŠธ + ์ด์ „์˜ ์ด ์นด์šดํŠธ
    • updatedErrorCount += (failureCount + timeoutCount + threadPoolRejectedCount + semaphoreRejectedCount);
    • ์—๋Ÿฌ ์นด์šดํŠธ : ์‹คํŒจ ์นด์šดํŠธ + ์‹œ๊ฐ„ ์ดˆ๊ณผ ์นด์šดํŠธ + ์Šค๋ ˆ๋“œ ๊ฑฐ์ ˆ ์นด์šดํŠธ + ์„ธ๋งˆํฌ์–ด ๊ฑฐ์ ˆ ์นด์šดํŠธ + ์ด์ „์˜ ์—๋Ÿฌ ์นด์šดํŠธ
    • return new HealthCounts(updatedTotalCount, updatedErrorCount);
    • ์ƒˆ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ด puls ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์€ ์–ด๋””์ธ๊ฐ€??
  • healthCounts์˜ plus ๋ฉ”์†Œ๋“œ๋Š” HealthCountsStream์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
  • HystrixCircuitBreaker ์ธํ„ฐํŽ˜์ด์Šค์— makeSuccess๋ฉ”์†Œ๋“œ๋Š” HystrixCommandMetrics์˜ resetStream์„ ์‹คํ–‰ํ•œ๋‹ค.
  • resetStream๋ฉ”์†Œ๋“œ์˜ ๋งˆ์ง€๋ง‰์— healthCountsStream = HealthCountsStream.getInstance(key, properties); ์ด ์žˆ๋‹ค.
  • HealthCountsStream์˜ getInstance๋ฅผ ํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
  • AbstractCommand์—๋Š” protected final HystrixCircuitBreaker circuitBreaker; ์ด ์žˆ๋‹ค.
  • AbstractCommand์˜ executeCommandAndObserved Observable์—์„œ circuitBreaker์˜ markSuccess ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Action1 ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.(RxJava ๋ฌธ๋ฒ• ์ธ๋“ฏ)
  • ์ด ๋ชจ๋“ ๊ฒƒ์€ HystrixCommand.run()๋ฉ”์†Œ๋“œ ์‹คํ–‰์‹œ ๋™์ž‘

Hystrix์˜ 3๊ฐ€์ง€ ํŒจํ„ด

  1. Circuit Breaker ํŒจํ„ด
  2. Bulkhead ํŒจํ„ด
  3. Fall back ํŒจํ„ด

Web

WAS(Web Application Server)

  • ์ธํ„ฐ๋„ท ์ƒ์—์„œ HTTP๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ๋ฏธ๋“ค์›จ์–ด
  • ๋™์  ์„œ๋ฒ„ ์ปจํ„ด์ธ ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฃผ๋กœ DB์„œ๋ฒ„์™€ ๊ฐ™์ด ์ˆ˜ํ–‰๋œ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ์ž๋ฐ” ๊ธฐ๋ฐ˜์ด๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ Web Server์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด Web Server๊ฐ€ ์—†์–ด๋„ ์„œ๋น„์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•œ๋‹ค.
  • Servlet ํŽ˜์ด์ง€๋ฅผ HTML ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • JSP์˜ ๊ฒฝ์šฐ java class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ ํ›„ print ํ˜•์‹์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹œ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๋‹ค.

WAS ์ƒ๋ช…์ฃผ๊ธฐ

  1. Web Server/ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ œ์ผ ๋จผ์ € ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ์•Œ๋งž๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. ์ปจํ…Œ์ด๋„ˆ๋Š” web.xml๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  httpServletRequest / httpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค.
  3. ๋‹ค์Œ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ์„ ํ˜ธ์ถœํ•œ๋‹ค.
  4. ํ˜ธ์ถœ๋œ ์„œ๋ธ”๋ฆฟ์˜ ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ ์Šค๋ ˆ๋“œ๋Š” ์š”์ฒญ์— ๋”ฐ๋ผ doPost(), doGet()์„ ํ˜ธ์ถœํ•œ๋‹ค.
  5. ํ˜ธ์ถœ๋œ doPost(), doGet() ๋ฉ”์†Œ๋“œ๋Š” ์ƒ์„ฑ๋œ ๋™์  ํŽ˜์ด์ง€๋ฅผ Response ๊ฐ์ฒด์— ์‹ค์–ด์„œ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•œ๋‹ค.
  6. ์ปจํ…Œ์ด๋„ˆ๋Š” ์ „๋‹ฌ๋ฐ›์€ Response ๊ฐ์ฒด๋ฅผ HttpResponse ํ˜•ํƒœ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์›น ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์ƒ์„ฑ๋˜์—ˆ๋˜ ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ , httpServletRequest / httpServletResponse ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค.

Tomcat

  • Apache ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์—์„œ ๊ฐœ๋ฐœํ•œ Servlet Container(Web Container)๋งŒ ์žˆ๋Š” Web Application Server์ด๋‹ค.
  • Web Server์™€ ์—ฐ๋™ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  • Servlet์ด๋‚˜ JSP๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Servlet Container์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ •์  ์ปจํ…์ธ ๋ฅผ ๋กœ๋”ฉํ•˜๋Š”๋ฐ ์›น ์„œ๋ฒ„๋ณด๋‹ค ์ˆ˜ํ–‰ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • Tomcat 8.5๊ธฐ์ค€
    • MaxThreadPool : 200
    • minSpareThreads : 25
    • MaxQueueSize : Integer.MAX_VALUE

Servlet

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

Web Server

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ html์ด๋‚˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ http ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•ด ์ „์†กํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ •์  ์ปจํ…์ธ ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.(html, css, js, ์ด๋ฏธ์ง€๋“ฑ)
  • Apache, Nginx

๋ธŒ๋ผ์šฐ์ €์— URL ์ž…๋ ฅ์‹œ ๋™์ž‘

  1. ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜๊ณ  Enter๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  2. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ URL์„ ํ•ด์„ํ•œ๋‹ค.
  3. URL์ด ๋ฌธ๋ฒ•์— ๋งž์œผ๋ฉด Punycode ์ธ์ฝ”๋”ฉ์„ URL์˜ host ๋ถ€๋ถ„์— ์ ์šฉํ•œ๋‹ค.
  4. HSTS(HTTP Strict Transport Security) ๋ชฉ๋ก์„ ๋กœ๋“œํ•ด์„œ ํ™•์ธํ•œ๋‹ค.
  5. DNS๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  6. ARP(Address Resolution Protocol)๋กœ ๋Œ€์ƒ(์„œ๋ฒ„)์˜ IP์™€ MAC์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.
  7. ์„œ๋ฒ„์™€ TCP ํ†ต์‹ ์„ ํ†ตํ•ด Socket๋ฅผ ์—ฐ๋‹ค.
  8. HTTPS์ธ ๊ฒฝ์šฐ TLS HandShake๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.
  9. HTTP ํ”„๋กœํ† ์ฝœ๋กœ ์š”์ฒญํ•œ๋‹ค.
  10. ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ๋‹ค.
  11. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

OAuth

  • ์ธํ„ฐ๋„ท ์‚ฌ์šฉ์ž๋“ค์ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ์˜ ์ž์‹ ๋“ค์˜ ์ •๋ณด์— ๋Œ€ํ•ด ์›น ์‚ฌ์ดํŠธ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์ž‡๋Š” ๊ณตํ†ต์ ์ธ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ ‘๊ทผ ์œ„์ž„์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€์ด๋‹ค.
  • OAuth๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด ์ธ์ฆ์„ ๊ณต์œ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ๋Š” ๋ณ„๋„์˜ ์ธ์ฆ์ด ํ•„์š”์—†๋‹ค.
  • ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ†ตํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์šฉ์–ด
    • ์‚ฌ์šฉ์ž(Client) : ์„œ๋น„์Šค ๊ณต๊ธ‰์ž์™€ ์†Œ๋น„์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ •์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐœ์ธ
    • ์†Œ๋น„์ž(App) : Open API๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋œ OAuth๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ œ๊ณต์ž์—๊ฒŒ ์ ‘๊ทผํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
    • ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook) : OAuth๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ์„ ์ง€์›ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Open API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค)
    • ์†Œ๋น„์ž ๋น„๋ฐ€๋ฒˆํ˜ธ : ์„œ๋น„์Šค ์ œ๊ณต์ž์—์„œ ์†Œ๋น„์ž๊ฐ€ ์ž์‹ ์ž„์„ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค
    • ์š”์ฒญ ํ† ํฐ(Request Token) : ์†Œ๋น„์ž๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ธ์ฆ๋ฐ›๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์œผ๋ฉฐ ํ›„ํ—ค ์ ‘๊ทผ ํ† ํฐ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
    • ์ ‘๊ทผ ํ† ํฐ(Access Token) : ์ธ์ฆ ํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ์•„๋‹Œ ์†Œ๋น„์ž๋ฅผ ํ†ตํ•ด์„œ ๋ณดํ˜ธ๋œ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค๋ฅผ ํฌํ•จํ•œ ๊ฐ’์ด๋‹ค.
  • ์ธ์ฆ ๋ฐฉ์‹
    1. ์†Œ๋น„์ž(App)๊ฐ€ ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook)์—๊ฒŒ ์š”์ฒญ ํ† ํฐ(Request Token)์„ ์š”์ฒญํ•œ๋‹ค.
    2. ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook)๊ฐ€ ์†Œ๋น„์ž(App)์—๊ฒŒ ์š”์ฒญ ํ† ํฐ(Request Token)์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค.
    3. ์†Œ๋น„์ž(App)๊ฐ€ ์‚ฌ์šฉ์ž(Clinet)๋ฅผ ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook)๋กœ ์ด๋™์‹œํ‚จ๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด ์ˆ˜ํ–‰๋œ๋‹ค.
    4. ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook)๊ฐ€ ์‚ฌ์šฉ์ž(Clinet)๋ฅผ ์†Œ๋น„์ž(App)๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
    5. ์†Œ๋น„์ž(App)๊ฐ€ ์ ‘๊ทผ ํ† ํฐ(Access Token)์„ ์š”์ฒญํ•œ๋‹ค.
    6. ์„œ๋น„์Šค ์ œ๊ณต์ž(Facebook)๊ฐ€ ์ ‘๊ทผ ํ† ํฐ(Access Token)์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
    7. ๋ฐœ๊ธ‰๋œ ์ ‘๊ทผ ํ† ํฐ(Access Token)์„ ์ด์šฉํ•˜์—ฌ ์†Œ๋น„์ž(App)์—์„œ ์‚ฌ์šฉ์ž ์ •๋ณด(App์ด ์›ํ•˜๋Š” ์ง„์งœ ์ •๋ณด)์— ์ ‘๊ทผํ•œ๋‹ค.

CORS(Cross Origin Resource Sharing)

  • Cross-Site Http Request๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ‘œ์ค€ ๊ทœ์•ฝ์ด๋‹ค.
  • ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์œผ๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ cross-site http request๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ์ด๋ฏธ์ง€, ๋งํฌ, ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋Š” ์ž‘๋™ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ƒ์„ฑ๋œ cross-site http request๋Š” same origin policy๋ฅผ ์ ์šฉ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— cross-site http request๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ธฐ์กด์—๋Š” XMLHtppRequest๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ์ž์‹ ๊ณผ ๋™์ผํ•œ ๋„๋ฉ”์ธ๋งŒ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ์ œํ•œํ–ˆ๋‹ค. ์ฆ‰ cross-origin http ์š”์ฒญ์„ ์ œํ•œํ–ˆ๋‹ค.
  • Simple/Preflight, Credential/Non-Credential์˜ ์กฐํ•ฉ์œผ๋กœ 4๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.
  • Simple Request
    • ์„œ๋ฒ„์— 1๋ฒˆ ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„๋„ 1๋ฒˆ ํšŒ์‹ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.
    • GET, HEAD, POST ์ค‘์˜ ํ•œ ๊ฐ€์ง€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • POST ๋ฐฉ์‹์ผ ๊ฒฝ์šฐ Content-type์ด ์…‹ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•œ๋‹ค.
      • application/x-www-form-urlencoded
      • multipart/form-data
      • text/plain
    • ์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ์ „์†กํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค.
  • Preflight Request
    • Simple Request ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” Preflight Request ๋ฐฉ์‹์œผ๋กœ ์š”์ฒญํ•œ๋‹ค.
    • GET, HEAD, POST์™ธ์˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ๋„ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • Application/xml์ฒ˜๋Ÿผ ๋‹ค๋ฅธ Content-type์œผ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ปค์Šคํ…€ ํ•ด๋”๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋น„ ์š”์ฒญ๊ณผ ๋ณธ ์š”์ฒญ์œผ๋กœ ๋‚˜๋‰˜์–ด ์ „์†ก๋œ๋‹ค.
    • ์˜ˆ๋น„ ์š”์ฒญ๊ณผ ๋ณธ ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • Request with Credential
    • HTTP Cookie์™€ HTTP Authentication ์ •๋ณด๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์š”์ฒญ
    • ์š”์ฒญ ์‹œ xhr.withCredentials = true๋ฅผ ์ง€์ •ํ•ด์„œ Credential ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์„œ๋ฒ„๋Š” Response Header์— ๋ฐ˜๋“œ์‹œ Access-Control-Allow-Credentials: true๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๊ณ , Access-Control-Allow-Origin ํ—ค๋”๊ฐ’์—๋Š” * ๊ฐ€ ์˜ค๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋„๋ฉ”์ธ์ด ์™€์•ผํ•œ๋‹ค.
  • Request without Credential
    • CORS ์š”์ฒญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Non-Credential ์š”์ฒญ์ด๋‹ค.
    • xhr.withCredentials = true๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Non-Credential ์š”์ฒญ์ด๋‹ค.

CSRF(Cross-Site Request Forgery, XSRF, ์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ)

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

XSS(Cross-Site Scripting, ์‚ฌ์ดํŠธ ๊ฐ„ ์Šคํฌ๋ฆฝํŒ…, ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…)

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

Cookie(์ฟ ํ‚ค)

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

Session(์„ธ์…˜)

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

Token(ํ† ํฐ)

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

HTTP(Hyper Text Transfer Protocol)

  • WWW ์ƒ์—์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ
  • TCP, UDP, IP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • 80๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
    • ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ „์†ก ํ›„ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    • ์ „์‚ฐ ์ž์›์ด ์ ๊ฒŒ ๋“ค์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ ๊ตฌ๋ถ„์ด ํž˜๋“ค๋‹ค.
    • ์š”์ฒญ์ด ๋งŽ์•„ ์งˆ ๊ฒฝ์šฐ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ ๋ฐœ์ƒ
    • Cookie, Session, Token๋“ฑ์„ ์‚ฌ์šฉํ•ด ๋‹จ์  ํ•ด์†Œ
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ(Request) / ์‘๋‹ต(Response) ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

HTTP Message

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตํ™˜๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • Request : ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์ „๋‹ฌ๋˜์–ด ์„œ๋ฒ„์˜ ๋™์ž‘์„ ์ผ์œผํ‚จ๋‹ค. ์š”์ฒญ ๋ฉ”์‹œ์ง€
  • Response : Request์— ๋Œ€ํ•œ ์„œ๋ฒ„์˜ ํšŒ์‹ ์ด๋‹ค. ์‘๋‹ต ๋ฉ”์‹œ์ง€
  • ASCII๋กœ ์ธ์ฝ”๋”ฉ ๋œ ํ…์ŠคํŠธ ์ •๋ณด๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ์‹œ์ž‘์ค„ : Http Method, Request Target(์š”์ฒญ ๋Œ€์ƒ, URL, ๋„๋ฉ”์ธ), Http ๋ฒ„์ „ ์ •๋ณด, Http Status Code๋“ฑ์„ ํฌํ•จํ•œ๋‹ค.
  • ํ—ค๋”(Header)
  • ๋ณธ๋ฌธ(body, payload) : ์ „์†กํ•˜๊ณ , ์ „์†ก ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค

HTTP2

  • Http 1 ์—์„œ๋Š” ์•ž์˜ ์š”์ฒญ์˜ ์‘๋‹ต์„ ๋ฐ›์•„์•ผ ๋‹ค์Œ ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Http 1 ์—์„œ๋Š” Request๋ฅผ ๋‚ ๋ฆด ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ Connection์„ ์ƒ์„ฑํ–ˆ๋‹ค.
  • Http 1.1 ์—์„œ๋Š” ์ง€์† ์ปค๋„ฅ์…˜์ด๋ผ๋Š” ๊ฐœ๋…๊ณผ Http ํŒŒ์ดํ”„๋ผ์ด๋‹์ด๋ผ๋Š” ๊ฐœ๋…์ด ํฌํ•จ๋ฌ๋‹ค.
    • ์ปค๋„ฅ์…˜์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Request๋ฅผ ๋‚ ๋ฆด ์ˆ˜ ์žˆ๊ฒŒ ๋ฌ๋‹ค.
    • Request๋ฅผ ๋‚ ๋ฆฐ ์ˆœ์ƒˆ๋Œ€๋กœ Response๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.
    • ๋ธ”๋กํ‚น์ด ๋ฐœ์ƒํ•˜๋ฉด ๋’ค์˜ ์š”์ฒญ์ด ๋ธ”๋กํ‚น๋œ๋‹ค.
  • Http 1.1 ์—์„œ๋Š” 1 Request๋‹น 1๊ฐœ์˜ Resource๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.(ํ•œ ์ปค๋„ฅ์…˜์—์„œ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ Response๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.)
  • Http 1.1์—์„œ๋Š” Plain Text๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • Http 2์—์„œ๋Š” Multiplexing ๊ฐœ๋…์ด ๋„์ž…๋˜์—ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ปค๋„ฅ์…˜์œผ๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค.
  • ์‘๋‹ต์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด stream์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.
  • ํ•˜๋‚˜์˜ Request๋‹น ๋™์‹œ์— ์—ฌ๋Ÿฌ Resources๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ Binary๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ „์†กํ•œ๋‹ค.
  • Frame, Stream์ด๋ผ๋Š” ๊ฐœ๋…์ด ์ถ”๊ฐ€๋ฌ๋‹ค.
  • Frame : Http2 ํ†ต์‹ ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์ž‡๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์ด๋‹ค.
    • ํ—ค๋” ํ”„๋ ˆ์ž„, ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • Stream : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์— ๋งบ์–ด์ง„ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ํ•œ๊ฐœ ์ด์ƒ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์˜๋ฏธ
  • ํ”„๋ ˆ์ž„์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ๋ชจ์—ฌ ๋ฉ”์‹œ์ง€, ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋ชจ์—ฌ ์ŠคํŠธ๋ฆผ์ด ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

HTTPS

  • HTTP์˜ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ๋ฒ„์ „์ด๋‹ค.
  • S๋Š” Over Secure Socket Layer์˜ ์•ฝ์ž์ด๋‹ค.
  • ์†Œ์ผ“ ํ†ต์‹ (TCP)์—์„œ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋Œ€์‹ ์— SSL์ด๋‚˜ TLS ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•œ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์ ์ ˆํ•œ ๋ณดํ˜ธ๋ฅผ ๋ณด์žฅํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์‹œ SSL์— ํ•„์š”ํ•œ ํ†ต์‹ ์ด ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ†ต์‹ ์ด ๋А๋ ค์ง„๋‹ค.
  • ์•”ํ˜ธํ™” ๋ณตํ™”ํ™” ๊ณ„์‚ฐ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋‚˜ ํด๋ผ์ด์–ธํŠธ์˜ ์ž์›์„ ์ถ”๊ฐ€์ ์œผ๋กœ ์†Œ๋น„ํ•œ๋‹ค.
  • ์ฆ๋ช…์„œ๋ฅผ ๊ตฌ์ž…ํ•ด์•ผ ํ•œ๋‹ค.

URI(Unifrom Resource Identifier, ํ†ตํ•ฉ ์ž์› ์‹๋ณ„์ž)

  • ์ธํ„ฐ๋„ท์— ์žˆ๋Š” ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ์ผํ•œ ์ฃผ์†Œ์ด๋‹ค.
  • ์ž์›์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค.
  • ํ•˜์œ„ ๊ฐœ๋…์œผ๋กœ URL, URN์ด ์žˆ๋‹ค.
  • 127.0.0.1:8080/users?name=๋ฐฐ๋‹ค์Šฌ ์€ URI, name=๋ฐฐ๋‹ค์Šฌ ์ด๋ผ๋Š” ์‹๋ณ„์ž๊ฐ€ ์žˆ๋‹ค.

URL(Uniform Resource Locator, ์œ ์ผ ์ž์› ์ง€์‹œ๊ธฐ)

  • ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์ž์›์ด ์–ด๋””์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ์ด๋‹ค.
  • 127.0.0.1:8080/users/image.jpg

URN(Uniform Resource Name, ํ†ตํ•ฉ ์ž์› ์ด๋ฆ„)

  • ํŠน์ • ์ž์›์— ๋Œ€ํ•ด ๊ทธ ์ž์›์˜ ์œ„์น˜์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ์œ ์ผ๋ฌด์ดํ•œ ์ด๋ฆ„ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ์ž์›์„ ์—ฌ๊ธฐ์ €๊ธฐ๋กœ ์˜ฎ๊ธฐ๋”๋ผ๋„ ๋ฌธ์ œ์—†์ด ๋™์ž‘ํ•œ๋‹ค.
  • DNS

REST(REpresentational State Transfer) API

  • ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜์ด๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋ฐ”์ผ ๋””๋ฐ”์ด์Šค์—์„œ๋„ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • REST ์•„ํ‚คํ…์ฒ˜๋Š” Hypermedia API์˜ ๊ธฐ๋ณธ์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด์„œ ๋ฒ”์šฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.
  • Resource-URI, Method, Message 3๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ๋ฆฌ์†Œ์Šค ์ง€ํ–ฅ ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ์ด๋ผ๋Š” ์ •์˜ ๋‹ต๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ๋ฆฌ์†Œ์Šค, ๋ช…์‚ฌ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
  • Uniform Interface : HTTP ํ‘œ์ค€์—๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด ์–ด๋– ํ•œ ๊ธฐ์ˆ ์ด๋ผ๋˜์ง€ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์Šคํƒ€์ผ์ด๋‹ค.
  • ๋ฌด์ƒํƒœ์„ฑ(Stateless) : ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ฐ API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์„ ๋“ค์–ด์˜ค๋Š” ๋ฉ”์‹œ์ง€๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
  • ์บ์‹ฑ ๊ฐ€๋Šฅ(Cacheable) : HTTP ๊ธฐ์กด ์›น ํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ณ„์ธตํ™” : ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š”์ง€, ์ค‘๊ฐ„ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
  • Self-Descriptiveness(์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ) : REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.
  • Client-Server Architecture(ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ)
    • REST ์„œ๋ฒ„๋Š” API๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ œ๊ณต๋œ API๋ฅผ ์ด์šฉํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ์„ ์ฑ…์ž„์ง„๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํƒ์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์ฑ…์ž„์ง„๋‹ค.
    • ์„œ๋กœ๊ฐ„์˜ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

AJAX(Asychronous JavaScript And XML, ๋น„๋™๊ธฐ์‹ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ xml)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์— ๋น„๋™๊ธฐ ์‹์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋™์ž‘ ๊ณผ์ •
    1. XMLHTTP Request Oject๋ฅผ ๋งŒ๋“ ๋‹ค.
      1. ์š”์ฒญ์„ ๋ณด๋‚ผ ์ค€๋น„๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์‹œํ‚ค๋Š” ๊ณผ์ •์ด๋‹ค.
      2. ์ด๊ฒƒ์„ ์œ„ํ•ด ํ•„์š”ํ•œ method๋ฅผ ๊ฐ–์ถ˜ object๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
    2. Callback ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
      1. ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ์™”์„ ๋•Œ ์‹คํ–‰์‹œํ‚ค๋Š” ํ•จ์ˆ˜์ด๋‹ค.
      2. html ํŽ˜์ด์ง€๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
    3. Open a Request
      • ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋„˜๊ธด๋‹ค.
        1. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  method
        2. ์š”์ฒญ์ด ๊ฐˆ URL
    4. Send the Request
  • ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก XML HttpRequest(XHR) ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์š”์ฒญํ•œ๋‹ค.
  • XHR ๊ฐ์ฒด๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ์ด ๊ฐ์ฒด์˜ ์ฝœ๋ฐฑ์„ ๋งŒ๋“ค๊ณ , html ๋ฉ”์†Œ๋“œ์™€ url์„ ๊ฒฐ์ •ํ•œ ๋’ค XHR ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ๋กœ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

Authorization(์–ด์ ๋ผ์ด์ œ์ด์…˜, ์ธ๊ฐ€)

  • ๊ถŒํ•œ ๋ถ€์—ฌ
  • ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ์ž์›์„ ์‚ฌ์šฉํ•  ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๊ถŒํ•œ ์ฒดํฌ ๊ณผ์ •์ด๋‹ค.

Authentation(์–ด์ฌํ‹ฐ์ผ€์ด์…˜, ์ธ์ฆ)

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

DNS(Domain Name Server)

  • Host์˜ Domain์ด๋ฆ„์„ Host์˜ ๋„คํŠธ์›Œํฌ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€์˜ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
  • WWW์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์ด๋‹ค.
  • ๋ถ„์‚ฐํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์ด๋‹ค.

POST & PUT & PATCH

  • POST : ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค. Idempotentํ•˜์ง€ ์•Š๋‹ค.
  • PUT : ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ๋ช…ํ™•ํžˆ ์ง€์ •ํ•œ ํ›„ ์š”์ฒญ์„ ํ•œ๋‹ค. Idempotentํ•˜๋‹ค.
  • PATCH : ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„๋งŒ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

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

Stack

  • FILO
  • ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์—์„œ ์Šคํƒ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ• ๋‹น ๋ฐ ์ ‘๊ทผ ์ˆ˜๋‹จ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Queue

  • FIFO
  • ํ”„๋ฆฐํ„ฐ์˜ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ, ์œˆ๋„์šฐ์˜ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ธฐ, ํ”„๋กœ์„ธ์Šค ๊ดธ๋ฆฌ๋“ฑ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Array

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

Linked List

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

Map

  • key - value ํ˜•ํƒœ๋กœ ์‚ฝ์ž…๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ket๋Š” ์ค‘๋ณต์ด ์•ˆ๋œ๋‹ค.
  • 1๋Œ€1 ๋งคํ•‘ ๊ตฌ์กฐ์ด๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Set

  • ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌ, ์ง‘ํ•ฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Tree

  • ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Binary Tree(์ด์ง„ ํŠธ๋ฆฌ)

  • ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(log n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

B Tree(B- Tree)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ์ˆซ์ž๊ฐ€ 2๋ณด๋‹ค ํฐ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

B+ Tree

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Heap

  • ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.
  • ์ตœ๋Œ€ ํž™๊ณผ ์ตœ์†Œ ํž™์ด ์žˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(log n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Hash Table

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์ž๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ํ•ด์‹œ ๊ฐ’์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์€ ๊ณต๊ฐ„์„ ํŒ”์•„ ์–ป์–ด๋‚ธ ๊ฒƒ์ด๋‹ค.
  • ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์œผ๋กœ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ‰๊ท  ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ž๋ฃŒ๋ฅผ ์ €์žฅ / ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•˜๋‹ค.
  • ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
    • Chaning : ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ Linked List์— ์ €์žฅํ•œ๋‹ค.
    • Linear Probing : ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ ๋‹ค์Œ ์นธ์— ์ €์žฅํ•œ๋‹ค.
    • Quadratic Probing : ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ ๋‹ค์Œ ์นธ์— ์ €์žฅํ•  ๋•Œ, ์ œ๊ณฒํ•œ ์นธ์— ์ €์žฅํ•œ๋‹ค.
    • Double Hashing : ๊ฑด๋„ˆ ๋›ฐ๋Š” ํญ์ด ๋งค๋ฒˆ ๋‹ค๋ฅด๊ฒŒ ํ•ด์‹œ๋ฅผ ๋‘๋ฒˆํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Hash Map

  • ๋‚ด๋ถ€์ ์œผ๋กœ Entry<K, V>[] entry์˜ ๋ฐฐ์—ด๋กœ ๋˜์–ด์žˆ๋‹ค.
  • ํ•ด๋‹น ๋ฐฐ์—ด์— ์ธ๋ฑ์Šค๋Š” ๋‚ด๋ถ€ ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐ๋œ๋‹ค.
  • ๋‚ด๋ถ€ ํ•ด์‹œ๊ฐ’์— ๋”ฐ๋ผ์„œ ํ‚ค ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ ํŠน์ • ๊ทœ์น™์—†์ด ์ถœ๋ ฅ๋œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Tree Map

  • ๋‚ด๋ถ€์ ์œผ๋กœ Red-Black Tree๋กœ ์ €์žฅ๋œ๋‹ค.
  • ํ‚ค๊ฐ’์— ๋Œ€ํ•œ Compartor ๊ตฌํ˜„์œผ๋กœ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • ํ‚ค๊ฐ’์ด ์ •๋ ฌ๋œ๋‹ค.
  • ํŠธ๋ฆฌ์— ์ €์žฅ๋˜๋ฏ€๋กœ ํ‚ค๊ฐ’์€ ์ผ์ •ํ•œ ๊ธฐ์ฅฐ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Linked Hash Map

  • Linked List๋กœ ์ €์žฅ๋œ๋‹ค.
  • ํ‚ค๊ฐ’์€ ์ž…๋ ฅ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์–ด์„œ ๋‚˜์˜จ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O()
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

์•Œ๊ณ ๋ฆฌ์ฆ˜

Bubble Sort(๋ฒ„๋ธ” ์ •๋ ฌ)

  • ์ธ์ ‘ํ•œ ๋‘ ๊ฐœ๋ฅผ ๋น„๊ตํ•˜๋ฉด์„œ ๊ตํ™˜ํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n^2)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Selection Sort(์„ ํƒ ์ •๋ ฌ)

  • ํ•œ๋ฒˆ ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์™€ ๊ตํ™˜ํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n^2)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Insertion Sort(์‚ฝ์ž… ์ •๋ ฌ)

  • ํ˜„์žฌ ์œ„์น˜๋ณด๋‹ค ์•„๋ž˜์ชฝ์„ ์ˆœํšŒํ•œ๋‹ค.
  • ํ˜„์žฌ ์œ„์น˜์˜ ๊ฐ’์„ ํ˜„์žฌ ์œ„์น˜๋ณด๋‹ค ์•„๋ž˜์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์•Œ๋งž์€ ์œ„์น˜์— ๋„ฃ์–ด์ค€๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n^2), ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด O(n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Merge Sort(๋ณ‘ํ•ฉ ์ •๋ ฌ)

  • ์ •๋ ฌํ•  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ๋‚˜๊ฐ€๋ฉฐ ์ขŒ, ์šฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ„์†ํ•˜์—ฌ ๋ถ„ํ• ํ•ด ๋‚˜๊ฐ„ ํ›„ ๊ฐ ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ ์ •๋ ฌ ํ›„ ๋ณ‘ํ•ฉ, ์ •๋ ฌ ํ›„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ •๋ ฌํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n log n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Quick Sort(ํ€ต ์ •๋ ฌ)

  • real-world ๋ฐ์ดํ„ฐ์—์„œ ๋น ๋ฅด๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ์–ด ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • pivot์„ ์„ ์ •ํ•˜์—ฌ pivot์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์€ ๊ฐ’์€ ์™ผ์ชฝ, ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์žฌ๋ฐฐ์น˜๋ฅผ ํ•˜๊ณ  ๊ณ„์†ํ•ด์„œ ๋ถ„ํ• ํ•˜์—ฌ ์ •๋ ฌํ•œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n log n), ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O()

Heap Sort(ํž™ ์ •๋ ฌ)

  • ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n log n)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

Binary Search(๋ฐ”์ด๋„ˆ๋ฆฌ ์„œ์น˜, ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

  • O(log n)
  • ์ •๋ ฌ๋œ ์ž๋ฃŒ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ž๋ฃŒ๋Š” ๋ฐ˜๋“œ์‹œ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ์ž๋ฃŒ์—ฌ์•ผ ํ•œ๋‹ค.

์บ์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

OSI 7๊ณ„์ธต

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

1๊ณ„์ธต ๋ฌผ๋ฆฌ ๊ณ„์ธต(Physical Layer)

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

2๊ณ„์ธต ๋ฐ์ดํ„ฐ ๋งํฌ ๊ณ„์ธต(Data Link Layer)

  • Point to Point(ํฌ์ธํŠธ ํˆฌ ํฌ์ธํŠธ)๊ฐ„ ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ์ „์†ก์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ธต์ด๋‹ค.
  • CRC ๊ธฐ๋ฐ˜์˜ ์˜ค๋ฅ˜ ์ œ์–ด์™€ ํ๋ฆ„ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ์˜ค๋ฅ˜์—†์ด ํ•œ ์žฅ์น˜์—์„œ ๋‹ค๋ฅธ ์žฅ์น˜๋กœ ํ”„๋ ˆ์ž„์„ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
  • 3๊ณ„์ธต์—์„œ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ์ฃผ์†Œ์™€ ์ œ์–ด์ •๋ณด๋ฅผ ํ—ค๋”์™€ ๋์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ์žฅ๋น„ : ๋ธŒ๋ฆฟ์ง€, ์Šค์œ„์น˜
  • ํ”„๋กœํ† ์ฝœ : MAC, PPP
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„ : ํ”„๋ ˆ์ž„(Frames)

3๊ณ„์ธต ๋„คํŠธ์›Œํฌ ๊ณ„์ธต(Network Layer)

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

4๊ณ„์ธต ์ „์†ก ๊ณ„์ธต(Transport Layer)

  • End to End(์ข…๋‹จ ๋Œ€ ์ข…๋‹จ)์˜ ์‚ฌ์šฉ์ž๋“ค์ด ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ์ƒ์œ„ ๊ณ„์ธต๋“ค์ด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์˜ ์œ ํšจ์„ฑ์ด๋‚˜ ํšจ์œจ์„ฑ์„ ์ƒ๊ฐํ•˜์ง€ ์•Š๋„๋ก ํ•ด์ค€๋‹ค.
  • ๋ฐœ์‹ ์ง€ ๋Œ€ ๋ชฉ์ ์ง€๊ฐ„ ์ œ์–ด์™€ ์—๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํŒจํ‚ท๋“ค์˜ ์ „์†ก์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹คํŒจํ•œ ํŒจํ‚ท์€ ๋‹ค์‹œ ๋ณด๋‚ด๋Š” ๋“ฑ ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ํ†ต์‹ ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ์‹œํ€€์Šค ๋„˜๋ฒ„ ๊ธฐ๋ฐ˜์˜ ์˜ค๋ฅ˜ ์ œ์–ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋จธ๋ฆฟ๋ง์—๋Š” ์„ธ๊ทธ๋จผํŠธ๊ฐ€ ํฌํ•จ๋œ๋‹ค.
  • ์žฅ๋น„ : ๊ฒŒ์ดํŠธ์›จ์ด
  • ํ”„๋กœํ† ์ฝœ : TCP, UDP, ARP
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„ : ์„ธ๊ทธ๋จผํŠธ(Segments)

5๊ณ„์ธต ์„ธ์…˜ ๊ณ„์ธต(Session Layer)

  • ํ†ต์‹  ์„ธ์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ์–‘ ๋๋‹จ์˜ ์‘์šฉ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ด ๊ณ„์ธต์€ TCP/IP ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์—†์• ๋Š” ์ฑ…์ž„์„ ์ง„๋‹ค.
  • ํฌํŠธ ์—ฐ๊ฒฐ
  • ํ†ต์‹  ์žฅ์น˜๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์„ค์ •ํ•˜๊ณ  ์œ ์ง€ํ•˜๋ฉฐ ๋™๊ธฐํ™”ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ„์˜ ํฌํŠธ์—ฐ๊ฒฐ(์„ธ์…˜)์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์„ค์ •ํ•œ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ : SSH, TLS
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„ : ๋ฐ์ดํ„ฐ(Data)

6๊ณ„์ธต ํ‘œํ˜„ ๊ณ„์ธต(Presentation Layer)

  • ์šด์˜์ฒด๊ณ„์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ ์ž…๋ ฅ, ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํ‘œํ˜„ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
  • ํ•„์š”ํ•œ ๋ฒˆ์—ญ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋‘ ์žฅ์น˜๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ์••์ถ•
  • ํ”„๋กœํ† ์ฝœ : JPEG, MPEG, SMB, AFP
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„ : ๋ฐ์ดํ„ฐ(Data)

7๊ณ„์ธต ์‘์šฉ ๊ณ„์ธต(Application Layer)

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋„คํŠธ์›Œํฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค, ๋ฉ”์ผ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ๋“ฑ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ : DHCP, DNS, FTP, HTTP
  • ๋ฐ์ดํ„ฐ ๋‹จ์œ„ : ๋ฐ์ดํ„ฐ(Data)

Network

L4, L7 Switch

  • ๋ชจ๋‘ ์„œ๋ฒ„๋“ค์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ์Šค์œ„์น˜๋กœ ๋“ค์–ด์˜จ ํŒจํ‚ท์„ ์ ์ ˆํ•œ ๋ชฉ์ ์ง€(์„œ๋ฒ„)๋กœ ์ „์†กํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
  • L4๋Š” IP, TCP/UDP ํฌํŠธ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•ด์„œ ์Šค์œ„์นญ ์žฅ๋น„์ด๋‹ค.
  • L7์€ IP, TCP/UDP ํฌํŠธ ์ •๋ณด ๋ฐ ํŒจํ‚ท ๋‚ด์šฉ๊นŒ์ง€ ์ฐธ์กฐํ•ด์„œ ์Šค์œ„์นญํ•ด์ฃผ๋Š” ์žฅ๋น„์ด๋‹ค.
  • L4๋Š” TCP/UDP ํ•ด๋” ์ •๋ณด๋ฅผ ๋ถ„์„ํ•ด์„œ ํ•ด๋‹น ํŒจํ‚ท์ด ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ์ข…๋ฅ˜๋ณ„๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.(HTTP, FTP, SMTP)
  • L7์€ L4 ์Šค์œ„์น˜์˜ ์„œ๋น„์Šค ๋‹จ์œ„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํฌํŠธ + Payload ํŒจํ„ด์„ ์ด์šฉํ•ด ํŒจํ‚ท ์Šค์œ„์นญ์„ ํ•œ๋‹ค.
  • L4๋Š” Payload(๋’ค ๋ฐ์ดํ„ฐ)์— ๋Œ€ํ•ด์„œ๋Š” ์ „ํ˜€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์ง€๋งŒ L7์€ ์„ธ์…˜์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ž์‹ ์ด ์ฒ ์ €ํ•˜๊ฒŒ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„๋กœ ๋™์ž‘ํ•œ๋‹ค.
  • L7์€ ๋ณด์•ˆ ์Šค์œ„์น˜๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ, ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ†ตํ•ด DDoS ๊ณต๊ฒฉ ๋ฐฉ์–ด, ๊ฐ์—ผ ํŒจํ‚ท ํ•„ํ„ฐ๋ง ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • L7์€ URL ๋ณ„๋กœ ์Šค์œ„์นญ์ด ๊ฐ€๋Šฅํ•˜๊ณ , Http Header ๊ฐ’์— ๋”ฐ๋ฅธ ํŠน์ • String์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

TCP

  • ์—ฐ๊ฒฐ ์ง€ํ–ฅํ˜• ํ”„๋กœํ† ์ฝœ
  • ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ๊ณ„๊ฐ€ ์—†๋‹ค.
  • ์ „ํ™”(๋ฐ›์•˜๋Š”์ง€ ๋ชป ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)
  • UDP์— ๋น„ํ•ด ์ „์†ก ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • ์„œ๋ฒ„ ์†Œ์ผ“๊ณผ ํด๋ผ์ด์–ธํŠธ ์†Œ์ผ“์˜ ๊ตฌ๋ถ„์ด ์žˆ๋‹ค.
  • ์ „์†ก ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์†ก์‹ ๋˜๊ณ  ์ˆ˜์‹ ๋œ๋‹ค.
  • ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • 1๋Œ€1 ์—ฐ๊ฒฐ๊ตฌ์กฐ์ด๋‹ค.

3 Way HandShake

  • TCP ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์ด๋‹ค.
  • ์ตœ์ดˆ์— ์„œ๋ฒ„์—์„œ ์—ด๋ ค ์žˆ๋Š” ํฌํŠธ๋Š” LISTEN, ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” CLOSED ์ƒํƒœ๋‹ค.
  1. ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ์„œ๋ฒ„์˜ ํฌํŠธ๋กœ SYN์„ ๋ณด๋‚ธ๋‹ค.
  2. ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น ํฌํŠธ๋Š” LISTEN ์ƒํƒœ์—์„œ SYN์„ ๋ฐ›๊ณ  SYN_RCV ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์š”์ฒญ์„ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์•˜๋‹ค๋Š” ๋Œ€๋‹ต(ACK)๊ณผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํฌํŠธ๋ฅผ ์—ด์–ด๋‹ฌ๋ผ๋Š” SYN์„ ๋ณด๋‚ธ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” SYN+ACK๋ฅผ ๋ฐ›๊ณ  ESTABLISHED๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์„œ๋ฒ„์— ์š”์ฒญ์„ ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ACK๋ฅผ ์ „์†กํ•œ๋‹ค.
  5. ACK๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ์ƒํƒœ๊ฐ€ ESTABLISHED๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

4 Way HandShake

  • TCP ํ†ต์‹ ์„ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ด๋‹ค.
  • ์ •์ƒ์ ์ธ ์ข…๋ฃŒ ์ƒํ™ฉ
  • ์ตœ์ดˆ์— ์„œ๋กœ ํ†ต์‹  ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌด์— ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘ ESTABLISHED ์ƒํƒœ
  1. ํ†ต์‹ ์„ ์ข…๋ฃŒํ•˜๊ณ ์ž ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ FIN์„ ๋ณด๋‚ด๊ณ , ์ž์‹ ์€ FIN_WAIT_1 ์ƒํƒœ๋กœ ๋Œ€๊ธฐํ•œ๋‹ค.

  2. FIN์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํฌํŠธ๋ฅผ CLOSE_WAIT๋กœ ๋ฐ”๊พธ๊ณ  ์ž˜ ๋ฐ›์•˜๋‹ค๋Š” ACK๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด๊ณ , ๊ทธ์™€ ๋™์‹œ์— ์„œ๋ฒ„์—์„œ๋Š” ํ•ด๋‹น ํฌํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Close()๋ฅผ ์š”์ฒญํ•œ๋‹ค.

  3. ACK๋ฅผ ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ๋Š” FIN_WAIT_2 ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๋‹ค.

  4. Close() ์š”์ฒญ์„ ๋ฐ›์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…๋ฃŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง„ํ–‰์‹œ์ผœ ์ตœ์ข…์ ์œผ๋กœ close()๊ฐ€ ๋˜๊ณ  ์„œ๋ฒ„๋Š” FIN์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก ํ›„ ์ž์‹ ์€ LAST_ACK ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  5. FIN_WAIT_2์—์„œ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ–ˆ๋‹ค๋Š” ์‹ ํ˜ธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ FIN์„ ๋ฐ›์œผ๋ฉด ์ž˜ ๋ฐ›์•—๋‹ค๊ณ  ACK๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ์ „์†กํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” TIME_WAIT๋กœ ์ƒํƒœ๋ฅผ ๋ฐ”๊พผ๋‹ค.

    TIME_WAIT ์ƒํƒœ๋Š” ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด CLOSED๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

    ์ตœ์ข… ACK๋ฅผ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ํฌํŠธ๋„ CLOSED๋กœ ๋‹ซ๊ฒŒ๋œ๋‹ค.

  • ๋น„ ์ •์ƒ์ ์ธ ์ข…๋ฃŒ ์ƒํ™ฉ

  • CLOSE_WAIT : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Close()๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ์„œ๋ฒ„ ํฌํŠธ๋Š” CLOSE_WAIT ์ƒํƒœ๋กœ ๊ณ„์† ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค. CLOSE_WAIT ์ƒํƒœ๊ฐ€ statement์— ๋งŽ์•„์ง€๊ฒŒ ๋˜๋ฉด, Hang์ด ๊ฑธ๋ ค ๋” ์ด์ƒ ์—ฐ๊ฒฐ์„ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

  • FIN_WAIT_1 : ์„œ๋ฒ„์— ์ข…๋ฃŒ ์š”์ฒญ์„ ํ–ˆ๋Š”๋ฐ ACK๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ์ƒํƒœ๋กœ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜, ๋„คํŠธ์›Œํฌ ๋ฐฉํ™”๋ฒฝ์˜ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๋‹ค. ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜ TIME OUT์ด ๋˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ซํžŒ๋‹ค.

  • FIN_WAIT_2 : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ข…๋ฃŒ๋ฅผ ์š”์ฒญํ•œ ํ›„ ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ ‘์ˆ˜ํ–ˆ๋‹ค๊ณ  ACK๋ฅผ ๋ฐ›์•˜์ง€๋งŒ, ์„œ๋ฒ„์—์„œ ์ข…๋ฃŒํ–ˆ๋‹ค๋Š” FIN ์ƒํƒœ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ๋‹ค.

    ์–‘๋ฐฉ์˜ ๋‘๋ฒˆ์˜ ํ†ต์‹ ์ด ์ด๋ฏธ ์ด๋ฃจ์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•œ๋‹ค.

    ์„œ๋ฒ„์—์„œ CLOSE๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜ TIME OUT์ด ๋˜๋ฉด ์Šค์Šค๋กœ CLOSEํ•˜๊ฒŒ ๋œ๋‹ค.

  • TIME OUT์ด ๊ธธ์–ด์ ธ์„œ ๋งŽ์€ ์ˆ˜์˜ ์†Œ์ผ“์ด ๋Š˜์–ด๋งŒ ๋‚œ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

UDP

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

Load Balancing(๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ)

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

Clustering(ํด๋Ÿฌ์Šคํ„ฐ๋ง)

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

Gateway(๊ฒŒ์ดํŠธ์›จ์ด)

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

SSL(Secure Socket Layer)

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

SSL HandShake

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ƒ์„ฑํ•œ ๋žœ๋ค ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์— ์ œ๊ณตํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•œ ๋žœ๋ค ๋ฐ์ดํ„ฐ์™€ CA์—์„œ ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  3. ํด๋ผ์ด์–ธํŠธ๋Š” ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•œ CA๊ฐ€ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” CA๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ๋ฆฌ์ŠคํŠธ์— ์žˆ๋‹ค๋ฉด ํด๋ผ์ด์–ธํŠธ์— ๋‚ด์žฅ๋œ CA์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•ด ์ธ์ฆ์„œ๋ฅผ ๋ณตํ˜ธํ™”ํ•œ๋‹ค. 4.1. ์ธ์ฆ์„œ๋ฅผ ๋ณตํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ด ์ธ์ฆ์„œ๊ฐ€ CA์˜ ๋น„๋ฐ€ํ‚ค์— ์˜ํ•ด ์•”ํ˜ธํ™” ๋œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ ์‚ฌ๋žŒ์˜ ์‹ ์›์„ ๋ณด์žฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  5. 1๋ฒˆ๊ณผ 2๋ฒˆ ๋‹จ๊ณ„์—์„œ ์–ป์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ๋žœ๋ค ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋น„๋ฐ€ํ‚ค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  6. ์ž‘์„ฑํ•œ ๋น„๋ฐ€ํ‚ค๋ฅผ ์ธ์ฆ์„œ๋ฅผ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ์–ป์€ ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•œ๋‹ค. 6.1. ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ‚ค๋ฅผ ์—ด์–ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋น„๊ณต๊ฐœํ‚ค๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„ ๋ฟ์ด๋‹ค.
  7. ํด๋ผ์ด์–ธํŠธ๋Š” ์•”ํ˜ธํ™”ํ•œ ๋น„๋ฐ€ํ‚ค๋ฅผ ์„œ๋ฒ„์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.
  8. ์„œ๋ฒ„๋Š” ์ž์‹ ์ด ๊ฐ€์ง„ ๋น„๊ณต๊ฐœํ‚ค๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ค€ ๋น„๋ฐ€ํ‚ค๋ฅผ ๋ณตํ˜ธํ™”ํ•œ๋‹ค.
  9. ์ด๋กœ์„œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋น„๋ฐ€ํ‚ค๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์—ˆ๊ธฐ์— ๋น ๋ฅธ ์†๋„๋กœ ๋ณตํ˜ธํ™”์™€ ์•”ํ˜ธํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

OS

๊ต์ฐฉ ์ƒํƒœ(DeadLock, ๋ฐ๋“œ๋ฝ)

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ž‘์—…์ด ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์˜ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋งŒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ์ ์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์™„๋ฃŒ๋˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
  • ๊ต์ฐฉ ์ƒํƒœ์˜ ์กฐ๊ฑด
    1. ์ƒํ˜ธ ๋ฐฐ์ œ(Mutual Exclusion) : ์ž์› ์ž์ฒด๋ฅผ ๋™์‹œ์— ์“ธ ์ˆ˜ ์—†๋‹ค.
    2. ์ ์œ  ๋Œ€๊ธฐ(Hold and Wait) : ์ž์›์„ ๋ถ™์žก์€ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.
    3. ๋น„ ์„ ์ (No Preemption) : ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ๋นผ์•—์„ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
    4. ์ˆœํ™˜ ๋Œ€๊ธฐ(Circular wait) : ๋Œ€๊ธฐ๊ฐ€ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ  ์‚ฌ์ดํด์ด ๋˜์—ˆ๋‹ค.
  • ๊ต์ฐฉ ์ƒํƒœ์˜ ๊ด€๋ฆฌ
    1. ์˜ˆ๋ฐฉ : ๊ต์ฐฉ ์ƒํƒœ์˜ ์กฐ๊ฑด ์ œ๊ฑฐ, ์ž์› ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค.
      • ์ƒํ˜ธ ๋ฐฐ์ œ ๋ถ€์ • : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
      • ์ ์œ  ๋Œ€๊ธฐ ๋ถ€์ • : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž์›์„ ํ• ๋‹นํ•œ๋‹ค.
      • ๋น„์„ ์  ๋ถ€์ • : ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๊ณ , ์š”๊ตฌํ•œ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค.
      • ์ˆœํ™˜ ๋Œ€๊ธฐ ๋ถ€์ • : ์ž์›์— ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ์ˆœ์„œ๋Œ€๋กœ ์ž์›์„ ์š”๊ตฌํ•˜๋„๋ก ํ•œ๋‹ค.
    2. ํšŒํ”ผ : ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”ผํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์€ํ–‰์› ์•Œ๊ณ ๋ฆฌ์ฆ˜
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”๊ตฌํ•  ๋•Œ ์‹œ์Šคํ…œ์€ ์ž์›์„ ํ• ๋‹นํ•œ ํ›„์—๋„ ์•ˆ์ • ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋˜๋Š”์ง€๋ฅผ ์‚ฌ์ „์— ๊ฒ€์‚ฌํ•˜์—ฌ ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
      • ์•ˆ์ • ์ƒํƒœ์— ์žˆ์œผ๋ฉด ์ž์›์„ ํ• ๋‹นํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ž์›์„ ํ•ด์ง€ํ•  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.
    3. ๋ฐœ๊ฒฌ : ์ž์› ํ• ๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    4. ํšŒ๋ณต : ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ์ผ์œผํ‚จ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜, ํ• ๋‹น๋œ ์ž์›์„ ํ•ด์ œํ•จ์œผ๋กœ์จ ํšŒ๋ณตํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
      • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ฐฉ๋ฒ•
        • ๊ต์ฐฉ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ์ค‘์ง€
        • ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ ๊นŒ์ง€ ํ•œ ํ”„๋กœ์„ธ์Šค์”ฉ ์ค‘์ง€
      • ์ž์›์„ ์„ ์ ํ•˜๋Š” ๋ฐฉ๋ฒ•
        • ๊ต์ฐฉ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž์›์„ ์„ ์ ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ•˜๋ฉฐ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ ์ •์ง€ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•
        • ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค, ์ˆ˜ํ–‰๋œ ํšŸ์ˆ˜๊ฐ€ ์ ์€ ํ”„๋กœ์„ธ์Šค ๋“ฑ์„ ์œ„์ฃผ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›์„ ์„ ์ ํ•œ๋‹ค.

Mutex(๋ฎคํ…์Šค)

  • ์ƒํ™” ๋ฐฐ์ œ(MUTual EXclustion)์˜ ์•ฝ์ž์ด๋‹ค.
  • ์ž„๊ณ„ ์˜์—ญ์— ๋ฌด์กฐ๊ฑด ์ ‘๊ทผ ๋ชปํ•˜๊ฒŒ lock์„ ๊ฑด๋‹ค.
  • ํ•˜๋‚˜๋งŒ ์ ‘์†์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋๋‚˜๋ฉด unlock๋œ๋‹ค.
  • ์Šค๋ ˆ๋“œ์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • lock : ํ˜„์žฌ์˜ ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋“ค์–ด๊ฐˆ ๊ถŒํ•œ์„ ์–ป์–ด์˜จ๋‹ค. ๋งŒ์ผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ผ๋ฉด ์ข…๋ฃŒํ•  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.(entry section)
  • unlock : ํ˜„์žฌ์˜ ์ž„๊ณ„ ๊ตฌ์—ญ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ–ˆ์Œ์„ ์•Œ๋ฆฐ๋‹ค. ๋Œ€๊ธฐ์ค‘์ธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ง„์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.(exit section)
  • ๋ฎคํ…์Šค ๊ฐ์ฒด๋ฅผ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ์˜ค์ง ํ•˜๋‚˜์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Semaphore(์„ธ๋งˆํฌ์–ด)

  • ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค๋ ˆ๋“œ์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์นด์šดํŠธ ๊ฐ’์ด 0์ด๋ฉด ์ง„์ž… ๋ถˆ๊ฐ€, 0๋ณด๋‹ค ํฌ๋ฉด ์ง„์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค/์Šค๋ ˆ๋“œ๊ฐ€ ์ž„๊ณ„ ๊ตฌ์—ญ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์นด์šดํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์นด์šดํŠธ๊ฐ€ 1์ธ ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋ฎคํ…์Šค์ด๋‹ค.
  • ๋ฆฌ์†Œ์Šค์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ์นด์šดํ„ฐ
  • ๋™๊ธฐํ™” ๋Œ€์ƒ์ด ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์„ธ๋งˆํฌ์–ด๋Š” ๋ฎคํ…์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฎคํ…์Šค๋Š” ์„ธ๋งˆํฌ์–ด๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.

์ž„๊ณ„ ์˜์—ญ(Cirtical Section)

  • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ํ”„๋กœ์„ธ์Šค, ํ˜น์€ ์Šค๋ ˆ๋“œ ๋“ฑ์˜ ์ฒ˜๋ฆฌ ๋‹จ์œ„๊ฐ€ ๊ฐ™์ด ์ ‘๊ทผํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ณต์œ  ์˜์—ญ์„ ๋งํ•œ๋‹ค.
  • ๋ณดํ˜ธ๋˜์ง€ ์•Š๋Š” ์ž„๊ณ„ ๊ตฌ์—ญ์— ๋‘ ์ฒ˜๋ฆฌ ๋‹จ์œ„๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ž„๊ณ„ ๊ตฌ์—ญ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ž„๊ณ„ ๊ตฌ์—ญ์„ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์„ ์ž…์žฅ ๊ตฌ์—ญ(entry section), ์ž„๊ณ„ ์˜์—ญ์„ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์„ ํ‡ด์žฅ ๊ตฌ์—ญ(exit section)์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ž„๊ณ„ ์˜์—ญ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ๊ตฌ์—ญ(remainder section)์ด๋ผ๊ณ  ํ•œ๋‹ค.

Paging(ํŽ˜์ด์ง•) ๊ธฐ๋ฒ•

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

Segmentation(์„ธ๊ทธ๋จผํŠธ) ๊ธฐ๋ฒ•

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

์Šค์ผ€์ฅด๋ง

  • ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ž์›์„ ๋นผ์•—์„ ์ˆ˜ ์ž‡๋Š”์ง€์˜ ์—ฌ๋ถ€์— ๋”ฐ๋ผ์„œ ์„ ์ , ๋น„์„ ์  ์Šค์ผ€์ค„๋ง
  • ์„ ์ (Preemptive)

๊ฒฝ์Ÿ์ƒํƒœ(Race Condition)

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

fork

  • fork ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณต์‚ฌ๋œ๋‹ค.
  • fork ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ดํ›„๋ฅผ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  • fork ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ดํ›„์˜ ๋ฐ˜ํ™˜ ๊ฐ’
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค : ์ž์‹ ํ”„๋กœ์„ธ์Šค ID
    • ์ž์‹ ํ”„๋กœ์„ธ์Šค : 0
  • ๋ณดํ†ต ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค.
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ๋ฐ˜ํ™˜๊ฐ’ ์š”์ฒญ ํ•˜์ง€๋„ ์•Š๊ณ , ๋ฐ›์ง€๋„ ์•Š๋Š”๋‹ค.(sleep)
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

Process(ํ”„๋กœ์„ธ์Šค)

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

Thread(์“ฐ๋ ˆ๋“œ)

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

๋ฌธ๋งฅ ๊ตํ™˜(Context Switch)

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ์ƒํƒœ์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด, ์ด์ „์˜ ํ”„๋กœ์Šค์„ธ์˜ ์ƒํƒœ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ ์žฌํ•˜๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.
  • ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ์€ ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB)์— ๊ธฐ๋ก ๋˜์–ด ์žˆ๋‹ค.

etc.

๋Œ€์นญํ‚ค ์•”ํ˜ธํ™”

  • ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”์— ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ๋น ๋ฅด์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ํ‚ค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „๋‹ฌํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
  • AES

๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™”(๋น„ ๋Œ€ํ‚นํ‚ค ์•”ํ˜ธํ™”)

  • ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”์— ๋‹ค๋ฅธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋Œ€์นฐ์ด ์•”ํ˜ธํ™”์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • SSL/TLS, RSA
  • ๊ณต๊ฐœํ‚ค : ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๊ณต๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•œ ํ‚ค๋‹ค.
  • ๊ฐœ์ธํ‚ค(๋น„๊ณต๊ฐœํ‚ค, ๋น„๋ฐ€ํ‚ค) : ์ž์‹ ๋งŒ์ด ๊ฐ–๊ณ  ์žˆ๋Š” ํ‚ค๋‹ค.
  • ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ๋ณด์•ˆ์— ์ค‘์ ์„ ๋‘” ๊ฒƒ์ด๋‹ค.
  • ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋ฉด ์ธ์ฆ ๊ณผ์ •์— ์ค‘์ ์„ ๋‘” ๊ฒƒ์ด๋‹ค.
  1. ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ
    • ์ƒ๋Œ€๋ฐฉ์˜ ๊ณต๊ฐœํ‚ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ์‚ฌ๋žŒ์€ ์ž์‹ ์˜ ๊ฐœ์ธํ‚ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณตํ˜ธํ™”ํ•œ๋‹ค.
    • Aํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•œ๋‹ค๋ฉด Bํ‚ค๋กœ ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , Bํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•œ๋‹ค๋ฉด Aํ‚ค๋กœ ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.
  2. ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ
    • ๊ฐœ์ธํ‚ค์˜ ์†Œ์œ ์ž๊ฐ€ ๊ฐœ์ธํ‚ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๊ณต๊ฐœํ‚ค์™€ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.
    • ๊ณต๊ฐœํ‚ค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํš๋“ํ•œ ์‚ฌ๋žŒ์€ ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•ด ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ์˜ ๋ชฉ์ ๋ณด๋‹ค๋Š” ๊ณต๊ฐœํ‚ค๊ฐ€ ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž์˜ ์‹ ์›์„ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต๊ฐœํ‚ค๋กœ ๋ณตํ˜ธํ™”๋œ๋‹ค๋Š” ๊ฒƒ์€ ๊ณต๊ฐœํ‚ค์™€ ์Œ์„ ์ด๋ฃจ๋Š” ๊ฐœ์ธํ‚ค์— ์˜ํ•ด ์•”ํ˜ธํ™”๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
    • ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž์˜ ์‹ ์› ํ™•์ธ์ด ๋ณด์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ „์ž์„œ๋ช…์˜ ์›๋ฆฌ
  • ์šฉ๋Ÿ‰์ด ํฐ ์ •๋ณด๋Š” ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์•”ํ˜ธํ™”์— ์‚ฌ์šฉ๋œ ๋Œ€์นญํ‚ค๋Š” ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋Œ€์ƒ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

Git

  • ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๋ถ„์‚ฐํ˜• ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค.
  • fetch : ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ €์žฅ์†Œ ์ •๋ณด๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค.
  • rebase : ์ปค๋ฐ‹์„ ํ•ฉ์นœ๋‹ค.

Git Flow

  • Branch ๊ด€๋ฆฌ ์ „๋žต, Branching ๊ธฐ๋ฒ•
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์ˆ˜ ๋งŽ์€ Branch๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ๊ทœ์น™, ์ „๋žต์ด๋‹ค.
  • ๊ธฐ๋ณธ ์ „๋žต์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • feature branch๋ฅผ ์ด์šฉํ•ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ์ฑ…์ž„ ์†Œ๊ฐœ๋ฅผ ๋ช…ํ™•ํžˆ ํ•œ๋‹ค.
  • ๊ฐœ๋ฐœ ๋ฒ„์ „๊ณผ ์ œํ’ˆ ๋ฒ„์ „์„ ๊ฐœ๋ณ„ ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Pull Request๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • feature branch์™€ hotfix์˜ commit message๋ฅผ ์ทจํ•ฉํ•˜๊ฒŒ ๋˜๋ฉด, ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ๋ณ€๊ฒฝ ์ ์„ ์‰ฝ๊ฒŒ ํŒŒ์•… ํ•  ์ˆ˜ ์žˆ๋‹ค.

IO

  • Input / Output
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹ : Stream
  • ๋ฐ์ดํ„ฐ ํ˜•์‹ : byte
  • ๋™๊ธฐ
  • Blocking
  • ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ 
  • ์ ‘์†ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ์ ์„๋•Œ, ์ˆœ์ฐจ์ , ๋Œ€์šฉ๋Ÿ‰์ผ๋•Œ ์ ํ•ฉ

NIO

  • Java NIO๋Š” Non-Blocking I/O๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • New Input / Output์ด๋‹ค.
  • File ๊ด€๋ จ NIO๋Š” ๋ชจ๋‘ Blocking I/O
  • NIO2์˜ AsynchronousFileChannel์€ Non-Blocking I/O
  • ์ž…์ถœ๋ ฅ ๋ฐฉ์‹ : Channel
  • ๋ฐ์ดํ„ฐ ํ˜•์‹ : buffer
  • ๋™๊ธฐ, ๋น„๋™๊ธฐ
  • Non-Blocking / Blocking
  • ์–‘๋ฐฉํ–ฅ ํ†ต์‹ 
  • ์ ‘์†ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ํ•˜๋‚˜์˜ I/O๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์„ ๋•Œ ์ ํ•ฉ

Blocking

  • System Call์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๊ณ  System Call์ด ์™„๋ฃŒ๋˜๋ฉด ๊ทธ๋•Œ์•ผ Return ํ•œ๋‹ค.
  • Wait Queue์— ๋“ค์–ด๊ฐ„๋‹ค.
  • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์ด ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๋Œ€๊ธฐํ•œ๋‹ค.
  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์˜ ์ž‘์—…์„ ๋ชจ๋‘ ๋งˆ์น  ๋•Œ ๊นŒ์ง€ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค

NonBlocking

  • System Call์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•„๋„ ๋Œ€๊ธฐํ•˜์ง€ ์•Š๊ณ  Return ํ•ด๋ฒ„๋ฆฐ๋‹ค.
  • Wait Queue์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
  • ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์ด ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•ด์„œ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๊ณ  ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

Blocking & Non-Blocking

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ œ์–ด๊ถŒ ๋ฆฌํ„ด ์œ ๋ฌด
  • Non-Blocking์€ ์ œ์–ด๋ฌธ ์ˆ˜์ค€์—์„œ ์ง€์ฒด์—†์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ
  • ํ˜ธ์ถœํ•˜๋Š” ์ž…์žฅ์—์„œ์˜ ํŠน์ง•

Synchronous(๋™๊ธฐ)

  • ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์—๊ฒŒ Callback์„ ์ „๋‹ฌํ•ด์„œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ callback์„ ์‹คํ–‰ํ•˜๊ณ  ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  • ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์˜ ์ž‘์—… ์™„๋ฃŒ๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ์‹ ๊ฒฝ์“ด๋‹ค.
  • System Call์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

Asynchronous(๋น„๋™๊ธฐ)

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

Synchronous & Asynchronous

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ž‘์—… ์™„๋ฃŒ ์—ฌ๋ถ€ ์‹ ๊ฒฝ ์œ ๋ฌด
  • ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์˜ ํŠน์ง•

Node

  • Non-Blocking I/O์™€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๋†’์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.
  • ๋‚ด์žฅ HTTP ์„œ๋ฒ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ์›น ์„œ๋ฒ„์—์„œ ์•„ํŒŒ์น˜ ๋“ฑ ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • V8 ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ JavaScript ๋Ÿฐํƒ€์ž„์ด๋‹ค.

V8

ECMA 6

Docker

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

CI(Continuous Integration)

  • ๋Œ€ํ‘œ์ ์œผ๋กœ ์  ํ‚จ์Šค(Jenkins)
  • ์ง€์†์ ์ธ ํ†ตํ•œ
  • ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ์‹คํ–‰, ๋ฐฐํฌ ๋“ฑ์˜ ํ†ตํ•ฉ์„ ์ž๋™ํ™”ํ•œ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • map๊ณผ reduce๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋„๊ตฌ์ผ ๋ฟ์ด์ง€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹ˆ๋‹ค.
  • ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ์ž…๋ ฅ ๊ฐ’์— ๋”ฐ๋ผ ๋™์ผํ•œ ์ถœ๋ ฅ ๊ฐ’์ด ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜์˜ ์‘์šฉ์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜์—ฌ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

JWT(Json Web Token)

  • ์ž๊ฐ€ ์ˆ˜์šฉ์ ์ด๋‹ค.
  • ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.
  • ์‰ฝ๊ฒŒ ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • Header(ํ—ค๋”), Payload(๋‚ด์šฉ), Signature(์„œ๋ช…)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

Scale-out

  • ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅ
  • ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ ์—…๊ทธ๋ ˆ์ด๋“œ

Scale-up

  • ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅ
  • ์žฅ๋น„์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ฑ๋Šฅ ์—…๊ทธ๋ ˆ์ด๋“œ
  • ํ”„๋กœ์„ธ์„œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‚˜ ํ”„๋กœ์„ธ์„œ ๊ทธ ์ž์ฒด๋ฅผ ๊ณ ์„ฑ๋Šฅ ๋ชจ๋ธ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค.

Server Side Rendering(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

  • ์š”์ฒญ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ๊ณ ์นจ์ด ์ผ์–ด๋‚˜๋ฉฐ ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • View๋ฅผ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋กœ๋”ฉ์ด ๋งค์šฐ ์งง๋‹ค.

Client Side Rendering(ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

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

Single Page Application(SPA)

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

Overhead(์˜ค๋ฒ„ํ—ค๋“œ)

  • ์–ด๋˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋“ค์–ด๊ฐ€๋Š” ๊ฐ„์ ‘์ ์ธ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์„ ๋งํ•œ๋‹ค.

AngularJS 1

  • SPA ๋ฐฉ์‹์˜ ํ”„๋ก ํŠธ์—”๋“œ ์›น ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.
  • ์ฝ”๋“œ์˜ ์œ ์ง€ ๋ณด์ˆ˜, ๋ถ„๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋‹ค.
  • ํŽ˜์ด์ง€๊ฐ„ ์ „ํ™˜ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.
  • ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
  • ๊ฒ€์ƒ‰์—”์ง„์— ์ธ๋ฑ์‹ฑ์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๋Š”๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

ย 
ย 
ย 

Contributors