[TOC]
- ๊ฐ์ฒด์ ๊ด๊ณ์์ ์ค์
- ๊ฐ์ฒด์ ๊ด๊ณํ DB๋ฅผ Mappingํด์ค๋ค.
- ๊ฐ์ฒด์ ํ ์ด๋ธ์ Mappingํ๊ธฐ ๋๋ฌธ์ SQL์ ์ง์ ๋ ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ๋ง์น ์๋ฐ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๋ฏ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ์๋น์ค์์ ์ค์ ์ ์๋์ผ๋ก ํด์ค๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒดํ ๋ฐ์ดํฐ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- JPA, Hibernate, MyBatis
- ์ฅ์
- ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ก ์ธํด ๋ ์ง๊ด์ ์ด๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ๋์์ค๋ค.
- ์ ์ธ, ํ ๋น, ์ข ๋ฃ ๊ฐ์ ๋ถ์์ ์ธ ์ฝ๋๊ฐ ์ค์ด๋ ๋ค.
- ์ฌ์ฌ์ฉ ๋ฐ ์ ์ง ๋ณด์์ ํธ๋ฆฌ์ฑ์ด ์ฆ๊ฐํ๋ค.
- DBMS์ ๋ํ ์ข ์์ฑ์ด ์ค์ด๋ ๋ค.
- ์ ์ฐจ์ , ์์ฐจ์ ์ ๊ทผ์ด ์๋ ๊ฐ์ฒด ์งํฅ์ ์ ๊ทผ์ผ๋ก ์ธํด ์์ฐ์ฑ์ด ์ฆ๊ฐํ๋ค.
- ๋จ์
- ๋ชจ๋ ๊ธฐ๋ฅ์ ORM์ผ๋ก๋ง ์์ฑํ๊ธฐ์๋ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ฉด ์ฐ๊ธฐ ์ด๋ ต๋ค.
- ๋ง์ ์์ ๋ ์ฝ๋๋ฅผ ์ฆ์ ๋น๋๋ก ๋ฒํฌ ์ํ
- ORM์ผ๋ก๋ง ์๋ฒฝํ๊ฒ ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ํ๋ก์์ ๊ฐ ๋ง์ ์์คํ ์์ ORM์ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฅ์ ์ ํ์ฉํ๊ธฐ ์ด๋ ต๋ค.
- 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) : ํธ๋์ญ์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ง์น๋ฉด ๊ทธ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ ์ฅ๋์ด์ผ ํ๋ค.
- ๊ฒฉ๋ฆฌ์ฑ ๊ด๋ จ ๋ฌธ์ ์
- ์ปค๋ฐ๋์ง ์์ ์์ ์ค์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฝ์ ์ ์๋๋ก ํ์ฉํ ๋ ๋ฐ์ํ๋ ํ์์ด๋ค.
- ์ด๋ค ํธ๋์ญ์ ์์ ์์ง ์คํ์ด ๋๋์ง ์์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ณ๊ฒฝ ์ฌํญ์ ๋ณด๊ฒ ๋๋ ๊ฒฝ์ฐ์ด๋ค.
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ SQL์ ๋ ๋ฒ ์ํํ ๋, ๋ SQL์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋ํ๋๋ ๋น ์ผ๊ด์ ์ธ ํ์์ด๋ค.
- ํ ํธ๋์ญ์ ์ด ์ํ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์์ , ์ญ์ ํจ์ผ๋ก์จ ๋ํ๋๋ค.
- ํ ํธ๋์ญ์ ์์ ๊ฐ์ SQL์ ๋ ๋ฒ ์ํํ ๋, ์ฒซ๋ฒ์งธ SQL์์ ์๋ ๋ฐ์ดํฐ๊ฐ ๋๋ฒ์งธ SQL์์ ๋ํ๋๋ ํ์์ด๋ค.
- ํ ํธ๋์ญ์ ์ด ์ํ์ค์ผ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ฐ์ ์ฝ์ ํจ์ผ๋ก์จ ๋ํ๋๋ค.
- ํธ๋์ญ์ ์์ ์ผ๊ด์ฑ์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋๋ก ํ๋ ์์ค์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ACID ๊ฐ์ด ํธ๋์ญ์ ์ด ์์์ ์ด๋ฉด์๋ ๋ ๋ฆฝ์ ์ธ ์ํ์ ํ๋๋ก ํ๋ค.
- 4๋จ๊ณ์ ๊ฒฉ๋ฆฌ ์์ค์ ๋๋์๋ค.
- ๋จ๊ณ๋ฅผ ๋ด๋ ค๊ฐ์๋ก ๊ฒฉ๋ฆฌ ์์ค์ด ๋์์ ธ์ ์ธ๊ธ๋ ์ด์๋ ์ ๊ฒ ๋ฐ์ํ์ง๋ง, ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋จ์ด์ง๋ค.
- ์๋ต์ฑ์ ๋์ด๊ธฐ ์ํด ๋จ๊ณ๋ฅผ ์ฌ๋ผ๊ฐ๋ค๋ฉด, ์๋ชป๋ ๊ฐ์ด ์ฒ๋ฆฌ ๋ ์ฌ์ง๊ฐ ์๋ค.
- ํธ๋์ญ์ ์ด ๋ฐ์ํ๋ฉด Lock์ด ๊ฑธ๋ฆฌ๋๋ฐ, SELECT์์๋ ๊ณต์ Lock, CREATE/INSERT/DELETE ์์๋ ๋ฐฐํ์ Lock์ด ๊ฑธ๋ฆฐ๋ค.
SELECT๊ฐ ์ํ๋๋ ๋์ ํด๋น ๋ฐ์ดํฐ์ ๊ณต์ Lock์ด ๊ฑธ๋ฆฌ์ง ์๋๋ค.- ํธ๋์ญ์
์ ์ฒ๋ฆฌ์ค์ธ ํน์ ์์ง ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ
๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ฝ๋ ๊ฒ์ ํ์ฉํ๋ค. - ์ด๋ค ์ฌ์ฉ์๊ฐ A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ B๋ผ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํ๋ ๋์ ๋ค๋ฅธ ์ฌ์ฉ์๋ ์์ง ์๋ฃ๋์ง ์์(Uncommitted ํน์ Dirty) ํธ๋์ญ์ ์ด์ง๋ง ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ์ธ B๋ฅผ ์ฝ์ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค.
- Dirty Read, Non-Repeatable Read, Phantom Read ๋ฐ์
SELECT๊ฐ ์ํ๋๋ ๋์ ํด๋น ๋ฐ์ดํฐ์ ๊ณต์ Lock์ด ๊ฑธ๋ฆฐ๋ค.- ํธ๋์ญ์ ์ด ์ํ๋๋ ๋์ ๋ค๋ฅธ ํธ๋์ญ์ ์ด ์ ๊ทผํ ์ ์์ด ๋๊ธฐํ๊ฒ ๋๋ค.
- ์ปค๋ฐ์ด ์ด๋ฃจ์ด์ง ํธ๋์ญ์ ๋ง ์กฐํํ ์ ์๋ค.
- ์ด๋ค ์ฌ์ฉ์๊ฐ A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ B๋ผ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํ๋ ๋์
๋ค๋ฅธ ์ฌ์ฉ์๋ ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. - SQL Server๊ฐ Default๋ก ์ฌ์ฉํ๋ ๋จ๊ณ์ด๋ค.
- Non-Repeatable Read, Phantom Read ๋ฐ์
- ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง
SELECT๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ๊ณต์ Lock์ด ๊ฑธ๋ฆฐ๋ค. - ํธ๋์ญ์ ์ด ๋ฒ์ ๋ด์์ ์กฐํํ ๋ฐ์ดํฐ์ ๋ด์ฉ์ด ํญ์ ๋์ผํจ์ ๋ณด์ฅํ๋ค.
- ๋ค๋ฅธ ์ฌ์ฉ์๋ ๊ทธ ์์ญ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ๋ํ
์์ ์ด ๋ถ๊ฐ๋ฅํ๋ค. - Phantom Read ๋ฐ์
- ํธ๋์ญ์
์ด ์๋ฃ๋ ๋๊น์ง
SELECT๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ๊ณต์ Lock์ด ๊ฑธ๋ฆฐ๋ค. - ์๋ฒฝํ ์ฝ๊ธฐ ์ผ๊ด์ฑ ๋ชจ๋๋ฅผ ์ ๊ณตํ๋ค.
- ๊ฐ์ฅ ์๊ฒฉํ ๊ฒฉ๋ฆฌ ์์ค์ด๋ค.
- ๋ค๋ฅธ ์ฌ์ฉ์๋ ๊ทธ ์์ญ์ ํด๋น๋๋ ๋ฐ์ดํฐ์ ๋ํ
์์ ๋ฐ ์ ๋ ฅ์ด ๋ถ๊ฐ๋ฅํ๋ค. - ์ 3๊ฐ์ง ๋ฌธ์ ์ ์ ๋ชจ๋ ์ปค๋ฒ ๊ฐ๋ฅํ๋ค.
- ๋์ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๊ธ๊ฒฉํ ๋จ์ด์ง ์ ์๋ค.
- ์์ง ํํฐ์ ๋
- ํฐ ํ ์ด๋ธ์ด๋ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋จ์๋ก ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
- ๋ฌผ๋ฆฌ์ ์ธ ํํฐ์ ๋์ผ๋ก ์ธํด ์ ์ฒด ๋ฐ์ดํฐ์ ํผ์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ณ ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ์ด ํฅ์๋๋ค.
- ํฐ ํ ์ด๋ธ์ ์ ๊ฑฐํ์ฌ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ํด์ค๋ค.
- ํน์ DML๊ณผ ์ฟผ๋ฆฌ์ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
- ์ฃผ๋ก ๋์ฉ๋ ๋ฐ์ดํฐ Write ํ๊ฒฝ์์ ํจ์จ์ ์ด๋ค.
- ๋ง์ ๋ฐ์ดํฐ ์ฝ์ ์ด ์๋ OLTP(Online Transaction Processing) ์์คํ ์์ ์ฝ์ ์์ ๋ค์ ๋ถ๋ฆฌ๋ ํํฐ์ ๋ค๋ก ๋ถ์ฐ์์ผ ๊ฒฝํฉ์ ์ค์ธ๋ค.
- ํ ์ด๋ธ๊ฐ join์ ๋ํ ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
- ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๋ณ๋ ํํฐ์ ํ ์๋ ์๋ค. ํ ์ด๋ธ๊ณผ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ด ํํฐ์ ๋ํด์ผ ํ๋ค.
- ์ํ ํํฐ์ ๋
- ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ ์ด๋ธ์ ์ํ ๋ถํ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ชผ๊ฐ์ ์ ์ฅํ๋ ๊ฒ
- ์ค๋ฉ ์๊ณ ๋ฆฌ์ฆ์ด ๋งค์ฐ ์ฝ๊ฒ ์ผ๋ฐํ๊ฐ ๊ฐ๋ฅํ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฒจ์ด์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- ๋ ๊ฐ ์ด์์ DBMS ์์คํ ์ Master/Slave๋ก ๋๋ ์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์
- Master์๋ ๋ฐ์ดํฐ์ ์์ ์ฌํญ์ ๋ฐ์๋ง ํ๊ณ Replication์ ํ์ฌ Salve์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.
- ์ฝ์ /์์ /์ญ์ ๋ Master๊ฐ ๋ด๋นํ๊ณ ์กฐํ๋ Slave๊ฐ ๋ด๋นํด์ ์ฑ๋ฅ ํฅ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- ๋ก๊ทธ ๊ธฐ๋ฐ ๋ณต์
- Statement Based : SQL์ ๋ณต์ฌํ์ฌ ์งํ
- Row Based : SQL์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ Row๋ง ๊ธฐ๋กํ๋ ๋ฐฉ์
- Mixed : ๊ธฐ๋ณธ์ ์ผ๋ก statement Based๋ก ์งํํ๋ฉด์ ํ์์ ๋ฐ๋ผ Row Based๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ํ๋จผํธ ์งํฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด๋ค.
- NoSQL
- ๋๊ฐ์ ์กฐ๊ฑด์ผ๋ก ์ค๊ณํ์ ์ RDBMS๋ณด๋ค ๋น ๋ฅด๋ค.
- ํธ๋์ญ์ ์ ์ง์ํ์ง ์๋๋ค.
- ๋ํ๋จผํธ์ ์งํฉ์ ์ปฌ๋ ์ ์ด๋ผ๊ณ ํ๋ค. = RDBMS์์ ํ ์ด๋ธ
- Join์ ์ง์ํ์ง ์๋๋ค.
- ๋ฐ์ดํฐ ๊ฐฑ์ ๋ฐ ์ ๋ ฅ์ด ๋ฐ๋ก ๋์คํฌ์ ์ฐ์ด์ง ์๋๋ค.(๋น๋๊ธฐ์) ๋ฐ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ์์ฒด์ ์ผ๋ก ์ค์ผ์ผ ์์์ ์ง์ํ๋ค.
- ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- NoSQL
- ํค-๊ฐ ๊ตฌ์กฐ
- C ์ฝ๋๋ก ๊ฐ๋ฐ๋์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ ์ค ์ํ์ด memcached์ ๋นํด ์ ๋ค.
- ํด๋ฌ์คํฐ๋ง์ ์ง์ํ์ง ์๋๋ค.
- ์ค๋ฉ์ ํตํด ํ์ฅํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์
- snapshotting
- save
- ์๊ฐ์ ์ผ๋ก redis๋ฅผ ์ ์ง์ํค๊ณ , ๊ทธ ๋์ ์ค๋ ์ท์ ๋์คํฌ์ ์ ์ฅํ๋ค.
- blocking
- ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋์ดํ, ๊ทธ ๋น์์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ ์ท์ ๋์คํฌ์ ์ ์ฅํ๋ฉฐ redis๋ ์ ์์ ์ผ๋ก ์๋ํ๋ค.
- save
- AOF(Append On File)
- redis์ ๋ชจ๋ write/update ์ฐ์ฐ ์์ฒด๋ฅผ ๋ชจ๋ log ํ์ผ์ ๊ธฐ๋กํด ๋์๋ค๊ฐ ์๋ฒ๊ฐ ์ฌ ์์๋ ๋ ๊ธฐ๋ก๋ ๋ก๊ทธ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก non-blocking call์ด๋ค.
- snapshotting
- Single Thread๋ก ์๋ํ๋ค.
- Single Thread๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋ช ๋ น์ script๋ก ํ ๋ฒ์ ์์ฒญํ ๊ฒฝ์ฐ transaction level serializable๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- DB / API ํต์ ์ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์บ์ฑ ์ฒ๋ฆฌํ๋๋ฐ์ ์ฌ์ฉํ๋ฉด ์ข์ ์บ์์ด๋ค.
- ํธ๋ํฝ์ด ๋ชฐ๋ ค๋ ์๋ต ์๋๋ ์์ ์ ์ธ ํธ์ด๋ค.
- Redis์ ๋นํด ๋ฐ์ดํฐ ํ์ ๊ณผ API๊ฐ ๋ค์ํ์ง ์๋ค.
- Key-Value๋ง ์ง์ํ๋ค.
- ์บ์ ์๋ฃจ์ ์ด๋ค. ๋ ๋์ค๋ ์ฌ๊ธฐ์ ์ ์ฅ์์ ๊ฐ๋ ์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ค.
- MySQL์ด ์ค๋ผํด๋ก ๋์ด๊ฐ ๋ค ๋ถํ์คํ ๋ผ์ด์ ์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จ ์คํ ์์ค DBMS์ด๋ค.
- MySQL์ ๋์ฒด์ , ์ฌ์ฉ๋ฒ์ด ๊ฐ๋ค.
- ์ปค๋ฅ์ ํ์ ์ปค๋ฅ์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ด๋ค. (javax.sql.DataSource)
- Datasource๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ์๊ฐ hikariCP์ด๋ค. HikariDataSource
- ๋ฐ์ดํฐ์์ค ๊ฐ์ฒด๋ฅผ ํตํด์ ํ์ํ ์ปค๋ฅ์ ์ ํ๋, ๋ฐ๋ฉํ๋ค.
- JNDI(Java Naming and Directory Interface) Server๋ฅผ ํตํด ์ด์ฉ๋๋ค.
- ์คํ๋ง ๋ถํธ 2.0์ ๊ธฐ๋ณธ jdbc cp์ด๋ค.
- ์ธํฐํ์ด์ค์ ๋ํดํธ ๋ฉ์๋ ์ถ๊ฐ
- ์คํธ๋ฆผ api
- ๋๋ค
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- Optional
- ํด๋์ค๋ค์ด ๊ตฌํํดํ ํ๋ ๋์์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ์ถ์ํ
- ๊ท์ฝ, ๊ท์
- ์ถ์ ํด๋์ค์ ๊ทน๋จ์ ์ธ ๊ฒฝ์ฐ
- ํด๋์ค์ ๋ฌ๋ฆฌ ๋ค์ค ์์(๋ค์ค ๊ตฌํ)์ด ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ ํ์ ์์ด ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ง ์๊ณ ์์ผ๋ฉด ๋๋ค๋ ์ฅ์
- ๋คํ์ฑ์ ์ด์ฉํ ์ธํฐํ์ด์ค์ ๊ตฌํ ๊ฐ์ฒด๋ฅผ ์์ฝ๊ฒ ๊ต์ฒดํ ์ ์๋ค.
- ์๋ฐ 8์์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ง ์ ์๋ ๊ฒ
- ์์ ํ๋(public static final) : ๊ธฐ์กด, ์๋ต ๊ฐ๋ฅ
- ์ถ์ ๋ฉ์๋(public abstract) : ๊ธฐ์กด, ์๋ต ๊ฐ๋ฅ
- ๋ํด๋ ๋ฉ์๋(public default) : ์๋ก ์ถ๊ฐ๋จ
- ์ด์ ์ ๊ฐ๋ฐํ ๊ตฌํ ํด๋์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง ์๊ณ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์, ์๋กญ๊ฒ ๊ฐ๋ฐํ๋ ํด๋์ค๋ ๋ํดํธ ๋ฉ์๋๋ฅผ ํ์ฉํด ์๋ก์ด ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค.
- ํ๋์ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ํฉ์ ๋ฐ๋ผ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ค๋ฒ๋ก๋ฉ(Overloading)์ ๋คํ์ฑ์ ๊ฐ์ฅ ๋ํ์ ์ธ ์
- ๋คํ์ฑ์ ์กฐ๊ฑด
- ๊ณตํต์ ๋ถ๋ชจ
- ๊ณตํต์ ๋ฉ์๋ ์ฌ์ ์
- ๋ถ๋ชจ ํ์ ์ ๋ณ์๋ก ํธ์ถ
- ๋ค์ํ ํ์ ์ ๊ฐ์ฒด๋ค์ ๋ค๋ฃจ๋ ๋ฉ์๋๋ ์ปฌ๋ ์ ํด๋์ค์ ์ปดํ์ผ ์์ ํ์ ์ฒดํฌ๋ฅผ ํด ์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
- ํด๋์ค ๋ด๋ถ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ ํ์ ์ ๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํ์ ํ๋ ๊ฒ์ ๋งํ๋ค.
- ํ์ ์์ ์ฑ์ ์ ๊ณตํ๋ค.
- ํ์ ์ฒดํฌ์ ํ ๋ณํ์ ์๋ตํ ์ ์์ผ๋ฏ๋ก ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๋ค.
- mutable
- ๋ณ๊ฒฝ ๊ฐ๋ฅ ๊ฐ์ฒด
- ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ฒด
- ์ต์ด ์์ฑ ์ดํ์๋ ์์ ๋กญ๊ฒ ๊ฐ ๋ณ๊ฒจ ๊ฐ๋ฅ
- immutable
- ๋ณ๊ฒฝ ๋ถ๊ฐ ๊ฐ์ฒด
- ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๊ฐ์ฒด
- ์ต์ด ์์ฑ ์ดํ๋ก๋ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ
- ํ๋ก๊ทธ๋จ์ ์ ๋ง์ ๊ฐ์ฒด๋ผ๋ ๊ธฐ๋ณธ ๋จ์๋ก ๋๋๊ณ ์ด ๊ฐ์ฒด๋ค์ ์ํธ ์์ฉ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ ํ๋ ๋ฐฉ์
- ๊ฐ์ฒด๋ค์ ๋ฐ์ดํฐ ๋ฌถ์ ๋ฟ๋ง ์๋๋ผ ํ๋์ ์ญํ ์ ์ํํ๋ ๋ฉ์๋์ ๋ฐ์ดํฐ์ ๋ฌถ์
- ํฐ ๋ฌธ์ ๋ฅผ ์๊ฒ ์ชผ๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋จผ์ ์์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ ์ ์๋ ๊ฐ์ฒด๋ค๋ก ๋ง๋ ๋ค, ์ด ๊ฐ์ฒด๋ค์ ์กฐํฉํด์ ํฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ํฅ์(Buttom up) ํด๊ฒฐ๋ฒ ๋์
- ์บก์ํ(Encapsulation)
- ํ๋ก๊ทธ๋จ์ ์ธ๋ถ ๊ตฌํ์ ์ธ๋ถ๋ก ๋๋ฌ๋์ง ์๋๋ก ํน์ ๋ชจ๋(ํด๋์ค) ๋ด๋ถ๋ก ๊ฐ์ถ๋ ๊ฒ์ด๋ค.
- ์ ๊ทผ ์ ์ด ์ง์์๋ฅผ ํตํด ์ธ๋ถ์์ ์ ๊ทผ์ ์ ์ดํ๋ค.
- ์์(Inheritance)
- ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ํน์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋งํ๋ค.
- ์ฌ์ ์๋ฅผ ํตํด ์์ ํด๋์ค์์ ์์๋ฐ์ ๊ธฐ๋ฅ๋ง๋ค ์ฌ ์ ์ํด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ๋คํ์ฑ(Polymorphism)
- ํ๋์ ๋ณ์, ํจ์ ๋ฑ์ด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ํด์๋ ์ ์๋ค.
- ์ค๋ฒ๋ก๋ฉ
- ๊ฐ์ฒด๋ฅผ ํตํด ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ถ์ํด ๋ด๋ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฒ
- ์๋ฐ๋ ๋์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐ์ ์ด ์๋ค. ๊ทธ๋์ ๋์ ์ผ๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ Reflection์ผ๋ก ๊ทธ ์ญํ ์ ๋์ ํ๊ฒ ๋๋ค.
- Reflection์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค ํ์ ์ ์์ง ๋ชปํด๋, ๊ทธ ํด๋์ค์ ๋ฉ์๋, ํ์ , ๋ณ์๋ค์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ API์ด๋ค.
- ์๋ฐ ์์ค ์ฝ๋์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ฉํ๋ฐ์ดํฐ์ ์ผ์ข ์ด๋ค.
- @๊ธฐํธ๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค.
- JDK 1.5๋ฒ์ ์ด์์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- CompileTime, Runtime์์ ํด์๋ ์ ์๋ค.
- ํด๋์ค ํ์ผ์ ํฌํจ๋์ด ์ปดํ์ผ๋ฌ์ ์ํด ์์ฑ๋ ํ JVM์ ํฌํจ๋์ด ์๋ํ๋ค.
- @Target์ผ๋ก ์ด๋ ธํ ์ด์ ์ด ์ ์ฉํ ์์น๋ฅผ ์ ํํ๋ค.
- @Retention์ผ๋ก ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ ธํ ์ด์ ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์ค์ ํ๋ค.
- ์ด๊ฑฐ ํ์ , ๋ณ์๋ฅผ ์ ์ธํ ๋ ๋ณ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- IDE์ ์ง์์ ๋ฐ์ ์ ์๋ค.(์๋ ์์ฑ, ์คํ, ํ ์คํธ ๋ฆฌํฉํ ๋ง)
- ํ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ค์ ์ ํํ ์ ์๋ค.
- ๋ฆฌํฉํ ๋ง์ ๋ณ๊ฒฝ ๋ฒ์๊ฐ ์ต์ํ๋๋ค. ๋ด์ฉ์ ์ถ๊ฐ๊ฐ ํ์ํ๋๋ผ๋, Enum ์ฝ๋์ธ์ ์์ ํ ํ์๊ฐ ์๋ค.
- ์์ ํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํด๋์ค์ด๋ค.
| ์ง์์ | ํด๋์ค ๋ด๋ถ | ๋์ผ ํจํค์ง | ์์๋ฐ์ ํด๋์ค | ์ด์ธ์ ์์ญ |
|---|---|---|---|---|
| private | โญ | โ | โ | โ |
| default | โญ | โญ | โ | โ |
| protected | โญ | โญ | โญ | โ |
| public | โญ | โญ | โญ | โญ๏ธ |
- private : ํด๋์ค ๋ด๋ถ(๋ฉ์๋)์์๋ง ์ ๊ทผ์ ํ์ฉํ๋ค.
- default : ํด๋์ค ๋ด๋ถ์ ๋์ผ ํจํค์ง์์๋ง ์ ๊ทผ์ ํ์ฉํ๋ค.
- protected : ํด๋์ค ๋ด๋ถ์ ๋์ผ ํจํค์ง ์์๋ฐ์ ํด๋์ค์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- public : ์ด๋์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- String์ immutable, private final char[] ํํ
- immutable์ธ ์ด์ : ํผํฌ๋จผ์ค, ๋์์ฑ, GC
- StringBuilder, StringBuffer์ mutable
- StringBuffer๋ Thread safe, StringBuilder๋ Thread safeํ์ง ์๋ค. ๋ฐ๋ผ์ Multi Thread ํ๊ฒฝ์์๋ StringBuffer๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ค์ ํ ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ๊ณ ํธํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ๊ณตํ๋ค.
- ๋ชจ๋ Collection์ ์์ ์ธํฐํ์ด์ค๋ก์จ Collection์ด ๊ฐ๊ณ ์๋ ํต์ฌ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ค.
- List
- ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ค.
- ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
- LinkedList : ์๋ฐฉํฅ ํฌ์ธํฐ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ์ ์ฝ์ , ์ญ์ ๊ฐ ๋น๋ฒํ ๊ฒฝ์ฐ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ค. ์คํ, ํ, ์๋ฐฉํฅ ํ ๋ฑ์ ๋ง๋ค๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
- ArrayList : ์๋นํ ๋น ๋ฅด๊ณ ํฌ๊ธฐ๋ฅผ ๋ง์๋๋ก ์กฐ์ ํ ์ ์๋ ๋ฐฐ์ด์ด๋ค. ๋จ๋ฐฉํฅ ํฌ์ธํฐ ๊ตฌ์กฐ๋ก ์๋ฃ์ ๋ํ ์์ฐจ์ ์ธ ์ ๊ทผ์ ๊ฐ์ ์ด ์๋ค.
- Set
- ์์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ค.
- ๋ฐ์ดํฐ์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
- HashSet : ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์ ๊ทผ ์๋๋ฅผ ๊ฐ์ง๋ค. ์์๋ฅผ ์ ํ ์์ธกํ ์ ์๋ค.
- TreeSet : ์ ๋ ฌ๋ ์์๋๋ก ๋ณด๊ดํ๋ฉฐ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ง์ ํ ์ ์๋ค.
- LinkedHashSet : ์ถ๊ฐ๋ ์์, ๋๋ ๊ฐ์ฅ ์ต๊ทผ์ ์ ๊ทผํ ์์๋๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- Map
- ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ์ด๋ค.
- ์์๋ ์ ์ง๋์ง ์๊ณ , ํค๋ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. ๊ฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
- HashMap : Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด HashTable์ ์ฌ์ฉํ ํด๋์ค, ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค. ํค์ ๊ฐ์ผ๋ก null์ด ํ์ฉ๋๋ค.
- TreeMap : ์ด์ง๊ฒ์ํธ๋ฆฌ์ ํํ๋ก ํค์ ๊ฐ์ด ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ์ ๋ ฌ๋ ์์๋ก ํค, ๊ฐ ์์ ์ ์ฅํ๋ฏ๋ก ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. ์ ์ฅ์ ์ ๋ ฌ์ ํ๊ธฐ ๋๋ฌธ์ ์ ์ฅ์๊ฐ์ด ๋ค์ ์ค๋๊ฑธ๋ฆฐ๋ค.
- HashTable : HashMap๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋๊ธฐํ๊ฐ ์ง์๋๋ค. ํค์ ๊ฐ์ผ๋ก null์ด ํ์ฉ๋์ง ์๋๋ค.
- LinkedHashMap : ๊ธฐ๋ณธ์ ์ผ๋ก HashMap์ ์์๋ฐ์ HashMap๊ณผ ๋งค์ฐ ํก์ฌํ๋ค. Map์ ์๋ ์ํธ๋ฆฌ๋ค์ด ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์ ์ง๋๋ฏ๋ก ์ ๋ ฅํ ์์๋๋ก ๋ฐ๋ณต์ด ๊ฐ๋ฅํ๋ค.
- ์๋ฐ ๊ฐ์ ๋จธ์
- ์๋ฐ ์ ํ๋ฆฌ์ผ์ ์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด ๋ค์ด ์๋ฐ API์ ํจ๊ป ์คํํ๋ ๊ฒ์ด๋ค.
- ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ์ฃผ์ฒด์ด๋ค.
- ์ธํฐํ๋ฆฌํฐ๋ JIT์ปดํ์ผ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ์ปดํจํฐ ์์์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ๊ตฌํํ๋ค.
- ์๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ ํ๋ซํผ์ ๋ ๋ฆฝ์ ์ด๋ค.
- ์ด๋ก ์ ์ผ๋ก ๋ชจ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ CPU๋ ์ด์์ฒด์ ์ ์ข ๋ฅ์ ๋ฌด๊ดํ๊ฒ ๋์ํ ๊ฒ์ ๋ณด์ฅํ๋ค.
- ์คํ ๊ธฐ๋ฐ, ๋๋ค์์ ๋ช ๋ น์ด๊ฐ ์คํ ์ ๋์์ ํผ์ฐ์ฐ์๋ฅผ ํํ๊ณ ๋ค์ ์คํ์ ๋ฃ๋๋ค.
- ํฌ์ธํฐ๋ฅผ ์ง์ํ์ง๋ง, C์ฒ๋ผ ์ฃผ์ ๊ฐ์ ์์๋ก ์กฐ์์ด ๊ฐ๋ฅํ ํฌ์ธํฐ ์ฐ์ฐ์ ์ง์ํ์ง ์๋๋ค.
- GC๋ฅผ ์ฌ์ฉํด ์์์ ๊ด๋ฆฌํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๊ฐ ์์ค์ฝ๋ ํ์ผ์ ์ค๋ธ์ ํธ ํ์ผ๋ก ๋ณํ์์ผ์ฃผ๋ ์ญํ ์ ํ๋ค.
- 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ํ๋ค.
-
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์์ญ์ ๋ณต์ฌํ๊ณ , ์ด ์์ญ์ ์ ์ธํ ๋๋จธ์ง ์์ญ์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ค.
- Permanent Generation
-
Runtime Constant Pool
- ๊ฐ ํด๋์ค์ ์ธํฐํ์ด์ค์ ์์, ๋ฉ์๋์ ํ๋์ ๋ํ ๋ชจ๋ ๋ ํผ๋ฐ์ค๋ฅผ ๋ด๊ณ ์๋ ํ ์ด๋ธ์ด๋ค.
- ๋ฉ์๋๋ ํ๋์ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ์ฐพ์๋ ํด๋น ํ์ ์ฐธ์กฐํ๋ค.
- Load๋ Class์ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ Runtime Module์ด๋ค.
- Class Loader๋ฅผ ํตํด JVM๋ด์ Runtime Data Areas์ ๋ฐฐ์น๋ ByteCode๋ Execution Engine์ ์ํด ์คํ๋๋ฉฐ, ์คํ ์์ง์ ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํ๋ค.
- ์ต์ด์ JVM์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ฆฐ ๋จ์ ์ด ์์์ง๋ง, JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ ํตํด ์ด ์ ์ ๋ณด์ํ๋ค.
- JVM์ ๋ชจ๋ ์ฝ๋๋ฅผ JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ์คํํ์ง ์๊ณ , ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค๊ฐ ์ผ์ ํ ๊ธฐ์ค์ ๋์ด์๋ฉด JIT ์ปดํ์ผ๋ฌ ๋ฐฉ์์ผ๋ก ์คํํ๋ค.
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ OS๋ก๋ถํฐ ์ด ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋๋ค. JVM์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ(Rumtime Data Areas)์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
- Java Compiler(Javac)๊ฐ Java SourceCode(.java)๋ฅผ ์ฝ์ด๋ค์ฌ Java ByteCode(.class)๋ก ๋ณํํ๋ค.
- Class Loader๋ฅผ ํตํด class ํ์ผ๋ค์ JVM์ผ๋ก Loadingํ๋ค.
- Loading๋ class ํ์ผ๋ค์ Execution Engine์ ํตํด ํด์๋๋ค.
- ํด์๋ ByteCode๋ Runtime Data Areas์ ๋ฐฐ์น๋๋ฉฐ ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๊ฒ ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์์์ ํ์์ ๋ฐ๋ผ Thread Synchronization๊ณผ ๊ฐ์ GC ์์ ์ ์ํํ๋ค.
-
Interpreter ๋ฐฉ์์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์ ๋ ์ปดํ์ผ๋ฌ
-
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์คํํ๋ค๊ฐ ์ผ์ ํ ๊ธฐ์ค์ ๋์ด์๋ฉด ๋ฐ์ดํธ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํ๋ค.
-
์ดํ์๋ ๋์ด์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ผ๋ก ์ปดํ์ผํ์ง ์๊ณ , ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ง์ ์คํํ๋ค.
-
NativeCode๋ Cache์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ ํ๋ฒ Compile๋ Code๋ ๋น ๋ฅด๊ฒ ์ํ๋๋ค.
-
JIT Compiler๊ฐ Compileํ๋ ๊ณผ์ ์ ByteCode๋ฅผ Interpretingํ๋ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๋ฏ๋ก ํ ๋ฒ๋ง ์คํ๋๋ Code๋ผ๋ฉด Interpreter๋ฐฉ์์ด ์ ์ ํ๋ค.
- GC๋ฅผ ์คํํ๊ธฐ ์ํด JVM์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ๋ฉ์ถ๋ ๊ฒ์ด๋ค.
- GC๋ฅผ ์คํํ๋ ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ค๋ ๋๋ ๋ชจ๋ ์์ ์ ๋ฉ์ถ๋ค.
- GCํ๋์ ์ด stop-the-world ์๊ฐ์ ์ค์ด๋ ๊ฒ์ด๋ค.
- System.gc()๋ฉ์๋๋ฅผ ์ ๋ ์ฌ์ฉํด์๋ ์๋๋ค. ์์คํ ์ ์ฑ๋ฅ์ ๋งค์ฐ ํฐ ์ํฅ์ ๋ผ์น๋ค.
- ๋ ์ด์ ํ์์๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ์น์ฐ๋ ์์ ์ ํ๋ค.
- ๋ ๊ฐ์ง ๊ฐ์ค weak generaional hypothesis
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๊ฐ ๋๋ค.
- ์ค๋๋ ๊ฐ์ฒด์์ ์ ์ ๊ฐ์ฒด๋ก์ ์ฐธ์กฐ๋ ์์ฃผ ์ ๊ฒ ์กด์ฌํ๋ค.
- ์ด ๊ฐ์ค์ ์ฅ์ ์ ์ต๋ํ ์ด๋ฆฌ๊ธฐ ์ํด์ HotSpot VM์๋ Young, Old ๋ ๊ฐ์ ๋ฌผ๋ฆฌ์ ๊ณต๊ฐ์ ๋๋์๋ค.
- ์๋กญ๊ฒ ์์ฑํ ๊ฐ์ฒด์ ๋๋ถ๋ถ์ด ์์นํ๋ค.
- ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋ง์ ๊ฐ์ฒด๊ฐ Young์์ญ์ ์์ฑ๋์๋ค๊ฐ ์ฌ๋ผ์ง๋ค.
- ์ด ์์ญ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง ๋ Minor GC๊ฐ ๋ฐ์ํ๋ค.
- 3 ์์ญ์ผ๋ก ๋๋๋ค. (Eden + Survivor 2๊ฐ)
- ์๋ก ์์ฑํ ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ Eden ์์ญ์ ์์นํ๋ค.
- Eden ์์ญ์์ GC๊ฐ ํ ๋ฒ ๋ฐ์ํ ํ ์ด์๋จ์ ๊ฐ์ฒด๋ Survivor ์์ญ์ค ํ๋๋ก ์ด๋๋๋ค.
- Eden ์์ญ์์ GC๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฏธ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ Survivor ์์ญ์ผ๋ก ๊ฐ์ฒด๊ฐ ๊ณ์ ์์ธ๋ค.
- ํ๋์ Survivor ์์ญ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด ๊ทธ ์ค์์ ์ด์๋จ์ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ Survivor ์์ญ์ผ๋ก ์ด๋ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ ์ฐฌ Survivor ์์ญ์ ์๋ฌด ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ก ๋๋ค.
- ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ๊ณ์ํด์ ์ด์๋จ์ ์๋ ๊ฐ์ฒด๋ Old ์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋๋ค.
- Survivor ์์ญ ์ค ํ๋๋ ๋ฐ๋์ ๋น์ด ์๋ ์ํ๋ก ๋์ ์์ด์ผ ํ๋ค.
- ๋ง์ฝ ๋ ์์ญ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ฑฐ๋, ๋ ์์ญ ๋ชจ๋ ์ฌ์ฉ๋์ด 0์ด๋ผ๋ฉด ์ ์์ ์ธ ์ํฉ์ด ์๋๋ค.
- ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๋ก ๋์ง ์์ 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 ์๊ฐ์ ์ค์ด๋ค๊ฒ ๋๋ค.
- Serial GC
- ์ ๋ ์ฌ์ฉํ๋ฉด ์ ๋๋ ๋ฐฉ์์ด๋ค.
- CPU ์ฝ์ด๊ฐ 1๊ฐ๋ง ์์ ๋ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ ๋ฐฉ์์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ๋ง์ด ๋จ์ด์ง๋ค.
- ์ ์ ๋ฉ๋ชจ๋ฆฌ์ CPU ์ฝ์ด ๊ฐ์๊ฐ ์ ์ ๋ ์ ํฉํ ๋ฐฉ์์ด๋ค.
- GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ ํ๋๋ค.
- Old ์์ญ์ GC๋ Mark-Sweep-Compact ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
- Old ์์ญ์ ์ด์ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ณ(Mark)ํ๋ค.
- Heap์ ์ ๋ถ๋ถ๋ถํฐ ํ์ธํ์ฌ ์ด์ ์๋ ๊ฒ๋ง ๋จ๊ธด๋ค.(Sweep)
- ๊ฐ ๊ฐ์ฒด๋ค์ด ์ฐ์๋๊ฒ ์์ด๋๋ก 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
- ๊ฐ์ฅ ์ฑ๋ฅ์ด ๋น ๋ฅด๋ค.
- ์์ง ์์ ํ ๋จ๊ณ์ด๋ค.
- Method Area
- ๊ฐ์ฒด๋ ์ต๋ฅ(intern)๋ ๋ฌธ์์ด ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
- Old ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๊ฐ ์์ํ ๋จ์ ์๋ ๊ณณ์ ์ ๋ ์๋๋ค.
- ์ด ์์ญ์์ ๋ฐ์ํ๋ GC๋ Major GC์ ํ์์ ํฌํจ๋๋ค.
- ์ค์ค๋ก ๋ฐ์ ํ๋ ํ๋ ์์ํฌ
- ์คํ๋ง ๊ฐ๋ฐ ์ฒ ํ ์ค ํ๋๋ "ํญ์ ํ๋ ์์ํฌ ๊ธฐ๋ฐ์ ์ ๊ทผ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ผ"
- ์คํ๋ง ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ ํต์ฌ ๊ธฐ๋ฅ์ ํ์ฅํด์ ๋ฐ์ ์ํจ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค.
- ๋จ์ํจ๊ณผ ์ ์ฐ์ฑ์ ์ค์ ๊ฐ์น๋ก ์๊ฐํ๋ค.
- ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ํธํ๊ฒ ํด์ฃผ๋ ์คํ์์ค ๊ฒฝ๋๊ธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- ํ์ํ ๋ถ๋ถ๋ง ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์ ์๋๋ก ๋ชจ๋ํ ๋์ด ์๋ค.
- ๊ฐ ๋ชจ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์๊ณ , ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- IoC/DI/AOP๋ฅผ ์ง์ํ๋ค.
- Spring Project์ ํ๋
- ์ด๊ธฐ ์์์ ์ ์ ํ ์ ์๋์ผ๋ก ํด์ค๋ค.
- ํ๋ก์ ํธ๋ง๋ค ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ํ๊ฒ ๋๋ ๋ถ๋ถ๋ค์ ์ด๋ฏธ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค.
- Servlet Contatiner๋ฅผ ๊ธฐ๋ณธ ๋ด์ฅํ๊ณ ์๋ค.(Tomcat, Jetty)
- Pom.xml์์ ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋ค.
- ์์ฃผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ ์กฐํฉ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ์คํ๋ง์ ๋์ฑ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค.
- Bean ์ธ์คํด์คํ ๋ฐ DI
- XMLํ์ผ / Java Config / Annotation์์ bean ์ ์๋ฅผ ์ค์บ
- bean ์ธ์คํด์ค ์์ฑ
- bean property์ ์์กด์ฑ ์ฃผ์
- ์คํ๋ง์ธ์ง ์ฌ๋ถ ๊ฒ์ฌ
- bean์ด BeanNameAware ์ธํฐํ์ด์ค ๊ตฌํ ์ setBeanName() ํธ์ถ
- bean์ด BeanClassLoaderAware ์ธํฐํ์ด์ค ๊ตฌํ ์ setBeanClassLoader() ํธ์ถ
- bean์ด ApplicationContextAware ์ธํฐํ์ด์ค ๊ตฌํ ์ setApplicationContext() ํธ์ถ
- Bean ์์ฑ ์๋ช
์ฃผ๊ธฐ Callback
- @PostConstruct Annotation ์ ์ฉ ๋ฉ์๋ ํธ์ถ
- bean์ด initializingBean ์ธํฐํ์ด์ค ๊ตฌํ์ afrerPropertiesSet() ํธ์ถ
- bean์ด init-method ์ ์ํ๋ฉด ์ง์ ํ ๋ฉ์๋ ํธ์ถ
- Bean ์๋ฉธ ์๋ช
์ฃผ๊ธฐ Callback
- @PreDestory Annotation ์ ์ฉ ๋ฉ์๋ ํธ์ถ
- bean์ด DispoableBean ์ธํฐํ์ด์ค ๊ตฌํ์ destroy() ํธ์ถ
- bean์ด destroy-method ์ ์ํ๋ฉด ์ง์ ํ ๋ฉ์๋ ํธ์ถ
- ์ปจํ ์ด๋๋ ๋ณดํต ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ํ๋ค.
- ์์ฑํ ์ฝ๋์ ์ฒ๋ฆฌ๊ณผ์ ์ ์์๋ฐ์ ๋ ๋ฆฝ๋ฐ์ ์กด์ฌ์ด๋ค.
- ์ ์ ํ ์ค์ ๋ง ๋์ด ์๋ค๋ฉด ๋๊ตฌ์ ๋์ ์์ด๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ค์ค๋ก ์ฐธ์กฐํ ๋ค ์์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ์ปจํธ๋กคํด์ค๋ค.
- ์คํ๋ง ์ปจํ ์ด๋๋ IoC๋ฅผ ์ด์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋น/์ปดํฌ๋ํธ๋ค์ ๊ด๋ฆฌํ๋ค.
- ์คํ๋ง ์ปจํ ์ด๋ = IoC์ปจํ ์ด๋ = DI์ปจํ ์ด๋
- ์คํ๋ง ์ปจํ
์ด๋๋ ๋ ์ข
๋ฅ๊ฐ ์๋ค.
- BeanFactory
- DI์ ๊ธฐ๋ณธ์ฌํญ์ ์ ๊ณตํ๋ ๊ฐ์ฅ ๋จ์ํ ์ปจํ ์ด๋
- ํฉํ ๋ฆฌ ํจํด์ ๊ตฌํํ ๊ฒ
- Bean์ ์์ฑํ๊ณ ๋ถ๋ฐฐํ๋ ์ฑ ์์ ์ง๋ ํด๋์ค
- Bean์ ์ ์๋ ์ฆ์ ๋ก๋ฉํ์ง๋ง, ๋น ์ธ์คํด์ค ์์ฑ์ Lazy Loadingํ๋ค.
- ์ฒ์์ผ๋ก getBean()์ด ํธ์ถ๋ ์์ ์์์ผ ํด๋น ๋น์ ์์ฑํ๋ค.(Lazy Loading)
- ApplicationContext
- BeanFactory ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ํ์ ์ธํฐํ์ด์ค์ด๋ค.
- ํ์ง๋ง ๋ด๋ถ์ ์ผ๋ก ๋ณ๋์ BeanFactory๋ฅผ ์ ์งํ๊ณ ์๋ค.
- ์ฆ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ ๋ค.
- BeanFactory์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ข ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๊ตญ์ ํ๊ฐ ์ง์๋๋ ํ ์คํธ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํด์ค๋ค.
- ์ด๋ฏธ์ง ๊ฐ์ ํ์ผ ์์์ ๋ก๋ ํ ์ ์๋ ํฌ๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- Listener๋ก ๋ฑ๋ก๋ Bean์๊ฒ ์ด๋ฒคํธ ๋ฐ์์ ์๋ ค์ค๋ค.
- Context์ด๊ธฐํ ์์ ์์ ๋ชจ๋ ์ฑ๊ธํค Bean์ ๋ฏธ๋ฆฌ ๋ก๋ํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ํ๋ค.
- BeanFactory
- ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ ๊ฒ
- ์ฌ์ฉ์๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์๋ฉธ์ํค๋ ๊ฒ์ด ์ปจํ ์ด๋๊ฐ ๋์ ํ๊ฒ ๋๋ค.(์ ์ด์ ์ญ์ )
- ์ด ์ ์ด๊ถ์ด ์คํ๋ง ์ปจํ ์ด๋๋ก ๋์ด๊ฐ๋ ๊ฒ์ด Spring IoC์ด๋ค.
- ์ ์ด๊ถ์ด ์ปจํ ์ด๋๋ก ๋์ด๊ฐ์ผ๋ก์จ DI, AOP๊ฐ ๊ฐ๋ฅํด์ก๋ค.
- ์ธ์คํด์ค์ ์์ฑ๋ถํฐ ์๋ฉธ๊น์ง์ ๊ฐ์ฒด(Bean) ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ปจํ ์ด์๊ฐ ๊ด๋ฆฌํ๊ฒ ๋๋ค.
- ์คํ๋ง์์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ ์์
- ๊ฐ์ฒด ์์ฑ
- ์์กด์ฑ ๊ฐ์ฒด ์ฃผ์ (์ค์ค๋ก ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ ์ด๊ถ์ ๊ฐ์ง ์คํ๋ง์๊ฒ ์์ํ์ฌ ์คํ๋ง์ด ๋ง๋๋ฌ ๋์ ๊ฐ์ฒด๋ฅผ ์ฃผ์ ํ๋ค.)
- ์์กด์ฑ ๊ฐ์ฒด ๋ฉ์๋ ํธ์ถ
- ์ธ์คํด์ค๋ฅผ ์์ ์ด ์๋ IoC ์ปจํ ์ด๋์์ ์์ฑ ํ ์ฃผ์ ํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก new ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ setter๋ ์์ฑ์๋ฅผ ์ด์ฉํ๋ค.
- ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ ๋ ๋ ๋ง๋ค ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ฒ ๋๋ฏ๋ก ๊ฐ๊ธ์ ์ฝ๋์ ๋ณํ๊ฐ ์ ์ด์ง๋๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํด ํ์
- ๋ชจ๋ ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ์ ์ ์ฐํ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ๋๋ก ํ๋ค.
- ๋ถํ์ํ ์์กด ๊ด๊ณ๋ฅผ ์์ ๊ฑฐ๋ ์ค์ผ ์ ์๋ค.
- ๊ฐ ๊ฐ์ฒด๋ฅผ bean ์ปจํ ์ด๋๋ก ๊ด๋ฆฌํ๋ค.
- IoC๋ฅผ ๊ตฌํํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ด DI์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๊ฑธ์ณ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค ์ฌ์ฌ์ฉํ๋๋ก ์ง์ํ๋ ๊ฒ์ด๋ค.
- ๊ฐ๋ก(ํก๋จ) ์์ญ์ ๊ณตํต๋ ๋ถ๋ถ์ ์๋ผ๋๋ค๊ณ ํ์ฌ ํฌ๋ก์ค ์ปทํ (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๊ฐ ์ ์ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์ต์ด ์ง์ ์ง์ ์ DispatcherServlet์ด ๋ด๋นํ๊ฒ ๋๋ค. ์ผ์ข ์ front controller์ด๋ค. ์ด servlet์ด ๋ค์ ์์ ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
- DispatcherServlet์ Spring Bean Definition์ ์ค์ ๋์ด ์๋ Handler Mapping ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ฌ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ Controller๋ฅผ ์ฐพ๋๋ค.
- DispatcherServlet์ ์ ํ๋ Controller๋ฅผ ํธ์ถํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์์ ์ ์ฒ๋ฆฌํ๋ค.
- Controller๋ Business Layer์ ํต์ ํ์ฌ ์ํ๋ ์์ ์ ์ฒ๋ฆฌํ ๋ค์ ์์ฒญ์ ๋ํ ์ฑ๊ณต ์ ๋ฌด์ ๋ฐ๋ผ ModelAndView ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค. ModelAndView ํด๋์ค์๋ UI Layer์์ ์ฌ์ฉํ Model ๋ฐ์ดํฐ์ UI Layer๋ก ์ฌ์ฉํ View์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค.
- DispatcherServlet์ ModelAndView์ View์ ์ด๋ฆ์ด ๋ ผ๋ฆฌ์ ์ธ View ์ ๋ณด์ด๋ฉด ViewResolver๋ฅผ ์ฐธ์กฐํ์ฌ ์ด ๋ ผ๋ฆฌ์ ์ธ View ์ ๋ณด๋ฅผ ์ค์ง์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ View๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
- DispatcherServlert์ ViewResolver๋ฅผ ํตํ์ฌ ์ ๋ฌ๋ View์๊ฒ ModelAndView๋ฅผ ์ ๋ฌํ์ฌ ๋ง์ง๋ง์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ํ๋ UI๋ฅผ ์ ๊ณตํ ์ ์๋๋ก ํ๋ค. ๋ง์ง๋ง์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ UI๋ฅผ ์ ๊ณตํ ์ฑ ์์ View ํด๋์ค๊ฐ ๋ด๋นํ๊ฒ ๋๋ค.
- JPA(Java Persistence API) : ์๋ฐ ์์์ฑ
- ๋๋ฉ์ธ ์ฃผ๋ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์ฝ๋์ ์ ์ ๋นํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ๋๋ฉ์ธ ๊ธฐ๋ฐ์ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋๋ฐ ์ง์คํ ์ ์๋ค.
- ๊ฐ๋ฐ ์์ฐ์ฑ์ด ์ข์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ๋ฆฝ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
- ํ์ ์์ ์ ์ธ ์ฟผ๋ฆฌ ์์ฑ, Persistent Context๊ฐ ์ ๊ณตํ๋ ์บ์ ๊ธฐ๋ฅ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ๊น์ง ๊ฐ๋ฅํ๋ค.
- ์์์ฑ ๊ด๋ฆฌ์ ORM์ ์ํ ํ์ค ๊ธฐ์ ์ด๋ค.
- ORM ํ์ค ๊ธฐ์ ๋ก Hibernate, OpenJPA, EclipseLink, TopLink Essentails๊ณผ ๊ฐ์ ๊ตฌํ์ฒด๊ฐ ์๊ณ ์ด์ ํ์ค ์ธํฐํ์ด์ค๊ฐ JPA์ด๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ง์ ํ SQL, ์ ์ฅํ๋ก์์ , ๊ทธ๋ฆฌ๊ณ ๋ช๊ฐ์ง ๊ณ ๊ธ ๋งคํ์ ์ง์ํ๋ Persistent ํ๋ ์์ํฌ๋ค.
- JDBC๋ก ์ฒ๋ฆฌํ๋ ์๋น ๋ถ๋ถ์ ์ฝ๋์ ํ๋ผ๋ฏธํฐ ์ค์ ๋ฐ ๊ฒฐ๊ณผ ๋งคํ์ ๋์ ํด์ค๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒฐ๊ณผ์ ์์ ํ์ ๊ณผ Map ์ธํฐํ์ด์ค ๊ทธ๋ฆฌ๊ณ POJO๋ฅผ ์ค์ ํด์ ๋งคํํ๊ธฐ ์ํด XML๊ณผ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ค.
- SqlSessionFactory์ ์ฌ์ฉํ๋ค. ์ค์ SQL๋ฅผ ํธ์ถํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- Java ์์ค์์ SQL์ ๋ถ๋ฆฌํด์ค๋ค.
- Spring 4.3+๋ถํฐ ์์ฑ์๊ฐ 1๊ฐ์ผ ๊ฒฝ์ฐ @Autowired์์ด ์์ฑ์ ์์กด์ฑ ์ฃผ์ ์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์ผ ์ฑ
์์ ์์น
- ์์ฑ์์ ์ธ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฝ๋๋๋ ๋ง์์ง๊ณ , ์์กด ๊ด๊ณ๋ ๋ง์์ ธ ๋จ์ผ ์ฑ ์์ ์์น์ ์๋ฐฐ๋๋ค.
- ์์กด๊ด๊ณ, ๋ณต์ก์ฑ์ ์ฝ๊ฒ ์์ ์์ด ๋ฆฌํฉํ ๋ง์ ๋จ์ด๋ฅผ ์ ๊ณตํ๊ฒ ๋๋ค.
- ํ
์คํธ ์ฉ์ด์ฑ
- ํน์ DI ์ปจํ ์ด๋์ ์์กดํ์ง ์๊ณ , POJO์ฌ์ผ ํ๋ค.
- DI ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ธ์คํด์คํ ํ ์ ์๊ณ , ๋จ์ ํ ์คํธ๋ ๊ฐ๋ฅํ๋ฉฐ ๋ค๋ฅธ DI ํ๋ ์์ํฌ๋ก ์ ํํ ์ ์๊ฒ ๋๋ค.
- immutability
- ํ๋๊ฐ final์ด ๊ฐ๋ฅํด ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ์ํ๊ฐ ๋๋ค.
- ์ํ ์์กด์ฑ
- ์์กด์ฑ ๋ช ์
- ์คํ ์ ์๋ธ๋ฆฟ.HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ์ ์๋ฐ ์์ค์ฝ๋๋ก ๋ณํํ ๋ค์ ์ปดํ์ผ๋์ด ์คํ๋๋ค.
- JSP ํ์ผ์ ์๋ธ๋ฆฟ ํด๋์ค๋ก ๋ณํํ๊ณ ์คํ์์ผ ์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ด๋ค.
- Netflix OSS์ ํ๋
- ๋ถ์ฐ ํ๊ฒฝ(MSA)์์ ์ฅ์ ๋ด์ฑ๊ณผ ์ง์ฐ ๋ด์ฑ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
- ์ต์ํ์ ๋ถํ๋ก ์ด์์ด ๊ฐ๋ฅํ๋ค.
- Circuit Breaker, DashBoard ๊ธฐ๋ฅ์ด ์๋ค.
- ๋ด๋ถ์ ์ผ๋ก RxJava๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
- Circuit Breaker ๊ตฌํ์ฒด๋ผ๊ณ ๋ ํ๋ค.
- ์๋น์ค๊ฐ ์์กด์ฑ์ด ๋ฐ์ํ๋ ์ ๊ทผ ํฌ์ธํธ๋ฅผ ๋ถ๋ฆฌ์์ผ์ ์ฅ์ ์ ํ๋ฅผ ๋ง๋๋ค.
- Fallback๋ฅผ ์ ๊ณตํ์ฌ ์์คํ ์ฅ์ ๋ก๋ถํฐ ๋ณต๊ตฌ๋ฅผ ์ ์ฐํ๊ฒ ํ๋ค.
- ์ค๋ ๋ ํ ๋ฐฉ์๊ณผ ์ธ๋งํฌ์ด ๋ฐฉ์์ด ์๋ค.
- ๋๊ธฐ ๋ฐฉ์๊ณผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑํ ์ ์๋ค.
- ์๋น์ค ํธ์ถ์ด ๋ณ๋์ ์ค๋ ๋์์ ์ํ๋๋ค.
- Tomcat ์ค๋ ๋ ํ๊ณผ ์๋น์ค ํธ์ถ ์ค๋ ๋ ํ์ด ๊ฒฉ๋ฆฌ๋๋ค.
- ์ฝ๊ฐ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- ๊ธฐ๋ณธ๊ฐ์ด๋ค.
- ์๋น์ค ํธ์ถ์ ์ํ ์ค๋ ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
- Tomcat ์ค๋ ๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
- 20๋ฒ์ ๋ฉ์๋ ์คํ ์ค, 10๋ฒ ์ด์ ์คํจ ์ ์ํท ๋ธ๋ ์ด์ปค๊ฐ ์ด๋ฆฐ๋ค.
- 19๋ฒ์ ๋ฉ์๋๊ฐ ์คํ๋ฌ๋ค๋ฉด, ๊ธฐ๋ณธ ์ถฉ์กฑ์ ๋ฏธ๋ฌ๋ก ์ํท๋ธ๋ ์ด์ปค๊ฐ ๋ฐ๋ํ์ง ์๋๋ค.
- 5์ด ์ด๋ด์ ๋จ ํ๋์ ๋ฉ์๋๋ฅผ ๋ค์ ์คํ ํ ์ฑ๊ณต ์ ์ํท ๋ธ๋ ์ด์ปค๊ฐ ๋ซํ๋ค. ์คํจํ ๊ฒฝ์ฐ ์ด๋ฆผ์ด ์ ์ง ๋๋ค.
- HystrixCommand, HystrixObservableCommand ๊ฐ์ฒด ์์ฑ
- Command ์คํ
- ์บ์ ์ํ ํ์ธ
- ํ๋ก ์ํ ํ์ธ
- ์ฌ์ฉ ๊ฐ๋ฅํ Thread Pool / Semaphore๊ฐ ์๋์ง ํ์ธ
- HystrixCommand.run() / HystrixObservableCommand.construc() ์คํ
- Calculate Circuit Health ํ์ธ
- Fallback ์คํ
- ์๋ต ๋ฐํ
- @HystrixCommand Annotation - threadPoolProperties
- coreSize : Thread Pool ๊ฐฏ์
- maximumSize : ์ต๋ Thread Pool ๊ฐฏ์
- allowMaximunSizeToDriverageFromCoreSize : ์ต๋ Queue ํฌ๊ธฐ ์์ฑ ํ์ฑํ
- maxQueueSize : ์ต๋ Queue Size
- queueSizeRejectionThreshold : ๊ฑฐ์ ๋ ๋ฉ์๋ Queue Size, ์ต๋ ํ ํฌ๊ธฐ์ ๋๋ฌํ์ง ์๋๋ผ๋ ๊ฑฐ๋ถ๊ฐ ๋ฐ์ํ๋ queue ํฌ๊ธฐ
- thread.timeoutInMilliseconds : ์ฐ๋ ๋ ํ์์์ ์๊ฐ
- circuitBreaker.requestVolumeThreshold : ๊ฐ์ ์๊ฐ ๋ด ์์ฒญ ๊ฐฏ์ ์ ํ
- Thread๋ฅผ ๋๋์ด ๋ค๋ฅธ Thread์ ์ ๊ทผํ๊ธฐ ์ด๋ ต๋๋ก ์ข ์์ฑ์ ์์ฒ ์ฐจ๋จ
- Application์ ์ ์์ด ๋ง์ back-end service๋ฅผ ๋์์ด ํธ์ถํ๋ค.
- ๊ฐ ์๋น์ค๋ Client library๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Client library๋ ํญ์ ๋ฐ๋๋ค.
- Client library๋ ์๋ก์ด ๋คํธ์ํฌ๋ฅผ ํธ์ถํ ์๋ ์๊ณ , retry, parsing, caching ๋ฑ์ logic์ ๊ฐ์ง๋ค.
- ์ Client library๋ฅผ ์ถ๊ฐํ ๋์ ์ํ์ฑ์ ๋ฎ์ถ ์ ์๋ค. ์ฅ์ ๋ ๊ฒฉ๋ฆฌ๋ Thread์์ ๋ฐ์ํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด Client library๋ก ๋ถํฐ ๋ณดํธ๋๋ค.
- queueing, scheduling, Context Switching ๋ฑ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์๋๋ค.
- Hystrix๋ ์์ ์ค๋ ๋์์ construct(), run()์ ์คํํ ๋, ๋ถ๋ชจ ์ค๋ ๋์์ ์ด ์ข ๋จ ์๊ฐ์ ์ธก์ ํ์ฌ ์ค๋ฒํค๋๋ฅผ ์ธก์ ํ๋ค.
- Netflix์์๋ 10์ต ๊ฑด ์ด์์ Hystrix Command๋ฅผ ์คํํ๋ฉฐ ๊ฐ API ์ธ์คํด์ค๋ง๋ค 5-20๊ฐ์ Thread๋ฅผ ๊ฐ์ง๊ณ ์๋ Thread Pool์ 40+๊ฐ๋ฅผ ์ค์ ํ๋ค.(๋๋ถ๋ถ์ Thread Pool ๋ด์ Thread ๊ฐ์๋ 10๊ฐ)
- 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()๋ฉ์๋ ์คํ์ ๋์
- Circuit Breaker ํจํด
- Bulkhead ํจํด
- Fall back ํจํด
- ์ธํฐ๋ท ์์์ HTTP๋ฅผ ํตํด ์ฌ์ฉ์ ์ปดํจํฐ๋ ์ฅ์น์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํํด ์ฃผ๋ ๋ฏธ๋ค์จ์ด
- ๋์ ์๋ฒ ์ปจํด์ธ ๋ฅผ ์ํํ๋ ๊ฒ์ผ๋ก ์ฃผ๋ก DB์๋ฒ์ ๊ฐ์ด ์ํ๋๋ค.
- ๋๋ถ๋ถ ์๋ฐ ๊ธฐ๋ฐ์ด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก Web Server์ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ด Web Server๊ฐ ์์ด๋ ์๋น์ค๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ฌ๋ฌ๊ฐ์ ํธ๋์ญ์ ์ ๊ด๋ฆฌํ๋ค.
- Servlet ํ์ด์ง๋ฅผ HTML ํํ๋ก ๋ณํํ๋ค.
- JSP์ ๊ฒฝ์ฐ java class ํ์ผ๋ก ์ปดํ์ผ ํ print ํ์์ผ๋ก ํ์ด์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
- ์ฌ์ฉ์์ ์์ฒญ์ ์ค๋ ๋ ๋ฐฉ์์์ผ๋ก ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ฉํฐ ์ฐ๋ ๋ ๊ธฐ๋ฐ์ด๋ค.
- Web Server/ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ์ผ ๋จผ์ ์ปจํ ์ด๋๊ฐ ์ด๋ฅผ ์๋ง๊ฒ ์ฒ๋ฆฌํ๋ค.
- ์ปจํ ์ด๋๋ web.xml๋ฅผ ์ฐธ์กฐํ์ฌ ํด๋น ์๋ธ๋ฆฟ์ ๋ํ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ httpServletRequest / httpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ ๋ฌํ๋ค.
- ๋ค์์ผ๋ก ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ ํธ์ถํ๋ค.
- ํธ์ถ๋ ์๋ธ๋ฆฟ์ ์์ ์ ๋ด๋นํ๊ฒ ๋ ์ค๋ ๋๋ ์์ฒญ์ ๋ฐ๋ผ doPost(), doGet()์ ํธ์ถํ๋ค.
- ํธ์ถ๋ doPost(), doGet() ๋ฉ์๋๋ ์์ฑ๋ ๋์ ํ์ด์ง๋ฅผ Response ๊ฐ์ฒด์ ์ค์ด์ ์ปจํ ์ด๋์ ์ ๋ฌํ๋ค.
- ์ปจํ ์ด๋๋ ์ ๋ฌ๋ฐ์ Response ๊ฐ์ฒด๋ฅผ HttpResponse ํํ๋ก ์ ํํ์ฌ ์น ์๋ฒ์ ์ ๋ฌํ๊ณ ์์ฑ๋์๋ ์ค๋ ๋๋ฅผ ์ข ๋ฃํ๊ณ , httpServletRequest / httpServletResponse ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํจ๋ค.
- 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
- Java๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ์๋ฒ์ธก ํ๋ก๊ทธ๋จ์ ๋งํ๋ค.
- ์น ์๋ฒ์ ์ฑ๋ฅ์ ํฅ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๋ฐ ํด๋์ค์ ์ผ์ข ์ด๋ค.
- JSP์ ๋น์ทํ ์ ์ด ์์ง๋ง, JSP๊ฐ HTML์ Java์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๋ ๋ฐ๋ฉด, Servlet์ Java์ฝ๋์ HTML์ ํฌํจํ๊ณ ์๋ค.
- ์ธ๋ถ ์์ฒญ๋ง๋ค Thread๋ก ์๋ตํ๋ค.
- Java๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์ ๋ค์ํ ํ๋ซํผ์์ ๋์ํ๋ค.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ html์ด๋ ์ค๋ธ์ ํธ๋ฅผ http ํ๋กํ ์ฝ์ ์ด์ฉํด ์ ์กํ๋ ๊ฒ์ด๋ค.
- ์ ์ ์ปจํ ์ธ ๋ฅผ ๊ด๋ฆฌํ๋ค.(html, css, js, ์ด๋ฏธ์ง๋ฑ)
- Apache, Nginx
- ์ฃผ์์ฐฝ์ URL์ ์ ๋ ฅํ๊ณ Enter๋ฅผ ์ ๋ ฅํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ URL์ ํด์ํ๋ค.
- URL์ด ๋ฌธ๋ฒ์ ๋ง์ผ๋ฉด Punycode ์ธ์ฝ๋ฉ์ URL์ host ๋ถ๋ถ์ ์ ์ฉํ๋ค.
- HSTS(HTTP Strict Transport Security) ๋ชฉ๋ก์ ๋ก๋ํด์ ํ์ธํ๋ค.
- DNS๋ฅผ ์กฐํํ๋ค.
- ARP(Address Resolution Protocol)๋ก ๋์(์๋ฒ)์ IP์ MAC์ฃผ์๋ฅผ ์์๋ธ๋ค.
- ์๋ฒ์ TCP ํต์ ์ ํตํด Socket๋ฅผ ์ฐ๋ค.
- HTTPS์ธ ๊ฒฝ์ฐ TLS HandShake๊ฐ ์ถ๊ฐ๋๋ค.
- HTTP ํ๋กํ ์ฝ๋ก ์์ฒญํ๋ค.
- ์๋ฒ๊ฐ ์๋ตํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋๋งํ๋ค.
- ์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น ์ฌ์ดํธ์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น ์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก ์ฌ์ฉ๋๋ค.
- ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค์ด๋ค.
- OAuth๋ฅผ ์ด์ฉํ๋ฉด ์ด ์ธ์ฆ์ ๊ณต์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ผ๋ฆฌ๋ ๋ณ๋์ ์ธ์ฆ์ด ํ์์๋ค.
- ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- ์ฉ์ด
- ์ฌ์ฉ์(Client) : ์๋น์ค ๊ณต๊ธ์์ ์๋น์๋ฅผ ์ฌ์ฉํ๋ ๊ณ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธ
- ์๋น์(App) : Open API๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋ฐ๋ OAuth๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค ์ ๊ณต์์๊ฒ ์ ๊ทผํ๋ ์น ์ฌ์ดํธ ๋๋ ์ ํ๋ฆฌ์ผ์ด์
- ์๋น์ค ์ ๊ณต์(Facebook) : OAuth๋ฅผ ํตํด ์ ๊ทผ์ ์ง์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ (Open API๋ฅผ ์ ๊ณตํ๋ ์๋น์ค)
- ์๋น์ ๋น๋ฐ๋ฒํธ : ์๋น์ค ์ ๊ณต์์์ ์๋น์๊ฐ ์์ ์์ ์ธ์ฆํ๊ธฐ ์ํ ํค
- ์์ฒญ ํ ํฐ(Request Token) : ์๋น์๊ฐ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ถํ์ ์ธ์ฆ๋ฐ๊ธฐ ์ํด ํ์ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์์ผ๋ฉฐ ํํค ์ ๊ทผ ํ ํฐ์ผ๋ก ๋ณํ๋๋ค.
- ์ ๊ทผ ํ ํฐ(Access Token) : ์ธ์ฆ ํ์ ์ฌ์ฉ์๊ฐ ์๋น์ค ์ ๊ณต์๊ฐ ์๋ ์๋น์๋ฅผ ํตํด์ ๋ณดํธ๋ ์์์ ์ ๊ทผํ๊ธฐ ์ํ ํค๋ฅผ ํฌํจํ ๊ฐ์ด๋ค.
- ์ธ์ฆ ๋ฐฉ์
- ์๋น์(App)๊ฐ ์๋น์ค ์ ๊ณต์(Facebook)์๊ฒ ์์ฒญ ํ ํฐ(Request Token)์ ์์ฒญํ๋ค.
- ์๋น์ค ์ ๊ณต์(Facebook)๊ฐ ์๋น์(App)์๊ฒ ์์ฒญ ํ ํฐ(Request Token)์ ๋ฐ๊ธํด์ค๋ค.
- ์๋น์(App)๊ฐ ์ฌ์ฉ์(Clinet)๋ฅผ ์๋น์ค ์ ๊ณต์(Facebook)๋ก ์ด๋์ํจ๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ์ ์ธ์ฆ์ด ์ํ๋๋ค.
- ์๋น์ค ์ ๊ณต์(Facebook)๊ฐ ์ฌ์ฉ์(Clinet)๋ฅผ ์๋น์(App)๋ก ์ด๋์ํจ๋ค.
- ์๋น์(App)๊ฐ ์ ๊ทผ ํ ํฐ(Access Token)์ ์์ฒญํ๋ค.
- ์๋น์ค ์ ๊ณต์(Facebook)๊ฐ ์ ๊ทผ ํ ํฐ(Access Token)์ ๋ฐ๊ธํ๋ค.
- ๋ฐ๊ธ๋ ์ ๊ทผ ํ ํฐ(Access Token)์ ์ด์ฉํ์ฌ ์๋น์(App)์์ ์ฌ์ฉ์ ์ ๋ณด(App์ด ์ํ๋ ์ง์ง ์ ๋ณด)์ ์ ๊ทผํ๋ค.
- 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 ์ฝ๋๊ฐ ์ฝ์ ๋ ํ์ด์ง๋ฅผ ์ด๋ฉด, ๊ณต๊ฒฉ ๋์์ด ๋๋ ์น ์ฌ์ดํธ๋ ์์กฐ๋ ๊ณต๊ฒฉ ๋ช ๋ น์ด ๋ฏฟ์ ์ ์๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ก๋ ๊ฒ์ผ๋ก ํ๋จํ๊ฒ ๋์ด ๊ณต๊ฒฉ์ ๋ ธ์ถ๋๋ค.
- ํน์ ์น ์ฌ์ดํธ๊ฐ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ฉํ๋ ์ํ๋ฅผ ๋ ธ๋ฆฐ ์ ์ด๋ค.
- ๊ณต๊ฒฉ ๊ณผ์
- ์ด์ฉ์๋ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธํด ์ ์์ ์ธ ์ฟ ํค๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค.
- ๊ณต๊ฒฉ์๋ ์ ์ฑ ๋งํฌ๋ฅผ ์ด๋ฉ์ผ์ด๋ ๊ฒ์ํ๋ค์ ๊ฒฝ๋ก๋ฅผ ํตํด ์ด์ฉ์์๊ฒ ์ ๋ฌํ๋ค.
- ์ด์ฉ์๊ฐ ๊ณต๊ฒฉ์ฉ ํ์ด์ง๋ฅผ ์ด๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฏธ์ง ํ์ผ์ ๋ฐ์์ค๊ธฐ ์ํด ๊ณต๊ฒฉ์ฉ URL์ ์ฐ๋ค.
- ์ด์ฉ์์ ์น์ธ์ด๋ ์ธ์ง ์์ด ์ถ๋ฐ์ง์ ๋์ฐฉ์ง๊ฐ ๋ฑ๋ก๋๋ฏธ์ผ๋ก์จ ๊ณต๊ฒฉ์ด ์๋ฃ๋๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ง์ด ๋ํ๋๋ ์ทจ์ฝ์ ์ ํ๋์ด๋ค.
- ์น ์ฌ์ดํธ ๊ด๋ฆฌ์๊ฐ ์๋์ด๊ฐ ์น ํ์ด์ง์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ ์ ์๋ ์ทจ์ฝ์ ์ด๋ค.
- ์ฃผ๋ก ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋ณด๊ฒ๋๋ ๊ฒ์ํ์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ๋ด๊ธด ๊ธ์ ์ฌ๋ฆฌ๋ ํํ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ ๋ฐ์ ๊ฐ์ ์ ๋๋ก ๊ฒ์ฌํ์ง ์๊ณ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ํ๋๋ค.
- ์ด ์ทจ์ฝ์ ์ผ๋ก ํด์ปค๊ฐ ์ฌ์ฉ์์ ์ ๋ณด(์ฟ ํค, ์ธ์ )์ ํ์ทจํ๊ฑฐ๋ ์๋์ผ๋ก ๋น์ ์์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๊ฒ ํ ์ ์๋ค.
- ์ฃผ๋ก ๋ค๋ฅธ ์น ์ฌ์ดํธ์ ์ ๋ณด๋ฅผ ๊ตํํ๋ ์์ผ๋ก ์๋ํ๋ฏ๋ก ์ฌ์ดํธ ๊ฐ ์คํฌ๋ฆฝํ ์ด๋ผ๊ณ ํ๋ค.
- ์ฌ์ฉ์๊ฐ ํน์ ์น ์ฌ์ดํธ๋ฅผ ์ ์ฉํ๋ ์ ์ ๋ ธ๋ฆฐ ๊ฒ์ด๋ค.
- ํด๋ผ์ด์ธํธ ๋ก์ปฌ์ ์ ์ฅ๋๋ ํค์ ๊ฐ์ด ๋ค์ด์๋ ์์ ๋ฐ์ดํฐ ํ์ผ์ด๋ค.
- ์ด๋ฆ, ๊ฐ, ๋ง๋ฃ๋ ์ง(์ฟ ํค ์ ์ฅ๊ธฐ๊ฐ), ๊ฒฝ๋ก ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
- ์ผ์ ์๊ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.(๋ก๊ทธ์ธ ์ํ ์ ์ง์ ํ์ฉ)
- ํด๋ผ์ด์ธํธ์ ์ํ ์ ๋ณด๋ฅผ ๋ก์ปฌ์ ์ ์ฅํ๋ค๊ฐ ์ฐธ์กฐํ๋ค.
- ์ฟ ํค๋ ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ์์ฒญํ์ง ์์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์์ ํค๋๋ฅผ ๋ฃ์ด์ ์๋์ผ๋ก ์๋ฒ์ ์ ์กํ๋ค.
- ํ๋ก์ธ์ค
- ๋ธ๋ผ์ฐ์ ์์ ์น ํ์ด์ง ์ ์
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์น ํ์ด์ง๋ฅผ ๋ฐ์ผ๋ฉด์ ์ฟ ํค๋ฅผ ํด๋ผ์ด์ธํธ(๋ก์ปฌ ์คํ ๋ฆฌ์ง)์ ์ ์ฅ
- ํด๋ผ์ด์ธํธ๊ฐ ์ฌ ์์ฒญ์ ์์ฒญ๊ณผ ํจ๊ป ์ฟ ํค๊ฐ๋ ์ ์ก
- ์ง์์ ์ผ๋ก ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ ์ฒ๋ผ ์ฌ์ฉ
- ์ผ์ ์๊ฐ๋์ ๊ฐ์ ๋ธ๋ผ์ฐ์ ๋ก๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ ๊ทธ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ์
- ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์น ์๋ฒ์ ์ ์ํ ์ด๋ฃจํธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ ๋ ๊น์ง ์ ์ง๋๋ ์ํ
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋น ์๋ฒ์ ์์ง์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ผํ ID๋ฅผ ๋ถ์ฌํ๋๋ฐ ์ด๊ฒ์ด ์ธ์ ID์ด๋ค.
- ์ธ์ ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ID๊ฐ ํ์ํ๊ณ ๊ทธ ID๋ง ์ฟ ํค๋ฅผ ์ด์ฉํด ์ ์ฅํด๋๋๋ค.
- ํ๋ก์ธ์ค
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์์ ์ธ์ ID๋ฅผ ๋ฐ๊ธํ๋ค.
- ์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ก ๋ฐ๊ธํด์ค ์ธ์ ID๋ฅผ ์ฟ ํค๋ฅผ ์ฌ์ฉํด ์ ์ฅํ๋ค.(JSESSIONID)
- ํด๋ผ์ด์ธํธ๋ ๋ค์ ์ ์ํ ๋ ์ด ์ฟ ํค๋ฅผ ์ด์ฉํด์ ์ธ์ ID๊ฐ์ ์๋ฒ์ ์ ๋ฌํ๋ค.
- Statelss๋ฐฉ์์ด๋ค. ์ํ์ ์ง๋ฅผ ํ์ง ์๋๋ค.
- ์ฌ์ฉ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ๋ ์ธ์ ์ ๋ด์๋์ง ์๋๋ค.
- ์ธ์ ์ด ์กด์ฌํ์ง ์์ผ๋ ๋ก๊ทธ์ธ ๋์ด์๋์ง ์ ๋์ด์๋์ง ์ ๊ฒฝ๋ ์ฐ์ง ์์ผ๋ฉด์ ์๋ฒ๋ฅผ ์์ฝ๊ฒ ํ์ฅํ ์ ์๋ค.
- ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ ์ ์ ํฉํ๋ค.
- ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌํ ์ ์๋ค.(OAuth)
- ์๋ฒ ๊ธฐ๋ฐ ์ธ์ฆ์ ๋ฌธ์ ์ - ์ธ์ , ํ์ ์ฑ, CORS์ ๋ฌธ์ ์ ์ ๋ณด์ํ ์ ์๋ค.
- WWW ์์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ
- TCP, UDP, IP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
- 80๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฐ๊ฒฐ ์ํ๋ฅผ ์ ์งํ์ง ์๋ ํ๋กํ ์ฝ์ด๋ค.
- ์๋ฒ์ ์ ์ํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์๋ต์ ์ ์ก ํ ์ฐ๊ฒฐ ์ข ๋ฃ
- ์ ์ฐ ์์์ด ์ ๊ฒ ๋ค์ง๋ง, ํด๋ผ์ด์ธํธ ๊ตฌ๋ถ์ด ํ๋ค๋ค.
- ์์ฒญ์ด ๋ง์ ์ง ๊ฒฝ์ฐ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฐ์
- Cookie, Session, Token๋ฑ์ ์ฌ์ฉํด ๋จ์ ํด์
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ(Request) / ์๋ต(Response) ํ๋กํ ์ฝ์ด๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ค.
- Request : ํด๋ผ์ด์ธํธ์ ์ํด ์ ๋ฌ๋์ด ์๋ฒ์ ๋์์ ์ผ์ผํจ๋ค. ์์ฒญ ๋ฉ์์ง
- Response : Request์ ๋ํ ์๋ฒ์ ํ์ ์ด๋ค. ์๋ต ๋ฉ์์ง
- ASCII๋ก ์ธ์ฝ๋ฉ ๋ ํ ์คํธ ์ ๋ณด๋ก ๊ตฌ์ฑ๋๊ณ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋ง๋ค์ด์ง๋ค.
- ์์์ค : Http Method, Request Target(์์ฒญ ๋์, URL, ๋๋ฉ์ธ), Http ๋ฒ์ ์ ๋ณด, Http Status Code๋ฑ์ ํฌํจํ๋ค.
- ํค๋(Header)
- ๋ณธ๋ฌธ(body, payload) : ์ ์กํ๊ณ , ์ ์ก ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค
- 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 : ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ๋งบ์ด์ง ์ฐ๊ฒฐ์ ํตํด ์๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๊ฐ ์ด์์ ๋ฉ์์ง๋ฅผ ์๋ฏธ
- ํ๋ ์์ด ์ฌ๋ฌ๊ฐ๊ฐ ๋ชจ์ฌ ๋ฉ์์ง, ๋ฉ์์ง๊ฐ ์ฌ๋ฌ๊ฐ ๋ชจ์ฌ ์คํธ๋ฆผ์ด ๋๋ ๊ตฌ์กฐ์ด๋ค.
- HTTP์ ๋ณด์์ด ๊ฐํ๋ ๋ฒ์ ์ด๋ค.
- S๋ Over Secure Socket Layer์ ์ฝ์์ด๋ค.
- ์์ผ ํต์ (TCP)์์ ์ผ๋ฐ ํ ์คํธ ๋์ ์ SSL์ด๋ TLS ํ๋กํ ์ฝ์ ํตํด ์ธ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ค.
- ๋ฐ์ดํฐ์ ์ ์ ํ ๋ณดํธ๋ฅผ ๋ณด์ฅํ๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ์ SSL์ ํ์ํ ํต์ ์ด ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ์ ํต์ ์ด ๋๋ ค์ง๋ค.
- ์ํธํ ๋ณตํํ ๊ณ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์์ ์ถ๊ฐ์ ์ผ๋ก ์๋นํ๋ค.
- ์ฆ๋ช ์๋ฅผ ๊ตฌ์ ํด์ผ ํ๋ค.
- ์ธํฐ๋ท์ ์๋ ์์์ ๋ํ๋ด๋ ์ ์ผํ ์ฃผ์์ด๋ค.
- ์์์ ์๋ณํ ์ ์๋ ๋ฌธ์์ด์ด๋ค.
- ํ์ ๊ฐ๋ ์ผ๋ก URL, URN์ด ์๋ค.
- 127.0.0.1:8080/users?name=๋ฐฐ๋ค์ฌ ์ URI, name=๋ฐฐ๋ค์ฌ ์ด๋ผ๋ ์๋ณ์๊ฐ ์๋ค.
- ๋คํธ์ํฌ ์์์ ์์์ด ์ด๋์๋์ง๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํ ๊ท์ฝ์ด๋ค.
- 127.0.0.1:8080/users/image.jpg
- ํน์ ์์์ ๋ํด ๊ทธ ์์์ ์์น์ ์ํฅ์ ๋ฐ์ง ์๋ ์ ์ผ๋ฌด์ดํ ์ด๋ฆ ์ญํ ์ ํ๋ค.
- ์์์ ์ฌ๊ธฐ์ ๊ธฐ๋ก ์ฎ๊ธฐ๋๋ผ๋ ๋ฌธ์ ์์ด ๋์ํ๋ค.
- DNS
- ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ์ด๋ค.
- ๋ธ๋ผ์ฐ์ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์์๋ ํต์ ํ ์ ์์ด์ผ ํ๋ค.
- 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๋ฅผ ์ด์ฉํด์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๋ค.
- ํด๋ผ์ด์ธํธ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋ค.
- ์๋ก๊ฐ์ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ์๋ฒ์ ๋น๋๊ธฐ ์์ผ๋ก ์์ฒญํ๋ ๊ฒ์ด๋ค.
- ๋์ ๊ณผ์
- XMLHTTP Request Oject๋ฅผ ๋ง๋ ๋ค.
- ์์ฒญ์ ๋ณด๋ผ ์ค๋น๋ฅผ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ํค๋ ๊ณผ์ ์ด๋ค.
- ์ด๊ฒ์ ์ํด ํ์ํ method๋ฅผ ๊ฐ์ถ object๊ฐ ํ์ํ๋ค.
- Callback ํจ์๋ฅผ ๋ง๋ ๋ค.
- ์๋ฒ์์ ์๋ต์ด ์์ ๋ ์คํ์ํค๋ ํจ์์ด๋ค.
- html ํ์ด์ง๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
- Open a Request
- ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๋๊ธด๋ค.
- ๋ธ๋ผ์ฐ์ ๊ฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉํ method
- ์์ฒญ์ด ๊ฐ URL
- ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ ๊ฐ์ง ์ ๋ณด๋ฅผ ๋๊ธด๋ค.
- Send the Request
- XMLHTTP Request Oject๋ฅผ ๋ง๋ ๋ค.
- ํ์ด์ง ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ๋ถ๋ง ๊ฐฑ์ ํ ์ ์๋๋ก XML HttpRequest(XHR) ๊ฐ์ฒด๋ฅผ ํตํด ์๋ฒ์ ์์ฒญํ๋ค.
- XHR ๊ฐ์ฒด๋ฅผ ํ์ฑํ๊ณ ์ด ๊ฐ์ฒด์ ์ฝ๋ฐฑ์ ๋ง๋ค๊ณ , html ๋ฉ์๋์ url์ ๊ฒฐ์ ํ ๋ค XHR ๊ฐ์ฒด์ ๋ฉ์๋๋ก ์ ๋ณด๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
- ๊ถํ ๋ถ์ฌ
- ํด๋น ์์์ ๋ํด์ ์ฌ์ฉ์๊ฐ ๊ทธ ์์์ ์ฌ์ฉํ ๊ถํ์ด ์๋์ง ์ฒดํฌํ๋ ๊ถํ ์ฒดํฌ ๊ณผ์ ์ด๋ค.
- ์ธ์ฆ ๊ณผ์
- ์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ๊ฐ๋ฅํ๋์ง๋ฅผ ํ์ธํ๋ ์ ์ฐจ์ด๋ค.
- Host์ Domain์ด๋ฆ์ Host์ ๋คํธ์ํฌ๋ก ๋ฐ๊พธ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๋ณํ์ ์ํํ ์ ์๋๋ก ๊ฐ๋ฐ๋์๋ค.
- WWW์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋๋ ๊ธฐ๋ฐ ๊ธฐ์ ์ด๋ค.
- ๋ถ์ฐํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด๋ค.
- POST : ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ์ง ์์์ ๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฐ์ฐ์ด๋ค. Idempotentํ์ง ์๋ค.
- PUT : ๋ฆฌ์์ค์ ์์น๋ฅผ ๋ช ํํ ์ง์ ํ ํ ์์ฒญ์ ํ๋ค. Idempotentํ๋ค.
- PATCH : ๋ฆฌ์์ค์ ๋ถ๋ถ๋ง์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๋ฆฌ์์ค์ ์์น๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์๊ณ ์์ ๋ ์ฌ์ฉํ๋ค.
- FILO
- ์ํคํ ์ฒ ์์ค์์ ์คํ์ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ๋ฐ ์ ๊ทผ ์๋จ์ ์๋ฏธํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- FIFO
- ํ๋ฆฐํฐ์ ์ถ๋ ฅ ์ฒ๋ฆฌ, ์๋์ฐ์ ๋ฉ์์ง ์ฒ๋ฆฌ๊ธฐ, ํ๋ก์ธ์ค ๊ดธ๋ฆฌ๋ฑ ์ฌ์ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ํน์ ์๋ฃํ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์์ ์ฐ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ผ๋ก ๋์ดํด๋์๋ค๋ ํน์ฑ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ์ด ์์ฒญ๋๊ฒ ๋น ๋ฅด๋ค.
- index ๊ฐ์ ํตํด ๋ฐ๋ก ์ํ๋ ๊ณต๊ฐ์ ๊ฐ์ ์๋ฃ๋ฅผ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฑ ํ๋ฒ์ ์ ๊ทผ๋ง ํ์ํ๋ค.
- immutable์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐํ์ฉ์ ์ ์ฝ์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ญ์ ๊ฐ ๋น ํจ์จ์ ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(1)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ์ฌ๋ฌ๊ฐ์ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐ๋ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์์ ๊ฐ ๋ ธ๋๋ค์ด ์ฐ์์ ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ง ์๊ณ ํฉ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์์ ์ ๋ค์ ๋ ธ๋์ ์์น๋ฅผ ์๊ณ ์๋ ํํ๋ก ๊ตฌํ๋๋ค.
- ๊ฐ ๋ ธ๋๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ด๋์ ์์นํ๋์ง ๊ฐ๊ฐ์ ๋ ธ๋๋ค๋ง ์๊ณ ์๊ณ , ์ฌ์ฉ์๋ ์ ์ผ ์ฒซ ๋ ธ๋์ ์์น๋ง ์๊ณ ์๊ฒ ๋๋ค.
- ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ณ ํ๋ ๊ณผ์ ์ ํตํด ์ต๋ ๋ ธ๋์ ์๋ฅผ ์ธ์ ๋ ์ง ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฐ์ ์ ๋์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ๋ ธ๋์ ์ฝ์ , ์ญ์ ๋ ๋ฐฐ์ด์ ๋นํด ๊ฐ๋จํ๋ค.
- ๋ฐ์ดํฐ์ ์ ๊ทผ์ด ๋ค์ ๋๋ฆฌ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ์ฉ ๋ฐ ๋ฐ์ดํฐ์ ์ถ๊ฐ์ ์ญ์ ๊ฐ ํจ์จ์ ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- key - value ํํ๋ก ์ฝ์ ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ket๋ ์ค๋ณต์ด ์๋๋ค.
- 1๋1 ๋งคํ ๊ตฌ์กฐ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์์์ ์๊ด์์ด ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์กด์ฌ, ์งํฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์ฌ๋ฌ ๋ ธ๋๊ฐ ํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(log n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์ผ ์์คํ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ํ๋์ ๋ ธ๋๊ฐ ๊ฐ์ง ์ ์๋ ์์ ๋ ธ๋์ ์ซ์๊ฐ 2๋ณด๋ค ํฐ ํธ๋ฆฌ ๊ตฌ์กฐ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ค.
- ์ต๋ ํ๊ณผ ์ต์ ํ์ด ์๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(log n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์๋ฆฌ๊ฐ ๋ฐ์ดํฐ ํด์ ๊ฐ์ ์ํด ๊ฒฐ์ ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ํด์ ํ ์ด๋ธ์ ์ฑ๋ฅ์ ๊ณต๊ฐ์ ํ์ ์ป์ด๋ธ ๊ฒ์ด๋ค.
- ์ ์ฅํ ๋ฐ์ดํฐ์ ๊ฐ์ผ๋ก ์ ์ฅํ ์์น๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
- ํ๊ท ์์ ์๊ฐ์ ์ฝ์ , ์ญ์ , ๊ฒ์์ด ๊ฐ๋ฅํ๋ค.
- ๋งค์ฐ ๋น ๋ฅด๊ฒ ์๋ฃ๋ฅผ ์ ์ฅ / ๊ฒ์ํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
- ์ถฉ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
- Chaning : ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ Linked List์ ์ ์ฅํ๋ค.
- Linear Probing : ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ ๋ค์ ์นธ์ ์ ์ฅํ๋ค.
- Quadratic Probing : ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ ๋ค์ ์นธ์ ์ ์ฅํ ๋, ์ ๊ณฒํ ์นธ์ ์ ์ฅํ๋ค.
- Double Hashing : ๊ฑด๋ ๋ฐ๋ ํญ์ด ๋งค๋ฒ ๋ค๋ฅด๊ฒ ํด์๋ฅผ ๋๋ฒํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ๋ด๋ถ์ ์ผ๋ก Entry<K, V>[] entry์ ๋ฐฐ์ด๋ก ๋์ด์๋ค.
- ํด๋น ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ ๋ด๋ถ ํด์ฌ ํจ์๋ฅผ ํตํด ๊ณ์ฐ๋๋ค.
- ๋ด๋ถ ํด์๊ฐ์ ๋ฐ๋ผ์ ํค ์์๊ฐ ์ ํด์ง๋ฏ๋ก ํน์ ๊ท์น์์ด ์ถ๋ ฅ๋๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ๋ด๋ถ์ ์ผ๋ก Red-Black Tree๋ก ์ ์ฅ๋๋ค.
- ํค๊ฐ์ ๋ํ Compartor ๊ตฌํ์ผ๋ก ์ ๋ ฌ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
- ํค๊ฐ์ด ์ ๋ ฌ๋๋ค.
- ํธ๋ฆฌ์ ์ ์ฅ๋๋ฏ๋ก ํค๊ฐ์ ์ผ์ ํ ๊ธฐ์ฅฐ์ผ๋ก ์ ๋ ฌ๋ ์ํ๋ก ์ถ๋ ฅ๋๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- Linked List๋ก ์ ์ฅ๋๋ค.
- ํค๊ฐ์ ์ ๋ ฅ ์์๋๋ก ์ถ๋ ฅ๋์ด์ ๋์จ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O()
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์ธ์ ํ ๋ ๊ฐ๋ฅผ ๋น๊ตํ๋ฉด์ ๊ตํํ๊ณ ์งํํ๋ค.
- ํ๋์ ๋ฐฐ์ด๋ง ์ฌ์ฉํด์ ์ ๋ ฌ์ ์งํํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n^2)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ํ๋ฒ ์ํ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ํฐ ์๋ฅผ ์ฐพ์์ ๋ฐฐ์ด์ ๋ง์ง๋ง ์์น์ ๊ตํํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n^2)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ํ์ฌ ์์น๋ณด๋ค ์๋์ชฝ์ ์ํํ๋ค.
- ํ์ฌ ์์น์ ๊ฐ์ ํ์ฌ ์์น๋ณด๋ค ์๋์ชฝ์ผ๋ก ์ํํ๋ฉฐ ์๋ง์ ์์น์ ๋ฃ์ด์ค๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n^2), ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด์๋ค๋ฉด O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ์ ๋ ฌํ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์ผ๋ก ์ชผ๊ฐ๋๊ฐ๋ฉฐ ์ข, ์ฐ ๋ฆฌ์คํธ๋ฅผ ๊ณ์ํ์ฌ ๋ถํ ํด ๋๊ฐ ํ ๊ฐ ๋ฆฌ์คํธ ๋ด์์ ์ ๋ ฌ ํ ๋ณํฉ, ์ ๋ ฌ ํ ๋ณํฉํ๋ ๊ณผ์ ์ ํตํด ์ ๋ ฌํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n log n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- real-world ๋ฐ์ดํฐ์์ ๋น ๋ฅด๋ค๊ณ ์๋ ค์ ธ ์์ด ๊ฐ์ฅ ๋ง์ด ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
- pivot์ ์ ์ ํ์ฌ pivot์ ๊ธฐ์ค์ผ๋ก ์์ ๊ฐ์ ์ผ์ชฝ, ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฌ๋ฐฐ์น๋ฅผ ํ๊ณ ๊ณ์ํด์ ๋ถํ ํ์ฌ ์ ๋ ฌํ๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n log n), ์ต์ ์ ๊ฒฝ์ฐ O(n^2)
- ๊ณต๊ฐ ๋ณต์ก๋ : O()
- ์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์๊ฐ ๋ณต์ก๋ : O(n log n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- O(log n)
- ์ ๋ ฌ๋ ์๋ฃ๋ฅผ ๋ฐ์ผ๋ก ๋๋์ด ํ์ํ๋ ๋ฐฉ๋ฒ
- ์๋ฃ๋ ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ์๋ฃ์ฌ์ผ ํ๋ค.
- ๊ตญ์ ํ์คํ๊ธฐ๊ตฌ์์ ๊ฐ๋ฐํ ๋ชจ๋ธ์ด๋ค.
- ์ปดํจํฐ ๋คํธ์ํฌ ํ๋กํ ์ฝ ๋์์ธ๊ณผ ํต์ ์ ๊ณ์ธต์ผ๋ก ๋๋์ด ์ค๋ช ํ ๊ฒ์ด๋ค.
- ์ํธ ์ด์ง์ ์ธ ๋คํธ์ํฌ๊ฐ์ ์ฐ๊ฒฐ์ ์ด๋ ค์์ด ๋ง์๋ฐ ์ด๋ฌํ ํธํ์ฑ์ ๊ฒฐ์ฌ๋ฅผ ๋ง๊ธฐ ์ํด OSI ์ฐธ์กฐ ๋ชจ๋ธ์ ๋ง๋ค์๋ค.
- ์ค์ ์ธํฐ๋ท์์ ์ฌ์ฉ๋๋ TCP/IP๋ OSI ์ฐธ์กฐ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ์ ์ด๊ณ ์ค๋ฌด์ ์ผ๋ก ์ด์ฉ๋ ์ ์๋๋ก ๋จ์ํ๋ ํ์คํ์ ๊ณผ์ ์์ ์ฑํ๋ ๋ชจํ์ด๋ค.
- ํ์ค๊ณผ ํ์ต ๋๊ตฌ๊ฐ ๊ฐ์ฅ ์ค์ํ ๋ชฉ์ ์ด๋ค.
- ์ค์ ์ฅ์น๋ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์ํ ์ ๊ธฐ์ , ๋ฌผ๋ฆฌ์ ์ธ๋ถ์ฌํญ๋ค์ ์ ์ํ๋ค.
- ๋ฏ๋ฆฌ์ ์ธ ์ ๋ณด ์ ๋ฌ ๋งค๊ฐ์ฒด์ ๋ํ ์ฐ๊ฒฐ์ ์ฑ๋ฆฝ ๋ฐ ์ข ๋ฃ
- ๋คํธ์ํฌ์์์ ๋ฐ์ดํฐ ๋นํธ๋ฅผ ์ ์กํ๋ ๊ณ์ธต์ด๋ค.
- ๋ฐ์ดํฐ ๋งํฌ ๊ฐ์ฒด๊ฐ์ ๋นํธ ์ ์ก์ ์ํ ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ์ ์ค์ , ์ ์ง, ํด์ ํ๊ธฐ ์ํ ์๋จ์ ์ ๊ณตํ๋ค.
- ์ฅ๋น : ํ๋ธ, ๋ฆฌํผํฐ
- ๋ฐ์ดํฐ ๋จ์ : ๋นํธ(Bit)
- Point to Point(ํฌ์ธํธ ํฌ ํฌ์ธํธ)๊ฐ ์ ๋ขฐ์ฑ์๋ ์ ์ก์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ณ์ธต์ด๋ค.
- CRC ๊ธฐ๋ฐ์ ์ค๋ฅ ์ ์ด์ ํ๋ฆ ์ ์ด๊ฐ ํ์ํ๋ค.
- ์ค๋ฅ์์ด ํ ์ฅ์น์์ ๋ค๋ฅธ ์ฅ์น๋ก ํ๋ ์์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.
- 3๊ณ์ธต์์ ์ ๋ณด๋ฅผ ๋ฐ์ ์ฃผ์์ ์ ์ด์ ๋ณด๋ฅผ ํค๋์ ๋์ ์ถ๊ฐํ๋ค.
- ์ฅ๋น : ๋ธ๋ฆฟ์ง, ์ค์์น
- ํ๋กํ ์ฝ : MAC, PPP
- ๋ฐ์ดํฐ ๋จ์ : ํ๋ ์(Frames)
- ์ฌ๋ฌ๊ฐ์ ๋ ธ๋๋ฅผ ๊ฑฐ์น ๋๋ง๋ค ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ฃผ๋ ์ญํ ์ ํ๋ ๊ณ์ธต์ด๋ค.
- ๋ผ์ฐํ , ํจํท ํฌ์๋ฉ, ์ธ๊ทธ๋ฉํ ์ด์ ๋ฑ์ ์ํํ๋ค.
- ๋ค์ค ๋คํธ์ํฌ ๋งํฌ์์ ํจํท์ ๋ฐ์ ์ง๋ก๋ถํฐ ๋ชฉ์ ์ง๋ก ์ ๋ฌํ ์ฑ ์์ ๊ฐ๋๋ค.
- ์ฅ๋น : ๋ผ์ฐํฐ
- ํ๋กํ ์ฝ : IP, ICMP, IGMP, ARP
- ๋ฐ์ดํฐ ๋จ์ : ํจํท(Packets)
- End to End(์ข ๋จ ๋ ์ข ๋จ)์ ์ฌ์ฉ์๋ค์ด ์ ๋ขฐ์ฑ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ํด ์ฃผ๋ ๊ณ์ธต์ด๋ค.
- ์์ ๊ณ์ธต๋ค์ด ๋ฐ์ดํฐ ์ ๋ฌ์ ์ ํจ์ฑ์ด๋ ํจ์จ์ฑ์ ์๊ฐํ์ง ์๋๋ก ํด์ค๋ค.
- ๋ฐ์ ์ง ๋ ๋ชฉ์ ์ง๊ฐ ์ ์ด์ ์๋ฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ํจํท๋ค์ ์ ์ก์ด ์ ํจํ์ง ํ์ธํ๊ณ ์คํจํ ํจํท์ ๋ค์ ๋ณด๋ด๋ ๋ฑ ์ ๋ขฐ์ฑ์๋ ํต์ ์ ๋ณด์ฅํ๋ค.
- ์ํ์ค ๋๋ฒ ๊ธฐ๋ฐ์ ์ค๋ฅ ์ ์ด ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- ๋จธ๋ฆฟ๋ง์๋ ์ธ๊ทธ๋จผํธ๊ฐ ํฌํจ๋๋ค.
- ์ฅ๋น : ๊ฒ์ดํธ์จ์ด
- ํ๋กํ ์ฝ : TCP, UDP, ARP
- ๋ฐ์ดํฐ ๋จ์ : ์ธ๊ทธ๋จผํธ(Segments)
- ํต์ ์ธ์ ์ ๊ตฌ์ฑํ๋ ๊ณ์ธต์ด๋ค.
- ์ ๋๋จ์ ์์ฉ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
- ์ด ๊ณ์ธต์ TCP/IP ์ธ์ ์ ๋ง๋ค๊ณ ์์ ๋ ์ฑ ์์ ์ง๋ค.
- ํฌํธ ์ฐ๊ฒฐ
- ํต์ ์ฅ์น๊ฐ์ ์ํธ์์ฉ์ ์ค์ ํ๊ณ ์ ์งํ๋ฉฐ ๋๊ธฐํํ๋ค.
- ์ฌ์ฉ์๊ฐ์ ํฌํธ์ฐ๊ฒฐ(์ธ์ )์ด ์ ํจํ์ง ํ์ธํ๊ณ ์ค์ ํ๋ค.
- ํ๋กํ ์ฝ : SSH, TLS
- ๋ฐ์ดํฐ ๋จ์ : ๋ฐ์ดํฐ(Data)
- ์ด์์ฒด๊ณ์ ํ ๋ถ๋ถ์ผ๋ก ์ ๋ ฅ, ์ถ๋ ฅ๋๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ํํ ํํ๋ก ๋ณํํ๋ค.
- ํ์ํ ๋ฒ์ญ์ ์ํํ์ฌ ๋ ์ฅ์น๊ฐ ์ผ๊ด๋๊ฒ ์ ์ก ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ดํดํ ์ ์๋๋ก ํ๋ค.
- ์์ถ
- ํ๋กํ ์ฝ : JPEG, MPEG, SMB, AFP
- ๋ฐ์ดํฐ ๋จ์ : ๋ฐ์ดํฐ(Data)
- ์ฌ์ฉ์๊ฐ ๋คํธ์ํฌ์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ๊ณ์ธต์ด๋ค.
- ์ฌ์ฉ์ ์ธํฐํ์ด์ค, ๋ฉ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๋ฑ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
- ํ๋กํ ์ฝ : DHCP, DNS, FTP, HTTP
- ๋ฐ์ดํฐ ๋จ์ : ๋ฐ์ดํฐ(Data)
- ๋ชจ๋ ์๋ฒ๋ค์ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ํด ์ฌ์ฉ๋๋ค.
- ์ค์์น๋ก ๋ค์ด์จ ํจํท์ ์ ์ ํ ๋ชฉ์ ์ง(์๋ฒ)๋ก ์ ์กํด์ฃผ๋ ๊ฒ์ด๋ค.
- 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์ ๊ธฐ์ค์ผ๋ก ๋ถํ ๋ถ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์ฐ๊ฒฐ ์งํฅํ ํ๋กํ ์ฝ
- ๋ฐ์ดํฐ์ ๊ฒฝ๊ณ๊ฐ ์๋ค.
- ์ ํ(๋ฐ์๋์ง ๋ชป ๋ฐ์๋์ง ํ์ธ์ด ๊ฐ๋ฅํ๋ค.)
- UDP์ ๋นํด ์ ์ก ์๋๊ฐ ๋๋ฆฌ๋ค.
- ์๋ฒ ์์ผ๊ณผ ํด๋ผ์ด์ธํธ ์์ผ์ ๊ตฌ๋ถ์ด ์๋ค.
- ์ ์ก ์์๋๋ก ๋ฐ์ดํฐ๊ฐ ์ก์ ๋๊ณ ์์ ๋๋ค.
- ์ค๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ฉธ๋์ง ์๋๋ค.
- 1๋1 ์ฐ๊ฒฐ๊ตฌ์กฐ์ด๋ค.
- TCP ํต์ ์ ํ๊ธฐ ์ํ ์ฐ๊ฒฐ ๋ฐฉ์์ด๋ค.
- ์ต์ด์ ์๋ฒ์์ ์ด๋ ค ์๋ ํฌํธ๋ LISTEN, ํด๋ผ์ด์ธํธ์์๋ CLOSED ์ํ๋ค.
- ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ์ฐ๊ฒฐ ์์ฒญ์ ํ๊ธฐ ์ํด ์ฐ๊ฒฐํ๊ณ ์ ํ๋ ์๋ฒ์ ํฌํธ๋ก SYN์ ๋ณด๋ธ๋ค.
- ์๋ฒ์์๋ ํด๋น ํฌํธ๋ LISTEN ์ํ์์ SYN์ ๋ฐ๊ณ SYN_RCV ์ํ๊ฐ ๋๋ค.
- ํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ์ ์์ ์ผ๋ก ๋ฐ์๋ค๋ ๋๋ต(ACK)๊ณผ ํด๋ผ์ด์ธํธ์๊ฒ ํฌํธ๋ฅผ ์ด์ด๋ฌ๋ผ๋ SYN์ ๋ณด๋ธ๋ค.
- ํด๋ผ์ด์ธํธ์์๋ SYN+ACK๋ฅผ ๋ฐ๊ณ ESTABLISHED๋ก ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์๋ฒ์ ์์ฒญ์ ์ ๋ฐ์๋ค๋ ACK๋ฅผ ์ ์กํ๋ค.
- ACK๋ฅผ ๋ฐ์ ์๋ฒ๋ ์ํ๊ฐ ESTABLISHED๋ก ๋ณ๊ฒฝ๋๋ค.
- TCP ํต์ ์ ์ข ๋ฃํ๊ธฐ ์ํ ๋ฐฉ์์ด๋ค.
- ์ ์์ ์ธ ์ข ๋ฃ ์ํฉ
- ์ต์ด์ ์๋ก ํต์ ์ํ์ด๊ธฐ ๋๋ฌด์ ์๋ฒ, ํด๋ผ์ด์ธํธ ๋ชจ๋ ESTABLISHED ์ํ
-
ํต์ ์ ์ข ๋ฃํ๊ณ ์ ํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ FIN์ ๋ณด๋ด๊ณ , ์์ ์ FIN_WAIT_1 ์ํ๋ก ๋๊ธฐํ๋ค.
-
FIN์ ๋ฐ์ ์๋ฒ๋ ํด๋น ํฌํธ๋ฅผ CLOSE_WAIT๋ก ๋ฐ๊พธ๊ณ ์ ๋ฐ์๋ค๋ ACK๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๊ณ , ๊ทธ์ ๋์์ ์๋ฒ์์๋ ํด๋น ํฌํธ์ ์ฐ๊ฒฐ๋์ด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Close()๋ฅผ ์์ฒญํ๋ค.
-
ACK๋ฅผ ๋ฐ์ ํด๋ผ์ด์ธํธ๋ FIN_WAIT_2 ์ํ๋ก ๋ณ๊ฒฝํ๋ค.
-
Close() ์์ฒญ์ ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃ ํ๋ก์ธ์ค๋ฅผ ์งํ์์ผ ์ต์ข ์ ์ผ๋ก close()๊ฐ ๋๊ณ ์๋ฒ๋ FIN์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก ํ ์์ ์ LAST_ACK ์ํ๊ฐ ๋๋ค.
-
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์ด ๊ธธ์ด์ ธ์ ๋ง์ ์์ ์์ผ์ด ๋์ด๋ง ๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋ฐ์ํ ์ ์๋ค.
- ๋น ์ฐ๊ฒฐ ์งํฅํ ํ๋กํ ์ฝ
- ๋ฐ์ดํฐ์ ๊ฒฝ๊ณ๊ฐ ์๋ค.
- ์ฐํธ(๋ฐ์๋์ง ๋ชป ๋ฐ์๋์ง ํ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค.)
- TCP์ ๋นํด ์ ์ก ์๋๊ฐ ๋น ๋ฅด๋ค.
- ์๋ฒ ์์ผ๊ณผ ํด๋ผ์ด์ธํธ ์์ผ์ ๊ตฌ๋ถ์ด ์๋ค. 1๊ฐ๋ง ์์ผ๋ฉด ๋๋ค.
- ์ ์ก ์์๊ฐ ์๊ด์๋ค.
- ๋ฐ์ดํฐ ์์ค ๋ฐ ํ์์ ์ฐ๋ ค๊ฐ ์๋ค.
- ํ๋ฒ์ ๋ณด๋ผ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ ํ๋๋ค.
- ๋ถํ ๋ถ์ฐ์ ์ํด์ ๊ฐ์(Virtual) IP๋ฅผ ํตํด ์ฌ๋ฌ ์๋ฒ์ ์ ์ํ๋๋ก ๋ถ๋ฐฐํ๋ ๊ธฐ๋ฅ์ ๋งํ๋ค.
- ํ๋์ ์ธํฐ๋ท ์๋น์ค๊ฐ ๋ฐ์ํ๋ ํธ๋ํฝ์ด ๋ง์ ๋ ์ฌ๋ฌ ๋์ ์๋ฒ๊ฐ ๋ถ์ฐ์ฒ๋ฆฌํ์ฌ ์๋ฒ์ ๋ก๋์จ ์ฆ๊ฐ, ๋ถํ๋, ์๋ ์ ํ ๋ฑ์ ๊ณ ๋ คํด ํด๊ฒฐํ๋ ์๋น์ค๋ค.
- ๋์์ ์ค๋ ์ ๋ง์ ์ปค๋ฅ์ ์ ์ฒ๋ฆฌํ๊ณ ํด๋น ์ปค๋ฅ์ ์ด ์์ฒญ ๋ ธ๋ ์ค์ ํ๋๋ก ์ ๋ฌ๋ ์ ์๊ฒ ํ๋ ๊ฒ์ด๋ค.
- ๋จ์ง ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ง์ผ๋ก ์๋น์ค๊ฐ ํ์ฅ์ฑ์ ๊ฐ์ง ์ ์๋๋ก ํ๋ค.
- ์ํํธ์จ์ด ๋ก๋๋ฐธ๋ฐ์ : HAProxy
- ํ๋์ ์๋น์ค๋ฅผ ์ฌ๋ฌ ๋ ธ๋๊ฐ ์ฒ๋ฆฌ
- ์ฌ๋ฌ ๊ฐ์ ์ปดํจํฐ๋ฅผ ์ฐ๊ฒฐํ ๋ณ๋ ฌ ์์คํ ์ผ๋ก ๋ง์น ํ๋์ ์ปดํจํฐ์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ํน์ ์ฅ๋น์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฑฐ๋ ํน์ ์ฅ๋น์์ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ ์ฒด ์๋น์ค์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
- Virtual IP(๊ฐ์ IP)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๋ค.
- ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ค์ ์ฅ๋น๋ ๋ฌผ๋ฆฌ์ ์ธ IP๋ฅผ ๊ฐ๊ณ , ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ Virtual IP๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
- ๋ด๋ถ ์์คํ ์ ์ฒ ์ ํ๊ฒ ๊ฐ๋ ค์ ธ ์๋ค.
- ์ ์ฐํ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค.
- ํ๋์ ์๋น์ค๋ฅผ ์ฌ๋ฌ ๋ ธ๋๊ฐ ์ฒ๋ฆฌ
- ์ปดํจํฐ ๋คํธ์ํฌ์์ ์๋ก ๋ค๋ฅธ ํต์ ๋ง, ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ํ๋์จ์ด, ์ํํธ์จ์ด๋ค.
- ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ๋ค์ด๊ฐ๋ ์ ๊ตฌ ์ญํ ์ ํ๋ ๋คํธ์ํฌ ํฌ์ธํธ๋ค.
- ์ข ๋ฅ๊ฐ ๋ค๋ฅธ ๋คํธ์ํฌ ๊ฐ์ ํต๋ก ์ญํ ์ ํ๋ ์ฅ์น์ด๋ค.
- ๊ฒ์ดํธ์จ์ด๋ฅผ ์ง๋ ๋๋ง๋ค ํธ๋ํฝ๋ ์ฆ๊ฐํ๋ค.
- ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ์์ ํ๋กํ ์ฝ์ ์ ์ ํ ๋ณํํด์ฃผ๋ ์ญํ ์ ํ๋ค.
- ์น ์๋ฒ์ ๋ธ๋ผ์ฐ์ ๊ฐ์ ์ํธํ๋ ๋งํฌ๋ฅผ ์ค์ ํ๊ธฐ ์ํ ํ์ค ๋ณด์ ๊ธฐ์ ์ด๋ค.
- ํต์ ๋ด์ฉ์ด ๋ ธ์ถ, ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋ ค๋ ์๋ฒ๊ฐ ์ ๋ขฐํ ์ ์๋ ์๋ฒ์ธ์ง ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
- SSL ํต์ ์ ์ฌ์ฉํ ๊ณต๊ฐํค๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํ๋ค.
- ์ธ์ฆ์์ ๋ด์ฉ์ CA์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด์ ์ํธํ๋์ด ์น ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๊ณต๋๋ค.
- ์๋น์ค ์ ๋ณด(์ธ์ฆ์ ๋ฐ๊ธ์, CA์ ๋์งํธ ์๋ช , ์๋น์ค ๋๋ฉ์ธ)
- ์๋ฒ์ธก ๊ณต๊ฐํค
- CA(Certificate Authority)
- SSL ์ธ์ฆ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์๋ํ ์๋ฒ๊ฐ ๋ง๋์ง๋ฅผ ํ์ธํ๋ ์ผ์ ํด์ฃผ๋ ๊ณต์ธ๋ ํ์ฌ๋ค.
- CA๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ์ด๋ค์ ๊ณต๊ฐํค๋ค์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ณต๊ฐํค์ ๋น๋ฐํค์ ์ฅ์ ์ ๋ชจ์ ์์ ํ๊ณ ๋น ๋ฅด๊ฒ ์ํธํ์ ๋ณตํธํ๋ฅผ ํ ์ ์๋ค.
- ๊ณต๊ฐํค๋ก ์ํธํํ๋ฉด ๋น๋ฐํค๋ฅผ ๊ฐ์ง ์ฌ๋๋ง ๋ณตํธํํ ์ ์๋ค๋ ์ฅ์ ์ ์ด๋ ธ๋ค.
- ๋น๋ฐํค๋ก ์ํธํํ๊ณ ๋ณตํธํํ๋ฉด ์ปดํจํฐ ์์์ ์ ๊ฒ ์ฌ์ฉํ๊ณ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ ์ด๋ ธ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ํด๋ผ์ด์ธํธ์์ ์์ฑํ ๋๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ๊ณตํ๋ค.
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ฒ์์ ์์ฑํ ๋๋ค ๋ฐ์ดํฐ์ CA์์ ๋ฐ์ ์ธ์ฆ์๋ฅผ ๋ณด๋ธ๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ CA๊ฐ ์์ ์ด ๊ฐ์ง๊ณ ์๋ CA๋ฆฌ์คํธ์ ์๋์ง ํ์ธํ๋ค.
- ๋ฆฌ์คํธ์ ์๋ค๋ฉด ํด๋ผ์ด์ธํธ์ ๋ด์ฅ๋ CA์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ์ธ์ฆ์๋ฅผ ๋ณตํธํํ๋ค. 4.1. ์ธ์ฆ์๋ฅผ ๋ณตํธํ ํ ์ ์๋ค๋ ๊ฒ์ ์ด ์ธ์ฆ์๊ฐ CA์ ๋น๋ฐํค์ ์ํด ์ํธํ ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ฌ๋์ ์ ์์ ๋ณด์ฅํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
- 1๋ฒ๊ณผ 2๋ฒ ๋จ๊ณ์์ ์ป์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋๋ค ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ์ฌ ๋น๋ฐํค๋ฅผ ์์ฑํ๋ค.
- ์์ฑํ ๋น๋ฐํค๋ฅผ ์ธ์ฆ์๋ฅผ ๋ณตํธํํ์ฌ ์ป์ ์๋ฒ์ ๊ณต๊ฐํค๋ก ์ํธํํ๋ค. 6.1. ์๋ฒ์ ๊ณต๊ฐํค๋ก ์ํธํํ๊ธฐ ๋๋ฌธ์ ์ด ํค๋ฅผ ์ด์ด๋ณผ ์ ์๋ ๊ฒ์ ๋น๊ณต๊ฐํค๋ฅผ ๊ฐ์ง ์๋ฒ ๋ฟ์ด๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ํธํํ ๋น๋ฐํค๋ฅผ ์๋ฒ์๊ฒ ๋ณด๋ธ๋ค.
- ์๋ฒ๋ ์์ ์ด ๊ฐ์ง ๋น๊ณต๊ฐํค๋ก ํด๋ผ์ด์ธํธ๊ฐ ์ค ๋น๋ฐํค๋ฅผ ๋ณตํธํํ๋ค.
- ์ด๋ก์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋น๋ฐํค๋ฅผ ๊ณต์ ํ๊ฒ ๋์๊ธฐ์ ๋น ๋ฅธ ์๋๋ก ๋ณตํธํ์ ์ํธํ๋ฅผ ํ ์ ์๊ฒ ๋์๋ค.
- ๋ ๊ฐ ์ด์์ ์์ ์ด ์๋ก ์๋๋ฐฉ์ ์์ ์ด ๋๋๊ธฐ๋ง์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์๋ฃ๋์ง ๋ชปํ๋ ์ํ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๊ต์ฐฉ ์ํ์ ์กฐ๊ฑด
- ์ํธ ๋ฐฐ์ (Mutual Exclusion) : ์์ ์์ฒด๋ฅผ ๋์์ ์ธ ์ ์๋ค.
- ์ ์ ๋๊ธฐ(Hold and Wait) : ์์์ ๋ถ์ก์ ์ํ์์ ๋ค๋ฅธ ์์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค.
- ๋น ์ ์ (No Preemption) : ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์์์ ๋นผ์์ ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ํ ๋๊ธฐ(Circular wait) : ๋๊ธฐ๊ฐ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์ฌ์ดํด์ด ๋์๋ค.
- ๊ต์ฐฉ ์ํ์ ๊ด๋ฆฌ
- ์๋ฐฉ : ๊ต์ฐฉ ์ํ์ ์กฐ๊ฑด ์ ๊ฑฐ, ์์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
- ์ํธ ๋ฐฐ์ ๋ถ์ : ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๊ณต์ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
- ์ ์ ๋๊ธฐ ๋ถ์ : ํ๋ก์ธ์ค๊ฐ ์คํ๋๊ธฐ ์ ํ์ํ ๋ชจ๋ ์์์ ํ ๋นํ๋ค.
- ๋น์ ์ ๋ถ์ : ์์์ ์ ์ ํ๊ณ ์๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ์์์ ์๊ตฌํ ๋ ์ ์ ํ๊ณ ์๋ ์์์ ๋ฐ๋ฉํ๊ณ , ์๊ตฌํ ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค.
- ์ํ ๋๊ธฐ ๋ถ์ : ์์์ ๊ณ ์ ํ ๋ฒํธ๋ฅผ ํ ๋นํ๊ณ , ์์๋๋ก ์์์ ์๊ตฌํ๋๋ก ํ๋ค.
- ํํผ : ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ๋ฉด ํผํด๋๊ฐ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ํ์ ์๊ณ ๋ฆฌ์ฆ
- ํ๋ก์ธ์ค๊ฐ ์์์ ์๊ตฌํ ๋ ์์คํ ์ ์์์ ํ ๋นํ ํ์๋ ์์ ์ํ๋ก ๋จ์์๊ฒ ๋๋์ง๋ฅผ ์ฌ์ ์ ๊ฒ์ฌํ์ฌ ๊ต์ฐฉ ์ํ๋ฅผ ํํผํ๋ ๊ธฐ๋ฒ์ด๋ค.
- ์์ ์ํ์ ์์ผ๋ฉด ์์์ ํ ๋นํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์์์ ํด์งํ ๋ ๊น์ง ๋๊ธฐํ๋ค.
- ๋ฐ๊ฒฌ : ์์ ํ ๋น ๊ทธ๋ํ๋ฅผ ํตํด ๊ต์ฐฉ ์ํ๋ฅผ ํ์งํ ์ ์๋ค.
- ์์์ ์์ฒญํ ๋ ๋ง๋ค ํ์ง ์๊ณ ๋ฆฌ์ฆ์ ์คํํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
- ํ๋ณต : ๊ต์ฐฉ ์ํ๋ฅผ ์ผ์ผํจ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๊ฑฐ๋, ํ ๋น๋ ์์์ ํด์ ํจ์ผ๋ก์จ ํ๋ณตํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ ๋ฐฉ๋ฒ
- ๊ต์ฐฉ ์ํ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ ์ค์ง
- ๊ต์ฐฉ ์ํ๊ฐ ์ ๊ฑฐ๋ ๋ ๊น์ง ํ ํ๋ก์ธ์ค์ฉ ์ค์ง
- ์์์ ์ ์ ํ๋ ๋ฐฉ๋ฒ
- ๊ต์ฐฉ ์ํ์ ํ๋ก์ธ์ค๊ฐ ์ ์ ํ๊ณ ์๋ ์์์ ์ ์ ํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํ๋ฉฐ, ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ ์ง ์ํค๋ ๋ฐฉ๋ฒ
- ์ฐ์ ์์๊ฐ ๋ฎ์ ํ๋ก์ธ์ค, ์ํ๋ ํ์๊ฐ ์ ์ ํ๋ก์ธ์ค ๋ฑ์ ์์ฃผ๋ก ํ๋ก์ธ์ค์ ์์์ ์ ์ ํ๋ค.
- ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ ๋ฐฉ๋ฒ
- ์๋ฐฉ : ๊ต์ฐฉ ์ํ์ ์กฐ๊ฑด ์ ๊ฑฐ, ์์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
- ์ํ ๋ฐฐ์ (MUTual EXclustion)์ ์ฝ์์ด๋ค.
- ์๊ณ ์์ญ์ ๋ฌด์กฐ๊ฑด ์ ๊ทผ ๋ชปํ๊ฒ lock์ ๊ฑด๋ค.
- ํ๋๋ง ์ ์์ด ๊ฐ๋ฅํ๊ณ ๋๋๋ฉด unlock๋๋ค.
- ์ค๋ ๋์ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
- lock : ํ์ฌ์ ์๊ณ ๊ตฌ์ญ์ ๋ค์ด๊ฐ ๊ถํ์ ์ป์ด์จ๋ค. ๋ง์ผ ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ํ ์ค์ด๋ผ๋ฉด ์ข ๋ฃํ ๋ ๊น์ง ๋๊ธฐํ๋ค.(entry section)
- unlock : ํ์ฌ์ ์๊ณ ๊ตฌ์ญ์ ๋ชจ๋ ์ฌ์ฉํ์์ ์๋ฆฐ๋ค. ๋๊ธฐ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ง์ ํ ์ ์๋ค.(exit section)
- ๋ฎคํ ์ค ๊ฐ์ฒด๋ฅผ ๋ ์ค๋ ๋๊ฐ ๋์์ ์ฌ์ฉํ ์ ์๋ค.
- ๋๊ธฐํ ๋์์ด ์ค์ง ํ๋์ผ ๋ ์ฌ์ฉํ๋ค.
- ์ค๋ ๋์ ์คํ ์์๋ฅผ ์ง์ ํ ์ ์๋ค.
- ์ค๋ ๋์ ์์๊ฐ ๋ณด์ฅ ๊ฐ๋ฅํ๋ค.
- ์นด์ดํธ ๊ฐ์ด 0์ด๋ฉด ์ง์ ๋ถ๊ฐ, 0๋ณด๋ค ํฌ๋ฉด ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ธ๋งํฌ์ด๋ ๋์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค/์ค๋ ๋๊ฐ ์๊ณ ๊ตฌ์ญ์ ์ ๊ทผํ ์ ์๋๋ก ์นด์ดํธ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ ์นด์ดํธ๊ฐ 1์ธ ์ธ๋งํฌ์ด๊ฐ ๋ฎคํ ์ค์ด๋ค.
- ๋ฆฌ์์ค์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋จํ ์นด์ดํฐ
- ๋๊ธฐํ ๋์์ด ํ๋ ์ด์์ผ ๋ ์ฌ์ฉํ๋ค.
- ์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค๊ฐ ๋ ์ ์์ง๋ง, ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด๊ฐ ๋ ์ ์๋ค.
- ์๋ก ๋ค๋ฅธ ๋ ํ๋ก์ธ์ค, ํน์ ์ค๋ ๋ ๋ฑ์ ์ฒ๋ฆฌ ๋จ์๊ฐ ๊ฐ์ด ์ ๊ทผํด์๋ ์ ๋๋ ๊ณต์ ์์ญ์ ๋งํ๋ค.
- ๋ณดํธ๋์ง ์๋ ์๊ณ ๊ตฌ์ญ์ ๋ ์ฒ๋ฆฌ ๋จ์๊ฐ ๋์์ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์๊ณ ๊ตฌ์ญ ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
- ์๊ณ ๊ตฌ์ญ์ ์์ํ๋ ์ฝ๋ ๋ถ๋ถ์ ์ ์ฅ ๊ตฌ์ญ(entry section), ์๊ณ ์์ญ์ ์ข ๋ฃํ๋ ์ฝ๋ ๋ถ๋ถ์ ํด์ฅ ๊ตฌ์ญ(exit section)์ด๋ผ๊ณ ํ๋ค.
- ์๊ณ ์์ญ์ด ์๋ ๋๋จธ์ง ๊ตฌ์ญ(remainder section)์ด๋ผ๊ณ ํ๋ค.
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ, ์ธ๋ถ ๋จํธํ ํด๊ฒฐ, ๋ด๋ถ ๋จํธํ ์กด์ฌ
- ๋ณด์กฐ ๊ธฐ์ต ์ฅ์น๋ฅผ ์ด์ฉํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ ํฌ๊ธฐ์ ๋ธ๋ก์ผ๋ก ๋๋ ๊ฒ์ ํ์ด์ง๋ผ๊ณ ์ ์ํ๋ค.
- RAM์ ํ์ด์ง์ ๊ฐ์ ํฌ๋ฆฌ๊ณ ๋๋ ๊ฒ์ ํ๋ ์์ด๋ผ๊ณ ์ ์ํ๋ค.
- ์ฌ์ฉํ์ง ์๋ ํ๋ ์์ ํ์ด์ง์ ์ฎ๊ธฐ๊ณ , ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ด์ง ๋จ์๋ก ํ๋ ์์ ์ฎ๊ธฐ๋ ๊ธฐ๋ฒ์ด๋ค.
- ํ์ด์ง์ ํ๋ ์์ ๋์์ํค๊ธฐ ์ํด page mapping ๊ณผ์ ์ด ํ์ํด์ paging table์ ๋ง๋ ๋ค.
- ํ์ด์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฐ์์ ์ด์ง ์์ ๊ณต๊ฐ๋ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ํ์ด์ง ๋จ์์ ์๋ง๊ฒ ๊ฝ ์ฑ์ ์ฐ๋ ๊ฒ์ด ์๋๋ฏ๋ก ๋ด๋ถ ๋จํธํ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ค.
- ํ์ด์ง ๋จ์๋ฅผ ์๊ฒ ํ๋ฉด ๋ด๋ถ ๋จํธํ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์๊ฒ ์ง๋ง ๋์ page mapping ๊ณผ์ ์ด ๋ง์์ง๋ฏ๋ก ์คํ๋ ค ํจ์จ์ด ๋จ์ด์ง ์ ์๋ค.
- ํ์ด์ง์ ์ผ์ ํ ํฌ๊ธฐ๋ก ๋ถํ ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์๋ ค์๋ ์๋นต ์กฐ๊ฐ
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ, ๋ด๋ถ ๋จํธํ ํด๊ฒฐ, ์ธ๋ถ ๋จํธํ ์กด์ฌ
- ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ํฌ๊ธฐ๊ฐ ๋ค๋ฅธ ๋ ผ๋ฆฌ์ ๋จ์์ธ ์ธ๊ทธ๋จผํธ๋ก ๋ถํ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ฌ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๊ฒ ๋๋ค.
- ๊ฐ ์ธ๊ทธ๋จผํธ๋ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ค.
- ์ธ๊ทธ๋จผํธ๋ค์ ํฌ๊ธฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๋ถํ ํด ๋ ์ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๋ ๋น ๊ณต๊ฐ์ ์ฐพ์ ํ ๋นํ๋ ๊ธฐ๋ฒ์ด๋ค.
- Mapping์ ์ํด ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ์ด ํ์ํ๋ค.
- ํ๋ก์ธ์ค๊ฐ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋งํผ ํ ๋นํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๋จํธํ๋ ์ผ์ด๋์ง ์์ผ๋ ์ฌ์ ํ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ๋ ๋ฐ์ํ๋ ์ธ๋ถ ๋จํธํ ๋ฌธ์ ๋ ์ฌ์ ํ ์กด์ฌํ๋ค.
- ์ธ๊ทธ๋ฉํ ์ด์ ์ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋งํผ ๋ถํ ํด์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค.
- ์ผ์
- ์ฌ์ฉ์ค์ธ ํ๋ก์ธ์ค์์ ์์์ ๋นผ์์ ์ ์๋์ง์ ์ฌ๋ถ์ ๋ฐ๋ผ์ ์ ์ , ๋น์ ์ ์ค์ผ์ค๋ง
- ์ ์ (Preemptive)
- ๊ณต์ ์์์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผ์ ์๋ํ ๋ ์ ๊ทผ์ ํ์ด๋ฐ์ด๋ ์์ ๋ฑ์ด ๊ฒฐ๊ณผ๊ฐ์ ์ํฅ์ ์ค ์ ์๋ ์ํ๋ฅผ ๋งํ๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ : ์ธ๋งํฌ์ด
- fork ํจ์๊ฐ ํธ์ถ๋๋ฉด, ํธ์ถํ ํ๋ก์ธ์ค๊ฐ ๋ณต์ฌ๋๋ค.
- fork ํจ์ ํธ์ถ ์ดํ๋ฅผ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๊ฒ ๋๋ค.
- fork ํจ์ ํธ์ถ ์ดํ์ ๋ฐํ ๊ฐ
- ๋ถ๋ชจ ํ๋ก์ธ์ค : ์์ ํ๋ก์ธ์ค ID
- ์์ ํ๋ก์ธ์ค : 0
- ๋ณดํต ์์ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์คํ๋๋ค.
- ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค์ ๋ฐํ๊ฐ ์์ฒญ ํ์ง๋ ์๊ณ , ๋ฐ์ง๋ ์๋๋ค.(sleep)
- ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์ด์ผ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ค.
- ํ๋ก์ธ์ค๋ ์๋ก ์์ ํ ๋ ๋ฆฝ์ ์ด๋ค.
- ํ๋ก์ธ์ค๋ ์ด์์ฒด์ ๊ด์ ์์์ ์คํ ํ๋ฆ์ ๊ตฌ์ฑํ๋ค.
- ์ ์ฅ์์ ์กด์ฌํ๋ ํ๋ก๊ทธ๋๋ฐ ์ปดํจํฐ๊ฐ ์คํํด์ CPU๊ฐ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ์ฌ๋ผ์จ ์ํ์ด๋ค.
- ํ๋ก์ธ์ค๋ณด๋ค ๊ฐ๋ฒผ์ด, ๊ฒฝ๋ํ๋ ํ๋ก์ธ์ค์ด๋ค.
- ๋ฌธ๋งฅ ๊ตํ์ด ๋น ๋ฅด๋ค.
- ์ค๋ ๋ ๋ณ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต์ ๊ฐ ๊ฐ๋ฅํ๋ค.
- ํ๋ก์ธ์ค ๋ด์์์ ํ๋ก๊ทธ๋จ ํ๋ฆ์ ์ถ๊ฐํ๋ค.
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์์ ์คํ ํ๋ฆ์ ๊ฐ์ง๋ค.
- ์ฝ๋, ๋ฐ์ดํฐ, ํ ์์ญ์ ๊ณต์ ํ๋ค.
- ๋ฌธ๋งฅ ๊ตํ์ ๋ํ ๋ถ๋ด์ด ๋ํ๋ค.
- ๊ณต์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์ธํด์ ์ค๋ ๋๊ฐ ๋ฐ์ดํฐ ๊ตํ์ด ๋งค์ฐ ์ฝ๊ฒ ์ด๋ฃจ์ด์ง๋ค.
- ๋ฐ์ดํฐ ์์ญ : ์ ์ญ ๋ณ์ ์ ์ฅ
- ํ ์์ญ : ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ์คํ ์์ญ : ๊ฐ ํจ์์ ์ง์ญ ๋ณ์, ํ๋ผ๋ฏธํฐ
- ์คํ ์์ญ์ ๊ฐ ์ค๋ ๋๋ง๋ค ๊ฐ์ง๋ค.
- ํ๋์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉ ์ค์ธ ์ํ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ๋๋ก ํ๊ธฐ ์ํด, ์ด์ ์ ํ๋ก์ค์ธ์ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ ์ฌํ๋ ์์ ์ ๋งํ๋ค.
- ํ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๊ทธ ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)์ ๊ธฐ๋ก ๋์ด ์๋ค.
- ์ํธํ์ ๋ณตํธํ์ ๊ฐ์ ํค๋ฅผ ์ฌ์ฉํ๋ค.
- ์ํธํ์ ๋ณตํธํ๊ฐ ๋น ๋ฅด์ง๋ง ๋ค๋ฅธ ์ฌ๋์๊ฒ ํค๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ ๋ฐฉ๋ฒ์ด ์๋ค.
- AES
- ์ํธํ์ ๋ณตํธํ์ ๋ค๋ฅธ ํค๋ฅผ ์ฌ์ฉํ๋ค.
- ๋์นฐ์ด ์ํธํ์ ๋นํด ์๋๊ฐ ๋๋ฆฌ๋ค.
- SSL/TLS, RSA
- ๊ณต๊ฐํค : ๋๊ตฌ์๊ฒ๋ ๊ณต๊ฐ๊ฐ ๊ฐ๋ฅํ ํค๋ค.
- ๊ฐ์ธํค(๋น๊ณต๊ฐํค, ๋น๋ฐํค) : ์์ ๋ง์ด ๊ฐ๊ณ ์๋ ํค๋ค.
- ๊ณต๊ฐํค๋ก ์ํธํ๋ฅผ ํ๋ฉด ๋ฐ์ดํฐ ๋ณด์์ ์ค์ ์ ๋ ๊ฒ์ด๋ค.
- ๊ฐ์ธํค๋ก ์ํธํ๋ฅผ ํ๋ฉด ์ธ์ฆ ๊ณผ์ ์ ์ค์ ์ ๋ ๊ฒ์ด๋ค.
- ๊ณต๊ฐํค๋ก ์ํธํ๋ฅผ ํ๋ ๊ฒฝ์ฐ
- ์๋๋ฐฉ์ ๊ณต๊ฐํค๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ๋์ ์์ ์ ๊ฐ์ธํค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํ๋ค.
- Aํค๋ก ์ํธํ๋ฅผ ํ๋ค๋ฉด Bํค๋ก ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๊ณ , Bํค๋ก ์ํธํ๋ฅผ ํ๋ค๋ฉด Aํค๋ก ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
- ๊ฐ์ธํค๋ก ์ํธํ๋ฅผ ํ๋ ๊ฒฝ์ฐ
- ๊ฐ์ธํค์ ์์ ์๊ฐ ๊ฐ์ธํค๋ก ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๊ณ ๊ณต๊ฐํค์ ํจ๊ป ์ ๋ฌํ๋ค.
- ๊ณต๊ฐํค์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ ์ฌ๋์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํด ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ฐ์ดํฐ ๋ณดํธ์ ๋ชฉ์ ๋ณด๋ค๋ ๊ณต๊ฐํค๊ฐ ๋ฐ์ดํฐ ์ ๊ณต์์ ์ ์์ ๋ณด์ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ํธํ๋ ๋ฐ์ดํฐ๊ฐ ๊ณต๊ฐํค๋ก ๋ณตํธํ๋๋ค๋ ๊ฒ์ ๊ณต๊ฐํค์ ์์ ์ด๋ฃจ๋ ๊ฐ์ธํค์ ์ํด ์ํธํ๋์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๋ฐ์ดํฐ ์ ๊ณต์์ ์ ์ ํ์ธ์ด ๋ณด์ฅ๋๋ค๋ ๊ฒ์ด๋ค.
- ์ ์์๋ช ์ ์๋ฆฌ
- ์ฉ๋์ด ํฐ ์ ๋ณด๋ ๋์นญํค๋ก ์ํธํํ๊ณ , ์ํธํ์ ์ฌ์ฉ๋ ๋์นญํค๋ ๊ณต๊ฐํค๋ก ์ํธํํ์ฌ ๋์์๊ฒ ์ ๋ฌํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ํธํ ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
- ์์ค์ฝ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ๋ถ์ฐํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ด๋ค.
- fetch : ๋ฆฌ๋ชจํธ ์๋ฒ๋ก๋ถํฐ ์ ์ฅ์ ์ ๋ณด๋ฅผ ๋๊ธฐํํ๋ค.
- rebase : ์ปค๋ฐ์ ํฉ์น๋ค.
- Branch ๊ด๋ฆฌ ์ ๋ต, Branching ๊ธฐ๋ฒ
- ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฐ์ํ๋ ์ ๋ง์ Branch๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํด ์ฃผ๋ ๊ท์น, ์ ๋ต์ด๋ค.
- ๊ธฐ๋ณธ ์ ๋ต์ด๊ธฐ ๋๋ฌธ์ ์ปค์คํฐ๋ง์ด์ง ํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- feature branch๋ฅผ ์ด์ฉํด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ฑ ์ ์๊ฐ๋ฅผ ๋ช ํํ ํ๋ค.
- ๊ฐ๋ฐ ๋ฒ์ ๊ณผ ์ ํ ๋ฒ์ ์ ๊ฐ๋ณ ๊ด๋ฆฌ ํ ์ ์๋ค.
- Pull Request๋ฅผ ์ด์ฉํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ด์ฉํด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค.
- feature branch์ hotfix์ commit message๋ฅผ ์ทจํฉํ๊ฒ ๋๋ฉด, ์ด์ ๋ฒ์ ๊ณผ์ ๋ณ๊ฒฝ ์ ์ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- Input / Output
- ์ ์ถ๋ ฅ ๋ฐฉ์ : Stream
- ๋ฐ์ดํฐ ํ์ : byte
- ๋๊ธฐ
- Blocking
- ๋จ๋ฐฉํฅ ํต์
- ์ ์ํ๋ ํด๋ผ์ด์ธํธ ์๊ฐ ์ ์๋, ์์ฐจ์ , ๋์ฉ๋์ผ๋ ์ ํฉ
- 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๊ฐ ์ค๋ ๊ฑธ๋ฆฌ์ง ์์ ๋ ์ ํฉ
- System Call์ด ๋๋ ๋ ๊น์ง ํ๋ก๊ทธ๋จ์ ๋๊ธฐํด์ผ ํ๊ณ System Call์ด ์๋ฃ๋๋ฉด ๊ทธ๋์ผ Return ํ๋ค.
- Wait Queue์ ๋ค์ด๊ฐ๋ค.
- ์ค๋ ๋๊ฐ ์์ ์ด ์ข ๋ฃ๋ ๋ ๊น์ง ๋๊ธฐํ๋ค.
- ํธ์ถ๋ ํจ์๊ฐ ์์ ์ ์์ ์ ๋ชจ๋ ๋ง์น ๋ ๊น์ง ํธ์ถํ ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ์ง ์๊ณ ๋๊ธฐํ๊ฒ ๋ง๋ ๋ค
- System Call์ด ์๋ฃ๋์ง ์์๋ ๋๊ธฐํ์ง ์๊ณ Return ํด๋ฒ๋ฆฐ๋ค.
- Wait Queue์ ๋ค์ด๊ฐ์ง ์๋๋ค.
- ์ค๋ ๋๊ฐ ์์ ์ด ์ข ๋ฃ๋ ๋ ๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ค.
- ํธ์ถ๋ ํจ์๊ฐ ๋ฐ๋ก ๋ฆฌํดํด์ ํธ์ถํ ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๊ณ ํธ์ถํ ํจ์๊ฐ ๋ค๋ฅธ ์ผ์ ํ ์ ์๋ ๊ธฐํ๋ฅผ ์ค ์ ์๋ค.
- ํจ์ ํธ์ถ ์ ์ ์ด๊ถ ๋ฆฌํด ์ ๋ฌด
- Non-Blocking์ ์ ์ด๋ฌธ ์์ค์์ ์ง์ฒด์์ด ๋ฐํํ๋ ๊ฒ
- ํธ์ถํ๋ ์ ์ฅ์์์ ํน์ง
- ํธ์ถ๋๋ ํจ์์๊ฒ Callback์ ์ ๋ฌํด์ ํธ์ถ๋๋ ํจ์์ ์์ ์ด ์๋ฃ๋๋ฉด ํธ์ถ๋๋ ํจ์๊ฐ ์ ๋ฌ๋ฐ์ callback์ ์คํํ๊ณ ํธ์ถํ๋ ํจ์๋ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
- ํธ์ถ๋๋ ํจ์์ ์์ ์๋ฃ๋ฅผ ํธ์ถํ ํจ์๊ฐ ์ ๊ฒฝ์ด๋ค.
- System Call์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ ธ์จ๋ค.
- ํธ์ถํ๋ ํจ์๊ฐ ํธ์ถ๋๋ ํจ์์ ์์ ์๋ฃํ ๋ฆฌํด์ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, ํธ์ถํ๋ ํจ์๋ก๋ถํฐ ๋ฐ๋ก ๋ฆฌํด ๋ฐ๋๋ผ๋ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ํธ์ถํ๋ ํจ์ ์ค์ค๋ก ๊ณ์ ํ์ธํ๋ฉฐ ์ ๊ฒฝ์ด๋ค.
- ํธ์ถ๋๋ ํจ์์ ์์ ์๋ฃ๋ฅผ ํธ์ถํ ํจ์๊ฐ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
- System Call์ด ์๋ฃ๋์ง ์์๋ ๋์ค์ ์๋ฃ๋๋ฉด ๊ทธ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ ธ์จ๋ค.
- ์ฃผ๋ก Callback ํจ์๋ฅผ ํตํด ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ ธ์จ๋ค.
- ๋ณ๋์ ์ค๋ ๋๋ก ๋นผ์ ์คํํ๊ณ , ์๋ฃ๋๋ฉด ํธ์ถํ๋ ์ธก์ ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
- ํจ์ ํธ์ถ ์ ์์ ์๋ฃ ์ฌ๋ถ ์ ๊ฒฝ ์ ๋ฌด
- ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ํน์ง
- Non-Blocking I/O์ ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํด ๋์ ์ฑ๋ฅ์ ๊ฐ์ง๋ค.
- ๋ด์ฅ HTTP ์๋ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๊ณ ์๋ค.
- ์น ์๋ฒ์์ ์ํ์น ๋ฑ ๋ณ๋์ ์ํํธ์จ์ด ์์ด ๋์ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- V8 ์์ง์ผ๋ก ๋น๋๋ JavaScript ๋ฐํ์์ด๋ค.
- ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ด๋ค.
- ๋ค์ํ ํ๋ก๊ทธ๋จ, ์คํ ํ๊ฒฝ์ ์ปจํ ์ด๋๋ก ์ถ์ํํ๊ณ ๋์ผํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ๋จ์ํ๊ฒ ํด ์ค๋ค.
- ์ด๋ฏธ์ง๋ ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ ๋ฑ์ ํฌํจํ๊ณ ์๋ค.
- ๋ ์ด์ด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค.
- ๋ํ์ ์ผ๋ก ์ ํจ์ค(Jenkins)
- ์ง์์ ์ธ ํตํ
- ํ๋ก์ ํธ ๋น๋, ํ ์คํธ ์คํ, ๋ฐฐํฌ ๋ฑ์ ํตํฉ์ ์๋ํํ๋ค.
- map๊ณผ reduce๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋๊ตฌ์ผ ๋ฟ์ด์ง ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ์๋๋ค.
- ์ํ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ์ ๋ ฅ ๊ฐ์ ๋ฐ๋ผ ๋์ผํ ์ถ๋ ฅ ๊ฐ์ด ๋์ค๋ ํจ์์ ์์ฉ์ ํตํด ํ๋ก๊ทธ๋๋ฐ์ ํ์ฌ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ต์ํ ์ํค๋ ๊ฒ์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ค.
- ์๊ฐ ์์ฉ์ ์ด๋ค.
- ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์๋ค.
- ์ฝ๊ฒ ์ ๋ฌ ๋ ์ ์๋ค.
- Header(ํค๋), Payload(๋ด์ฉ), Signature(์๋ช )๋ก ๊ตฌ์ฑ๋๋ค.
- ์ํ ๋ฐฉํฅ์ผ๋ก ํ์ฅ
- ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ ์ ๊ทธ๋ ์ด๋
- ์์ง ๋ฐฉํฅ์ผ๋ก ํ์ฅ
- ์ฅ๋น์ ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉ์์ผ๋ก ์ฑ๋ฅ ์ ๊ทธ๋ ์ด๋
- ํ๋ก์ธ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ ํ๋ก์ธ์ ๊ทธ ์์ฒด๋ฅผ ๊ณ ์ฑ๋ฅ ๋ชจ๋ธ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค.
- ์์ฒญ์๋ง๋ค ์๋ก๊ณ ์นจ์ด ์ผ์ด๋๋ฉฐ ์๋ฒ์ ์๋ก์ด ํ์ด์ง์ ๋ํ ์์ฒญ์ ํ๋ ๋ฐฉ์์ด๋ค.
- View๋ฅผ ์๋ฒ์์ ๋ ๋๋งํด์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ก๋ฉ์ด ๋งค์ฐ ์งง๋ค.
- ์๋ฒ๋ ๋จ์ง JSON๋ง ๋ณด๋ด์ฃผ๋ ์ญํ ์ ํ๋ฉฐ HTML์ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ํํ์๋ค.
- ์๋ฒ์์ View๋ฅผ ๋ ๋ํ์ง ์๊ณ ๊ฐ์ข ๋ฆฌ์์ค๋ฅผ ๋ค์ด ๋ฐ์ ํ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง์ ํ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ View ๋ก๋ฉ ์๋๊ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค.
- ์ฌ์ฉ์์ ํ๋์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ๋ค์ ์ฝ์ด๋ค์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ธก์์ ๋ ๋๋งํ์ฌ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ์ฝ์ด๋ค์ด๋ ๊ฒ๋ณด๋ค ๋น ๋ฅธ ์ธํฐ๋ ์ ์ด ๊ฐ๋ฅํ๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋ก๋๋๊ณ ๋ ๋ค์ ํ์ด์ง ์ ์ฒด๋ฅผ ์๋ฒ์ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ ์ต์ด ํ๋ฒ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ก๋ฉํ ์ดํ๋ถํฐ๋ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ์ฌ ์ฌ์ฉํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ค.
- ์ด๋ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ๋ค์ด๊ฐ๋ ๊ฐ์ ์ ์ธ ์ฒ๋ฆฌ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ๋งํ๋ค.
- SPA ๋ฐฉ์์ ํ๋ก ํธ์๋ ์น ๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ๋ค.
- ์ฝ๋์ ์ ์ง ๋ณด์, ๋ถ๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
- ํ์ด์ง๊ฐ ์ ํ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๋ค.
- ๊ฒ์์์ง์ ์ธ๋ฑ์ฑ์ด ์ ๋๋ก ๋์ง ์๋๋ค.
