์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ์ ํ ์๋ฃ๊ตฌ์กฐ:ย ๋ฐ์ดํฐ ์์๋ค์ดย ์ผ๋ ฌ๋ก ์์ฐจ์ ์ผ๋ก ์ ์ฅ๋๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ ์์๋ ์ต๋ ํ๋์ ์ด์ ์์์ ํ๋์ ๋ค์ ์์๋ฅผ ๊ฐ์ง๋๋ค. ๋ํ์ ์ผ๋กย ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ์คํ, ํ๊ฐ ์์ต๋๋ค.
- ๋น์ ํ ์๋ฃ๊ตฌ์กฐ:ย ๋ฐ์ดํฐ ์์๋ค์ดย ๊ณ์ธต์ ๋๋ ๋คํธ์ํฌ ํํ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ ์์๋ ์ฌ๋ฌ ๋ค๋ฅธ ์์์ ๊ด๊ณ๋ฅผ ๋งบ์ ์ ์์ต๋๋ค. ๋ํ์ ์ผ๋กย ํธ๋ฆฌ, ๊ทธ๋ํ๊ฐ ์์ต๋๋ค.
๊ฐ์ ์ถ๊ฐ ๋ฐ ์ญ์ ํ ๋ logN์ ๋ณต์ก๋๊ฐ ์์๋๋ ์๋ฃ๊ตฌ์กฐ๋?
- ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ (์: AVL ํธ๋ฆฌ, ๋ ๋-๋ธ๋ ํธ๋ฆฌ):ย ํธ๋ฆฌ์ ๋์ด๋ฅผ logN์ผ๋ก ์ ์งํ์ฌ ์ฝ์ , ์ญ์ , ๊ฒ์ ์ฐ์ฐ์ ํ๊ท ๋ฐ ์ต์ ์ ๊ฒฝ์ฐ ๋ชจ๋ O(log N)์ผ๋ก ์ํํฉ๋๋ค.
- ํ (Heap):ย ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์ต๋/์ต์๊ฐ์ ์ญ์ ํ๊ฑฐ๋ ์๋ก์ด ๊ฐ์ ์ฝ์ ํ ๋ O(log N) ์๊ฐ์ด ์์๋ฉ๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํด์ ํ ์ด๋ธ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ฐ์ดํฐ ๋ ธ๋๊ฐ ํฌ์ธํฐ(์ฐธ์กฐ)๋ก ์ฐ๊ฒฐ๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ ๋ ธ๋๋ ๋ฐ์ดํฐ์ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋น์ฐ์์ ์ผ๋ก ์ ์ฅ๋ ์ ์์ผ๋ฉฐ, ์ค๊ฐ ์ฝ์ /์ญ์ ๊ฐ ๋น ๋ฆ ๋๋ค. (O(1) ํน์ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ฆฝ๋๋ค. (O(n)) ์ฒ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ํ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํด์ ํ ์ด๋ธ์ ํค-๊ฐ ์์ ์ ์ฅํ๋ฉฐ, ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ฝ์ , ์ญ์ , ๊ฒ์์ด ๋น ๋ฆ ๋๋ค. (O(1)) JavaSCript์ Object๋ Map์ด ๋ด๋ถ์ ์ผ๋ก ํด์ ํ ์ด๋ธ๊ณผ ์ ์ฌํ๊ฒ ๋์ํฉ๋๋ค.
ํด์ฌ ํ ์ด๋ธ์ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ ํญ์ O(1)์ธ๊ฐ์?
์๋๋๋ค. ํด์ ํ ์ด๋ธ์ ๊ฒ์ ์๊ฐ ๋ณต์ก๋๋ ํ๊ท ์ ์ผ๋ก O(1)์ด์ง๋ง, ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๋ ์ ์์ต๋๋ค.
- ํ๊ท O(1): ํด์ ํจ์๊ฐ ํค๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์์ผ ์ถฉ๋(collision)์ด ๊ฑฐ์ ์๋ ์ด์์ ์ธ ๊ฒฝ์ฐ, ์ํ๋ ๋ฐ์ดํฐ์ ๋ฐ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ต์ O(n): ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํด์ ์ถฉ๋๋ก ์ธํด ๋์ผํ ๋ฒํท(bucket)์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ, ํด๋น ๋ฒํท ๋ด์์ ์ ํ ํ์(linear search)์ ํด์ผ ํ๋ฏ๋ก ๋ฐ์ดํฐ ๊ฐ์(n)์ ๋น๋กํ๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
ํด์ ์ถฉ๋์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์ธ์.
- ์ฒด์ด๋: ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด๋น ํด์ ์ธ๋ฑ์ค์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด, ์ถฉ๋ํ๋ ๋ฐ์ดํฐ๋ค์ ์ด ๋ฆฌ์คํธ์ ์ถ๊ฐํ์ฌ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
- ๊ฐ๋ฐฉ ์ฃผ์๋ฒ: ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ๋ฏธ๋ฆฌ ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ๋ค๋ฅธ ๋น์ด์๋ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ ๋๋ค.
์ข์ ํด์ ํจ์์ ์กฐ๊ฑด์ ๋ญ๊น์?
- ํค๋ค์ ํด์ ํ ์ด๋ธ์ ๋ฒํท์ย ์ต๋ํ ๊ท ๋ฑํ๊ฒย ๋ถ์ฐ์์ผ ํด์ ์ถฉ๋์ ์ต์ํํด์ผ ํฉ๋๋ค.
- ํด์ ๊ฐ์ย ์ ์ํ๊ฒย ๊ณ์ฐํ ์ ์์ด์ผ ํฉ๋๋ค. ํด์ ํจ์ ์์ฒด๊ฐ ๋๋ฆฌ๋ฉด ํด์ ํ ์ด๋ธ์ ์ฅ์ ์ด ์ฌ๋ผ์ง๋๋ค.
- ๋์ผํ ํค์ ๋ํด์๋ย ํญ์ ๋์ผํ ํด์ ๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค.
Stack๊ณผ Queue์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์
[Stack]
- ํ์ ์ ์ถ(LIFO, Last In First Out)
- ์ฝ์ ์ฐ์ฐ์ Push, ์ญ์ ์ฐ์ฐ์ Pop
์์ : ์ ์, ๋ธ๋ผ์ฐ์ ๋ค๋ก ๊ฐ๊ธฐ, ์คํ์ทจ์(ctrl+z)
[Queue]
- ์ ์ ์ ์ถ(FIFO, First In First Out)
- ์ฝ์ ์ฐ์ฐ์ Enqueue, ์ญ์ ์ฐ์ฐ์ Dequeue
์์ : ์ํ์ ๋ฌด, ๋์ด๊ธฐ๊ตฌ ๋๊ธฐ์ค
List, Map, Set์ ์ฐจ์ด์ ์ ์ค๋ช ํด ์ฃผ์ธ์.
[List]
- ์์์ ์ค๋ณต์ด ์๋ ์๋ฃ๊ตฌ์กฐ
- ์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผ์ด ๊ฐ๋ฅ
- ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์
[Map]
- key์ value๋ฅผ ๊ฐ์ด ์ ์ฅํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ
- key์ ๋ํ ์ค๋ณต์ด ์์ผ๋ฉฐ ์์๋ฅผ ๋ณด์ฅํ์ง ์์
- value์ ์ค๋ณต์ ํ์ฉ๋จ
- ๊ฒ์ ์๋ ๋น ๋ฆ
[Set]
- ์์๊ฐ ์๊ณ , ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ
- ๊ฒ์ ์๋ ๋น ๋ฆ
- ์ค๋ณต๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌํ ๋ ์ ์ฉ
์๊ฐ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- ์๊ฐ ๋ณต์ก๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ย ์๊ฐ์ด ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค. ์ฃผ๋กย Big O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํํํ๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ํ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ณต๊ฐ ๋ณต์ก๋ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋๋ ๋์ ์ฌ์ฉํ๋ย ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์์ด ์ ๋ ฅ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค. ์ญ์ย Big O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํจ์จ์ฑ์ ํ๊ฐํฉ๋๋ค.
O(2^n), O(1), O(n^3), O(n!), O(n log n), O(log n), O(n), O(n^2)๋ฅผ ์๊ฐ๋ณต์ก๋ ์์๋๋ก ๋์ดํด์ฃผ์ธ์.
- O(1)ย (์์ ์๊ฐ)
- O(log n)ย (๋ก๊ทธ ์๊ฐ)
- O(n)ย (์ ํ ์๊ฐ)
- O(n log n)ย (๋ก๊ทธ ์ ํ ์๊ฐ)
- O(n^2)ย (์ด์ฐจ ์๊ฐ)
- O(n^3)ย (์ผ์ฐจ ์๊ฐ)
- O(2^n)ย (์ง์ ์๊ฐ)
- O(n!)ย (ํฉํ ๋ฆฌ์ผ ์๊ฐ)
๊ทธ๋ํ์ ํธ๋ฆฌ์ ์ฐจ์ด์ ์ ์ค๋ช ํด์ฃผ์ธ์.
- ๊ทธ๋ํ:ย ๋ ธ๋(์ ์ )์ ๋ ธ๋ ๊ฐ์ ๊ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.ย ์ฌ์ดํด์ด ํ์ฉ๋๋ฉฐ, ๋ชจ๋ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์๋ ๋ฉ๋๋ค.
- ํธ๋ฆฌ:ย ๊ทธ๋ํ์ ํ ์ข ๋ฅ๋ก,ย ์ฌ์ดํด์ด ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋กย ํ๋์ ๋ฃจํธ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ฉฐ,ย ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ ๋๋ค. N๊ฐ์ ๋ ธ๋๋ ํญ์ N-1๊ฐ์ ๊ฐ์ ์ ๊ฐ์ง๋๋ค.
์ ์์ํ vs ์ค์์ํ vs ํ์์ํ ๋ฅผ ๋น๊ตํด์ ์ค๋ช ํด์ฃผ์ธ์.
ํต์ฌ์ ์ธ ์ฐจ์ด๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ธ์ ๋ฐฉ๋ฌธํ๋๋์ ๋๋ค.
- ์ ์ ์ํ: ๋ฃจํธ โ ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ
- ์ค์ ์ํ: ์ผ์ชฝ โ ๋ฃจํธ โ ์ค๋ฅธ์ชฝ
- ํ์ ์ํ: ์ผ์ชฝ โ ์ค๋ฅธ์ชฝ โ ๋ฃจํธ
Array (๋ฐฐ์ด) vs Linked List (๋งํฌ๋ ๋ฆฌ์คํธ) ๋ฅผ ๋น๊ตํด์ ์ค๋ช ํด์ฃผ์ธ์.
๋ฐฐ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋๋ฉฐ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์์ด ๊ฒ์์ด O(1)๋ก ๋งค์ฐ ํจ์จ์ ์ด์ง๋ง, ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋๊ณ ์ค๊ฐ์ ์ฝ์ ์ด๋ ์ญ์ ์ ์์๋ค์ ์ด๋์์ผ์ผ ํด ๋น์ฉ์ด ํฝ๋๋ค. ์ด๋ก ์ธํด ์ฝ์ ๊ณผ ์ญ์ ๋ ํ๊ท ์ ์ผ๋ก O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
๋ฐ๋ฉด ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋๊ฐ ํฌ์ธํฐ๋ฅผ ํตํด ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ตฌ์กฐ๋ก, ๋์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์๊ณ ์ค๊ฐ ์ฝ์ ์ด๋ ์ญ์ ๊ฐ ํฌ์ธํฐ๋ง ๋ฐ๊พธ๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1)์ ๊ฐ๋ฅํ์ง๋ง, ์์ ์ ๊ทผ์ด ์ด๋ ค์ ๊ฒ์์๋ O(n)์ ์๊ฐ์ด ํ์ํฉ๋๋ค. ์ฆ, ๋ฐฐ์ด์ ๋น ๋ฅธ ์ ๊ทผ์ด, ๋งํฌ๋ ๋ฆฌ์คํธ๋ ์ ์ฐํ ์ฝ์ ยท์ญ์ ๊ฐ ๊ฐ์ ์ ๋๋ค.
ํ์ ๋ํด ์ค๋ช ํด์ฃผ์๊ณ , ๊ฐ ์ฐ์ฐ์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ์์ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ต๋ํ๊ณผ ์ต์ํ์ด ์๋ค.
- ์ต๋๊ฐ, ์ต์๊ฐ ํ์ O(1)
- ์ญ์ O(log n) โ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ ํ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ๊ฐ์ ธ์์ ์์น ์ฌ๊ตฌ์ฑ(heapify)ํ๋ค.
- ์ฝ์ O(log n) โ ๋ง์ง๋ง ๋ ธ๋์ ์ฝ์ ํ๊ณ ์์น๋ฅผ ์ฌ๊ตฌ์ฑ(heapify)ํ๋ค.
AVLํธ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ์?
์ด์งํ์ ํธ๋ฆฌ์์ ์ต์ ์ ๊ฒฝ์ฐ์ธ ์ ํ ํธ๋ฆฌ๊ฐ ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ, ๊ท ํ์ ์ก๊ธฐ ์ํด ํธ๋ฆฌ ์ผ๋ถ๋ฅผ ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์ํค๋ ์ด์ง ํ์ ํธ๋ฆฌ (ํ์, ์ฝ์ , ์ญ์ ๋ชจ๋ ์๊ฐ๋ณต์ก๋ O(log n))
FIFO์ LIFO ํํ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ฐ ์ค๋ช ํด์ฃผ์ธ์
FIFO(First-In-First-Out)๋ ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ๋ก, ๋ํ์ ์ธ ์๋ก ํ(Queue)๊ฐ ์์ต๋๋ค. ์ค์ ์ ์์๋๋ก ์ฒ๋ฆฌ๋๋ ์์คํ ์ฒ๋ผ, ๋ฐ์ดํฐ๋ ํ์ชฝ์์ ์ฝ์ ๋๊ณ ๋ฐ๋์ชฝ์์ ์ ๊ฑฐ๋๋ฉฐ ์์๊ฐ ์ค์ํ ๋ ์ ์ฉํฉ๋๋ค.
LIFO(Last-In-First-Out)๋ ๋์ค์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ๋ก, ๋ํ์ ์ธ ์๋ ์คํ(Stack)์ ๋๋ค. ์์ ์ฌ๋ฆฐ ์ฑ ๋๋ฏธ์ฒ๋ผ ๋ง์ง๋ง์ ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ฉฐ, ํจ์ ํธ์ถ ์คํ์ด๋ ๋๋๋ฆฌ๊ธฐ ๊ธฐ๋ฅ ๋ฑ์์ ํ์ฉ๋ฉ๋๋ค.
1๋ถํฐ 100๊น์ง์ ์ ์๋ฅผ ์์ ์ด์งํธ๋ฆฌ๋ก ์๋ถํฐ ์ฑ์ด๋ค๋ฉด ๋์ด๋ ์ด๋ป๊ฒ ๋๋์?
๋์ด๋ 6
๋ฃจํธ๋ถํฐ ๋ ๋ฒจ์ 1๋ถํฐ ์์, ๋์ด๋ 0๋ถํฐ ์์ (๋์ด = ๋ ๋ฒจ - 1)
์ด์งํธ๋ฆฌ๋ ๋ฌด์์ด๊ณ ์ด๋ค ์ข ๋ฅ๊ฐ ์๋์?
์์์ ๋ ธ๋ ์๊ฐ ๋๊ฐ ์ดํ์ธ ํธ๋ฆฌ.
- ์ ์ด์ง ํธ๋ฆฌ โ ์์ ๋ ธ๋๊ฐ 0 ๋๋ 2๊ฐ์ธ ์ด์ง ํธ๋ฆฌ
- ์์ ์ด์ง ํธ๋ฆฌ โ ์ ๊ณ์ธต๋ถํฐ ์์ํด์ ์ผ์ชฝ์์๋ถํฐ ์ฑ์์ ธ ์๋ ์ด์ง ํธ๋ฆฌ.
- ๋ณ์ง ์ด์ง ํธ๋ฆฌ โ ์์ ๋ ธ๋๊ฐ ํ๋๋ฐ์ ์๋ ์ด์ง ํธ๋ฆฌ (์ ํ์ฒ๋ผ ํ์ค)
- ํฌํ ์ด์ง ํธ๋ฆฌ โ ๋ชจ๋ ๋ ธ๋๊ฐ ๊ฝ ์ฐจ์๋ ํธ๋ฆฌ
- ๊ท ํ ์ด์ง ํธ๋ฆฌ โ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์กฑ ๋ ธ๋์ ๋์ด ์ฐจ๊ฐ 1์ดํ์ธ ์ด์ง ํธ๋ฆฌ.
์ด์ง ํธ๋ฆฌ ๋ชจ์์ ๊ฐ์ ์ฑ์๋ฃ์ ๊ฒ. ์ผ์ชฝ ํ์ ํธ๋ฆฌ์๋ ์์๊ฐ, ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์๋ ํฐ ๊ฐ์ด ๋ค์ด์์. (ํ์ ์ ๋ณดํต O(log n)์ด์ง๋ง, ์ต์ ์๋ O(n))
์ด์ง ํธ๋ฆฌ ๋ชจ์์ ๊ฐ์ ์ฑ์๋ฃ์ ๊ฒ. ์ผ์ชฝ ํ์ ํธ๋ฆฌ์๋ ์์๊ฐ, ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์๋ ํฐ ๊ฐ์ด ๋ค์ด์์. (ํ์ ์ ๋ณดํต O(log n)์ด์ง๋ง, ์ต์ ์๋ O(n))
์ข ๋ฅ๋ AVL ํธ๋ฆฌ, ๋ ๋ ๋ธ๋ ํธ๋ฆฌ๊ฐ ์์ต๋๋ค.
์ฐ์ ์์ ํ์ ๋์, ๊ตฌํ๋ฐฉ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฐ์ ์์ ํ๋ ์ผ๋ฐ ํ์ ๋ฌ๋ฆฌ, ์ฝ์ ๋ ์์ ์ค ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์์๊ฐ ๋จผ์ ๋๊ฐ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ ์์์ ์ฐ์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ฒ๋ฆฌํฉ๋๋ค.
๊ตฌํ ๋ฐฉ์์ผ๋ก๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํ์ด ์์ผ๋ฉฐ, ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ ์ด์ง ํ(Binary Heap)์ ๋๋ค. ์ด์ง ํ์ ์ฌ์ฉํ๋ฉด ์ฝ์ ๊ณผ ์ญ์ ์ฐ์ฐ์ด O(log n)์ผ๋ก ํจ์จ์ ์ด๋ฉฐ, ์ต์ ํ์ ์ต์๊ฐ์, ์ต๋ ํ์ ์ต๋๊ฐ์ ๋น ๋ฅด๊ฒ ๊บผ๋ผ ์ ์์ด ์ฐ์ ์์ ํ์ ์ฑ๋ฅ์ ์ ๋ณด์ฅํฉ๋๋ค.
ํธ๋ฆฌ์ ๊ตฌ์ฑ์์์ธ ๋ ธ๋์์, ์ด๋ค ๋ ธ๋๋ค์ด ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
- Root Node (๋ฃจํธ ๋ ธ๋):: ๊ฐ์ฅ ์์ ์๋ ๋ ธ๋
- Internal Node (๋ด๋ถ ๋ ธ๋, ๋น๋จ๋ง ๋ ธ๋): ๋ฃจํธ์ ๋ฆฌํ ๋ ธ๋ ์ฌ์ด์ ์๋ ๋ ธ๋
- Terminal Node (=leaf Node, ๋จ๋ง ๋ ธ๋): ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋
ํธ๋ฆฌ์ ๋ ๋ฒจ๊ณผ ๋์ด์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
- ๋ฃจํธ๋ถํฐ ๋ ๋ฒจ์ 1๋ถํฐ ์์, ๋์ด๋ 0๋ถํฐ ์์ (๋์ด = ๋ ๋ฒจ - 1)
DFS์ BFS์ ๋น๊ตํ๊ณ , ๊ฐ๊ฐ์ ์,๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ค๋ช ํ์ธ์.
DFS(Depth-First Search)๋ ํ ๊ฒฝ๋ก๋ฅผ ๋๊น์ง ํ์ํ ๋ค ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ์ด๋ํ๋ ๋ฐฉ์์ด๋ฉฐ, ์ฌ๊ท๋ ์คํ์ ์ฌ์ฉํด ๊ตฌํ๋ฉ๋๋ค. BFS(Breadth-First Search)๋ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋ก ํ์ํ๋ ๋ฐฉ์์ผ๋ก, ํ๋ฅผ ์ฌ์ฉํด ๊ตฌํ๋๊ณ ์ต๋จ ๊ฒฝ๋ก ํ์์ ์ ํฉํฉ๋๋ค.
๋ ์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ ์ ์ V๊ฐ์ ๊ฐ์ E๊ฐ์ผ ๋ ์๊ฐ ๋ณต์ก๋๋ O(V + E)๋ก ๋์ผํฉ๋๋ค. ๊ณต๊ฐ ๋ณต์ก๋๋ DFS๊ฐ ์ฌ๊ท ํธ์ถ ๋๋ ์คํ์ ์ํด O(V), BFS๋ ํ์ ์ํด O(V)์ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง๋ง, BFS๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ ๋ฒ์ ํ์ ๋ด์ ์ ์์ด ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ DFS๋ณด๋ค ๋ ํด ์ ์์ต๋๋ค.
Dynamic Programming์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Dynamic Programming(๋์ ํ๋ก๊ทธ๋๋ฐ)์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ์ค๋ณต ๊ณ์ฐ์ ํผํจ์ผ๋ก์จ ์ ์ฒด ๋ฌธ์ ๋ฅผ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋์ผํ ๋ถ๋ถ ๋ฌธ์ ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๊ณ์ฐํ์ง ์๊ณ ๋ฉ๋ชจ์ด์ ์ด์ ๋๋ ํ ์ด๋ธ ๋ฐฉ์์ผ๋ก ์ฌ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋งค ์๊ฐ ๊ฐ์ฅ ์ต์ ์ด๋ผ๊ณ ํ๋จ๋๋ ์ ํ์ ํ๋ ๋ฐฉ์์ผ๋ก, ์ ์ฒด ๋ฌธ์ ์ ๋ํ ์ต์ ํด๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ฐ ๋จ๊ณ์์์ ์ง์ญ์ ์ต์ ์ ํ์ด ์ ์ฒด์ ์ผ๋ก๋ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ ์ ์๋ ๋ฌธ์ ์ ์ ํฉํฉ๋๋ค.
๋ํ์ ์ธ ์๋ก๋ ๋์ ๊ฑฐ์ค๋ฆ๋ ๋ฌธ์ , ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ, ํ๋ ์ ํ ๋ฌธ์ ๋ฑ์ด ์์ผ๋ฉฐ, ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ๋น ๋ฅด์ง๋ง ํญ์ ์ต์ ํด๋ฅผ ๋ณด์ฅํ์ง๋ ์๊ธฐ ๋๋ฌธ์ ์ ์ฉ ๊ฐ๋ฅํ ๋ฌธ์ ์ธ์ง ํ๋จ์ด ์ค์ํฉ๋๋ค.
Kruskal Algorithm(ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Kruskal ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST, Minimum Spanning Tree)๋ฅผ ์ฐพ๊ธฐ ์ํ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๊ทธ๋ํ์ ๋ชจ๋ ๊ฐ์ ์ค ๊ฐ์ค์น๊ฐ ๋ฎ์ ๊ฒ๋ถํฐ ์ ํํ๋ฉด์ ์ฌ์ดํด์ด ์๊ธฐ์ง ์๋๋ก ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด๋ฅผ ์ํด ๊ฐ์ ์ ๊ฐ์ค์น ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ, ํ๋์ฉ ์ ํํ๋ฉฐ ์๋ก ๋ค๋ฅธ ์งํฉ์ ์ํ ์ ์ ์ ์ฐ๊ฒฐํ ๋๋ง ์ถ๊ฐํฉ๋๋ค.
์ฌ์ดํด ์ฌ๋ถ๋ฅผ ํ๋จํ๊ธฐ ์ํด ์ฃผ๋ก Union-Find(Disjoint Set) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์๊ฐ ๋ณต์ก๋๋ ๊ฐ์ ์ ๊ฐ์๋ฅผ E, ์ ์ ์ ๊ฐ์๋ฅผ V๋ผ ํ ๋ O(E log E)์ ๋๋ค. ์ฐ๊ฒฐ ์์ ๊ฐ ๋น์ฉ ์ต์ ์ฐ๊ฒฐ์ ์ฐพ๋ ๋ฐ ์ ์ฉํ๋ฉฐ, ๊ฐ์ ์ค์ฌ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ์ ์์ Prim ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฐจ๋ณ๋ฉ๋๋ค.
Prime Algorithm(ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Prim ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST)๋ฅผ ๊ตฌํ๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ํ๋์ ์ ์ ์์ ์์ํด ์ธ์ ํ ๊ฐ์ ์ค ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ ์ ์ ํํ๋ฉฐ ํธ๋ฆฌ๋ฅผ ํ์ฅํด ๋๊ฐ๋๋ค. ๋ชจ๋ ์ ์ ์ด ํฌํจ๋ ๋๊น์ง ๊ฐ์ฅ ์งง์ ์ฐ๊ฒฐ์ ๋ฐ๋ณต์ ์ผ๋ก ์ ํํ๋ฉฐ, ํญ์ ์ฐ๊ฒฐ๋ ํธ๋ฆฌ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ํน์ง์ ๋๋ค.
์ฐ์ ์์ ํ(ํ)๋ฅผ ํ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์๊ฐ ๋ณต์ก๋๋ O(E log V)์ ๋๋ค. Prim์ ์ ์ ์ค์ฌ ๋ฐฉ์์ผ๋ก, ์ด์ดํ ๊ทธ๋ํ์์ Kruskal๋ณด๋ค ์ ๋ฆฌํ ์ฑ๋ฅ์ ๋ณด์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
BFS์ ๋ค์ต์คํธ๋ผ์ ๊ณตํต์ ๊ณผ ์ฐจ์ด์ ์ ๋ญ๊น์?
BFS์ ๋ค์ต์คํธ๋ผ๋ ๋ชจ๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ํ ๋๋ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํด ๋๋น ์ฐ์ ์ผ๋ก ๋ ธ๋๋ฅผ ํ์ํ๋ค๋ ๊ณตํต์ ์ด ์์ต๋๋ค. ํนํ ๊ฐ์ค์น๊ฐ ๋ชจ๋ ๋์ผํ ๊ทธ๋ํ์์๋ ๋ค์ต์คํธ๋ผ๋ BFS์ฒ๋ผ ๋์ํ๋ฉฐ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ ํํ ๊ตฌํ ์ ์์ต๋๋ค.
์ฐจ์ด์ ์ ๊ฐ์ค์น ์ฒ๋ฆฌ ์ฌ๋ถ์ ์์ผ๋ฉฐ, BFS๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ๋ชจ๋ 1์ผ ๋๋ง ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ณด์ฅํ์ง๋ง, ๋ค์ต์คํธ๋ผ๋ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์๋ ์ฌ๋ฐ๋ฅธ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๋ํ ๋ค์ต์คํธ๋ผ๋ ๊ฐ ๋ ธ๋์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐ์ ์์ ํ๋ฅผ ํตํด ๊ฐฑ์ ํ๋ฉฐ ํ์ ์์๊ฐ ๋์ ์ผ๋ก ์ ํด์ง๋ค๋ ์ ์์ BFS๋ณด๋ค ๊ณ์ฐ์ด ๋ณต์กํฉ๋๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ญ๊ฐ ์๋์?
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ ํ ์๊ณ ๋ฆฌ์ฆ ์ค ๋ํ์ ์ธ ๊ฒ์ ๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ A* ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๋ฒจ๋ง-ํฌ๋๋ ์์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์๋๋ก ํ์ฅ๋ ๋ฐฉ์์ด๋ฉฐ, ์ฌ์ดํด ๊ฒ์ถ ๊ธฐ๋ฅ๋ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
A* ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ต์คํธ๋ผ์ ํด๋ฆฌ์คํฑ ํจ์๋ฅผ ๊ฒฐํฉํด ๋ชฉํ ์ง์ ๊น์ง์ ์์ ๊ฑฐ๋ฆฌ๊น์ง ๊ณ ๋ คํ๋ฉฐ ํ์ ๋ฒ์๋ฅผ ์ค์ด๋ ๋ฐฉ์์ผ๋ก, ํนํ ๊ฒฝ๋ก ํ์ ๋ฌธ์ ์์ ํจ์จ์ฑ์ด ๋ฐ์ด๋ฉ๋๋ค. ๋ํ ๋ค์ต์คํธ๋ผ ์์ฒด๋ **์ฐ์ ์์ ํ(ํ)**๋ฅผ ์ ์ฉํด ์๊ฐ ๋ณต์ก๋๋ฅผ O((V + E) log V)๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ๋ก์ด๋-์์
์๊ณ ๋ฆฌ์ฆ์ ๊ทธ๋ํ์์ ๋ชจ๋ ์ ์ ์ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค. ๊ฐ ์ ์ ์ (i, j)์ ๋ํด ์ค๊ฐ์ ๊ฑฐ์น ์ ์๋ ์ ์ k๋ฅผ ํ๋์ฉ ๊ณ ๋ คํ๋ฉฐ, dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
๋ฐฉ์์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ง์ ์ผ๋ก ๊ฐฑ์ ํฉ๋๋ค.
์๊ฐ ๋ณต์ก๋๋ O(Vยณ)๋ก ๋๋ฆฌ์ง๋ง, ์์ ๊ฐ์ค์น ๊ฐ์ ๋ ํ์ฉ๋๋ฉฐ, ๊ฐ๋จํ ๊ตฌํ์ผ๋ก ๋ชจ๋ ๊ฒฝ๋ก์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์์ด ์ ์ ์๊ฐ ์ ์ ๋ฐ์ง ๊ทธ๋ํ์ ์ ํฉํฉ๋๋ค. ๋ค๋ง ์์ ์ฌ์ดํด์ด ์กด์ฌํ ๊ฒฝ์ฐ ์ด๋ฅผ ๊ฐ์งํ ์๋ ์์ง๋ง, ์ต๋จ ๊ฒฝ๋ก ์์ฒด๋ ์๋ฏธ ์๊ฒ ๋ฉ๋๋ค.
P / NP / NP-Complete / P=NP? ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ฉ์ด | ์ํ ๋ถ๋ฅ | ์ค๋ช |
---|---|---|
P | ๊ฒฐ์ ๋ฌธ์ , ๋ณต์ก๋ ํด๋์ค | ๋คํญ ์๊ฐ(Polynomial Time) ์์ "ํ ์ ์๋" ๋ฌธ์ ์งํฉ |
NP | ๊ฒฐ์ ๋ฌธ์ , ๋ณต์ก๋ ํด๋์ค | ๋คํญ ์๊ฐ ์์ "๊ฒ์ฆํ ์ ์๋" ๋ฌธ์ ์งํฉ |
NP-Complete | NP ๋ด์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ๋ค | NP ๋ฌธ์ ์ค ๋ชจ๋ ๋ค๋ฅธ NP ๋ฌธ์ ๋ก ํ์ ๊ฐ๋ฅํ ๋ฌธ์ |
P = NP? | ๋ณต์ก๋ ์ด๋ก ์ ๋ํ์ ๋์ | P์ NP๊ฐ ๊ฐ์ ์งํฉ์ธ์ง์ ๋ํ ๋ฏธํด๊ฒฐ ๋ฌธ์ |
Comparisons Sorting์ ๊ทธ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Comparison Sorting์ ์์๋ค ๊ฐ์ ํฌ๊ธฐ ๋น๊ต๋ฅผ ํตํด ์ ๋ ฌ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- Bubble Sort (๊ฑฐํ ์ ๋ ฌ = ๋ฒ๋ธ ์ ๋ ฌ)
- ์ธ์ ํ ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ฉฐ ์ ๋ ฌํด ๋๊ฐ์, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐฐ์ด์ ๋งจ ๋์ ์ด๋์์ผ ๋ค๋ถํฐ ์ฑ์๊ฐ๋ ๋ฐฉ์ โ O(N^2)
- Selection Sort (์ ํ ์ ๋ ฌ)
- ์ฒซ๋ฒ์งธ๋ถํฐ ๋๊น์ง ํ์ด์ ๊ฐ์ฅ ์์๊ฑธ ์ฒซ๋ฒ์งธ๋ก ๋๊ณ , ๊ทธ ๋ค์์ผ๋ก ๋๋ฒ์งธ๋ถํฐ ๋๊น์ง ํ์ด์ ๊ฐ์ฅ ์์๊ฑธ ๋๋ฒ์งธ๋ก ๋๊ณ , ์ด๋ ๊ฒ ๋๊น์ง ๋ฐ๋ณตํ๋ ๋ฐฉ์. โ O(N^2)
- Insertion Sort (์ฝ์
์ ๋ ฌ)
- k๋ฒ์งธ ์์๋ฅผ 1๋ถํฐ k-1๋ฒ์งธ ๊น์ง ๋น๊ตํด์ ์ ์ ํ ์์น์ ๋ผ์ ๋ฃ๊ณ ๊ทธ ๋ค์ ๊ฐ๋ค์ ํ์นธ์ฉ ๋ค๋ก ๋ฐ์ด๋ด๋ ๋ฐฉ์ โ O(N^2)
- Merge Sort (๋ณํฉ ์ ๋ ฌ)
- 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด๋ก ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ 1์ด ๋ ๋๊น์ง ๋ฐ๋ณต ๋ถํ ํ๊ณ , ๊ทธ ํ 2๊ฐ์ ๋ถ๋ถ ๋ฐฐ์ด์ ๋ค์ ํฉ์ณ๊ฐ๋ฉด์ ์ ๋ ฌํ๋ฉด์ ๋ชจ๋ ํฉ์ณ์ง๋๊น์ง ๋ฐ๋ณตํ๋ค. โ O(N log N)
- Heap Sort
- ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์ต์, ์ต๋ ํ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํด ์ ๋ ฌํ๋ ๋ฐฉ์. ๋ด๋ฆผ์ฐจ์์ ์ต๋ํ, ์ค๋ฆ์ฐจ์์ ์ต์ ํ. โ O(N log N)
- Quick Sort
- ๋ฐ์ดํฐ ์ค์์ ์์์ ๊ธฐ์ค์ธ pivot์ ์ ํ์ฌ ํด๋น ํผ๋ฒ์ ๊ธฐ์ค์ผ๋ก ๋๊ฐ์ ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋๋ค. ํ์ชฝ์๋ ํผ๋ฒ๋ณด๋ค ์์๊ฐ์ ๋ฃ๊ณ ๋ฐ๋์๋ ํผ๋ฒ๋ณด๋ค ํฐ ๊ฐ์ ๋ฃ๋๋ค. ์ด๋ฅผ ๋์ด์ ์ชผ๊ฐค ๋ถ๋ถ์งํฉ์ด ์์ ๋๊น์ง ๋ฐ๋ณต โ ํ๊ท =O(N log N), ์ต์ =O(N^2)
- Shell Sort
- ์ฝ์ ์ ๋ ฌ์ ๋จ์ ์ ๋ณด์ํ๊ณ ์ ๋์ . interval(๊ฐ๊ฒฉ) ๋งํผ ๋ฒ์ด์ง ์์๋ค์ ๋ถ๋ถ์งํฉ์ผ๋ก ๊ตฌ์ํ ๋ค ์ฝ์ ์ ๋ ฌ์ ์งํํ๋ ๋ฐฉ์. ์ด๊ธฐ interval ๊ฐ์ ์ ์ฒด ๊ธธ์ด / 2 ๋ก ์ฃผ์ด์ง๋ฉฐ ๊ณ์ 2๋ก ๋๋ ์ฃผ๊ณ ๋ฐ๋ณต. โ O(N^1.25) OR โ O(N^1.5)
- Tim Sort
- ๋ณํฉ+์ฝ์ ์ ๋ ฌ๋ก ์์ ์ ์ด๋ฉฐ ๋ณํฉ ์ ๋ ฌ์ ๋นํด ์ ์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํจ. ํ์ด์ฌ์์ ์ ๋ ฌ ํ์ค.โ O(N log N)
non-Comparisons Sorting์ ๊ทธ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Non-Comparison Sorting์ ์์ ๊ฐ์ ์ง์ ์ ์ธ ํฌ๊ธฐ ๋น๊ต ์์ด ์ ๋ ฌ์ ์ํํ๋ ๋ฐฉ์์ ๋๋ค.
- Counting Sort
- ๋ฐฐ์ด์ ์กด์ฌํ๋ ์์์ ๊ฐ์๋ฅผ ์ธ์ด์ ์ ๋ ฌํ๋ ๋ฐฉ์ โ O(N)
- Radix Sort (๊ธฐ์ ์ ๋ ฌ)
- ์ ๋ ฌํ๊ณ ์ ํ๋ ์์ ๋ฎ์ ์๋ฆฌ ์๋ฅผ ์ฐจ๋ก๋๋ก ํ์ธํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ์. ์ด 10๊ฐ์ ํ๋ฅผ ์ฌ์ฉํ๋ค. 1์ ์๋ฆฌ ์ โ 10์ ์๋ฆฌ์ ์ด๋ฐ์์ผ๋ก ํ์ธ. โ O(N)
Stable sort & Unstable sort์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํค ๊ฐ์ ๊ฐ์ง ๋ ธ๋๋ค์ด ์ ๋ ฌํ๋ฉด์ ์ ํ์ ์์๊ฐ ๋ค๋ฐ๋๋ฉด unstable sort ๋ผ๊ณ ํ๊ณ , ์์๊ฐ ์๋ฐ๋๋ฉด stable sort ๋ผ๊ณ ํ๋ค.
- Stable sort โ Bubble sort / Insertion sort / Merge sort
- Unstable sort โSelection sort / Quick sort / Heap sort
Quick Sort์ ์๊ฐ๋ณต์ก๋๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
Quick Sort์ ํ๊ท ์๊ฐ ๋ณต์ก๋๋ O(n log n)์ผ๋ก, ๋ถํ ์ ๋ณต ๋ฐฉ์์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ํผ๋ฒ ๊ธฐ์ค์ผ๋ก ๋ ๋ถ๋ถ์ผ๋ก ๋๋์ด ์ ๋ ฌ์ ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค. ํ์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ, ์ฆ ํญ์ ๊ฐ์ฅ ํฌ๊ฑฐ๋ ์์ ๊ฐ์ ํผ๋ฒ์ผ๋ก ์ ํํ๋ฉด ํ์ชฝ๋ง ๋ถํ ๋์ด **O(nยฒ)**์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ๋๋ค ํผ๋ฒ ์ ํ์ด๋ ์ค๊ฐ๊ฐ ๊ธฐ๋ฐ ํผ๋ฒ ์ ํ ์ ๋ต์ ์ฌ์ฉํด ํ๊ท ์ ์ธ ์ฑ๋ฅ์ ์์ ์ ์ผ๋ก ์ ์งํ๋ฉฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋น ๋ฅธ ์ ๋ ฌ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค.
์์ ์ ๋ ฌ (Topology Sort)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์์ ์ ๋ ฌ์ ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ ์ ๋ค์ ์ ํ ๊ด๊ณ์ ๋ฐ๋ผ ์์๋๋ก ๋์ดํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ณดํต ์ฌ์ดํด์ด ์๋ ๋ฐฉํฅ ๊ทธ๋ํ(DAG)์์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์์ ๊ฐ ์์กด์ฑ์ด ์๋ ์ผ์ , ์ปดํ์ผ ์์, ๊ณผ๋ชฉ ์ด์ ์กฐ๊ฑด ๋ฑ์ ์์๋๋ก ์ ๋ ฌํ ๋ ํ์ฉ๋ฉ๋๋ค.
๋ํ์ ์ธ ๊ตฌํ ๋ฐฉ์์ผ๋ก๋ ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋๋ฅผ ํ์ ๋ฃ๊ณ , ํด๋น ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ฉด์ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ง์ ์ฐจ์๋ฅผ ์ค์ด๋ Kahnโs ์๊ณ ๋ฆฌ์ฆ๊ณผ, DFS ๊ธฐ๋ฐ์ผ๋ก ํ์ ์ํ๋ฅผ ์ด์ฉํด ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ์์ด ์์ต๋๋ค. ์๊ฐ ๋ณต์ก๋๋ O(V + E)์ด๋ฉฐ, ์ฌ์ดํด์ด ์กด์ฌํ๋ฉด ์์ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์บ์๋ ์ ํ๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ ์ฅ ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐผ์ ๋ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ ์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ์ด๋ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ด ์์ต๋๋ค.
์ข ๋ฅ
- FIFO (First in First Out) - ๊ฐ์ฅ ๋จผ์ ์บ์์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ ๊ฑฐ
- LRU (Least Recently Used)
- ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐ
- ํด์๋งต๊ณผ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํ์ฉํด์ ๊ตฌํ.
- ์๊ฐ๋ณต์ก๋ โ ์กฐํ, ์ฝ์ , ์ญ์ O(1)
- LFU (Least Frequently Used) - ์ฌ์ฉ ํ์๊ฐ ๊ฐ์ฅ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐ
์์ ํ๋ณ ๋ฐฉ์์ O(N), O(N/2), O(N^0.5) ๋ณ๋ก ์ค๋ช ํด์ฃผ์ธ์.
- O(N) ๋ฐฉ์
- ํ ์ซ์์ ๋ํ ์์ ํ๋ณ์ 2๋ถํฐ ํด๋น ์ซ์ ๋ฐ๋ก ์ ๊น์ง์ ๋ชจ๋ ์๋ก ๋๋ ๋ณด๊ณ ๋๋จธ์ง๊ฐ 0์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ.
- O(N/2) ๋ฐฉ์
- ์ง์๋ฅผ ๋จผ์ ์ ์ธํ๊ณ 2 ์ดํ์ ํ์๋ง ๊ฒ์ฌํ์ฌ ์ฐ์ฐ ํ์๋ฅผ ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ฐฉ๋ฒ.
- O(N^0.5) ๋ฐฉ์
- ์์์ ์ฝ์ ์ค ํ๋๋ ๋ฐ๋์ โN ์ดํ์ ์กด์ฌํ๋ฏ๋ก, 2๋ถํฐ โN๊น์ง๋ง ๋๋ ๋ณด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ต์ ํ.
์๋ผํ ์คํ ๋ค์ค์ ์ฒด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
O(n log log n) ๋ฐฉ์
ํ๋์ ์ซ์์ ๋ํด ์์ํ๋ณ์ ์ ์ธ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ์ด๊ฑด ํน์ ๋ฒ์์ ๋ชจ๋ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ ๋ ์ ์ฉ. 1๋ถํฐ N๊น์ง์ ๋ชจ๋ ์์๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ, ๋ฐฐ์๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ์ ๊ฑฐํ์ฌ ์์๋ง ๋จ๊ธฐ๋ ๋ฐฉ์.
ex) 100 ์ดํ์ ์์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด 1์ ์ ์ธํ๊ณ , 2๋ถํฐ 100์ ์ ๊ณฑ๊ทผ์ธ 10๊น์ง์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
๊ทธ๋ฆฌ๋ vs ๋ฐฑํธ๋ํน vs DP vs ๋ถํ ์ ๋ณต ์ ๋น๊ตํด์ ์ค๋ช ํด์ฃผ์ธ์.
- ๊ทธ๋ฆฌ๋ โ ๊ฐ ๋จ๊ณ๋ง๋ค ์ง๊ธ ๋น์ฅ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ๋ง์ ์ ํํ๋ ๋ฐฉ์.
- ๋ฐฑํธ๋ํน โ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ํ์ง๋ง, ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์ค๊ฐ์ ํฌ๊ธฐํ๋ ๋ฐฉ์
- DP (๋์ ๊ณํ๋ฒ) โ ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ๋๋์ด์ ํด๊ฒฐํ๋ฉฐ ์ค๋ณต ๊ณ์ฐ์ ์ค์ด๊ณ , ์ด๋ฅผ ํฉ์นจ
- ๋ถํ ์ ๋ณต (Divdie and conquer) โ ์์ ๋ฌธ์ ๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ํด๊ฒฐํ ํ ํฉ์นจ
ERD ํ๋ค์๊ณผ ๋ฌด์์ธ์ง?
Entity-Relationship Diagram์ผ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์๊ฐ์ ์ผ๋ก ํํํ ๋ค์ด์ด๊ทธ๋จ
SQL๊ณผ NoSQL์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
SQL์ ์ ํด์ง ์คํค๋ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ๋ณต์กํ ์กฐ์ธ๊ณผ ํธ๋์ญ์ ์ฒ๋ฆฌ์ ๊ฐํ๋ฉฐ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ๊ณผ ๊ตฌ์กฐํ๊ฐ ์ค์ํ ์์คํ ์ ์ ํฉํฉ๋๋ค. ๋ํ์ ์ผ๋ก MySQL, PostgreSQL, Oracle ๋ฑ์ด ์์ต๋๋ค.
๋ฐ๋ฉด NoSQL์ ์ ์ฐํ ์คํค๋ง๋ฅผ ๊ฐ์ง๋ฉฐ ๋ฌธ์, ํค-๊ฐ, ์ปฌ๋ผ, ๊ทธ๋ํ ๋ฑ ๋ค์ํ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ์ํ ํ์ฅ์ฑ๊ณผ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐ์ ์ ๊ฐ์ง๋ฉฐ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ด๋ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ํฉํฉ๋๋ค. MongoDB, Redis, Cassandra ๋ฑ์ด ๋ํ์ ์ ๋๋ค.
์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง๋ฅผ ๋น๊ตํด์ ์ค๋ช ํด์ฃผ์ธ์.
- ์ฟ ํค โ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ผ๋ก, ๋ณดํต ์ธ์ฆ ์ ๋ณด๋ ์ฌ์ฉ์ ์ค์ ์ ์ ์งํ๋๋ฐ ์ฌ์ฉํ๋ค.
- ๋ก์ปฌ ์คํ ๋ฆฌ์ง โ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ๋ค.
- ์ธ์ ์คํ ๋ฆฌ์ง โ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ ๋๋ง๋ค ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ ํน์ง์ด ์์ด ์ผ์์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ ์ ํฉํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค(Index)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Index๋ ํ ์ด๋ธ์ ์ฒ์๋ถํฐ ๋๊น์ง ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ธ FTS(Full Table Scan)๊ณผ๋ ๋ฌ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ๊ฒ์ํ์ฌ ํด๋น ์๋ฃ์ ํ ์ด๋ธ์ ์์ธ์ค ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ธ๋ฑ์ค๋ ํญ์ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฐ์ ๊ฒ์ํ๋๋ฐ ๋น ๋ฅด์ง๋ง, ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ , ์์ ํ๋ ๊ฒฝ์ฐ์๋ ์ฟผ๋ฆฌ๋ฌธ ์คํ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
์ฆ, ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํ๊ณ ๊ทธ๋์ ๋ฐ์ดํฐ์ ๊ฒ์ ์๋๋ฅผ ๋์ด๋ ๊ธฐ๋ฅ์ด๋ผ ํ ์ ์์ต๋๋ค.
DBMS๊ฐ Index๋ฅผ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํ๊ณ ์๋์ง ์ค๋ช ํด์ฃผ์ธ์.
Index๋ ์ฃผ๋ก B+Tree ์ธ๋ฑ์ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์ ๋ ธ๋๊ฐ 2๊ฐ ์ด์์ธ B-Tree๋ฅผ ๊ฐ์ ์ํจ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, BTree ๋ฆฌํ๋ ธ๋๋ค์ LinkedList๋ก ์ฐ๊ฒฐํ์ฌ ์์ฐจ ๊ฒ์์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ํด์ ํ ์ด๋ธ๋ณด๋ค ๋์ O(log2N)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
DBMS๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์
DBMS(Database Management System)๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅ, ๊ด๋ฆฌ, ๊ฒ์ํ ์ ์๋๋ก ๋์์ฃผ๋ ์ํํธ์จ์ด๋ก, ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ, ์ผ๊ด์ฑ, ๋ณด์, ๋์์ฑ ์ ์ด ๋ฑ์ ๋ณด์ฅํ๋ฉฐ, ์ฟผ๋ฆฌ ์ธ์ด(SQL)๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋ํ์ ์ธ DBMS๋ก๋ MySQL, PostgreSQL, Oracle ๋ฑ์ด ์์ผ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ง์ ํ์ผ์ ์ ๊ทผํ์ง ์๊ณ DBMS๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ฒ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์์ ์ฑ๊ณผ ํจ์จ์ฑ์ ๋์ ๋๋ค.
ํธ๋์ญ์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
ํธ๋์ญ์ (Transaction)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋์ ์์ ๋จ์๋ก ์ฒ๋ฆฌ๋๋ ์ฐ์ฐ ๋ฌถ์์ผ๋ก, ๋ชจ๋ ์ฑ๊ณตํ๊ฑฐ๋ ๋ชจ๋ ์คํจํด์ผ ํ๋ ์์์ฑ์ ๊ฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ํ ์ด์ฒด์ฒ๋ผ ์ฌ๋ฌ ๋จ๊ณ์ ์์ ์ด ํ๋์ ๋ ผ๋ฆฌ์ ์์ ์ผ๋ก ์ํ๋์ด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํธ๋์ญ์ ์ ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ) ํน์ฑ์ ๋ฐ๋ผ์ผ ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์์คํ ์ฅ์ ๋ ๋์ ์ ๊ทผ ์ํฉ์์๋ ๋ฐ์ดํฐ์ ์ ๋ขฐ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๋ณด์ฅํฉ๋๋ค. DBMS๋ ํธ๋์ญ์ ์ ํตํด ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ค์๋ ์์ ํ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
ํธ๋์ญ์ ์ ์ํ๋ ์ด๋ค ๊ฒ์ด ์์๊น์?
ํธ๋์ญ์ ์ ์ํ๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋(Active), ๋ถ๋ถ ์๋ฃ(Partially Committed), ์ปค๋ฐ(Committed), ์คํจ(Failed), ์ฒ ํ(Aborted)์ ๋ค์ฏ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
์ฒ์ ํธ๋์ญ์ ์ด ์์๋๋ฉด ํ๋ ์ํ๊ฐ ๋๋ฉฐ, ์ฐ์ฐ์ด ์ ์์ ์ผ๋ก ์ํ๋๋ฉด ๋ถ๋ถ ์๋ฃ ์ํ๋ก ๋์ด๊ฐ๋๋ค. ์ดํ ์ปค๋ฐ ๋ช ๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด ์ปค๋ฐ ์ํ๋ก ์ ํ๋์ด ํธ๋์ญ์ ๊ฒฐ๊ณผ๊ฐ ์๊ตฌ ๋ฐ์๋ฉ๋๋ค. ๋ฐ๋ฉด ์ํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์คํจ ์ํ๊ฐ ๋๊ณ , ์ด๋ ๋ณต๊ตฌ ์์ ์ ํตํด ์ด์ ์ํ๋ก ๋๋๋ฆฌ๋ฉด ์ฒ ํ ์ํ๊ฐ ๋ฉ๋๋ค.
ํธ๋์ญ์ ๊ณ ๋ฆฝ ์์ค(Isolation Level)์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํด์ฃผ์ธ์.
ํธ๋์ญ์ ๊ณ ๋ฆฝ ์์ค์ ํธ๋์ญ์ ์์ ์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋๋ก ํ๋ ์์ค์ ๋๋ค.
DB๋ ACID ํน์ง๊ณผ ๊ฐ์ด ํธ๋์ญ์ ์ด ๋ ๋ฆฝ์ ์ธ ์ํ์ ํ๋๋ก ํด์ผํ๊ธฐ ๋๋ฌธ์, Lockin์ ํตํด ํธ๋์ญ์ ์ด DB๋ฅผ ๋ค๋ฃจ๋ ๋์์๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ด์ฌํ์ง ๋ชปํ๋๋ก ํด์ผํฉ๋๋ค.
ํ์ง๋ง ๋ฌด์กฐ๊ฑด์ ์ธ Locking์ผ๋ก ์๋ง์ ํธ๋์ญ์ ๋ค์ ์์๋๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ค๋ฉด DB์ ์ฑ๋ฅ์ ๋จ์ด์ง๊ฒ ๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ํจ์จ์ ์ธ Locking ๋ฐฉ๋ฒ์ธ ๊ณ ๋ฆฝ ์์ค์ ๋๋์ด ์ฒ๋ฆฌํ๊ฒ ํ๋ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
๊ต์ฐฉ์ํ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๊ต์ฐฉ์ํ(Deadlock)๋ ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์๋ก๊ฐ ์ ์ ํ ์์์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง๋ ํ์์ ๋งํฉ๋๋ค. ์ด๋ก ์ธํด ๊ฐ ํ๋ก์ธ์ค๋ ์์ ์ด ํ์ํ ์์์ ์ป์ง ๋ชปํ๊ณ , ์์คํ ์ ์ฒด์ ์์ ํ๋ฆ์ด ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค.
๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ ค๋ฉด ์ํธ ๋ฐฐ์ , ์ ์ ์ ๋๊ธฐ, ๋น์ ์ , ํํ ๋๊ธฐ์ ๋ค ๊ฐ์ง ์กฐ๊ฑด์ด ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ ์์ฒญ ์์ ์ง์ , ํ์์์ ์ค์ , ๊ต์ฐฉ ์ํ ํ์ง ๋ฐ ํ๋ณต, ์ํ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ ํํผ ๊ธฐ๋ฒ ๋ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค.
Inner Join๊ณผ Outer Join์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
Inner Join์ ๋ ํ ์ด๋ธ์์ ์กฐ๊ฑด์ ์ผ์นํ๋ ๊ต์งํฉ ๋ฐ์ดํฐ๋ง ์กฐํํ๋ ๋ฐฉ์์ผ๋ก, ๊ณตํต๋ ํค๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ๊ฒฐ๊ณผ์ ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ณ ๊ฐ๊ณผ ์ฃผ๋ฌธ ํ ์ด๋ธ์ Inner Joinํ๋ฉด, ์ฃผ๋ฌธ์ด ์๋ ๊ณ ๊ฐ๋ง ์กฐํ๋ฉ๋๋ค.
๋ฐ๋ฉด Outer Join์ ์กฐ๊ฑด์ ์ผ์นํ์ง ์์๋ ํ์ชฝ ๋๋ ์์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํฌํจ์ํค๋ ๋ฐฉ์์ ๋๋ค. Left Outer Join์ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ฉฐ ์ค๋ฅธ์ชฝ์ ๋งค์นญ๋๋ ๊ฐ์ด ์์ผ๋ฉด NULL์ ์ฑ์ฐ๊ณ , Right Outer Join์ ๊ทธ ๋ฐ๋, Full Outer Join์ ์์ชฝ ๋ชจ๋์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํด ์กฐ๊ฑด์ ์ผ์นํ์ง ์๋ ๋ถ๋ถ์ NULL๋ก ์ฑ์๋๋ค.
cascade์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
Cascade(์นด์ค์ผ์ด๋)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ถ๋ชจ ํ ์ด๋ธ์ ๋ณ๊ฒฝ(์ญ์ ๋๋ ์์ )์ด ์์ ํ ์ด๋ธ์ ์ฐ์์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น๋๋ก ์ค์ ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฃผ๋ก ์ธ๋ ํค(Foreign Key) ์ ์ฝ ์กฐ๊ฑด๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์๋์ผ๋ก ์ ์งํ ์ ์๊ฒ ํด์ค๋๋ค.
์๋ฅผ ๋ค์ด ON DELETE CASCADE
๋ฅผ ์ค์ ํ๋ฉด ๋ถ๋ชจ ํ
์ด๋ธ์ ํ์ด ์ญ์ ๋ ๋ ํด๋น ํค๋ฅผ ์ฐธ์กฐํ๋ ์์ ํ
์ด๋ธ์ ํ๋ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค. ๋ฐ๋๋ก ON UPDATE CASCADE
๋ ๋ถ๋ชจ ํ
์ด๋ธ์ ํค ๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์์ ํ
์ด๋ธ์ ์ธ๋ ํค๋ ํจ๊ป ์์ ๋ฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๋ ์ ๋ฆฌ ์์ด๋ ๊ด๊ณํ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์์์น ๋ชปํ ๋๋ ์ญ์ ๋ ์์ ์ด ๋ฐ์ํ ์ ์์ด ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
์ํผํค, ํ๋ณดํค, ๋์ฒดํค, ๊ธฐ๋ณธํค, ์ธ๋ํค์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- Super key : ์ ์ผ์ฑ O, ์ต์์ฑ X
- Candidate key : ์ ์ผ์ฑ O, ์ต์์ฑ O (ํค์ ์งํฉ์์ ํ๋๋ผ๋ ์ญ์ ํ๋ฉด ์ ์ผ์ฑ ๋ง์กฑํ์ง ๋ชปํ๋ ์ฑ์ง)
- Primary key : ํ๋ณด ํค ์ค์์ ์ ์ ๋ ํค. ์ ์ผ์ฑ O, ์ต์์ฑ O / Null๊ฐ ๊ฐ์ง์ ์๋ค
- Alternate Key : ํ๋ณด ํค์์ ๊ธฐ๋ณธํค๋ฅผ ๋บ ๋ชจ๋ ํ๋ณด ํค
- Foreign Key : ๋ค๋ฅธ ํ ์ด๋ธ์ Primary key๋ฅผ ์ฐธ์กฐํ๋ ์ปฌ๋ผ
ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํด์ฃผ์ธ์
ํธ๋ฆฌ๊ฑฐ(Trigger)๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ด๋ฒคํธ(INSERT, UPDATE, DELETE)**๊ฐ ๋ฐ์ํ์ ๋ **์๋์ผ๋ก ์คํ๋๋ ์ฌ์ฉ์ ์ ์ ํ๋ก์์ **์ ๋๋ค. ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ํธ์ถํ์ง ์์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์๋ ์คํ๋๋ฉฐ, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง๋ ๋ก๊ทธ ๊ธฐ๋ก, ๊ด๋ จ ํ ์ด๋ธ ๋๊ธฐํ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
ํธ๋ฆฌ๊ฑฐ๋ BEFORE ๋๋ AFTER ์ต์ ์ ํตํด ์ด๋ฒคํธ ๋ฐ์ ์์ ์ ์ง์ ํ ์ ์์ผ๋ฉฐ, ์ฅ์ ์ผ๋ก๋ ๋ฐ๋ณต์ ์ธ ์์ ์๋ํ์ ๋ฐ์ดํฐ ๋ณดํธ๊ฐ ์์ง๋ง, ๋ณต์กํ ๋ก์ง์ ์ฑ๋ฅ ์ ํ์ ๋๋ฒ๊น ์ด๋ ค์์ ์ด๋ํ ์ ์์ด ์ ์คํ๊ฒ ์ค๊ณํด์ผ ํฉ๋๋ค.
์ ๊ทํ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ๊ณผ์ ์์ ๋ฐ์ดํฐ ์ค๋ณต์ ์ต์ํํ๊ณ , ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ์ฝ์ /๊ฐฑ์ /์ญ์ ์ด์์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ โ ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ โ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์ ์ง
- ์ฝ์ ยท๊ฐฑ์ ยท์ญ์ ์ด์ ๋ฐฉ์ง โ ๋น์ ์์ ์ธ ๋ฐ์ดํฐ ์กฐ์ ๋ฐฉ์ง
- ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ์ง๋ณด์ ์ฉ์ด โ ๋ณ๊ฒฝ์ด ์์ด๋ ๊ตฌ์กฐ์ ์ผ๋ก ์์ ์
- ์ ๊ทํ์ ๋จ๊ณ
- ์ ๊ทํ๋ 1NF โ 2NF โ 3NF โ BCNF โ 4NF โ 5NF ์์ผ๋ก ์งํ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก 3NF ๋๋ BCNF๊น์ง๋ง ์ ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ฌด๊ฒฐ์ฑ์ด ๋ฌด์์ธ๊ฐ์?
๋ฌด๊ฒฐ์ฑ(Integrity)์ ๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์ผ๊ด๋๋ฉฐ, ์ธ๊ฐ๋์ง ์์ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์ง ์์์์ ๋ณด์ฅํ๋ ์ฑ์ง์ ๋งํฉ๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์์คํ ๋ณด์์์ ์ฌ์ฉ๋๋ฉฐ, ์ ๋ณด๊ฐ ์์๋๊ฑฐ๋ ์ค๋ฅ ์์ด ์ ๋ขฐํ ์ ์๋ ์ํ๋ก ์ ์ง๋๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ, ์ํฐํฐ ๋ฌด๊ฒฐ์ฑ, ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ ํตํด ์๋ชป๋ ๋ฐ์ดํฐ ์ ๋ ฅ์ด๋ ๊ฐฑ์ ์ ๋ฐฉ์งํ๊ณ , ์์คํ ์์๋ ํด์๊ฐ์ด๋ ์ ๊ทผ ์ ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ฌด๋จ ๋ณ๊ฒฝ์ ๋ง์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
์ ๊ทํ์ ๋ชฉ์ ๊ณผ ๋จ๊ณ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- ์ ๊ทํ์ ๋ชฉ์
- ๋ฐ์ดํฐ ์ค๋ณต ์ต์ํ โ ์ ์ฅ ๊ณต๊ฐ ์ ์ฝ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ โ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์ ์ง
- ์ฝ์ ยท๊ฐฑ์ ยท์ญ์ ์ด์ ๋ฐฉ์ง โ ๋น์ ์์ ์ธ ๋ฐ์ดํฐ ์กฐ์ ๋ฐฉ์ง
- ๋ฐ์ดํฐ ๋ชจ๋ธ ์ ์ง๋ณด์ ์ฉ์ด โ ๋ณ๊ฒฝ์ด ์์ด๋ ๊ตฌ์กฐ์ ์ผ๋ก ์์ ์
- ์ ๊ทํ์ ๋จ๊ณ
- ์ ๊ทํ๋ 1NF โ 2NF โ 3NF โ BCNF โ 4NF โ 5NF ์์ผ๋ก ์งํ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก 3NF ๋๋ BCNF๊น์ง๋ง ์ ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด์ํ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
์ด์ํ์(Anomaly)์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์ด๋ธ ์ค๊ณ๊ฐ ๋น์ ๊ทํ๋์ด ์์ ๋ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ๋ถ์ผ์น๋ ๋นํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋ฌธ์ ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ฃผ๋ก ์ฝ์ ์ด์, ์ญ์ ์ด์, ๊ฐฑ์ ์ด์ ์ธ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
์ฝ์ ์ด์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ํจ๊ป ์ ๋ ฅํด์ผ๋ง ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฌธ์ ์ด๊ณ , ์ญ์ ์ด์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ ๊ด๋ จ ์๋ ์ ๋ณด๊น์ง ํจ๊ป ์ฌ๋ผ์ง๋ ๋ฌธ์ ์ ๋๋ค. ๊ฐฑ์ ์ด์์ ๋์ผํ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ๊ณณ์ ์ค๋ณต๋์ด ์์ ๋, ์ผ๋ถ๋ง ์์ ๋์ด ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๊ทํ๋ฅผ ํตํด ํ ์ด๋ธ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ถํดํ๊ณ , ๋ฐ์ดํฐ์ ์ค๋ณต๊ณผ ์ข ์์ฑ์ ์ค์ด๋ ์์ ์ด ํ์ํฉ๋๋ค.
NoSQL์ ์ฅ๋จ์ ์?
NoSQL์ ์ฅ์ ์ ๋จผ์ ์ ์ฐํ ์คํค๋ง ๊ตฌ์กฐ๋ก, ์ ํด์ง ํ ์ด๋ธ ์์ด ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ฅํ ์ ์์ด ๋น์ ํ ๋๋ ๋ฐ์ ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ ๋ฆฌํฉ๋๋ค. ๋ํ ์ํ ํ์ฅ์ด ์ฌ์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ ํฉํ๊ณ , ์ฑ๋ฅ์ด ๋ฐ์ด๋ ๋น ๋ฅธ ์ฝ๊ธฐยท์ฐ๊ธฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋จ์ ์ผ๋ก๋ ๋ณต์กํ ๊ด๊ณ ํํ์ด ์ด๋ ต๊ณ ์กฐ์ธ์ด ์ ํ์ ์ด๋ฉฐ, ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด๋ ํธ๋์ญ์ ์ฒ๋ฆฌ์์ RDBMS์ ๋นํด ์ฝํ ์ผ๊ด์ฑ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์ฃผ ๋ฐ๋๊ฑฐ๋ ํ์ฅ์ด ํ์ํ ์์คํ ์๋ ์ ํฉํ์ง๋ง, ์ ํฉ์ฑ์ด ์ค์ํ ๊ธ์ต ๋ฑ์์๋ ๋ถ์ ํฉํ ์ ์์ต๋๋ค.
Statement vs PreparedStatement ๋ฅผ ๋น๊ตํด์ฃผ์ธ์.
- Statement๋ ์คํํ ๋๋ง๋ค SQL์ ์ปดํ์ผํ๋ฏ๋ก ๋ฐ๋ณต ์คํ ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๊ณ , SQL Injection ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค.
- PreparedStatement: ๋ฏธ๋ฆฌ SQL์ ์ปดํ์ผ ํ ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ธ๋ฉํ์ฌ ์คํํ๋ฏ๋ก ์ฌ์ฌ์ฉ์ฑ์ด ๋๊ณ , ๋ณด์์ SQL Injection์ ๋ฐฉ์งํ ์ ์๋ค.
์ด์์ฒด์ ๋ ๋ฌด์์ธ๊ฐ์?
ํ๋ก๊ทธ๋จ๋ค์๊ฒ ์์์ ํ ๋นํด์ฃผ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์คํ๋๋๋ก ๋๋ ํ๋ก๊ทธ๋จ. ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์ ์คํ๋๊ธฐ ์ํด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์์ด์ผํ๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ปค๋ ์์ญ์ ์ ์ฌ๋์ด ์๋ค. ์น๋ธ๋ผ์ฐ์ , ๊ฒ์, ๋ฉ๋ชจ์ฅ ๊ฐ์ ์ผ๋ฐ์ ์ธ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ์ฌ์ฉ์ ์์ญ์ ์ ์ฌ๋๋ค.
์ด์์ฒด์ ๋ฅผ ์์์ผ ํ๋ ์ด์ ๊ฐ ๋ญ๊น์?
์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ ์ํ ํ๋ก๊ทธ๋จ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฐ๋ฐ์๋ ์ด์์ฒด์ ๋ฅผ ์์์ผํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ํํ ๋์์ ๋ฐ์์ ์คํ๋๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ด์์ฒด์ ๊ฐ ๊ฐ์ฅ ๋จผ์ ์์์ฑ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ํ ๊ทผ์์ ์ธ ํ๋ก๊ทธ๋จ์ธ ์ด์์ฒด์ ๋ฅผ ์ ์์์ผ ํ๋ค.
CPU๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ํ๋์จ์ด๋ค์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๋์ ์ํ๊ณ ๋์ด๋ค. ํ์ง๋ง ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋จ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ๋ฉ์ธ์ง๋ฅผ ํตํด ๋ํํ ์ ์๋ค.
๋ฎคํ ์ค์ ์ธ๋งํฌ์ด์ ์ฐจ์ด
- ๋ฎคํ ์ค : ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์ ๊ทผ ๊ฐ๋ฅํ ์ ๊ธ ๋ฉ์ปค๋์ฆ. ์์ ๊ถ ๊ฐ๋ ์ด ์์ด ์ ๊ธ์ ํ๋ํ ์ค๋ ๋๋ง ํด์ ํ ์ ์๋ค. ์ด์ง(0 ๋๋ 1) ์ํ๋ง ๊ฐ์ง๊ฒ๋๋ค.
- ์ธ๋งํฌ : ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ ๊ทผํ ์ ์๋ ์นด์ดํฐ ๊ธฐ๋ฐ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ. ์์ ๊ถ ๊ฐ๋ ์ด ์์ด ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ธ๋งํฌ๋ฅผ ํด์ ํ ์ ์๊ณ , ์ฌ๋ฌ ๊ฐ์ ์์์ ๊ด๋ฆฌํ ์ ์๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น๋ฐฉ์์ ์ฌ๋ฌ ๋ฐฉ์๋ค์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
- ๊ณ ์ ๋ถํ (Fixed Partition):
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ ์ ๋ ํฌ๊ธฐ์ ํํฐ์ ์ผ๋ก ๋๋์ด ํ ๋น
- ๋ด๋ถ ๋จํธํ(Internal Fragmentation) ๋ฐ์
- ๊ฐ๋ณ ๋ถํ (Variable Partition):
- ํ๋ก์ธ์ค ํฌ๊ธฐ์ ๋ง๊ฒ ํ์ํ ๋งํผ๋ง ๋์ ์ผ๋ก ํ ๋น
- ์ธ๋ถ ๋จํธํ(External Fragmentation) ๋ฐ์
- ํ์ด์ง (Paging):
- ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ ๊ณ ์ ํฌ๊ธฐ์ ํ๋ ์์ผ๋ก, ๋ ผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ ํ์ด์ง๋ก ๋ถํ
- ํ์ด์ง ํ ์ด๋ธ๋ก ์ฃผ์ ๋ณํ ๊ด๋ฆฌ
- ๋ด๋ถ ๋จํธํ ๋ฐ์
- ์ธ๊ทธ๋ฉํ
์ด์
(Segmentation):
- ํ๋ก๊ทธ๋จ์ ๋ ผ๋ฆฌ์ ๋จ์(์ฝ๋, ๋ฐ์ดํฐ, ์คํ ๋ฑ)๋ณ๋ก ๋ถํ
- ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ๋ก ์ฃผ์ ๋ณํ
- ์ธ๋ถ ๋จํธํ ๋ฐ์
- ํ์ด์ง๋ ์ธ๊ทธ๋ฉํ
์ด์
(Paged Segmentation):
- ์ธ๊ทธ๋จผํธ๋ฅผ ํ์ด์ง ๋จ์๋ก ๋๋์ด ๊ด๋ฆฌ
- ๋ ๋ฐฉ์์ ์ฅ์ ๊ฒฐํฉ
ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
- Process : ์ด์์ฒด์ ๋ก๋ถํฐ ์์์ ํ ๋น๋ฐ์ ์์ ์ ๋จ์
- Thread : ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ฐ์ ์์์ ์ด์ฉํ๋ ์คํ ํ๋ฆ์ ๋จ์
ํ๋์ ํ๋ก์ธ์ค์์ ์ค๋ ๋๋ค์ ๊ฐ๊ฐ stack์์ญ๋ง ๋ฐ๋ก ํ ๋น๋ฐ๊ณ code, data, heap์์ญ์ ๊ณต์ ํฉ๋๋ค.
๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
Multi-Process : ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์์ (task)์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฅ์ : ํ๋์ ์์ ํ๋ก์ธ์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์ํฅ์ด ์ ํ๋์ง ์์
- ๋จ์ : ์ฆ์ Context Switching์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๊ณ , ํ๋ก์ธ์ค ์ฌ์ด ํต์ ์ด ์ด๋ ค์(IPC)
Multi-Thread : ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ ์ค๋ ๋๊ฐ ํ๋์ ์์ (task)์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฅ์ : ์์คํ ์์ ํจ์จ์ฑ ์ฆ๊ฐ, ์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์, ์์ ๊ณต์
- ๋จ์ : ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค์ ์ํฅ์ด ๊ฐ, ์์ ๊ณต์ ๋ก ์ธํ ๋๊ธฐํ ๋ฌธ์ , ๋๋ฒ๊น ์ด ๊น๋ค๋ก์
๋ด๋ถ๋จํธํ์ ์ธ๋ถ๋จํธํ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๋ด๋ถ ๋จํธํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณ ์ ํฌ๊ธฐ๋ก ๋ถํ ํ ๋, ์ค์ ์ฌ์ฉ๋๋ ๊ณต๊ฐ๋ณด๋ค ํฐ ๋ธ๋ก์ด ํ ๋น๋์ด ๋จ๋ ๊ณต๊ฐ์ด ๋ธ๋ก ๋ด๋ถ์ ๋ญ๋น๋๋ ํ์์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด 100KB์ง๋ฆฌ ๋ธ๋ก์ 70KB๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋จ์ 30KB๋ ๋ด๋ถ ๋จํธํ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
๋ฐ๋ฉด ์ธ๋ถ ๋จํธํ๋ ๊ฐ๋ณ ํฌ๊ธฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์, ์ฌ์ฉํ์ง ๋ชปํ๋ ์์ ๋น ๊ณต๊ฐ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณณ๊ณณ์ ํฉ์ด์ ธ ์ ์ฒด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๋ ์ถฉ๋ถํด๋ ํฐ ๋ธ๋ก์ ํ ๋นํ์ง ๋ชปํ๋ ํ์์ ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ฑ ๋ถ์กฑ์์ ๋ฐ์ํ๋ฉฐ, ์์ถ(compaction) ๋ฑ์ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๊ธฐ๋ ํฉ๋๋ค.
๋ฐ๋๋ฝ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๋ฐ๋๋ฝ(Deadlock)์ ๋ ์ด์์ ํ๋ก์ธ์ค๊ฐ ์๋ก๊ฐ ๊ฐ์ง ์์์ ์ ์ ํ ์ฑ ์๋ก์ ์์์ด ํ๋ฆฌ๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ๋ฌดํ ๋๊ธฐ ์ํ์ ๋น ์ง๋ ํ์์ ๋งํฉ๋๋ค. ์ด๋ก ์ธํด ํด๋น ํ๋ก์ธ์ค๋ค์ ๋ ์ด์ ์งํ๋์ง ์๊ณ , ์์คํ ์ ์ฒด์ ์์ ํ๋ฆ์ด ๋ฉ์ถ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ ค๋ฉด ์ํธ ๋ฐฐ์ , ์ ์ ์ ๋๊ธฐ, ๋น์ ์ , ํํ ๋๊ธฐ๋ผ๋ ๋ค ๊ฐ์ง ์กฐ๊ฑด์ด ๋ชจ๋ ๋ง์กฑํด์ผ ํ๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ์์ ๊ณ ์ , ํ์์์, ๊ต์ฐฉ ํํผ ์๊ณ ๋ฆฌ์ฆ(์: ์ํ๊ฐ ์๊ณ ๋ฆฌ์ฆ) ๋ฑ์ ์ฌ์ฉํฉ๋๋ค.
๋ฐ๋๋ฝ์ 4๊ฐ์ง ์กฐ๊ฑด๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๋ฐ๋๋ฝ์ด ๋ฐ์ํ๊ธฐ ์ํด์๋ ๋ค์์ 4๊ฐ์ง ์กฐ๊ฑด์ด ๋ชจ๋ ๋ง์กฑ๋์ด์ผ ํฉ๋๋ค.
- ์ํธ ๋ฐฐ์ (Mutual Exclusion): ์์์ ๋์์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ฌ์ฉํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์ ์ ์ ๋๊ธฐ(Hold and Wait): ์์์ ์ ์ ํ ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์์ด์ผ ํฉ๋๋ค.
- ๋น์ ์ (No Preemption): ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ์ ์ ์ค์ธ ์์์ ๊ฐ์ ๋ก ๋นผ์์ ์ ์์ด์ผ ํฉ๋๋ค.
- ํํ ๋๊ธฐ(Circular Wait): ํ๋ก์ธ์ค๋ค์ด ์์์ ์ํ์ ์ผ๋ก ๊ธฐ๋ค๋ฆฌ๋ ํํ์ฌ์ผ ํฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์กฐ๊ฑด ์ค ํ๋ ์ด์์ ์ฌ์ ์ ์ ๊ฑฐํ๊ฑฐ๋ ํํผํ๋ ๋ฐฉ์์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ ์์ฒญ ์์๋ฅผ ๊ณ ์ ํด ํํ ๋๊ธฐ๋ฅผ ๋ฐฉ์งํ๊ฑฐ๋, ์ํ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ฒ๋ผ ์์ ์ํ๋ง ํ์ฉํด ๊ต์ฐฉ ์ํ๋ฅผ ํํผํ ์ ์์ต๋๋ค. ๋ํ ํ์์์, ์์ ์ ์ , ๊ต์ฐฉ ์ํ ํ์ง ๋ฐ ๋ณต๊ตฌ ๊ฐ์ ์คํ ์ค ๋์ ๋ฐฉ์๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ด์ง ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์
ํ์ด์ง ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์์ ํ์ด์ง ๊ต์ฒด๊ฐ ํ์ํ ๋ ์ด๋ค ํ์ด์ง๋ฅผ ์ ๊ฑฐํ ์ง ๊ฒฐ์ ํ๋ ๋ฐฉ์์ผ๋ก, ์ ํ๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ๋ชฉ์ ์ด ์์ต๋๋ค. ํ๋ก์ธ์ค๊ฐ ํ์ํ ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๊ฒฝ์ฐ ํ์ด์ง ๋ถ์ฌ(Page Fault)๊ฐ ๋ฐ์ํ๋ฉฐ, ์ด๋ ์ ์ ํ ํ์ด์ง๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ก์ด ํ์ด์ง๋ฅผ ์ ์ฌํด์ผ ํฉ๋๋ค.
๋ํ์ ์ธ ํ์ด์ง ์๊ณ ๋ฆฌ์ฆ์๋ FIFO(์ ์ ์ ์ถ), LRU(Least Recently Used), Optimal(์ต์ ), LFU(Least Frequently Used) ๋ฑ์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ ๊ต์ฒด ๊ธฐ์ค์ด ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด LRU๋ ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ์ ๊ฑฐํ๊ณ , Optimal์ ์์ผ๋ก ๊ฐ์ฅ ์ค๋ซ๋์ ์ฌ์ฉ๋์ง ์์ ํ์ด์ง๋ฅผ ์ ๊ฑฐํ์ง๋ง ์ค์ ๊ตฌํ์ ์ด๋ ต์ต๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ๋ค์ ํ์ด์ง ๋ถ์ฌ์จ์ ๋ฎ์ถ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ํจ์จ์ ๋์ด๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
์ค์ผ์ฅด ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์๋๋๋ก ์ค๋ช ํด์ฃผ์ธ์
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ CPU์ ๊ฐ์ ์์คํ ์์์ ์ฌ๋ฌ ํ๋ก์ธ์ค์ ๊ณต์ ํ๊ณ ํจ์จ์ ์ผ๋ก ๋ถ๋ฐฐํ๊ธฐ ์ํ ์ ์ฑ ์ผ๋ก, ์ด์์ฒด์ ์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ ๋๋ค. ํ๋ก์ธ์ค ์ํ, ์ฐ์ ์์, ์คํ ์๊ฐ ๋ฑ์ ๊ณ ๋ คํด ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ์ธ์ ์คํํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ FCFS(First Come First Serve), SJF(Shortest Job First), Priority Scheduling, Round Robin, MLFQ(Multi-Level Feedback Queue) ๋ฑ์ด ์์ต๋๋ค. FCFS๋ ๋จ์ํ์ง๋ง ๊ธด ๋๊ธฐ์๊ฐ์ด ๋ฐ์ํ ์ ์๊ณ , SJF๋ ํ๊ท ๋๊ธฐ์๊ฐ์ด ์งง์ง๋ง ์คํ ์๊ฐ ์์ธก์ด ์ด๋ ต์ต๋๋ค. Round Robin์ ์๋ถํ ๋ฐฉ์์ผ๋ก ๊ณต์ ์ฑ์ ๋ณด์ฅํ๋ฉฐ, MLFQ๋ ์ฐ์ ์์์ ์๊ฐ ํ ๋น์ ์กฐ์ ํด ๋ค์ํ ์์ ์ ์ ์ฐํ๊ฒ ๋์ํฉ๋๋ค.
starvation๊ณผ convoy effect์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
Starvation(๊ธฐ์ ํ์)์ ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค๊ฐ ์์์ ์ฅ๊ธฐ๊ฐ ํ ๋น๋ฐ์ง ๋ชปํด ์๊ตฌ์ ์ผ๋ก ์คํ๋์ง ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ์ด๋ ์ฐ์ ์์ ๊ธฐ๋ฐ ์ค์ผ์ค๋ง์์ ๋์ ์ฐ์ ์์ ์์ ์ด ๊ณ์ ๋ค์ด์ฌ ๊ฒฝ์ฐ ๋ฎ์ ์ฐ์ ์์ ์์ ์ด ๊ณ์ ๋ฐ๋ ค ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ฉด Convoy Effect(ํธ์ ํจ๊ณผ)๋ ํ๋์ ๊ธด ์์ ์ด ์์์ ์ ์ ํ ๋์, ์งง์ ์์ ๋ค์ด ์ค์ค์ด ๋๊ธฐํ๋ฉฐ ์ ์ฒด ์์คํ ํจ์จ์ด ์ ํ๋๋ ํ์์ ๋๋ค. ์ด๋ ์ฃผ๋ก FCFS ๊ฐ์ ์ ์ ์ ์ถ ์ค์ผ์ค๋ง์์ ๋ฐ์ํ๋ฉฐ, ํ ์์ ์ด ๋๋ ๋๊น์ง ๋๋จธ์ง๋ค์ด ๋ฌถ์ฌ ๊ธฐ๋ค๋ฆฌ๋ ๊ตฌ์กฐ์ ๋ณ๋ชฉ์ด ์์ธ์ ๋๋ค.
์บ์ํํธ์ ์บ์๋ฏธ์ค์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
์บ์ ํํธ(Cache Hit)๋ CPU๊ฐ ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์กด์ฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ ์บ์์ ์ฅ์ ์ธ ์๋ ํฅ์์ด ๊ทน๋ํ๋๋ฉฐ, ์์คํ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
๋ฐ๋ฉด ์บ์ ๋ฏธ์ค(Cache Miss)๋ ์์ฒญํ ๋ฐ์ดํฐ๊ฐ ์บ์์ ์์ด์ ํ์ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต(์: RAM ๋๋ ๋์คํฌ)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ๋ก, ์ ๊ทผ ์๊ฐ์ด ๊ธธ์ด์ ธ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํฉ๋๋ค. ์บ์ ๋ฏธ์ค๋ ์ข ๋ฅ์ ๋ฐ๋ผ ์ปดํ์๋ฆฌ(์ด๊ธฐ ์ ๊ทผ), ์บํจ์ํฐ(์บ์ ์ฉ๋ ๋ถ์กฑ), ์ปจํ๋ฆญํธ(์ถฉ๋) ๋ฏธ์ค๋ก ๋๋๋ฉฐ, ์บ์ ํจ์จ์ ๋์ด๊ธฐ ์ํด ๊ต์ฒด ์ ์ฑ ์ด๋ ์บ์ ํฌ๊ธฐ ์กฐ์ ๋ฑ์ด ํ์ํฉ๋๋ค.
ํ๋ก์ธ์ค ๋๊ธฐํ๋ ๋ญ๊ฐ์?
ํ๋ก์ธ์ค ๋๊ธฐํ๋ ๋ ์ด์์ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ณต์ ์์์ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์ํ ์ ์๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ , ์ฌ๋ฐ๋ฅธ ์คํ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์ ์ด ๊ธฐ๋ฒ์ ๋๋ค. ์ฃผ๋ก ์๊ณ ๊ตฌ์ญ(Critical Section) ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ๋๊ธฐํ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ๊ณผ ์ ํ์ฑ์ ์ ์งํฉ๋๋ค.
์ด๋ฅผ ์ํด ๋ฎคํ ์ค(Mutex), ์ธ๋งํฌ์ด(Semaphore), ๋ชจ๋ํฐ(Monitor) ๋ฑ์ ๋๊ธฐํ ๋๊ตฌ๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์๋ชป๋ ๋๊ธฐํ๋ ๊ต์ฐฉ ์ํ๋ ๋ฌดํ ๋๊ธฐ ๋ฑ์ ๋ฌธ์ ๋ฅผ ์ ๋ฐํ ์ ์์ด, ์ ์ ํ ์ค๊ณ์ ๊ตฌํ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
busy waiting์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
Busy Waiting์ ํ๋ก์ธ์ค๊ฐ ์ํ๋ ์์์ ์ป๊ธฐ ์ํด ๊ณ์ํด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ์ํ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก, ์์์ ์ป์ ๋๊น์ง CPU๋ฅผ ์ ์ ํ ์ฑ ๋๊ธฐํ๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณต์ ์์์ด ์ฌ์ฉ ์ค์ผ ๋ ์ ๊ธ์ด ํ๋ฆด ๋๊น์ง ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ ์ํฉ์ด ์ด์ ํด๋นํฉ๋๋ค.
์ด ๋ฐฉ์์ ๊ตฌํ์ด ๋จ์ํ๊ณ ๋น ๋ฅด์ง๋ง, CPU ์์์ ๋ญ๋นํ๋ฏ๋ก ํจ์จ์ด ๋ฎ๊ณ , ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด์์ฒด์ ๋ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์์๋ ๋ณดํต Busy Waiting ๋์ ๋ธ๋กํน ๊ธฐ๋ฐ ๋๊ธฐ ๋ฐฉ์์ ์ ํธํฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค์ ์ฐจ์ด๋?
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด์ ์นด์ดํ ์ธ๋งํฌ์ด๋ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ๊ฐ์ง๋ง, ์นด์ดํฐ ๊ฐ์ ๋ฒ์์ ์ฉ๋์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด๋ ๊ฐ์ด 0 ๋๋ 1๋ง ๊ฐ์ง ์ ์์ด, ๋จ์ผ ์์ ์ ์ด ๋๋ ์ค๋ ๋ ๊ฐ ์ ํธ ์ ๋ฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ง์น ๋ฎคํ ์ค์ฒ๋ผ ํ๋์ ์์์ ๋ํ ์ ๊ทผ์ ์ ์ดํ ์ ์์ง๋ง, ์์ ๊ถ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ์ค๋ ๋๋ ํด์ (signal)ํ ์ ์๋ค๋ ์ ์ด ๋ค๋ฆ ๋๋ค.
๋ฐ๋ฉด ์นด์ดํ ์ธ๋งํฌ์ด๋ 0 ์ด์์ ์ ์ ๊ฐ์ ๊ฐ์ง๋ฉฐ, ์ฌ๋ฌ ์์์ ๋ํ ์ ๊ทผ์ ๋์์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์์ด 3๊ฐ๋ผ๋ฉด ์ด๊ธฐ๊ฐ์ 3์ผ๋ก ๋๊ณ , ๋์์ ์ต๋ 3๊ฐ์ ์ค๋ ๋๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ ์ดํ ์ ์์ต๋๋ค.
์์ฝํ์๋ฉด, ๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด๋ ๋จ์ผ ์์์ฉ, ์นด์ดํ ์ธ๋งํฌ์ด๋ ๋ค์ค ์์์ฉ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ด๋๋ฆฌ๋ ๋ฎคํ ์ค์ ๋น์ทํ์ง๋ง ์์ ๊ถ ์์ด ๋ ์ ์ฐํ๋ค๋ ํน์ง์ด ์์ต๋๋ค.
(์นด์ดํ )์ธ๋งํฌ์ด์ ๋ฎคํ ์ค์ ์ฐจ์ด๋?
- Mutex๋ ๋๊ธฐํ ๋์์ด ์ค์งย 1๊ฐ์ผ ๋ ์ฌ์ฉํ๋ฉฐ,ย Semaphore๋ ๋๊ธฐํ ๋์์ด 1๊ฐ ์ด์์ผ ๋ ์ฌ์ฉํฉ๋๋ค.
- Mutex๋ ์์์ ์์ ํ ์ ์๊ณ , ์ฑ ์์ ๊ฐ์ง๋ ๋ฐ๋ฉดย Semaphore๋ ์์ ์์ ๊ฐ ๋ถ๊ฐํฉ๋๋ค.
- Mutex๋ ์ํ๊ฐ 0, 1 ๋ฟ์ด๋ฏ๋ก Lock์ ๊ฐ์ง ์ ์๊ณ , ์์ ํ๊ณ ์๋ ์ค๋ ๋๋ง์ด ์ด Mutex๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉดย Semaphore๋ Semaphore๋ฅผ ์์ ํ์ง ์๋ ์ค๋ ๋๊ฐ Semaphore๋ฅผ ํด์ ํ ์ ์์ต๋๋ค.
- Semaphore๋ ์์คํ ๋ฒ์์ ๊ฑธ์ณ ์๊ณ , ํ์ผ ์์คํ ์์ ํ์ผ๋ก ์กด์ฌํฉ๋๋ค. ๋ฐ๋ฉด, Mutex๋ ํ๋ก์ธ์ค์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ํ๋ก์ธ์ค ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก Clean up ๋ฉ๋๋ค.
๋ฐ์ด๋๋ฆฌ ์ธ๋งํฌ์ด์ ๋ฎคํ ์ค์ ์ฐจ์ด๋?
- Mutex๋ ๋๊ธฐํ ๋์์ด ์ค์งย 1๊ฐ์ผ ๋ ์ฌ์ฉํ๋ฉฐ,ย Binary Semaphore๋ ๋ง์ฐฌ๊ฐ์ง๋ก 1๊ฐ์ ์์์ ์ฌ์ฉ๋์ง๋ง, ์ฃผ๋ก ์ค๋ ๋ ๊ฐ ์ ํธ ์ ๋ฌ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- Mutex๋ ์์์ ์์ ํ ์ ์๊ณ , ์ฑ ์์ ๊ฐ์ง๋ ๋ฐ๋ฉดย Binary Semaphore๋ ์์ ์์ ๊ฐ๋ ์ด ์์ผ๋ฉฐ, ์์ ํ์ง ์์ ์ค๋ ๋๋ ํด์ ํ ์ ์์ต๋๋ค.
- Mutex๋ ์ํ๊ฐ 0, 1 ๋ฟ์ด๋ฏ๋ก Lock์ ๊ฐ์ง ์ ์๊ณ , ๋ฝ์ ์์ ํ ์ค๋ ๋๋ง์ด ์ด Mutex๋ฅผ ํด์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด Binary Semaphore๋ ์์ ๊ถ์ด ์์ด ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํด์ (signal)ํ ์ ์์ต๋๋ค.
- Binary Semaphore๋ ์์คํ ๋ฒ์์ ๊ฑธ์ณ ์๊ณ , ํ์ผ ์์คํ ์์ ํ์ผ๋ก ์กด์ฌํฉ๋๋ค. ๋ฐ๋ฉด, Mutex๋ ํ๋ก์ธ์ค์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉฐ ํ๋ก์ธ์ค ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก Clean up ๋ฉ๋๋ค.
๊ฐ์ ๋ฉ๋ชจ๋ฆฌ (Virtual Memory)์ ๋ํด ์ค๋ช ํด ์ฃผ์ธ์.
Multi-Process : ํ๋์ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์์ (task)์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฅ์ : ํ๋์ ์์ ํ๋ก์ธ์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์ํฅ์ด ์ ํ๋์ง ์์
- ๋จ์ : ์ฆ์ Context Switching์ผ๋ก ์ธํ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๊ณ , ํ๋ก์ธ์ค ์ฌ์ด ํต์ ์ด ์ด๋ ค์(IPC)
Multi-Thread : ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ ์ค๋ ๋๊ฐ ํ๋์ ์์ (task)์ ์ฒ๋ฆฌํ๋ ๊ฒ
- ์ฅ์ : ์์คํ ์์ ํจ์จ์ฑ ์ฆ๊ฐ, ์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์, ์์ ๊ณต์
- ๋จ์ : ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค์ ์ํฅ์ด ๊ฐ, ์์ ๊ณต์ ๋ก ์ธํ ๋๊ธฐํ ๋ฌธ์ , ๋๋ฒ๊น ์ด ๊น๋ค๋ก์
ํ๋ก์ธ์ค์ ์ํ์ ์ด๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
- New โ Ready: ํ๋ก์ธ์ค ์์ฑ ํ ์ค๋น ์ํ๋ก ์ ์ด
- Ready โ Running: CPU ์ค์ผ์ค๋ฌ์ ์ํด ์ ํ๋์ด ์คํ
- Running โ Ready: ํ์ ์ฌ๋ผ์ด์ค ์ข ๋ฃ๋ ์ ์ ์ผ๋ก ์ธํด ๋ค์ ์ค๋น ์ํ๋ก
- Running โ Waiting: I/O ์์ฒญ์ด๋ ์ด๋ฒคํธ ๋๊ธฐ๋ก ์ธํด ๋๊ธฐ ์ํ๋ก
- Waiting โ Ready: I/O ์๋ฃ๋ ์ด๋ฒคํธ ๋ฐ์ ํ ๋ค์ ์ค๋น ์ํ๋ก
- Running โ Terminated: ํ๋ก์ธ์ค ์คํ ์๋ฃ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ต์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์ด์์ฒด์ ๋ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ํ์ด์ง, ์ธ๊ทธ๋จผํ ์ด์ ๋ฑ์ ์ฌ์ฉํ๋ค.
- ํ์ด์ง
- ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ธ๋ก์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ ๋จํธํ๋ฅผ ์ค์ธ๋ค.
- ํ์ด์ง ๋จ์๋ก ๋ถํ ๋์ด ํ ๋น๋๊ธฐ ๋๋ฌธ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ์์ ๊ณต๊ฐ์ด ๋จ๋๋ผ๋ ์ด๋ฅผ ํ์ด์ง ํฌ๊ธฐ๋ก ํฉ์ณ ํฐ ๊ณต๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ๋จํธํ ํด๊ฒฐ
- ์ธ๊ทธ๋ฉํ
์ด์
- ๋ ผ๋ฆฌ์ ๋จ์๋ก ๋ถํ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ๋๋ฅผ ๋์ธ๋ค.
- ํ๋ก์ธ์ค์ ํฌ๊ธฐ๊ฐ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ์ ํจ์จ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ํ ์ ์์ด ๋ด๋ถ ๋จํธํ ํด๊ฒฐ
์บ์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
์บ์๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. CPU๋ ์บ์ ์ ์ค๋ฅ ์ ๋์ด๊ธฐ ์ํด ์ง์ญ์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง ๊ฒฐ์ ํ๋ค. (์บ์ ์ ์ค๋ฅ = ์บ์ ์ ์ค ํ์ / ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ํ์)
์บ์์ CDN์ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์?
๋ชฉ์ ๊ณผ ๋์ ๋ฐฉ์์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์บ์๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ๊ณ , ๋ฐ๋ณต์ ์ธ ์์ฒญ ์ ๋น ๋ฅด๊ฒ ๋ฐํ.ํ๋ ๋ฐฉ์์ ๋๋ค. CDN์ ์ฌ์ฉ์์ ๊ฐ๊น์ด ์๋ฒ(์ฃ์ง ์๋ฒ)์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ์ฌ ๋คํธ์ํฌ ์ง์ฐ์ ์ค์ด๊ณ ๋ก๋ฉ ์๋๋ฅผ ์ต์ ํํ๋ ๋ฐฉ์์ ๋๋ค
context switching (๋ฌธ๋งฅ ๊ตํ)์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฅํ๊ณ , ๋ค์ ์คํํ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต์ํ๋ ์์
์ด๋ฅผ ํตํด CPU๋ ํ๋์ ํ๋ก์ธ์ค๋ง ๋ ์ ํ์ง ์๊ณ , ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๊ณต์ ํ๊ฒ ์คํํ ์ ์๋ค.
HTTP๋ ๋ฌด์์ธ๊ฐ์?
๋ต๋ณ
HTTP๋ HyperTextTransferProtocol์ ์ค์๋ง๋ก ์น์์์ HyperText์ฆ, HTMLํ์ผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ์ ๋๋ค.
์ฌ๋ด1) HyperText๋ ๋ง ๊ทธ๋๋ก Text๋ฅผ ์ด์ํ Text์ ๋๋ค. ๋จ์ํ ๊ธ์ ์ด์์ ๊ธฐ๋ฅ์ํ๋ ๊ธ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ๋ค๋ฉด ํ์ดํผ๋งํฌ๊ฐ์ด ๊ธ์์ ๋งํฌ๋ฅผ ๋ค๋ ๊ฒ ๊ฐ์ ์๊ฐ์ ์ผ๋ก ์ฝ๋๊ฒ ์ธ์๋ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ธ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฌ๋ด2) HTML์ HyperTextMarkupLanguage์ ๋๋ค. HyperText๋ ์์์ ์ค๋ช ํ๊ณ , Markup์ ๋ํด์ ์์๋ด ์๋ค. (Mark-up์ด์๋๋ผ Markup์ด ํ๋์ ๋จ์ด์ ๋๋ค) markup์ ๋ฌธ์์ ๋ด์ฉ(๋ฌธ์)์ธ์ ๋ฌธ์์ ์์,๊ตฌ์กฐ๋ฑ์ ํํํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ๋งํฉ๋๋ค. ํ๊ทธ๋ฅผ ์ด์ฉํด ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํํํ๊ณ , ์ด๋ฅผ ๋ง์น ์ธ์ด์ฒ๋ผ ์ฌ์ฉํด์ markup langague๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ ๋ฆฌ) ๋งํฌ์ ์ธ์ด๋ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํํํ๊ธฐ ์ํ ์ธ์ด์ด๋ค.
์ฌ๋ด3) ํ๋กํ ์ฝ์ ๋ํด ์์๋ด ์๋ค. ํ๋กํ ์ฝ์ ์ฉ์ด ์์ฒด๋ โํต์ ์ฅ๋น ์ฌ์ด์ ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์ ํน์ ๊ท์นโ์ด๋ผ๊ณ ํํํฉ๋๋ค. ํํ ์ ๊ณต์ฑ ์ผ๋ก ๋ณธ, โComputer Network - Topdown approachโ์์ syntax,sementics,timing ์ธ๊ฐ์ง ๋จ์ด๋ก ์ค๋ช ํ๊ณ ์์ต๋๋ค.
- Syntax(๋ฌธ๋ฒ) : ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ ํ์
- Sementic(์๋ฏธ): ํ์์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํด์ํ ์ง
- Timing (ํ์ด๋ฐ) : ํ์์ ๋ง์ถ ์๋ฏธ๋ฅผ ๋ด์ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์์๋ก ์ค๊ฐ์ผํ ์ง
์ด๋ ๊ฒ ์ธ๊ฐ์ง ๋จ์ด๋ฅผ ํตํด ํ๋กํ ์ฝ์ ์ ์ํ๊ณ ์์ต๋๋ค.
HTTP์ ํน์ง
HTTP๋ ํด๋ผ์ด์ธํธ-์๋ฒ๊ตฌ์กฐ๋ก ๋์ด์๊ณ , ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋ ๋ฌด์ํ ํ๋กํ ์ฝ์ ๋๋ค. ๋ํ, ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ๋๋ง ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์๋ต ์ดํ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๋น์ฐ๊ฒฐ์ฑ์ ๊ฐ๊ณ ์์ต๋๋ค.
HTTP ๋ฒ์ ์ ๋ฐ์ ๋จ๊ณ
- HTTP 0.9์ด๊ธฐ๋ชจ๋ธ์ธ HTTP 0.9๋ GET๋ฉ์๋๋ง ์ง์์ ํด์ฃผ์๊ณ HTTP ํค๋์กฐ์ฐจ ์์์ต๋๋ค.
- HTTP 1.0HTTP 1.0์์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ง์ํ๊ณ , ํค๋๋ ์ถ๊ฐ๋์์ต๋๋ค. ๋ํ, ํ๋ฒ์ ๋ฐ์ดํฐ ์ ์ก์ ์ํด ์ฐ๊ฒฐ๊ณผ ํด์ ๋ฅผ ํด์ผํ๋ ๋นํจ์จ์ ์ธ ๊ตฌ์กฐ์ ๋๋ค.
- HTTP 1.1์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด HTTP 1.1์์๋ keep-alive์์ฑ์ด ํค๋์ ์ถ๊ฐ๋์ด ์ง์์ ์ธ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค. ๊ทธ๋์ ์ฌ๋ฌ๋ฒ์ ๋ฐ์ดํฐ ์ ์ก์ ํ๋๋ผ๋, ํ๋ฒ์ ์ฐ๊ฒฐ๊ณผ ํ๋ฒ์ ํด์ ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
- HTTP 2.0HTTP 2.0์์๋ ์ด์ ๋ฒ์ ์ HOL(Head Of Line Blocking)๋ฌธ์ : ๋ฌด๊ฑฐ์ด ํค๋๋ก ์ธํด ์ดํ์ ํจํท์ด ์ํฅ์ ๋ฐ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉํฐํ๋ ์ฑ์ ์ง์ํ์ฌ ๋จ์ผ TCP์ฐ๊ฒฐ์๋ ์ฌ๋ฌ ์์ฒญ๊ณผ ์๋ต์ ๋ฐ์ ์ ์๊ฒ ๋์์ต๋๋ค. ๋ํ, ํค๋์์ถ๋ ์ง์ํฉ๋๋ค.
- HTTP 3.0HTTP 2.0์ ๊ธด ์๋ณต์ง์ฐ์๊ฐ(RTT)์ ํด๊ฒฐํ๊ธฐ ์ํด TCP๊ธฐ๋ฐ์ UDP๊ธฐ๋ฐ์ผ๋ก ๋ฐ๊พธ์ด ์ง์ฐ์๊ฐ์ 3-RTT์์ 1-RTT๋ก ์ค์์ต๋๋ค.
HTTPS์ HTTP์ ์ฐจ์ด
HTTP์ HTTPS๋ ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ์ด์ง๋ง, ๋ณด์ ์ธก๋ฉด์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
HTTPS๋ HTTP์ SSL/TLS ํ๋กํ ์ฝ์ ์ถ๊ฐํ์ฌ ๋ณด์์ด ๊ฐํ๋ ํ๋กํ ์ฝ์ ๋๋ค. ๋ฐ๋ผ์, HTTPS์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ด ์ ์ก๋ฉ๋๋ค.
๋ํ, ๊ธฐ๋ณธ ํฌํธ๋ฒํธ๋ HTTP์ ๊ฒฝ์ฐ๋ 80, HTTPS์ ๊ฒฝ์ฐ๋ 443์ ๋๋ค.
HTTP์ ๋ฉฑ๋ฑ์ฑ
HTTP ๋ฉฑ๋ฑ์ฑ(idempotent)์ด๋ ํ๋์ ์์ฒญ์ด ์๋ ์ฌ๋ฌ๋ฒ ๋์ผํ ์์ฒญ์ ๋ณด๋์ ๋ ์๋ฒ๊ฐ ๊ฐ์ ์ํ๋ฅผ ๊ฐ์ง๋ ๊ฒ์ ๋ฉฑ๋ฑ์ฑ์ด๋ผ๊ณ ํฉ๋๋ค. ๋ฐ๋ผ์ GET, PUT, DELETE์ ๊ฐ์ ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ๊ณ , POST๋ PATCH์ ๊ฒฝ์ฐ๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง ์์ต๋๋ค.
PUT๊ณผ PATCH์ ์ฐจ์ด
PUT์ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ ์ ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ผํ๊ณ , ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
PATCH์ ๊ฒฝ์ฐ ์ ๋ฐ์ดํธ๋ฅผ ํ ๋ ์ํ๋ ๋ฐ์ดํฐ๋ง ๋ณด๋ด๋ ๋ฉ๋๋ค.
HTTP์ ์ํ ์ฝ๋
- 100 : ์๋ฒ๊ฐ ์์ฒญ์ ์ ๋ฐ์๊ณ , ํด๋น ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์ด์ด๊ฐ๋ผ๋ ์ฝ๋
- 200 : ์์ฒญ ์ฑ๊ณต
- 201 : ์์ฒญ ์ฑ๊ณต ๋ฐ ์๋ก์ด ๋ฐ์ดํฐ ์์ฑ
- 301 : ์์ฒญํ ๋ฆฌ์์ค์ URI๊ฐ ๋ณ๊ฒฝ๋์์์ ์๋ฏธ
- 400 : ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ดํดํ ์ ์์
- 401 : ํด๋ผ์ด์ธํธ ์ธ์ฆ ๋ฌธ์
- 404 : ์์ฒญ๋ฐ์ ์ปจํ ์ธ ๋ฅผ ์ฐพ์ ์ ์์
- 500 : ์๋ฒ ์ค๋ฅ
- 502 : ๊ฒ์ดํธ์จ์ด ๋๋ ํ๋ก์์๋ฒ ์ค๋ฅ
- 504 : Timeout ์๊ฐ๋์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ์ง ๋ชปํจ
DNS์ ์ญํ ๊ณผ ๋์ ์๋ฆฌ์ ๋ํด ์ค๋ช
DNS(Domain Name System)๋ ๋๋ฉ์ธ ๋ค์์ IP ์ฃผ์๋ก ๋ณํํ๋ ์์คํ ์ ๋๋ค.
DNS๋ ๋จผ์ ๋ธ๋ผ์ฐ์ ์บ์, ๋ก์ปฌ ์บ์, ๋ก์ปฌ DNS ์๋ฒ ์์ผ๋ก IP์ฃผ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๋ง์ฝ ์บ์ฑ๋ ์ ๋ณด๊ฐ ์๋ค๋ฉด, ๋ฃจํธ ๋ค์ ์๋ฒ์ TLD(Top-Level Domain) ๋ค์ ์๋ฒ์ ์ฃผ์๋ฅผ ์์ฒญํฉ๋๋ค.
์ด๋ฅผ ํตํด, ์ํ๋ ์ฃผ์์ ๋ํย ๋ค์์๋ฒ ์ฃผ์๋ฅผ ์ป์ ์ ์์ต๋๋ค.
TLD๋ฅผ ํตํด ์์๋ธย ๊ถํ ๋ค์ ์๋ฒ์ ์ต์ข ์ ์ผ๋ก ์ค์ ์ฃผ์์ IP์ฃผ์๋ฅผ ๋ฐํ๋ฐ์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฐ์ IP์ฃผ์๋ ์บ์ฑํ์ฌ ์ ์ฅํฉ๋๋ค.
์น ์์ผ์ด๋ ๋ฌด์์ด๋ฉฐ, ์ด๋ป๊ฒ ์๋ํ๋์ง
**์น ์์ผ(WebSocket)**์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์๋ฐฉํฅ, ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
์น์์ผ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์น์์ผ ํธ๋์์ดํฌ๋ฅผ ์์ฒญํฉ๋๋ค. ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์๋ฝํ๊ฒ ๋๋ฉด, ๊ธฐ์กด HTTP ์ฐ๊ฒฐ์ ์น์์ผ์ผ๋ก ์ ํ๋ฉ๋๋ค.
CDN์ ๋ฌด์์ธ๊ฐ์?
CDN(Content Delivery Network)์ ์น ์ฝํ ์ธ (HTML, CSS, JavaScript, ์ด๋ฏธ์ง, ๋์์ ๋ฑ)๋ฅผ ์ฌ์ฉ์์ ๊ฐ๊น์ด ์๋ฒ์์ ์ ๊ณตํ์ฌ ๋ก๋ฉ ์๋๋ฅผ ์ต์ ํํ๋ ๋ถ์ฐ ๋คํธ์ํฌ ์์คํ ์ ๋๋ค.
TCP์ UDP์ ์ฐจ์ด
TCP์ UDP๋ ๋๋ค OSI 7๊ณ์ธต ์ค ์ ์ก๊ณ์ธต์ ํด๋นํ๋ ํ๋กํ ์ฝ์ ๋๋ค.
TCP๋ ๊ฐ์ํ์ (Virtual Circuit)์ ์ฌ์ฉํ๊ณ UDP๋ ๋ฐ์ดํฐ๊ทธ๋จ(Datagram)๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ์ํ์ ๋ฐฉ์์ ๊ฒฝ์ฐ ์ด๊ธฐ ์ฐ๊ฒฐ ์ค์ ์ด ํ์ํฉ๋๋ค.
๊ฐ๊ฐ์ ํจํท์ ๋ ๋ฆฝ์ ์ด์ง ์์์ ๊ณ ์ฅ๋ ๋งํฌ๋ ๋ ธ๋๋ฅผ ๋ง๋๋ฉด ์๋ก์ด ์ฐ๊ฒฐ์ ์ค์ ํด์ผ ํ๋ stateful๋ฐฉ์์ ๋๋ค.
๋ฐ์ดํฐ๊ทธ๋จ ๋ฐฉ์์ ๊ฒฝ์ฐ ์ด๊ธฐ ์ฐ๊ฒฐ ์ค์ ์ ํ์ง ์์ต๋๋ค.
๋ํ, ๊ฐ๊ฐ์ ํจํท์ ๋ ๋ฆฝ์ ์ผ๋ก ํฌ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ณด๋ธ์์์ ๋ฐ๋์์๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค.
ํฌ์๋ฉ ๊ณผ์ ์ค ๊ณ ์ฅ๋ ๋งํฌ๋ ๋ ธ๋๋ฅผ ์ฐํํ์ฌ ๋ผ์ฐํ ์ ํ๋ stateless๋ฐฉ์์ด์ง๋ง ์ธํฐ๋ท์ ๊ฒฝ์ฐ ๋ผ์ฐํ ํ ์ด๋ธ์ timeout(TTL)์ ๋์ด stateful๊ณผ stateless๊ฐ ๊ณต์กดํ๋ soft state์ํ์ ๋๋ค.
์์๊ฐ์ ์ฐจ์ด๋ฅผ ํตํด TCP๋ ์ ๋ขฐ์ฑ์ด ๋๊ณ , UDP๋ ์ ๋ขฐ์ฑ์ด ๋ฎ์ต๋๋ค.
์ฆ, TCP๋ ํจํท์ ์์๊ฐ ๋ณด์ฅ๋์ง๋ง UDP๋ ๋ณด์ฅ๋์ง ์์ ์ฐ์์ด ๋ค๋ฆ ๋๋ค. ์๋ ์ธก๋ฉด์์๋ TCP๋ ๋๋ฆฌ๊ณ UDP๋ ๋น ๋ฆ ๋๋ค. ๋ํ, UDP๋ ๋ธ๋ก๋์บ์คํธ๋ ์ง์ํฉ๋๋ค.
UDP vs QUIC
UDP๋ ์ฐ๊ฒฐ ์ค์ ์์ด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์กํ ์ ์๋ ๋จ์ํ ์ ์ก ํ๋กํ ์ฝ๋ก, ์ง์ฐ์ด ์ ๊ณ ์ค๋ฒํค๋๊ฐ ์์ง๋ง ์ ๋ขฐ์ฑ ๋ณด์ฅ, ์์ ๋ณด์ฅ, ํผ์ก ์ ์ด ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ด ๋๋ฌธ์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ด๋ ๊ฒ์ ๋ฑ ์ง์ฐ์ ๋ฏผ๊ฐํ ์๋น์ค์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
QUIC์ UDP ์์์ ๋์ํ๋ฉด์ TCP์ ์ ๋ขฐ์ฑ, TLS ๊ธฐ๋ฐ์ ๋ณด์, ๋ฉํฐํ๋ ์ฑ, ์ฐ๊ฒฐ ์ด๊ด ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์ ํ ์ ์ก ํ๋กํ ์ฝ์ ๋๋ค. ๋น ๋ฅธ ์ฐ๊ฒฐ ์๋ฆฝ๊ณผ ์ง์ฐ ์ต์ํ๋ฅผ ํตํด HTTP/3์ ๊ธฐ๋ฐ์ด ๋๋ฉฐ, ์ ์ก ๊ณ์ธต๊ณผ ์ํธํ ๊ณ์ธต์ ํตํฉํด ์ฑ๋ฅ๊ณผ ๋ณด์์ ๋์์ ๊ฐํํฉ๋๋ค.
OSI 7๊ณ์ธต๊ณผ TCP/IP 4๊ณ์ธต์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
- OSI 7๊ณ์ธต
- ์์ฉ ๊ณ์ธต (Application): ์ต์ข ์ฌ์ฉ์์ ์ง์ ์ฐ๊ฒฐ (HTTP, FTP, DNS)
- ํํ ๊ณ์ธต (Presentation): ๋ฐ์ดํฐ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ (์ํธํ, ์์ถ)
- ์ธ์ ๊ณ์ธต (Session): ์ฐ๊ฒฐ ๊ด๋ฆฌ (์์ผ)
- ์ ์ก ๊ณ์ธต (Transport): ์ ๋ขฐ์ฑ ์๋ ๋ฐ์ดํฐ ์ ์ก (TCP, UDP)
- ๋คํธ์ํฌ ๊ณ์ธต (Network): IP ์ฃผ์ ๊ธฐ๋ฐ ํจํท ๋ผ์ฐํ (IP, ๋ผ์ฐํฐ)
- ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต (Data Link): MAC ์ฃผ์ ๊ธฐ๋ฐ ํต์ (์ด๋๋ท, ์ค์์น)
- ๋ฌผ๋ฆฌ ๊ณ์ธต (Physical): ์ ๊ธฐ์ ์ ํธ, ๋นํธ ์ ์ก (LAN ์ผ์ด๋ธ, ๊ด์ฌ์ )
- TCP/IP 4๊ณ์ธต
- ์์ฉ ๊ณ์ธต (์ธ์ + ํํ + ์์ฉ ๊ณ์ธต)
- ์ ์ก ๊ณ์ธต (์ ์ก ๊ณ์ธต, TCP/UDP)
- ์ธํฐ๋ท ๊ณ์ธต (๋คํธ์ํฌ ๊ณ์ธต)
- ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๊ณ์ธต (๋ฌผ๋ฆฌ + ๋ฐ์ดํฐ ๋งํฌ)
TCP์ 3-way handshake์ 4-way handshake
TCP์ ์ฐ๊ฒฐ๊ณผ์ ๊ณผ ํด์ ๊ณผ์ ์ ๊ฐ๊ฐ 3-way handshake, 4-way handshake ๊ณผ์ ์ ๊ฒช์ต๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก SYN๋ฅผ ๋ณด๋ด ์ฐ๊ฒฐ์ ์์ฒญํ๊ณ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก SYN + ACK๋ฅผ ๋ณด๋ ๋๋ค. ์ด๋ฅผ ํด๋ผ์ด์ธํธ์์ ์์ ๋ฐ์ผ๋ฉด ์๋ฒ๋ก ACK๋ฅผ ๋ณด๋ด๋ฉฐ TCP๊ฐ ์ฐ๊ฒฐ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ํด์ ํ๊ธฐ ์ํด FIN์์ฒญ์ ๋ณด๋ ๋๋ค. ์๋ฒ๋ ์ด๋ฅผ ๋ฐ์ ACK๋ฅผ ๋ณด๋ด๊ณ ๋จ์ ์์ฒญ๋ค์ ์ฒ๋ฆฌ ํ FIN์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ์์ ํ์ฌ ACK๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ด๊ณ , ํน์๋ ์ง์ฐ๋ ๋ฐ์ดํฐ์๋ต์ด ์์ ์ ์๊ธฐ์ ์ผ์ ์๊ฐ ๊ธฐ๋ค๋ฆฐ ํ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค.
TCP์ ์ฐ๊ฒฐ ์ค์ ๊ณผ์ (3๋จ๊ณ)๊ณผ ์ฐ๊ฒฐ ์ข ๋ฃ ๊ณผ์ (4๋จ๊ณ)์ด ๋จ๊ณ๊ฐ ์ฐจ์ด๋๋ ์ด์ ๋?
TCP์ ์ฐ๊ฒฐ ์ค์ ์ ์ ๋ขฐ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ์ก์์ ๊ฐ๋ฅ ์ํ์์ ํ์ธํ๋ 3-way handshake ๋ฐฉ์์ผ๋ก ์ถฉ๋ถํ์ง๋ง, ์ฐ๊ฒฐ ์ข ๋ฃ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ์๋์ง ํ์ธํ๊ณ ์์ชฝ์ด ๊ฐ๊ฐ ์ข ๋ฃ ์์ฌ๋ฅผ ๋ช ํํ ํํํด์ผ ํ๋ฏ๋ก 4-way handshake๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ข ๋ฃ ๊ณผ์ ์์๋ ์์ธก์ด ๋ ๋ฆฝ์ ์ผ๋ก FIN๊ณผ ACK๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์ ์ข ๋ฃ ์์ฒญ๊ณผ ๋ ๋ฒ์ ํ์ธ ์๋ต์ด ํ์ํด ๋จ๊ณ ์๊ฐ ๋ ๋ง์์ง๋๋ค.
TCP ์ฐ๊ฒฐ ํด์ ๊ณผ์ ์์ TIME_WAIT์ด ๋ฐ์ํ๋ ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
TIME_WAIT์ TCP ์ฐ๊ฒฐ ์ข ๋ฃ ๊ณผ์ ์์ ๋ง์ง๋ง ACK๋ฅผ ๋ณด๋ธ ์ธก์ด ์ผ์ ์๊ฐ ๋์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์งํ๋ ์ํ๋ก, ์ฌ์ ์ก๋๋ FIN ํจํท์ ๋ํด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ตํ๊ณ ์ง์ฐ๋ ํจํท์ด ์ ์ฐ๊ฒฐ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํ๊ธฐ ์ํด ์กด์ฌํฉ๋๋ค. ์ด๋ ์ฐ๊ฒฐ ์ข ๋ฃ๊ฐ ์์ ํ ๋ณด์ฅ๋์์์ ํ์ธํ๊ณ , ๋์ผํ ์์ผ ์(IP์ ํฌํธ)์ด ์ฌ์ฌ์ฉ๋ ๋ ์ด์ ์ฐ๊ฒฐ์ ์์ฌ ํจํท์ด ์ถฉ๋์ ์ผ์ผํค๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ TCP์ ์ ์คํ ์ค๊ณ์ ๋๋ค.
๋ง์ฝ Server์์ FIN ํ๋๊ทธ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์ ์กํ ํจํท์ด Routing ์ง์ฐ์ด๋ ํจํท ์ ์ค๋ก ์ธํ ์ฌ์ ์ก ๋ฑ์ผ๋ก ์ธํด FIN ํจํท๋ณด๋ค ๋ฆ๊ฒ ๋์ฐฉํ๋ ์ํฉ์ด ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
TCP๋ ์ํ์ค ๋ฒํธ๋ก ์์๋ฅผ ๋ณด์ฅํ๋ฏ๋ก, ์๋ฒ๊ฐ FIN์ ์ ์กํ ๋ค์ ์ด์ ์ํ์ค์ ๋ฐ์ดํฐ๊ฐ ์ง์ฐ๋์ด ๋์ค์ ๋์ฐฉํด๋ ๋ฌธ์ ์์ด ์ฒ๋ฆฌ๋ฉ๋๋ค. ์์ ์ธก์ FIN ์ดํ ๋์ฐฉํ ์ธ๊ทธ๋จผํธ๋ผ๋ ์์์ ์ ํจํ๋ฉด ์์ ๋ฒํผ์ ์ ์ฅํ๊ณ , ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ ํ์์ผ ์ฐ๊ฒฐ์ ์ข ๋ฃํฉ๋๋ค. FIN์ ์ ์ก ์ข ๋ฃ ์์ฌ๋ฅผ ๋ํ๋ด๋ ์ ํธ์ผ ๋ฟ, ์ดํ ๋ฐ์ดํฐ๊ฐ ๋ฌด์๋๋ ๊ฒ์ ์๋๋ฉฐ TCP์ ์ ๋ขฐ์ฑ๊ณผ ์์ ๋ณด์ฅ์ด ์ ์ง๋ฉ๋๋ค.
TCP/IP 4๊ณ์ธต์์์ ๋ฐ์ดํฐ ์บก์ํ ๊ณผ์ ์ ์ค๋ช ํด์ฃผ์ธ์.
TCP/IP 4๊ณ์ธต์์์ ๋ฐ์ดํฐ ์บก์ํ ๊ณผ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ์์ํ์ฌ ๋ฌผ๋ฆฌ ๊ณ์ธต์ผ๋ก ๋ด๋ ค๊ฐ๋ฉด์ ๊ฐ ๊ณ์ธต๋ง๋ค ํค๋ ์ ๋ณด๋ฅผ ๋ง๋ถ์ด๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ๋จผ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ์ ์ก ๊ณ์ธต์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ธ๊ทธ๋จผํธ๋ก ๋ถํ ํ ๋ค ์ก์ ์ง ๋ฐ ์์ ์ง ํฌํธ ๋ฒํธ๊ฐ ํฌํจ๋ TCP ๋๋ UDP ํค๋๋ฅผ ๋ถ์ ๋๋ค. ์ดํ ์ธํฐ๋ท ๊ณ์ธต์์๋ IP ํค๋๋ฅผ ์ถ๊ฐํด IP ํจํท์ ๋ง๋ค๊ณ , ๋คํธ์ํฌ ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ผ์ฐํ ๋ ์ ์๋๋ก ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋คํธ์ํฌ ์ธํฐํ์ด์ค ๊ณ์ธต์์๋ MAC ์ฃผ์ ๋ฑ์ ์ ๋ณด๊ฐ ํฌํจ๋ ํ๋ ์ ํค๋์ ํธ๋ ์ผ๋ฌ๋ฅผ ์ถ๊ฐํด ์ค์ ์ ์ก ๊ฐ๋ฅํ ํ๋ ์์ ์์ฑํ๊ณ , ์ด๋ฅผ ๋ฌผ๋ฆฌ ๋งค์ฒด๋ฅผ ํตํด ์ ์กํ๊ฒ ๋ฉ๋๋ค.
HTTPS์์ TLS ํธ๋์ ฐ์ดํฌ ๊ณผ์
- ํด๋ผ์ด์ธํธ Helloํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ๋ณด์ ์ฐ๊ฒฐ์ ์์ฒญ(TLS๋ฒ์ , ์ง์๊ฐ๋ฅํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ชฉ๋ก, ๋๋ ๊ฐ ๋ฑ)
- ์๋ฒ Hello์๋ฒ๊ฐ ์๋ตํ๋ฉฐ TLS ์ค์ ์ ํ์(์๋ฒ๊ฐ ์ ํํ TLS๋ฒ์ , ์ ํํ ์ํธํ ์๊ณ ๋ฆฌ์ฆ, SSL/TLS ์ธ์ฆ์)
- ์๋ฒ ์ธ์ฆ์ ๊ฒ์ฆํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ ์ธ์ฆ์๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฒ์ธ์ง ๊ฒ์ฆ(์์กฐ์ฌ๋ถ, ๋ง๋ฃ์ฌ๋ถ, ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ด์์ ๋ฐ์๋์ง ๋ฑ)
- ํค ๊ตํ
- ์๋ฒ๊ฐ ๊ณต๊ฐํค ์ ๋ฌ
- ํด๋ผ์ด์ธํธ๋ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ์์ ํค๋ฅผ ์์ฑ
- ์๋ฒ์ ๊ณต๊ฐํค๋ก ์ํธํํ์ฌ ์ ์ก
- ์๋ฒ๋ ๋น๊ณต๊ฐํค๋ก ๋ณตํธํํ์ฌ Premaster Secretํ๋
- Client Random + Server Random + Premaster Secret๋ก ๋์นญํค(์ธ์ ํค) ์์ฑ
- ํธ๋์ ฐ์ดํฌ ์๋ฃํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ฑํ ์ธ์ ํค๋ฅผ ํตํด ์ํธํ๋ ๋ฉ์์ง๋ฅผ ๊ตํ
CORS๋?
CORS(cross origin resource sharing)๋ HTTP ํค๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅธ ์ค๋ฆฌ์ง์ ๋ํ ๋ฆฌ์์ค ๋ก๋๋ฅผ ํ์ฉํ ์ง ๋ง์ง์ ๋ํ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
SOP(Same Origin Policy)๋ ๊ฐ์ ์ค๋ฆฌ์ง๋ผ๋ฆฌ๋ง ์์ฒญ์ ํ๊ฐํ๋ ์ ์ฑ ์ธ๋ฐ ๋ค๋ฅธ ์ค๋ฆฌ์ง๋ผ๋ฆฌ๋ ์์ฒญ์ด ํ์ํ ๊ฒฝ์ฐ CORS๋ฅผ ํ์ฉํด์ผ ํฉ๋๋ค.
simple request์ preflight request๋ผ๋ ๋๊ฐ์ง์ ์์ฒญ์ด ์์ต๋๋ค.
simple request์ ๊ฒฝ์ฐ๋ ํ์ฉ๋ ๋ฉ์๋ํ์ , ํค๋์ ํด๋น๋ ๋ด์ฉ์ด๋ฉด ์ฌ์ ์์ฒญ์์ด ๋ฐ๋ก ์๋ฒ์ ์์ฒญํ๋ ๋ฐฉ์์ ๋๋ค.
๋ฐ๋ฉด, preflight request๋ ํ์ฉ๋์ง ์์ ๋ฉ์๋ํ์ ์ด๋ ํค๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณด์๊ฒ์ฌ๋ฅผ ์ํด OPTION์์ฒญ์ ๋จผ์ ๋ณด๋ด๊ณ ์ด๋ฅผ ์๋ฒ์์ ์๋ฝํ๋ฉด ์ค์ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋ฉ๋๋ค.
์๋ฒ์์๋ Access-control-๊ณผ ๊ฐ์ ํค๋๋ก ์๋ตํ์ฌ ํด๋น ํค๋์ ์์ฒญํ ์ค๋ฆฌ์ง์ด ์๋ค๋ฉด CORS์๋ฌ๊ฐ ๋์ค๊ณ ์์ฒญํ ์ค๋ฆฌ์ง์ด ์๋ค๋ฉด ์ ์์๋ํฉ๋๋ค.
CORS๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ์๋ฒ๋จ์์ Access-Control-Allow-Origin์ ์๋ฒ ์๋ต ํค๋์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ํ๋ ๋๋ฉ์ธ์์๋ง ์์ฒญ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ํ ์๋ ์์ต๋๋ค.
ํ๋ก ํธ์๋๋จ์์๋ ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ฐ ์ด๋ proxy๋ฅผ ์ค์ ํ์ฌ ๊ฐ์ ์ค๋ฆฌ์ง์์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ฒ๋ผ ํ ์๋ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์๊ณผ์
- ์ฌ์ฉ์๊ฐ ์ฃผ์์ฐฝ์ URL์ ์ ๋ ฅํ๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ DNS์๋ฒ๋ฅผ ํตํด ๋๋ฉ์ธ์ IP์ฃผ์๋ก ๋ณํํฉ๋๋ค.
- ์ค์ IP์ฃผ์๋ฅผ ์ป์๋ค๋ฉด 3-way handshake๋ก TCP ์ฐ๊ฒฐ์ ํฉ๋๋ค.
- HTTPS๋ผ๋ฉด ์ธ์ฆ์์ ์ ํจ์ฑ์ ๊ฒ์ฆํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ๋ก HTTP์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ ๋๋ง์ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์ค๋ช
- HTML์ ํ์ฑํ์ฌ DOM ํธ๋ฆฌ ๊ตฌ์ถ
- CSSํ์ผ์ ํ์ฑํ์ฌ CSSOM ํธ๋ฆฌ ๊ตฌ์ถ
<script>
ํ๊ทธ๋ฅผ ๋ง๋๋ฉด JavaScript ์คํ- DOM๊ณผ CSSOM์ ๊ฒฐํฉํ ๋ ๋ํธ๋ฆฌ๋ฅผ ์์ฑ
- ๋ ์ด์์ ๊ณ์ฐ(Reflow)
- ํ์ธํ
๋ธ๋ผ์ฐ์ ์ ์บ์ ๋์ ๋ฐฉ์
๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์์ค๋ฅผ ์์ฒญ์ ํ ๋, ์บ์์ ํด๋น ๋ฆฌ์์ค๊ฐ ์๋์ง ํ์ธํ๊ณ ์๋ค๋ฉด ์ ํจํ์ง ํ์ธ ํ ํด๋น ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ๋ ์บ์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์บ์ ํน์ ๋์คํฌ ์บ์์ ์ ์ฅ๊ฐ๋ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์บ์์ ๊ฒฝ์ฐ ํ์ฌ ์ด๋ฆฐ ํญ์์ ์ ์ฅํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ซํ๋ฉด ์ฌ๋ผ์ง์ง๋ง, ๋์คํฌ ์บ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ผ์ ๋์คํฌ์ ์ ์ฅํ์ฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์๋ ์ ์ง๋ฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง๋ฐฉ๋ฒ
๋ธ๋ผ์ฐ์ ์ ๋ฐ์ํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- ์ ์ญ๋ณ์๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์
var
๋ฅผ ํตํด ์ ์ธ๋ ์ ์ญ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ณ์ ์ ์ง๋๋ฏ๋ก, ์ฌ์ฉ์ ์ต์ํ ํด์ผํฉ๋๋ค.
- ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฏธ์ ๊ฑฐ
removeEventListener()
์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํด์ ํ์์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
- ํด๋ก์ ๋ก ์ธํ ๋ฉ๋ชจ๋ฆฌ ๋์
- ์ ์ธํ ํด๋ก์ ์ ๋ํด ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ํด๋ก์ ์ ๋ด๋ถ์ ํ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํด์ผ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ์์ง(๋ ๋๋ง ์์ง, JavaScript์์ง)์ ๋ํด ์ค๋ช
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง์ ๋ด๋นํ๋ ์ฃผ์ ์์ง์ด ์์ต๋๋ค.
- Webkit : Safari์ ์ด์ Chrome์์ ์ฌ์ฉํ๊ณ , iOS์ ๊ธฐ๋ณธ์์ง์ ๋๋ค.
- Blink : Chrome, Edge, Opera์์ ์ฌ์ฉํฉ๋๋ค.
- Gecko : Firefox์์ ์ฌ์ฉํฉ๋๋ค.
- Trident : ์ด์ Internet Explorer์์ ์ฌ์ฉ๋์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํด์ํ๊ณ ์คํํ๋ ์ฌ๋ฌ ์์ง์ด ์์ต๋๋ค.
- V8 : Chrome๊ณผ Node.js์์ ์ฌ์ฉํ๋ ์์ง์ด๊ณ , ๋งค์ฐ ๋น ๋ฅด๋ฉฐ JIT(Just-In-Time)์ปดํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- SpiderMonkey : Firefox์์ ์ฌ์ฉํ๋ฉฐ ์ต์ด์ ์์ง์ผ๋ก JIT ์ปดํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- JavaScriptCore : Safari์์ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์์ฑ๊ณผ ๋ถํ์ ์ฐจ์ด
๋ฐ์์ฑ์ ์์คํ ์ด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ์๋ตํ๋๊ฐ์ ์๋ฏธ์ด๊ณ , ๋ถํ๋ ์์คํ ์ด ์ฒ๋ฆฌํด์ผํ๋ ์์ ๋์ ์๋ฏธํฉ๋๋ค.
์ฟ ํค, ์ธ์ , ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ๋ํด ์ค๋ช
์ธ๊ฐ์ง ์ ๋ถ ๋ธ๋ผ์ฐ์ ์ ์บ์ฑ์ ํจ์ผ๋ก์จ ์๋ฒ์ ๋ถ๋ด์ ์ค์ด๊ณ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
์ฐจ์ด์ ์ผ๋ก๋ ์ฌ๋ฌ ํญ๋ชฉ์ผ๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
์ต๋์ ์ฅ์ฉ๋์ ์ธ์ ๊ณผ ๋ก์ปฌ์คํ ๋ฆฌ์ง๊ฐ ์ฟ ํค๋ณด๋ค ๋ง์ต๋๋ค.
์ ๊ทผ๋ฒ์๋ ์ธ์ ์ ํญ์ด์ง๋ง, ์ฟ ํค์ ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ ์ค๋ฆฌ์ง์ ๋๋ค.
๋ง๋ฃ๊ธฐํ์ ์ฟ ํค๋ ์๋์ผ๋ก ์ค์ ํ๊ณ , ์ธ์ ์ ํญ์ ๋ซ์ผ๋ฉด ์๋ฉธ๋๊ณ , ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ ์๊ตฌ์ ์ ๋๋ค.
์ฟ ํค๋ ์ธ์ ๊ณผ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ๋ค๋ฅด๊ฒ ์์ฒญ๊ณผ ํจ๊ป ์๋ฒ์ ์๋์ ์ก๋ฉ๋๋ค.
์ธ์ฆ๊ณผ ์ธ๊ฐ์ ๋ํด ์ค๋ช
์ธ์ฆ์ ์ฌ์ฉ์์ ์ ์์ ํ์ธํ๋ ๊ณผ์ ์ด๊ณ , ์ธ๊ฐ๋ ์ฌ์ฉ์๊ฐ ํน์ ๋ฆฌ์์ค๋ ๊ธฐ๋ฅ์ ์ ๊ทผํ ๊ถํ์ด ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ ๋๋ค.
ํ ํฐ๊ธฐ๋ฐ ์ธ์ฆ๋ฐฉ์์ ๋ํด ์ค๋ช
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ๋ฉด ์๋ฒ๋ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ ํ์ Access Token, Refresh Token์ ๋ฐ๊ธํฉ๋๋ค. ์ฌ์ฉ์๋ ์ดํ ์์ฒญ ์์ ํค๋์ ํ ํฐ์ ํฌํจํ์ฌ ์ ์กํฉ๋๋ค. ์๋ฒ๋ ํ ํฐ์ ๊ฒ์ฆํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ง๋ฃ๋ ๊ฒฝ์ฐ Refresh Token์ ํตํด ์๋ก์ด Access Token์ ๋ฐ๊ธ๋ฐ์ต๋๋ค.
JWT(JSON Web Token)์ ๋ณด์์ ์ธ ์ทจ์ฝ์
JWT๋ ํด๋ผ์ด์ธํธ์์ ๋ณด๊ดํ๋ฏ๋ก XSS๊ณต๊ฒฉ์ผ๋ก ์ฝ๊ฒ ์ ์ถ๋ ์ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก์ปฌ์คํ ๋ฆฌ์ง ๋์ HttpOnly ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋์ง, ํ ํฐ์ ์งง๊ฒ ์ ์งํ๊ณ Refresh Token์ ์ ์ฅํ๋ฉด ๋ฉ๋๋ค.
XSS(Cross-Site Scripting) ๊ณต๊ฒฉ์ด ๋ฌด์์ด๊ณ , ์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
XSS๋ ๊ณต๊ฒฉ์๊ฐ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์น์ฌ์ดํธ์ ์ฝ์ ํ์ฌ ์คํ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๋๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ ์ฟ ํค ํ์ทจ ๋ฐฉ์ง๋ฅผ ์ํด HttpOnly ์์ฑ์ ์ค์ ํ๊ฑฐ๋ Secure ์์ฑ์ ์ถ๊ฐํ์ฌ HTTPS ํ๊ฒฝ์์๋ง ์ฟ ํค๊ฐ ์ ์ก๋๋๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง์ด๋ ๋ค์ํ ์น ๋ธ๋ผ์ฐ์ (Chrome, Firefox ๋ฑ)์์ ๋์ผํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์น์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ธฐ๋ฒ์ ๋๋ค.
ํฌ๋ก์ค ๋ธ๋ผ์ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์น ํ์ค์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ง์ผํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ๋ง๋ค ๊ธฐ๋ณธ ์คํ์ผ์ด ๋ค๋ฅด๋ฏ๋ก reset.css ์ฌ์ฉํฉ๋๋ค.
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ ์ต์ JavaScript ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ผ๋ฏ๋ก ํด๋ฆฌํ์ ํ์ฉํ ์ ์์ต๋๋ค.
REST API์ ๋ํด ์ค๋ช
REST API๋ REST(Representational State Transfer) ์ํคํ ์ฒ ์คํ์ผ์ ๋ฐ๋ฅด๋ API๋ฅผ ์๋ฏธํฉ๋๋ค. REST๋ ์์์ HTTP URI๋ก ํํํ๊ณ , HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ํ์ฉํ์ฌ ์์์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋๋ค.
REST๋ ์ํคํ ์ฒ ์คํ์ผ์ด๊ณ , RESTful์ REST์์น์ ์งํจ API์ ๋๋ค.
๋ฆฌํ๋ก์ฐ์ ๋ฆฌํ์ธํธ์ ์ฐจ์ด
๋ฆฌํ๋ก์ฐ๋ ๋ ์ด์์ ๋จ๊ณ์์ ๋ฐ์ํ๋ ์ฐ์ฐ์ผ๋ก, ์์์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋ค์ ๊ณ์ฐํ๋ ๊ณผ์ ์ ๋๋ค.
๋ฆฌํ์ธํธ๋ ๋ ์ด์์ ๊ณ์ฐ์์ด ํ๋ฉด์ ํฝ์ ์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์ ๋๋ค. ์คํ์ผ ๋ณํ๋ง ์๋ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ง๋ง, ๋ฆฌํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ฉด ๋ฆฌํ์ธํธ๋ ๋ฐ์ํฉ๋๋ค.
๋ฆฌํ๋ก์ฐ๋ DOM ์์์ ํฌ๊ธฐ, ์์น, ๋ ์ด์์์ด ๋ณ๊ฒฝ๋ ๋ ๋ฐ์ํฉ๋๋ค.
์ฆ, DOM์์๊ฐ ์ถ๊ฐ ๋ฐ ์ญ์ ๊ฐ ์ผ์ด๋๊ฑฐ๋ ๋ ์ด์์๊ณผ ๊ด๋ จ๋ CSS(width, height, margin, padding, display ๋ฑ)๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, ์คํฌ๋กค ๋ฐ์ ๋ฑ ๋ค์ํ ์ด์ ๋ก ๋ฐ์ํฉ๋๋ค.
์ ๋๋ฉ์ด์ ์ transform์ด๋ opacity๋ฅผ ์ฌ์ฉํฉ๋๋ค. (๋ฆฌํ์ธํธ๋ง ๋ฐ์)
๋ ์ด์์์ ๋ณ๊ฒฝํ ์์๋ค์ position์ absolute๋ fixed๋ก ์ค์ ํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐ์นํฉ๋๋ค.
SEO์ ๋ํด ์ค๋ช
**SEO(๊ฒ์ ์์ง ์ต์ ํ)**๋ ์น์ฌ์ดํธ๋ ์น ํ์ด์ง๊ฐ ๊ฒ์ ์์ง์์ ๋ ์ ๋ ธ์ถ๋๋๋ก ํ๋ ์ผ๋ จ์ ์ต์ ํ ์์ ์ ๋๋ค.
๋ฉํ ํ๊ทธ, ํค๋ ํํฌ ํน์ ์๋ฉํฑ ํ๊ทธ ๋ฑ์ ํ์ฉํ์ฌ SEO๋ฅผ ์ฌ๋ฆด ์ ์์ต๋๋ค. ๋ํ, ์ด๋ฏธ์ง์ Alt์ค๋ช ์ ๋ฃ๋ ๊ฒ๋ SEO๋ฅผ ์ฌ๋ฆด ์ ์์ต๋๋ค.