๊ธฐ์ ๋ฉด์ ๋๋น ๊ฐ๋
์ ๋ฆฌ
1. Call by reference๋ ๋ฌด์์ด๊ณ ๋ณดํต ์ด๋ป๊ฒ ์ฐ์ด๋์?
Call by reference - ์ฐธ์กฐ์ ์ํ ํธ์ถ๋ก์จ, ํจ์๊ฐ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์์๋ ํจ์๋ฅผ ์ํ ๋ณ๋์ ์์ ๊ณต๊ฐ์ด ์์ฑ๋๋ค. ํจ์ ํธ์ถ ์ ์ธ์๋ก ์ ๋ฌ๋๋ ๋ณ์์ ๋ ํผ๋ฐ์ค(์ฃผ์)๋ฅผ ์ ๋ฌํ์ฌ ํด๋น ๋ณ์๋ฅผ ๊ฐ๋ฅดํจ๋ค. ํจ์ ์์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ํจ์ ํธ์ถ ์์ ์๋ ๋ณ์๋ค๋ ๊ฐ์ด ๋ฐ๋๋ค. C์ธ์ด์์ Swap์ ๊ตฌํํ ๋ ๊ฐ์ด ์๋ ์ฃผ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ๋ ๊ฐ์ ์ด์ ์์์ด๋ค.
Call by value - ๊ฐ์ ์ํ ํธ์ถ๋ก์จ, ํจ์๊ฐ ํธ์ถ๋ ๋ ์ ๋ฌ๋๋ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋ค. ๋ณต์ฌ๋ ์ธ์๋ ํจ์ ์คํ์ด ์ข
๋ฃ๋ ๋ ๊ฐ์ด ์๋ฉธํ๋ฉฐ, ์ธ๋ถ์ ๊ฐ์ ๋ณต์ฌํด์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ์ธ๋ถ์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
Java์์๋ primitive type(int, long, ...)์ด ์๋๋ผ๋ฉด call-by-reference๋ก ๋์ํ๋ค.
2. Override ์ Overload ๋ฅผ ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
Override๋ ์์๋ฐ์ ํด๋์ค๋ ๊ตฌํํ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. Override๋ ์ฌ์ ์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋์ ์ด๋ฆ๊ณผ, ๋งค๊ฐ๋ณ์, ๋ฆฌํดํ์ด ๊ฐ์์ผ ํฉ๋๋ค.
Overload๋ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ผ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ ๋ฉ์๋๋ฅผ ์ ์ํ๋๊ฒ์ ์๋ฏธํฉ๋๋ค. Overload๋ ๋ฉ์๋์ ์ด๋ฆ์ด ๊ฐ์์ผํ๊ณ , ๋งค๊ฐ๋ณ์๋ ๋ฌ๋ผ์ผํฉ๋๋ค. ๋ฆฌํดํ์
์ ๊ฐ๊ฑฐ๋ ๋ฌ๋ผ๋ ์๊ด ์์ง๋ง, ๋ฆฌํดํ์
๋ง ๋ค๋ฅด๋ค๋ฉด ์ปดํ์ผ๋ฌ ์
์ฅ์์ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถํ ์ ์๊ธฐ์ Overload๊ฐ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
3. JPA๋ ์ธ์ ํ์ํ๊ณ ์ธ์ ํ์ํ์ง ์์์ง ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
JPA๋ ๊ฐ์ฒด์งํฅ๊ณผ RDB์ ์์ ํ ๋ค๋ฅธ ๋ ํจ๋ฌ๋ค์ ์ฌ์ด์ ๋ถ์ผ์น์ ์ํด ํ์ํ ORM ์
๋๋ค. ์ด์ ์๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ ๋งคํํ์ฌ DB์ ์ ์ฅ ๋ฐ ์กฐํ์ฒ๋ฆฌ๋ฅผ ํ์๊ณ , ์ด๋ฌํ ์ด์ ์์ ๋น์ฆ๋์ค๋ก์ง์ ์จ์ ํ ์ง์คํ์ง ๋ชปํ์ต๋๋ค. ORM์ ๊ฐ์ฒด์ RDB ์ฌ์ด์์ sql์ ์ง์ ์์ฑํ๋ ๋ฒ๊ฑฐ๋ก์์ ๋์ด์ฃผ์ด ๊ฐ๋ฐ์์ ๋จ์ ์์
์ ์ค์ด๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ JPA๋ก ํด๊ฒฐํ์ง ๋ชปํ๋ ์๊ฐ์ด ๋ฐ์ํ๊ธฐ๋ ํ๊ธฐ ๋๋ฌธ์ ์ง์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํด์ผํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๊ฐ๋ฐ์๋ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด์ ์ sql์ ๋จผ์ ์ดํดํ๊ณ ์์ด์ผ ํ๊ณ ๊ฐ์ฒด, RDB ์์ชฝ์ ํน์ง๊ณผ ๋์ํ๋ ๋ฒ์ ์ ์ดํดํด์ผ ํฉ๋๋ค.
4. JPA์ ๋ํฐ ์ฒดํน์ด๋ ๋ฌด์์ธ๊ฐ์?
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด JPA์ ์์์ฑ ์ปจํ
์คํธ ๋ด๋ถ์์ ๋ฐ์ํ ๋ณ๊ฒฝ์ฌํญ์ ์ฒดํฌํ๊ณ ํธ๋์ญ์
์ด ๋๋ flush๊ฐ ๋ ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉ์ํค๋ ์ฟผ๋ฆฌ๋ฌธ์ด ๋ ์๊ฐ๋ ๊ฒ์
๋๋ค.
์์์ฑ ์ปจํ
์คํธ๋ ๋ํฐ์ฒดํน, ์ฐ๊ธฐ์ง์ฐ ์ ์ฅ์, 1์ฐจ์บ์ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋๋ฐ, ๊ทธ์ค ๋ํฐ์ฒดํน์ด๋ ์ฒ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ 1์ฐจ์บ์์ ์ ์ฅํด๋์ ์ค๋
์ท๊ณผ ์ดํ ๋ฐ์ดํฐ ์ฌ์ด์ ๋ณ๊ฒฝ์ฌํญ์ด ์์๊ฒฝ์ฐ ์ด๋ฅผ ์ฒดํฌํ๊ณ ์
๋ฐ์ดํธ ์ฟผ๋ฆฌ๋ฌธ์ db์ ๋ ๋ ค์ฃผ๋ ๊ฒ ์
๋๋ค.
5. JVM ์ด๋ ๋ฌด์์ด๊ณ ์ ํ์ํ์ง ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
JVM์ Java Virtual Machine ์ผ๋ก ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์์ผ์ฃผ๋ ๊ฐ์ ๋จธ์ ์
๋๋ค. ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋จ์ OS์ ์ข
์์ ์ด๊ฒ ๊ฐ๋ฐ์ด ๋์์ง๋ง, Java๋ ๊ฐ OS์ ๋ง๊ฒ ์ ๊ณต๋ JVM์ด ๋์์ง ์ ์๊ธฐ์ ๊ฐ์ ์์ค์ฝ๋๋ก ๋ค๋ฅธ OS์์ ์คํ ํ ์ ์๊ฒ ๋ฉ๋๋ค. JVM์ด ์ฃผ๋ ์ด์ ์ผ๋ก๋ ์ด๊ฒ ์ด์ธ์๋ GC๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํด์ค๋ค๋ ์ ๋ ์์ต๋๋ค.
6. Java๊ฐ ์ปดํ์ผ๋๋ ๊ณผ์ ์ ์ด๋ป๊ฒ ๋๋์ง ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
-
์ฐ์ ์๋ฐ ํ์ผ์ ์์ฑํฉ๋๋ค.
-
์์ฑํ ์๋ฐ ํ์ผ์ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ์ดํธ ์ฝ๋๋ก ์ด๋ฃจ์ด์ง .classํ์ผ๋ก ์ปดํ์ผ ํด ์ค๋๋ค.
-
๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ JVM์ ํด๋์ค๋ก๋๊ฐ ๋ฐ์ ๋์ ๋ก๋ฉ(Dynamic Loading)์ ํตํด ํ์ํ ํด๋์ค๋ค์ ๋ก๋ฉ ๋ฐ ๋งํฌํ์ฌ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ, JVM์ ๋ฉ๋ชจ๋ฆฌ์์ญ์ ์ฌ๋ฆฝ๋๋ค.
-
์คํ ์์ง(Execution Engine)์ JVM ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์จ ๋ฐ์ดํธ ์ฝ๋๋ค์ ๋ช
๋ น์ด ๋จ์๋ก ํ๋์ฉ ๊ฐ์ ธ์ ์คํํฉ๋๋ค. ์ด๋, ์คํ ์์ง์ ๋๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ ํฉ๋๋ค.
-
์ธํฐํ๋ฆฌํฐ : ๋ฐ์ดํธ ์ฝ๋ ๋ช
๋ น์ด๋ฅผ ํ๋์ฉ ์ฝ์ด์ ํด์ํ๊ณ ์คํํฉ๋๋ค. ํ๋ํ๋์ ์คํ์ ๋น ๋ฅด๋, ์ ์ฒด์ ์ธ ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ ๊ฐ์ง๋๋ค.
-
JIT ์ปดํ์ผ๋ฌ(Just-In-Time Compiler) : ์ธํฐํ๋ฆฌํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋์
๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๋ฅผ ์ปดํ์ผํ์ฌ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ๋ณ๊ฒฝํ๊ณ ์ดํ์๋ ํด๋น ๋ฉ์๋๋ฅผ ๋์ด์ ์ธํฐํ๋ฆฌํ
ํ์ง ์๊ณ , ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ก ์ง์ ์คํํ๋ ๋ฐฉ์์
๋๋ค. ํ๋์ฉ ์ธํฐํ๋ฆฌํ
ํ์ฌ ์คํํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ดํธ ์ฝ๋ ์ ์ฒด๊ฐ ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์คํ์๋๋ ์ธํฐํ๋ฆฌํ
๋ฐฉ์๋ณด๋ค ๋น ๋ฆ
๋๋ค.
7. JVM์ ์คํ๊ณผ ํ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด ์๋ ๋งํผ ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํฌ๊ฒ ๋ฉ์๋, ์คํ, ํ ์์ญ์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ๊ทธ์ค์ Stack์์ญ ์๋ heap ์์ญ์ ์์ฑ๋ Object ํ์
์ ๋ฐ์ดํฐ๋ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ํ ๊ฐ๋ค์ด ํ ๋น๋ฉ๋๋ค. ๋ํ, ์์ํ์
(primitive types) - byte, short, int, long, double, float, boolean, char ํ์
์ ๋ฐ์ดํฐ๋ค์ด ํ ๋น๋ฉ๋๋ค. ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ด๋ถ์ ์ ์ธ๋ ์ง์ญ๋ณ์๋ค์ด ์คํ ์์ญ์ ์์ฑ๋๊ฒ ๋๊ณ , ๋ฉ์๋ ํธ์ถ์ด ๋๋๋ฉด ํด๋น ์ง์ญ๋ณ์๋ค์ ์คํ์์ญ์์ ์๋ฉธํ๊ฒ ๋ฉ๋๋ค.
heap์์ญ์ ๊ฐ๋ฐ์๊ฐ ์ ์ธํ ๋ฐ์ดํฐ์ ์ธ์คํด์ค ์ ๋ณด๋ค์ด ๋ด๊ฒจ์๋ ์์ญ์
๋๋ค. ์ด ๋ฐ์ดํฐ๋ค์ ๋ฐ๋ก ๊ด๋ฆฌํ์ง ์์๋ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์์ด ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํด ์ง๋ค๋ฉด, JVM์ GC์ ์ํด ์๋ฉธ๋๊ฒ ๋ฉ๋๋ค. ํ ์์ญ์ ๋ด๋ถ๊ฐ ํฌ๊ฒ๋ Young ์์ญ๊ณผ Old ์์ญ์ผ๋ก ๋๋์ด์ ธ์๊ณ , Old์์ญ์ ์ฐธ์กฐ๊ฐ ์ค๋ฌ๋์ ์ ์ง๋์ด ์จ ์ธ์คํด์ค๋ค์ด ์กด์ฌํ๊ณ young ์์ญ์๋ ์์ฑ๋์ง ์ผ๋ง ๋์ง ์์ ์ธ์คํด์ค๋ค์ด ์กด์ฌํฉ๋๋ค. young ์์ญ์ eden์์ญ๊ณผ servial์์ญ์ผ๋ก ๋๋์ด์ง๋๋ฐ eden์์ญ์ ์๋ก ์์ฑ๋ ์ธ์คํด์ค๋ค์ด ์์นํ๊ณ , GC๊ฐ ์ผ์ด๋ ํ ์ญ์ ๋์ง ์๊ณ ์ด์๋จ์ ์ธ์คํด์ค๋ค์ servial์์ญ์ผ๋ก ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
8. ํด๋์ค์ ์ธ์คํด์ค์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
ํด๋์ค๋ ๊ฐ๋จํ ๋งํด์ ๋ถ์ด๋นต ํ ๊ฐ์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ค๊ณ๋์ด๊ณ , ์ธ์คํด์ค๋ ๋ถ์ด๋นต ์์ฒด ์ฆ, ์ค์กดํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํฉ๋๋ค.
9. Garbage Collector์ ์ญํ , ์๋ฆฌ, ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์๋ ๋งํผ ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
GC๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ค ํ๋๋ก, ํ๋ก๊ทธ๋จ์ด ๋์ ์ผ๋ก ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค์์ ํ์ ์๊ฒ ๋ ์์ญ์ ํด์ ํด ์ค๋๋ค.
GC๋ JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ค Heap ์์ญ์์ ์ผ์ด๋๊ฒ ๋๋๋ฐ, Heap์์ญ์ Young,Old ๋๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ด์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ์์ญ์ด ๋๋์ด์ง๊ฒ ๋ ์ด์ ๋ ๊ฐ์ฒด๋ ๋๋ถ๋ถ ์ผํ์ฑ์ด๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ๋จ์์๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋กญ๊ฒ ์์ฑ๋ ๊ฐ์ฒด๋ Young ์์ญ์ ์ ์ฅ๋๊ณ , Young ์์ญ์์ ์ผ์ด๋๋ GC๋ฅผ Minor GC๋ผ๊ณ ํ๊ธฐ๋ ํฉ๋๋ค. Young์์ญ์ Eden ์์ญ๊ณผ 2๊ฐ์ survival์์ญ์ผ๋ก ๋๋์ด์ง๋๋ค. MinorGC๋ eden์์ญ์ด ๊ฐ๋ ์ฐจ๋ฉด ์คํ๋๊ฒ ๋๊ณ , GC์ดํ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ age๊ฐ ๋์ด๋๋ฉด์ survival์์ญ์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์ด๋ํ๊ฒ ๋ฉ๋๋ค. ์ด๋์ ๋ age๊ฐ ์์ด๊ฒ ๋๋ฉด ํด๋น ๊ฐ์ฒด๋ค์ old์์ญ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
Old์์ญ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ ์ฐจ๊ฒ๋๋ฉด GC๊ฐ ์ผ์ด๋๊ฒ ๋๊ณ ์ด GC๋ฅผ Major GC๋ผ๊ณ ํฉ๋๋ค. GC๊ฐ ์ผ์ด๋๋ ๊ณผ์ ์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋๋ฐ,
1. Stop the World
GC๋ฅผ ์คํํ๊ธฐ ์ํด์ ์์คํ
์ ๊ธฐ๋ฅ์ ์ ์ ๋ฉ์ถ๋ ์๊ฐ์ ์๋ฏธํฉ๋๋ค. Stop the world๊ฐ ์งง์ ์๋ก ์ข์ ์ฑ๋ฅ์ GC๋ผ๊ณ ํ ์ ์์ต๋๋ค.
2. Mark and Sweep
Mark - ์ญ์ ๋์์ด๋๋ ๊ฐ๋น์ง ๋ฐ์ดํฐ๋ค์ ์ฒดํฌํฉ๋๋ค.
Sweep - ์ฒดํฌํ๋ ๊ฐ๋น์ง ๋ฐ์ดํฐ๋ค์ ์ญ์ ํฉ๋๋ค.
๋๊ฐ์ง ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
10. Java Map์ ๋ด๋ถ ๊ตฌํ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ ธ ์์์ง ์ถ์ธกํด๋ณด์ค ์ ์์๊น์?
Hash Map
HashMap์ Hash Table ์ ์ด์ฉํ์ฌ ๋ง๋ค์ด์ก์ต๋๋ค.
Hash Table์ key ์ value๋ฅผ ์ ์ฅํ๋ฉฐ, key๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํน์ key๋ ํด์ ํจ์๋ฅผ ํตํ์ฌ bucket์ ์ ๊ทผํ ์ ์๋ index๋ก ๋ณํํฉ๋๋ค. index๋ฅผ ํตํ์ฌ bucket์ ์ ๊ทผํ๊ณ , bucket์ ๋ง๋ index์ key์ value๋ฅผ ์ ์ฅํฉ๋๋ค.
Tree Map
TreeMap์ Node๋ค์ ์ฐ๊ฒฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ๋ฃจํธ๋ผ๋ ์ต์์ Node๊ฐ ์กด์ฌํ๊ณ , ๋ถ๋ชจ Node ์ ์์ Node ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. Node ๋ง๋ค key ์ value ๊ฐ ๊ฐ์ด ์ ์ฅ๋๋ฉฐ, key ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ข์ธก ์ฐ์ธก์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ ์ฅ๋ฉ๋๋ค.
11. DI์ IoC์ ๋ํด ์๋ ๋งํผ ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
DI๋ Dependency Injection๋ก, ํ๋์ ๊ฐ์ฒด๊ฐ ํ์๋กํ๋ ์์๋ค์ ์ธ๋ถ์์ ์ฃผ์
ํด์ฃผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์คํ๋ง์์ ์ ๊ณตํ๋ DI๋ก๋ ํ๋์ฃผ์
, ์์ฑ์์ฃผ์
, ์์ ์ ์ฃผ์
, ๋ฉ์๋ ์ฃผ์
๋ฑ์ด ์์ต๋๋ค.
IoC๋ ์ ์ด์ ์ญ์ ์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ด๋ถ ๋ณ์๋ฅผ ์ง์ ์์ฑํ๊ฒ ๋๋ค๋ฉด ๊ฐ์ฒด๊ฐ ํด๋น ๋ณ์๋ฅผ ์ ์ดํ๊ณ ์๊ฒ ๋์ง๋ง, ๋ง์ฝ ํด๋น ๋ด๋ถ ๋ณ์๋ฅผ ์ธ๋ถ์์ ์ ๊ณตํด์ค๋ค๋ฉด, ์ ์ด์ ๋ฐฉํฅ์ด ์ธ๋ถ์์ ๋ด๋ถ๋ก ์ญ์ ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค. ์ด๊ฒ์ IoC๋ผ๊ณ ํฉ๋๋ค.
12. MVC ๋ชจ๋ธ์ด๋ ๋ฌด์์ธ์ง ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
MVC ๋ชจ๋ธ์ด๋ Model View Controller๋ก ์ด๋ค ํน์ ํ ์ญํ ๋ค์ ๋ํด ์ญํ ๋ถ๋ด์ ํ ๋ ๊ฐ์ด๋๋ผ์ธ์ ์ ์ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์
๋๋ค.
13. Annotation์ด๋ ๋ฌด์์ด๊ณ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ค ๊ฒ์ด ์๋์ง ์์๋ฅผ ๋ค์ด ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
์๋ฐ ์ ๋ํ
์ด์
(Java Annotation)์ ์๋ฐ ์์ค ์ฝ๋์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์๋ ๋ฉํ๋ฐ์ดํฐ์ ์ผ์ข
์
๋๋ค. ๋ณดํต @ ๊ธฐํธ๋ฅผ ์์ ๋ถ์ฌ์ ์ฌ์ฉํ๊ณ , JDK 1.5 ๋ฒ์ ์ด์์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์๋ฐ ์ ๋ํ
์ด์
์ ํด๋์ค ํ์ผ์ ์๋ฒ ๋๋๋์ด ์ปดํ์ผ๋ฌ์ ์ํด ์์ฑ๋ ํ ์๋ฐ ๊ฐ์๋จธ์ ์ ํฌํจ๋์ด ์๋ํฉ๋๋ค.
์ด๋
ธํ
์ด์
๋ ์ข
๋ฅ๊ฐ ์กด์ฌํฉ๋๋ค.
ํ์ค(๋ด์ฅ) ์ด๋
ธํ
์ด์
: ์๋ฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ๋ ์ด๋
ธํ
์ด์
- @Override - ์ค๋ฒ๋ผ์ด๋ฉํ ๋, ๋ฉ์๋์ ์ด๋ฆ์ ์๋ชป์ ๋ ์ค์๋ฅผ ๋ฐฉ์งํด์ฃผ๋ ์ด๋
ธํ
์ด์
- @Deprecated - ์์ผ๋ก ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๊ถ์ฅํ๋ ํ๋๋ ๋ฉ์๋์ ๋ถ์ด๋ ์ด๋
ธํ
์ด์
- @SuppressWarnings- ์ปดํ์ผ๋ฌ์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ํ๋์ง ์๊ฒํ๋ ์ด๋
ธํ
์ด์
๋ฉํ ์ด๋
ธํ
์ด์
: ์ด๋
ธํ
์ด์
์ ์ํ ์ด๋
ธํ
์ด์
- @Taget - ์ด๋
ธํ
์ด์
์ ์ ์ํ ๋, ์ ์ฉ๋์์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ
- @Retention - ์ด๋
ธํ
์ด์
์ด ์ ์ง๋๋ ๊ธฐ๊ฐ์ ์ง์ ํ ๋ ์ฌ์ฉ
SOURCE : ์์ค ํ์ผ์๋ง ์กด์ฌ.
RUNTIME : ํด๋์ค ํ์ผ์ ์กด์ฌ. ์คํ์์ ์ฌ์ฉ๊ฐ๋ฅ
์ฌ์ฉ์์ ์ ์ด๋
ธํ
์ด์
: ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ๋ ์ด๋
ธํ
์ด์
14. Spring Security์ ๊ตฌ์กฐ์ JWT ๋ฐ๊ธ ๊ณผ์ ์ ๋ํด ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
Spring Security๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ๊ฐ์ ํํฐ๊ฐ ์ด์ด์ ธ ์ธ์ฆ ๋ฐ ์ธ๊ฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
Spring Security์ ์ธ์ฆ ๊ตฌ์กฐ๋ ์ด๋ฐ ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
1.Http request (์ธ์ฆ์์ฒญ)
2. AuthenticationFilter๋ฅผ ๊ฑฐ์นจ(์ฌ๊ธฐ์๋UsernamePasswordAuthenticationFilter).
HttpServletRequest๋ฅผ ์ธํฐ์
ํธํ์ฌ AuthenticationManager์ Authentication ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด (UsernamePasswordAuthenticationToken) ์ ๋ฌ
3. AuthenticationFilter๋ก๋ถํฐ ์ธ์ฆ๊ฐ์ฒด ์ ๋ฌ ๋ฐ์.
4. ํด๋น ์ธ์ฆ ๊ฐ์ฒด๋ฅผ ํตํด ์ธ์ฆ์ ์งํํ๋ AuthenticationProvider๋ฅผ ์ฐพ์ ์ธ์ฆ ๊ฐ์ฒด(UsernamePasswordAuthenticationToken)๋ฅผ ์ ๋ฌํ๊ณ ์ธ์ฆ์ ์์ฒญ
5. 6. 7 Provider์์ Service๋ฅผ ํธ์ถํ์ฌ UserDetails๋ฅผ ํตํด ์ธ์ฆ์ ์งํ( DB ๋ฐ์ดํฐ ์กฐํ ๋ฐ ๊ฒ์ฆ )
8. 9 .10 ์ธ์ฆ ์ฑ๊ณต์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด Authentication ๊ฐ์ฒด๋ฅผ SecurityContextHolder์ ์ ์ฅํ๊ณ AuthenticationSuccessHandle๋ฅผ ์คํ. (์คํจ์ AuthenticationFailureHandler ์คํ)
JWT๊ฐ ๋ฐ๊ธ๋๋ ๊ณผ์ ์ ์๋์ ๊ฐ์ต๋๋ค.
์ฒ์ ๋ก๊ทธ์ธ์ ์๋ํ๊ณ ์ ์ ์ ๋ณด ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด, ์๋ฒ์์ ์ฌ์ฉ์๊ฐ ์ธ์ฆํ ํฐ์ ๊ด๋ฆฌํ๋๋ก JWT๋ฅผ ์ฟ ํค๋ ํค๋์ ๋ด์ ๋ฐํํด์ค๋๋ค.
JWT๋ฅผ ๋ฐ๊ธํด์ฃผ๋ ์๋ฒ๋ JWT Secretkey๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํด๋น ํค๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ JWT๋ฅผ ์์ฑํ๊ณ , ์ธ์ฆํ ์ ์๊ฒ ๋ฉ๋๋ค.
15. N+1 ๋ฌธ์ ์ ๋ฐ์ ์ด์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์? ํด๊ฒฐ ๋ฐฉ๋ฒ์ 3๊ฐ์ง ์ด์ ๋ง์ํด์ฃผ์๋ฉด ์ข์ต๋๋ค.
N+1 ๋ฌธ์ ๋ 1๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ์ ๋, ๊ทธ ๊ฐ์๋งํผ(N) ์ฟผ๋ฆฌ๊ฐ ๋ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด ์ค๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ์
๋๋ค. ๋ณดํต ์ฆ์๋ก๋ฉ์ผ๋ก ์ผ๋๋ค ๊ด๊ณ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋, ์ง์ฐ๋ก๋ฉ์ผ๋ก ์กฐํํ ๋ฐ์ดํฐ์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ์ถ๊ฐ์ ์ผ๋ก ์กฐํํด์ค๋ฉด์ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก๋
1. Fetch Join ์ฌ์ฉ
JPQL (Java Persistence Query Language)๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋, JOIN FETCH๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๋ จ ์ํฐํฐ๋ฅผ ํจ๊ป ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ด๋ จ๋ ํ
์ด๋ธ ๊ฐ์ ์กฐ์ธ์ ์ฌ์ฉํด์ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ง์๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ์ง์๊ฐ ํ์ํ ์ ์์ง๋ง ์ง์์ ์๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
2. @EntityGraph ์ด๋
ธํ
์ด์
์ฌ์ฉ
@EntityGraph ์ attributePaths์ ์ฟผ๋ฆฌ ์ํ์ ๋ฐ๋ก ๊ฐ์ ธ์ฌ ํ๋๋ช
์ ์ง์ ํ๋ฉด Lazy๊ฐ ์๋ Eager ์กฐํ๋ก ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. Fetch join๊ณผ ๋์ผํ๊ฒ JPQL์ ์ฌ์ฉํ์ฌ query ๋ฌธ์ ์์ฑํ๊ณ ํ์ํ ์ฐ๊ด๊ด๊ณ๋ฅผ EntityGraph์ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
3. BatchSize ์ค์
application.yml์์ Batchsize๋ฅผ ์ค์ ํด์ฃผ๊ฑฐ๋, @BatchSize ์ด๋
ธํ
์ด์
์ ์ด์ฉํ์ฌ ์ค์ ํด์ฃผ๋ฉด, ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์กฐํํ ๋ ์ง์ ๋ size ๋งํผ SQL์ IN์ ์ ์ฌ์ฉํด์ ์กฐํํ๊ฒ ๋ฉ๋๋ค.
16. ์ฆ์๋ก๋ฉ๊ณผ ์ง์ฐ๋ก๋ฉ์ ๊ฐ๊ฐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์์ง ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
์ฆ์๋ก๋ฉ (Eager Loading)
์ฆ์๋ก๋ฉ์ ์กฐํ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ก๋ํ๋ ๋ฐฉ์์
๋๋ค. JPA์์๋ ์ผ๋์ผ, ๋ค๋์ผ๊ด๊ณ์ผ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฆ์๋ก๋ฉ์ ์ํํฉ๋๋ค. ์ฃผ๋ก ๊ด๋ จ๋ ๋ฐ์ดํฐ๊ฐ ํญ์ ํจ๊ป ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ๋ฐ์ดํฐ๋ค์ ์ฐ๊ด๊ด๊ณ๊ฐ ๋ณต์กํด ์ง ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๊ฐ ์์ํ์ง ๋ชปํ ํํ๋ก ๋ ์๊ฐ ์ ์๊ธฐ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
์ง์ฐ๋ก๋ฉ (Lazy Loading)
-
์ง์ฐ๋ก๋ฉ์ ์กฐํ์ ํด๋น ๊ฐ์ฒด์ ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ค์ ํ๋ก์ ๊ฐ์ฒด๋ก ๊ฐ์ ธ์ ์์๋ก ๋ด์๋๊ณ , ํด๋น ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฌธ์ DB์ ๋ ๋ ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์
๋๋ค.
-
๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ก๋ํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ ์ ์์ต๋๋ค.
-
์ผ๋๋ค ๋๋ ๋ค๋๋ค ๊ด๊ณ์์๋ ์ง์ฐ๋ก๋ฉ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
-
์ง์ฐ๋ก๋ฉ์ N+1 ๋ฌธ์ ๋ฅผ ๋ฐ์์ํฌ ์ ์๊ธฐ์ ์ฆ์๋ก๋ฉ์ด ๋ ์ข์ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ด์ง๋ง, ์ง์ฐ๋ก๋ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉ๋ ๋ฐ์ดํฐ๋ fetch join์ ์ฌ์ฉํด ํจ๊ป ๋ถ๋ฌ์ค๋๊ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ณ ์์ต๋๋ค.
17. Spring bean container ์์ฑ๋ถํฐ ์คํ๋ง ์ข
๋ฃ๊น์ง์ ์ฌ์ดํด์ ๋ํด ์๋ ค์ฃผ์ค ์ ์์๊น์? @PostConstruct, @PreDestroy ์ด๋
ธํ
์ด์
์ ์ญํ ๋ ํจ๊ป ์๋ ค์ฃผ์๋ฉด ์ข์ต๋๋ค.
์คํ๋ง์ด ์์๋์ด ์คํ๋ง ์ปจํ
์ด๋๊ฐ ์์ฑ๋๋ฉด ํฌ๊ฒ ์๋์ ๊ฐ์ ํ๋ฆ์ผ๋ก ํ๋ฌ๊ฐ๋๋ค.
์คํ๋ง ์ปจํ
์ด๋ ์์ฑ -> ์คํ๋ง ๋น ์์ฑ -> ์์กด๊ด๊ณ ์ฃผ์
-> ์ด๊ธฐํ ์ฝ๋ฐฑ -> ์ฌ์ฉ(๋ฉ์๋ ํธ์ถ) -> ์๋ฉธ์ ์ฝ๋ฐฑ -> ์คํ๋ง ์ข
๋ฃ
1. ์คํ๋ง IoC ์ปจํ
์ด๋๊ฐ ์์ฑ๋๊ณ , @Component, @Bean์ ํตํด ์คํ๋ง ๋น๋ค์ ์์ฑํฉ๋๋ค.
2. ์คํ๋ง ๋น๋ค์ ์์กด๊ด๊ณ์ ๋ง๊ฒ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํด ์ค๋๋ค.
3. ์ดํ ์คํ๋ง ๋น๋ค๋ง๋ค ์ง์ ํด๋์๋ ์ด๊ธฐํ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
4. ์คํ๋ง์ด ์ข
๋ฃ๋๊ธฐ ์ ์ ์คํ๋ง ๋น๋ค์ ์๋ฉธ์ ์ฝ๋๋ฅผ ์คํ์ํค๊ณ ์๋ฉธํ๋ฉฐ ์คํ๋ง์ด ์ข
๋ฃ๋ฉ๋๋ค.
์ด๊ธฐํ ์ฝ๋ฐฑ, ์๋ฉธ์ ์ฝ๋ฐฑ ์ง์ ๋ฐฉ๋ฒ 3๊ฐ์ง
- ์ธํฐํ์ด์ค(InitiallizingBean, DisposableBean) -๋น์ถ์ฒ
- @Bean(initMethod, DestroyMethod) - ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ ์ฌ์ฉ
- @PostConstruct, @PreDestory - ์ถ์ฒ
@PostConstruct - ์คํ๋ง ๋น ์์ฑ ์ดํ, ์์กด๊ด๊ณ ์ฃผ์
์ดํ ํธ์ถํ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
@PreDestroy - ์คํ๋ง ๋น ์๋ฉธ ์ง์ ์ ํธ์ถํ ์ฝ๋๋ค์ ์ง์ ํ ์ ์์ต๋๋ค.
- ์์ ์ฝ๋ฐฑ ๋ฐฉ์์ ์คํ๋ง์์ ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
- ์๋ฐ ํ์ค ๊ธฐ์ ์ด์ด์ ์คํ๋ง์ด ์๋ ๋ค๋ฅธ ์ปจํ
์ด๋์์๋ ๋์ํฉ๋๋ค.
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์ ์ด์ธ๋ฆฝ๋๋ค.
- ์ ์ผํ ๋จ์ ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ ์ฉํ์ง ๋ชปํฉ๋๋ค. ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ @Bean(initMethod ="", destory="")์ค์ ์ ๋ณด ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ์ฒ๋ฆฌ ๊ฐ๋ฅํฉ๋๋ค.
18. AOP, Interceptor, Filter ์ ์ฐจ์ด์ , Request๊ฐ ๋ค์ด์ฌ๋ ๊ฑฐ์น๋ ์์, ๊ฐ ์ญํ ๋ค์ ์ฅ์ ์ ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?
Filter์ Interceptor๋ ์๋ธ๋ฆฟ ๋จ์์์ ์คํ๋๊ณ , AOP๋ ๋ฉ์๋ ์์์ proxy์ ํํ๋ก ์ํํ๋ค๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
Request๊ฐ ๋ค์ด์จ๋ค๋ฉด Filter -> Interceptor -> AOP -> Interceptor -> Filter ์์ผ๋ก ๊ฑฐ์น๊ฒ ๋ฉ๋๋ค.
๊ฐ ์ญํ ๋ค์ ์ฅ์
Filter- ์คํ๋ง ์ปจํ
์คํธ ์ธ๋ถ์ ์กด์ฌํ์ฌ ์คํ๋ง๊ณผ ๋ฌด๊ดํ ์์์ ๋ํด ๋์ํฉ๋๋ค. ํํฐ๋ DispatcherServlet ์ด์ ์ ์คํ์ด ๋๋๋ฐ ํํฐ๊ฐ ๋์ํ๋๋ก ์ง์ ๋ ์์์ ์๋จ์์ ์์ฒญ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ธ์ฆ, ์ธ๊ฐ ๋ฑ์ ์ฌ๋ฌ๊ฐ์ง ์ฒดํฌ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ๋ํ ์์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ์๋ต๋ด์ฉ์ ๋ํด์๋ ๋ณ๊ฒฝํ๋ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
Interceptor- ์ธํฐ์
ํฐ๋ ์คํ๋ง์ DistpatcherServlet์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ , ํ๋ก ๋ผ์ด๋ค์ด ์คํ๋ง ์์ญ ๋ด๋ถ์์ Controller์ ๊ดํ ์์ฒญ๊ณผ ์๋ต์ ๋ํด ์ฒ๋ฆฌํฉ๋๋ค. ์ธํฐ์
ํฐ๋ฅผ ํ์ฉํ์ฌ ์ธ์ฆ, ์ธ๊ฐ , ํ๋ก๊ทธ๋จ ์ํ ์๊ฐ ๋ฑ์ ์ฒดํฌํ ์ ์์ต๋๋ค.
AOP - ๋ฉ์๋ ์ ํ์ ์ง์ ์ ์์ ๋กญ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํ๊ณ , ํฌ์ธํธ ์ปท์ ํ์ฉํ์ฌ ์ํ๋ ๋ชจ๋์ ์ํ๋ ๋ฉ์๋์ ์ง์ ํด์ค ์ ์์ต๋๋ค. ๋ํ ์ฌ๋ฌ๊ฐ์ ๋ฉ์๋์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ํ๋์ ๋ชจ๋๋ก ๋ฌถ์ด ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์์ต๋๋ค.
19. NoSQL๊ณผ RDBMS์ ํน์ง๊ณผ ์ฐจ์ด์ ์ ๋ํด์ ์ฅ, ๋จ์ ์ ๋ค์ด ์ค๋ช
ํด์ฃผ์ธ์.
RDBMS๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ ์๋ฏธํฉ๋๋ค. ์ด๋ฆ๊ณผ ๊ฐ์ด RDBMS๋ RDB๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ
์ด๋ฉฐ RDB๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ธฐ์ด๋ก ๋๊ณ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ฐ์ ์์ฑ(column)์ ๊ฐ์ง 2์ฐจ์ ํ
์ด๋ธ ํํ๋ก ํํํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
๋๋ค. RDBMS๋ SQL(Structured Query Language)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
NoSQL(Not Only SQL)์ RDB์ ๋ค๋ฅธ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.RDBMS์๋ ๋ค๋ฅด๊ฒ ํ
์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์์ต๋๋ค.๋ฐ์ดํฐ ํ
์ด๋ธ์ ๊ทธ๋ฅ ํ๋์ ํ
์ด๋ธ์ด๊ณ , ์ผ๋ฐ์ ์ผ๋ก ํ
์ด๋ธ๊ฐ Join๋ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
๋น
๋ฐ์ดํฐ์ ๋ฑ์ฅ์ผ๋ก ๋ฐ์ดํฐ์ ํธ๋ํฝ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํจ์ ๋ฐ๋ผ RDBMS์ ๋จ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฑ์ฅํ์ต๋๋ค. ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ํฌ๊ธฐํ๋, ๋น์ฉ์ ๊ณ ๋ฃํ์ฌ ์ฌ๋ฌ๋์ ๋ฐ์ดํฐ์ ๋ถ์ฐํ์ฌ ์ ์ฅํ๋ Scale-Out์ ๋ชฉํ๋ก ๋ฑ์ฅํ์ต๋๋ค.
RDBMS์ NoSQL์ ์ฅ๋จ์
RDBMS
์ฅ์
- ์ ํด์ง ์คํค๋ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ฌ์ผ ํ๋ฏ๋ก ๋ช
ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅ.
- ๋ํ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์์ด ํ ๋ฒ๋ง ์ ์ฅํ ์ ์์.
๋จ์
- ํ
์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ด ์์คํ
์ด ์ปค์ง๊ฒฝ์ฐ Join๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด ์ง ์ ์์.
- ์คํค๋ง๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ์ ์ฐํ์ง ๋ชปํ๋ค. ๋์ค์ ์คํค๋ง๊ฐ ๋ณ๊ฒฝ ๋ ๊ฒฝ์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ์ด๋ ต๋ค.
NoSQL
์ฅ์
- ์คํค๋ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ์ฐํ๊ณ ์์ ๋ก์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
- ์ธ์ ๋ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ๊ณ ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๋จ์
- ๋ฐ์ดํฐ ์ค๋ณต์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ ๋ ๊ฒฝ์ฐ ์์ ์ ๋ชจ๋ ์ปฌ๋ ์
์์ ํด์ผํจ.
- ์คํค๋ง๊ฐ ์กด์ฌํ์ง ์์ ๋ช
ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
RDBMS, NoSQL ์ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
RDBMS๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ช
ํํ์ฌ ๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋ ์์คํ
์ ์ ํฉํฉ๋๋ค.
NoSQL์ ์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ/ํ์ฅ์ด ๋ ์ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ๋์๋ ๋ชจ๋ ์ปฌ๋ ์
์์ ์์ ์ ํด์ผ ํ๊ธฐ์ Update ๊ฐ ๋ง์ด ์ด๋ฃจ์ด์ง์ง ์๋ ์์คํ
์ ์ข์ต๋๋ค.
20. mvc ํจํด์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
MVC ๋
MVC ๋ Model, View, Controller์ ์ฝ์ ์
๋๋ค. ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
, ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋ ๊ทธ ๊ตฌ์ฑ์์๋ฅผ ์ธ๊ฐ์ง์ ์ญํ ๋ก ๊ตฌ๋ถํ ํจํด์
๋๋ค.
MVC์์ ๋ชจ๋ธ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ณด(๋ฐ์ดํฐ)๋ฅผ ๋ํ๋ด๋ฉฐ, ๋ทฐ๋ ํ
์คํธ, ์ฒดํฌ๋ฐ์ค ํญ๋ชฉ ๋ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ฅผ ๋ํ๋ด๊ณ , ์ปจํธ๋กค๋ฌ๋ ๋ฐ์ดํฐ์ ๋น์ฆ๋์ค ๋ก์ง ์ฌ์ด์ ์ํธ๋์์ ๊ด๋ฆฌํฉ๋๋ค.
21. RDBMS์ ์ ๊ทํ์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
DB๋ฅผ ์๋ชป ์ค๊ณํ๋ฉด ๋ถํ์ํ ๋ฐ์ดํฐ ์ค๋ณต์ด ๋ฐ์ํ์ฌ ๋ฆด๋ ์ด์
์ ๋ํ ๋ฐ์ดํฐ์ ์ฝ์
,์ญ์ ,์์ ์ฐ์ฐ์ ์ํํ ๋ ๋ถ์์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ์์ฉ์ ์ด์(anomaly)ํ์์ด๋ผ๊ณ ํ๊ณ , ์ด๋ฌํ ์ด์ ํ์์ ์ ๊ฑฐํ๋ฉด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณํด ๋๊ฐ๋ ๊ณผ์ ์ด ์ ๊ทํ ์
๋๋ค.
22. Primary Key, Foreign Key์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
๋ฆด๋ ์ด์
์์ ํํ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ํ๋ณดํค๋ค์ค ํ๋๋ฅผ ์ ํํด์ผํ๋๋ฐ ์ด๊ฒ์ด ๊ธฐ๋ณธํค ์
๋๋ค. ํ๋ณดํค๊ฐ 1๊ฐ๋ผ๋ฉด ์ด๊ฒ์ ๊ธฐ๋ณธํค๋ก ์ ํํด์ผ๊ฒ ์ง๋ง, ์ฌ๋ฌ๊ฐ๋ผ๋ฉด ํ๊ฒฝ์ ๊ณ ๋ คํ์ฌ ์ ํฉํ ๊ฒ์ ๊ธฐ๋ณธํค๋ก ์ ํํ๋ฉด ๋ฉ๋๋ค.
์ธ๋ํค๋ ๋ค๋ฅธ ๋ฆด๋ ์ด์
์ ๊ธฐ๋ณธํค๋ฅผ ๊ทธ๋๋ก ์ฐธ์กฐํ๋ ์์ฑ์ ์งํฉ์
๋๋ค. ์ธ๋ํค๋ ๋ฆด๋ ์ด์
๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํํํ๊ธฐ ์ํด ํ์ํฉ๋๋ค. ์ธ๋ํค๋ ๋ฐ๋์ ๋ค๋ฅธ ๋ฆด๋ ์ด์
์ ๊ธฐ๋ณธํค๋ฅผ ์ฐธ์กฐํด์ผํ๋ฉฐ, ์ธ๋ํค์ ๋๋ฉ์ธ์ ์ฐธ์กฐ๋๋ ๊ธฐ๋ณธํค์ ๊ฐ๊ฒ ์ ์๋์ด์ผ ํฉ๋๋ค.
23. HTTP ๋ฉ์๋์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
HTTP ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ(Request)๊ณผ ์๋ต(Response) ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์๋ฒ์ ์ฃผ์ด์ง ๋ฆฌ์์ค์ ์ํํ๊ธธ ์ํ๋ ํ๋, ์๋ฒ๊ฐ ์ํํด์ผ ํ ๋์์ ์ง์ ํ๋ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ด๋ค.
HTTP ๋ฉ์๋์๋ 9๊ฐ์ง ์ข
๋ฅ๊ฐ ์กด์ฌํฉ๋๋ค. 5๊ฐ๋ ์ต์ํ์ง๋ง 4๊ฐ๋ ์จ๋ณด์ง ์์ ๋ฉ์๋๋ค ์
๋๋ค.
์ฃผ์ ๋ฉ์๋
GET : ๋ฆฌ์์ค ์กฐํ
POST: ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ
PUT : ๋ฆฌ์์ค๋ฅผ ๋์ฒด(๋ฎ์ด์ฐ๊ธฐ), ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
PATCH : ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ (PUT์ด ์ ์ฒด ๋ณ๊ฒฝ, PATCH๋ ์ผ๋ถ ๋ณ๊ฒฝ)
DELETE : ๋ฆฌ์์ค ์ญ์
๊ธฐํ ๋ฉ์๋
HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ(body ๋ถ๋ถ)์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ
OPTIONS : ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ฐ๋ฅ ์ต์
(๋ฉ์๋)์ ์ค๋ช
(์ฃผ๋ก CORS์์ ์ฌ์ฉ)
CONNECT : ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์
TRACE : ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ
์คํธ๋ฅผ ์ํ
24. CORS(Cross Origin Resource Sharing)์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
๋ธ๋ผ์ฐ์ ์์๋ ๋ณด์์ ์ธ ์ด์ ๋ก ๋ค๋ฅธ ์ฌ์ดํธ์ ์์ฒญ์ ๋ณด๋ด๋ cross-origin HTTP ์์ฒญ๋ค์ ์ ํํฉ๋๋ค. ๊ทธ๋์ cross-origin ์์ฒญ์ ํ๋ ค๋ฉด ์๋ฒ์ ๋์๊ฐ ํ์ํฉ๋๋ค. ๋ง์ฝ ์๋ฒ๊ฐ ๋์ํ๋ค๋ฉด ๋ธ๋ผ์ฐ์ ์์๋ ์์ฒญ์ ํ๋ฝํ๊ณ , ๋์ํ์ง ์๋๋ค๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ํฉ๋๋ค.
cross-origin
cross-origin์ด๋ ๋ค์ ์ค ํ ๊ฐ์ง๋ผ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค.
ํ๋กํ ์ฝ - http์ https๋ ํ๋กํ ์ฝ์ด ๋ค๋ฅด๋ค.
๋๋ฉ์ธ - domain.com๊ณผ other-domain.com์ ๋ค๋ฅด๋ค.
ํฌํธ ๋ฒํธ - 8080ํฌํธ์ 3000ํฌํธ๋ ๋ค๋ฅด๋ค.
25. ๋ธ๋ผ์ฐ์ ์ ์๋๋ฐฉ์์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
๋ธ๋ผ์ฐ์ ๋ ์๋จ ์ฃผ์ ํ์์ค์ ์ ์ํ๊ธฐ ์ํ๋ ์๋ฒ์ ๋๋ฉ์ธ์ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ฉด, DNS์์ ๋๋ฉ์ธ์ด ๊ฐ์ง๋ IP์ฃผ์๋ฅผ ์๋ ค์ฃผ๊ณ IP์ฃผ์์ ํด๋นํ๋ ๋ฌผ๋ฆฌ์ ์๋ฒ์ ์์ฒญ์ด ๋ ์๊ฐ ํ ์๋ต์ด ๋ธ๋ผ์ฐ์ ๋ก ๋์ฐฉํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์๋ต์ ๋ ๋๋งํด์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฌ์ฃผ๊ฒ ๋ฉ๋๋ค.
26. ์ฟ ํค, ์ธ์
์ ๊ฐ๋
๊ณผ ์ฐจ์ด๋ฅผ ์ค๋ช
ํด๋ณด์ธ์
์ฟ ํค
ํด๋ผ์ด์ธํธ๋ก์ปฌ์ ์ ์ฅ๋๋ ํค์ ๊ฐ์ด ๋ค์ด์๋ ๋ฐ์ดํฐ ํ์ผ
์ฌ์ฉ์ ์ธ์ฆ์ด ์ ํจํ ์๊ฐ์ ๋ช
์ ๊ฐ๋ฅ, ์๊ฐ์ด ์ ํด์ง๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ข
๋ฃ๋์ด๋ ์ธ์ฆ์ด ์ ์ง๋๋ค๋ ํน์ง
์ธ์
์ฟ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ง๋ง, ์ฌ์ฉ์ ์ ๋ณด ํ์ผ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํ๋ ์ฟ ํค์ ๋ค๋ฅด๊ฒ, ์๋ฒ ์ธก์์ ์ธ์
์ ๊ด๋ฆฌ
์๋ฒ์์๋ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ธ์
ID๋ฅผ ๋ถ์ฌํ์ฌ ์ฟ ํค๋ฅผ ํตํด ์ด๋ฅผ ์ธ์ฆ
27. TCP/UDP์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
TCP, UDP ๋ TCP/IP ๋ชจ๋ธ์ ์ ์ก ๊ณ์ธต ์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ ์
๋๋ค.
TCP, UDP ๋ชจ๋ ํจํท์ ํ ์ปดํจํฐ์์ ๋ค๋ฅธ ์ปดํจํฐ๋ก ์ ๋ฌํด์ฃผ๋ IP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์ด์์ต๋๋ค.
TCP๋ Transmission Control Protocol์ ์ฝ์์
๋๋ค. ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ์์ ์คํ๋๋ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก, ์์๋๋ก ๊ตํํ๊ฒ ํด์ค๋๋ค. TCP๋ ์ฐ์์ฑ๋ณด๋ค ์ ๋ขฐ์ฑ์ด ์๋ ์ ์ก์ด ์ค์ํ ๋ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์
๋๋ค.
UDP๋ User Datagram Protocol์ ์ฝ์์
๋๋ค.์ฌ๊ธฐ์ Datagram์ ๋
๋ฆฝ์ ์ธ ๊ด๊ณ๋ฅผ ์ง๋๋ ํจํท์ ๋ปํฉ๋๋ค.์ฆ, ๊ฐ๊ฐ์ ํจํท์ด ๋
๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ํจํท๋ง๋ค ์๋ก ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. UDP๋ ์ ๋ขฐ์ฑ๋ณด๋ค ์ฐ์์ฑ์ด ์๋ ์ ์ก์ด ์ค์ํ ๋ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์
๋๋ค.
28. http, https ์ฐจ์ด์ ์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์
HTTP(Hypertext Transfer Protocol)๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ํต์ ์ ์ํ ํต์ ๊ท์น ์ธํธ ๋๋ ํ๋กํ ์ฝ์
๋๋ค. ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ์ HTTP ์์ฒญ์ ์ ์กํ๊ณ ์น ์๋ฒ๋ HTTP ์๋ต์ผ๋ก ์๋ตํฉ๋๋ค. ์น ์๋ฒ์ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ฐ ํ
์คํธ๋ก ๊ตํํฉ๋๋ค. ๊ฐ๋จํ ๋งํด HTTP ํ๋กํ ์ฝ์ ๋คํธ์ํฌ ํต์ ์ ์๋ํ๊ฒ ํ๋ ๊ธฐ๋ณธ ๊ธฐ์ ์
๋๋ค. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด HTTPS(Hypertext Transfer Protocol Secure)๋ HTTP์ ํ์ฅ ๋ฒ์ ๋๋ ๋ ์์ ํ ๋ฒ์ ์
๋๋ค. HTTPS์์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ ์ ์์ ํ๊ณ ์ํธํ๋ ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
HTTPS ์น ์ฌ์ดํธ๋ ๋
๋ฆฝ๋ ์ธ์ฆ ๊ธฐ๊ด(CA)์์ SSL/TLS ์ธ์ฆ์๋ฅผ ํ๋ํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์น ์ฌ์ดํธ๋ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ ์ ์ ๋ธ๋ผ์ฐ์ ์ ์ธ์ฆ์๋ฅผ ๊ณต์ ํฉ๋๋ค. SSL ์ธ์ฆ์๋ ์ํธํ ์ ๋ณด๋ ํฌํจํ๋ฏ๋ก ์๋ฒ์ ์น ๋ธ๋ผ์ฐ์ ๋ ์ํธํ๋ ๋ฐ์ดํฐ๋ ์คํฌ๋จ๋ธ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์ต๋๋ค.
29. DI, IoC์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
DI(Dependency Injection)๋ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ ์๋๋ผ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์
์์ผ์ฃผ๋ ๋ฐฉ์์
๋๋ค.
DI(์์กด์ฑ ์ฃผ์
)๋ฅผ ํตํด์ ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ์ ์ฐ์ฑ์ด ๋์์ง๋๋ค.
์คํ๋ง ์ปจํ
์ด๋์์ DI๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ, ๋ํ์ ์ผ๋ก ์์ฑ์ ์ฃผ์
, ๋ฉ์๋ ์ฃผ์
, ํ๋ ์ฃผ์
๋ฑ์ด ์์ต๋๋ค.
IoC(Inversion of Controll)๋ ๊ตฌํ์ฒด๋ฅผ ์ง์ ์์ฑํด์ ์ฌ์ฉํ๊ณ ์์๋ค๋ฉด, ์ธ๋ถ๋ก๋ถํฐ ๊ตฌํ์ฒด๋ฅผ ์
๋ ฅ ๋ฐ๋ ๊ฒ ์
๋๋ค.
30. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์ ์ค ํ๋๋ก, ํ๋ก๊ทธ๋๋ฐ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํ์์ผ ์ํ์ ํ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์ ๊ธฐ์ ์ธ ์ํธ์์ฉ์ ํตํด ๋ก์ง์ ๊ตฌ์ฑํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ์ด๋ค.
31. ๋์ฉ๋ ํธ๋ํฝ ๋ฐ์ ์ ์ด๋ป๊ฒ ๋์ํด์ผ ํ๋์?
๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ๋์ ์๋ฒ๊ฐ ๋ถ์ฐ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.
ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต ์
์ฒด์ ์คํ ์ค์ผ์ผ๋ง ๊ธฐ๋ฅ(์๋ฒ์ ๋ถํ๋ฅผ ์ฒดํฌํ์ฌ ์๋ฒ๋ฅผ ์์ฑํ๋ ๋ฐฉ์)์ ์ฌ์ฉํด ๋ด
๋๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ค๋ฉ์ ์ ์ฉ(DB ํ
์ด๋ธ์ ์ํ ๋ถํ ํ์ฌ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์๋ก ๋ค๋ฅธ๊ณณ์ ๋ถ์ฐ ์ ์ฅ)
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ํ๋ฆฌ์นด ์ ์ฉ
์๋ฒ๋ฅผ ์ค์ผ์ผ ์
ํฉ๋๋ค.
์ ์ ์ปจํ
์ธ ์ ๋ํด CDN ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ์ปจํ
์ธ ๋ค์ด ์๊ฐ์ ๋จ์ถ์ํต๋๋ค.
API์ ์๋ต์๋๋ฅผ ๋จ์ถ์ํค์ํด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด๋ด
๋๋ค.
32. ORM์ ์ฌ์ฉํ๋ฉด์ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ ๊ฒฝ์ฐ์๋ ์ด๋ป๊ฒ ํด๊ฒฐํ๋๊ฒ ์ข์๊น์?
์ผ๋จ JPA ์์ฒด๋ ์ ์ ์ธ ์ํฉ์์ ์ฌ์ฉํ๋๊ฑธ ๊ถ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋์ ์ธ ์ฟผ๋ฆฌ์ ๋ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ๊ทธ๋ด๋๋ JPQL๊ณผ Querydsl์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
33. GET, POST์ ๊ฐ๋
๊ณผ ํจ๊ป ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
GET ๋ฉ์๋:
GET ๋ฉ์๋๋ ์ ๋ณด๋ฅผ ์๋ฒ๋ก๋ถํฐ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ์ ์กฐํ ๋ฐ ๊ฒ์๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ๋ URL ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ ์ก๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, https://example.com/resource?param1=value1ยถm2=value2์ ๊ฐ์ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ URL์ ์ผ๋ถ์ด๋ฏ๋ก ๋ธ๋ผ์ฐ์ ํ์คํ ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ ๋ถ๋งํฌํ ์ ์์ต๋๋ค.
GET ์์ฒญ์ ์บ์ฑํ ์ ์์ผ๋ฉฐ, ์์ฒญ์ด ๋ฐ๋ณต๋ ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ฉฑ๋ฑ(idempotent)ํ ํน์ฑ์ ๊ฐ์ง๋๋ค.
POST ๋ฉ์๋:
POST ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ์ ์์ฑ, ์
๋ฐ์ดํธ ๋ฐ ์ญ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ๋ HTTP ์์ฒญ ๋ณธ๋ฌธ(body)์ ํฌํจ๋๋ฉฐ, URL์ ์ง์ ๋
ธ์ถ๋์ง ์์ต๋๋ค. ์ด๋ก์จ ๋ฐ์ดํฐ๋ ์์ ํ๊ฒ ์ ์ก๋ฉ๋๋ค.
POST ์์ฒญ์ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ ํํ์ ์ ํ์ด ์์ผ๋ฉฐ, ํ์ผ ์
๋ก๋์ ๊ฐ์ด ํฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
POST ์์ฒญ์ ์บ์ฑํ ์ ์์ผ๋ฉฐ, ์์ฒญ์ด ๋ฐ๋ณต๋ ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ฉฑ๋ฑํ์ง ์์(non-idempotent) ํน์ฑ์ ๊ฐ์ง๋๋ค.
๋ฐ์ดํฐ ํ๋ฆ
ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ ๋๋ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
)๋ HTTP GET ๋๋ POST ์์ฒญ์ ์์ฑํฉ๋๋ค.
GET ์์ฒญ์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ URL์ ์ฟผ๋ฆฌ ๋ฌธ์์ด๋ก ํฌํจ๋ฉ๋๋ค. POST ์์ฒญ์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ HTTP ์์ฒญ ๋ณธ๋ฌธ์ ํฌํจ๋ฉ๋๋ค.
์์ฒญ๋ ๋ฐ์ดํฐ์ ํจ๊ป ์์ฒญ ํค๋์ ๋ฉ์๋(GET ๋๋ POST) ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ HTTP ์์ฒญ์ด ์๋ฒ๋ก ์ ์ก๋ฉ๋๋ค.
์๋ฒ๋ ์์ฒญ์ ์์ ํ๊ณ , ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
GET ์์ฒญ์ ๊ฒฝ์ฐ, ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ ์ผ๋ถ๋ก ๋ค์ ํด๋ผ์ด์ธํธ๋ก ์ ์กํฉ๋๋ค. POST ์์ฒญ์ ๊ฒฝ์ฐ, ์๋ฒ๋ ์์ฒญ์ ๋ํ ์๋ต์ ์์ฑํ๊ณ ๋ค์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋
๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ๊ณ ์ํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ๊ฑฐ๋ ์ฒ๋ฆฌํฉ๋๋ค.
34. OSI 7๊ณ์ธต์ ๋ํด ์๋๋๋ก ์ค๋ช
ํด์ฃผ์ธ์.
1. ๋ฌผ๋ฆฌ ๊ณ์ธต (Physical Layer):
๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ดํฐ ์ ์ก์ ๋ด๋นํฉ๋๋ค. ์ผ์ด๋ธ, ์ค์์น, ํ๋ธ ๋ฑ์ ํ๋์จ์ด ๋๋ฐ์ด์ค์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ฐ์ดํฐ ๋นํธ๋ฅผ ์ ์กํ๊ณ ์ ํธ๋ฅผ ๋ณํํ๋ ์ญํ ์ ํฉ๋๋ค.
2. ๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต (Data Link Layer):
๋ฌผ๋ฆฌ ๊ณ์ธต์์ ์ก์์ ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ ์(frame)์ผ๋ก ๋ถํ ํ๊ณ , ์ค๋ฅ ๊ฒ์ถ ๋ฐ ์์ ์ ์ํํฉ๋๋ค.
MAC ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ๋คํธ์ํฌ ๋ด์์์ ๋ฐ์ดํฐ ์ ์ก์ ๊ด๋ฆฌํฉ๋๋ค.
์ค์์น ๋ฑ์ ์ฅ๋น๊ฐ ์ด ๊ณ์ธต์์ ๋์ํฉ๋๋ค.
3. ๋คํธ์ํฌ ๊ณ์ธต (Network Layer):
๋ฐ์ดํฐ ํจํท(packet)์ ๊ฒฝ๋ก ์ ํ ๋ฐ ๋ผ์ฐํ
์ ๋ด๋นํฉ๋๋ค.
IP ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ํจํท์ ๋ชฉ์ ์ง๊น์ง ์ ๋ฌํ๋ฉฐ, ์๋ธ๋ท ๊ฐ์ ํต์ ์ ์ง์ํฉ๋๋ค.
๋ผ์ฐํฐ๊ฐ ์ด ๊ณ์ธต์์ ๋์ํฉ๋๋ค.
4. ์ ์ก ๊ณ์ธต (Transport Layer):
๋ฐ์ดํฐ ์ ์ก์ ์ ๋ขฐ์ฑ๊ณผ ์ ํ์ฑ์ ๊ด๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ์ ์ค๋ฅ ๋ณต๊ตฌ์ ํ๋ฆ ์ ์ด๋ฅผ ์ํํฉ๋๋ค.
ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ์ง์ํ๋ฉฐ, TCP์ UDP ํ๋กํ ์ฝ์ด ์ด ๊ณ์ธต์์ ๋์ํฉ๋๋ค.
5. ์ธ์
๊ณ์ธต (Session Layer):
์ธ์
์ ์ค์ , ์ ์ง, ์ข
๋ฃ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ๋ฐ์ดํฐ ๊ตํ์ ๋๊ธฐํํฉ๋๋ค.
๋ค๋ฅธ ์์คํ
๊ฐ์ ๋ค์ค ์์
๋ฐ ๋์์ฑ์ ๊ด๋ฆฌํฉ๋๋ค.
6. ํํ ๊ณ์ธต (Presentation Layer):
๋ฐ์ดํฐ๋ฅผ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ดํดํ ์ ์๋ ํ์์ผ๋ก ๋ณํํ๊ณ , ๋ฐ์ดํฐ ์์ถ, ์ํธํ, ์ธ์ฝ๋ฉ ๋ฑ์ ์์
์ ์ํํฉ๋๋ค.
๋ฐ์ดํฐ ํ์ ๋ฐ ๋ฌธ๋ฒ ๋ณํ์ ์ ๊ณตํฉ๋๋ค.
7. ์์ฉ ๊ณ์ธต (Application Layer):
์ต์ข
์ฌ์ฉ์์ ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ์ ์ํธ ์์ฉ์ ์ง์ํฉ๋๋ค.
ํ๋กํ ์ฝ, ๋ฐ์ดํฐ ์ ์ก ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์ธํฐํ์ด์ค๋ฅผ ํฌํจํ์ฌ ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฐ ๊ณ์ธต์ ๊ทธ ์์ฒด๋ก ๋
๋ฆฝ์ ์ด๋ฉฐ, ์์ ๊ณ์ธต์ ํ์ ๊ณ์ธต์ ์๋น์ค๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ๋ฌํฉ๋๋ค. ์ด๋ฌํ ๊ณ์ธตํ ๊ตฌ์กฐ๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด ์์คํ
๊ฐ์ ํต์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ํธ ์ด์ฉ์ฑ์ ํ๋ณดํ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ธ์ ์ปดํจํฐ ๋คํธ์ํฌ ๋ฐ ํต์ ์์คํ
์ ์ค๊ณ์ ์ดํด์ ์ค์ํ ๋๊ตฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
35. ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ๊ณผ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
์ธ์
๊ธฐ๋ฐ ์ธ์ฆ(Session-Based Authentication):
-
์๋ฒ ์ธก ์ ์ฅ: ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด(์: ๋ก๊ทธ์ธ ์ํ)๋ฅผ ์๋ฒ ์ธก์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ๋ ์ฌ์ฉ์ ์ธ์
์ ์ ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
-
์ฟ ํค ์ฌ์ฉ: ์ผ๋ฐ์ ์ผ๋ก ์ธ์
ID๊ฐ ์ฟ ํค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ด ์ธ์
ID๋ฅผ ์์ฒญ ํค๋์ ํฌํจํ์ฌ ์๋ฒ์ ์์ฒญ์ ๋ณด๋
๋๋ค. ์๋ฒ๋ ์ธ์
ID๋ฅผ ํ์ธํ๊ณ ํด๋น ์ธ์
์ ์ฐ๊ฒฐ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฒ์ํฉ๋๋ค.
-
์๋ฒ ์ธก ์ ์ง: ์ธ์
์ ์๋ฒ ์ธก์์ ์ ์ง๋๋ฏ๋ก ํด๋ผ์ด์ธํธ๋ ์ธ์
์ ๋ํ ๊ด๋ฆฌ๋ ์ ์ฅ์ ํ์ง ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์๊ฒ ์๋์ ์ผ๋ก ๋ ๋ถ๋ด์ ์ฃผ๋ ์ฅ์ ์ผ ์ ์์ต๋๋ค.
-
๋ก๊ทธ์์ ๋ฐ ์ธ์
๊ด๋ฆฌ: ๋ก๊ทธ์์์ ์๋ฒ ์ธก์์ ๊ด๋ฆฌ๋๋ฉฐ, ์ธ์
์ ๋ง๋ฃ ์๊ฐ์ ์ค์ ํ์ฌ ์ธ์
๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ(Token-Based Authentication):
-
์๋ฒ ์ธก ์ ์ฅ ์์: ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์์๋ ์๋ฒ ์ธก์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค. ์ฌ์ฉ์ ์ ๋ณด๋ ํ ํฐ ์์ฒด์ ํฌํจ๋์ด ์๊ฑฐ๋, ํ ํฐ์ด ์๋ฒ ์ธก์์ ๊ฒ์ฆ๋ ์ ์๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
-
ํ ํฐ ์ฌ์ฉ: ์ฌ์ฉ์๋ ์ธ์ฆ ํ ์๋ฒ๋ก๋ถํฐ ํ ํฐ์ ๋ฐ์ต๋๋ค. ์ด ํ ํฐ์ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋ฉ๋๋ค(๋ก์ปฌ ์ ์ฅ์, ์ฟ ํค, ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฑ).
-
ํด๋ผ์ด์ธํธ ์ธก ์ ์ง: ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ง๋๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ํ ํฐ์ ์๋ฒ์ ์ ๊ณตํ์ฌ ์๊ฒฉ ์ฆ๋ช
์ ํ์ธํฉ๋๋ค.
-
๋ก๊ทธ์์ ๋ฐ ํ ํฐ ๊ด๋ฆฌ: ๋ก๊ทธ์์ ๋ฐ ํ ํฐ ๋ง๋ฃ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํธ์์ฉ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ํ ํฐ์๋ ์ ํจ ๊ธฐ๊ฐ์ ์ค์ ํ ์ ์์ด์ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
์ฐจ์ด์ ์์ฝ:
- ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ ์๋ฒ ์ธก์์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์ธ์
ID๋ง ๊ฐ์ง๊ณ ์์ต๋๋ค. ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋ฒ๋ ํ ํฐ์ ์ ํจ์ฑ์ ํ์ธํฉ๋๋ค.
- ์ธ์
์ ์๋ฒ ์ธก์์ ์ ์ง๋๊ณ ๊ด๋ฆฌ๋๋ฉฐ, ๋ก๊ทธ์์ ๋ฐ ์ธ์
๊ด๋ฆฌ๋ ์๋ฒ๊ฐ ์ฒ๋ฆฌํฉ๋๋ค. ํ ํฐ์ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ง๋๋ฉฐ, ๋ก๊ทธ์์ ๋ฐ ํ ํฐ ๊ด๋ฆฌ๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํ๋ ฅ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ RESTful API ๋ฐ ๋ถ์ฐ ์์คํ
์์ ๋ ์ ์ฉํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ํ ์๋ฒ๋ก ๋ถ์ฐ๋๋ ๊ฒฝ์ฐ์๋ ์ ๋์ํฉ๋๋ค. ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ ์ ํต์ ์ธ ์น ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
36. JWT, Refresh, Access Token์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
-
JWT (JSON Web Token):
- JWT๋ ์น ๋ฐ ๋คํธ์ํฌ ๋ณด์์์ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ปดํฉํธํ๊ณ ์์ฒด ์์ฉ ๊ฐ๋ฅํ ๋ฐฉ์์ ํ ํฐ์
๋๋ค.
- JWT๋ JSON ํ์์ผ๋ก ์ธ์ฝ๋ฉ๋๋ฉฐ, ์ฃผ๋ก ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด์ ํด๋ ์(claim) ์ ๋ณด(์: ์ฌ์ฉ์ ID, ๋ง๋ฃ ์๊ฐ, ๊ถํ ๋ฑ)๋ฅผ ํฌํจํฉ๋๋ค.
- JWT๋ ์๋ฒ์์ ์๋ช
๋์ด ์์ด ๋ณ๊ฒฝ๋์ง ์๋๋ก ๋ณด์ฅ๋๋ฉฐ, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌ๋ฉ๋๋ค.
- JWT๋ ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
๋ฐ API์์ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ์ ํ์ฉ๋ฉ๋๋ค.
-
Access Token:
- Access Token์ ์ฌ์ฉ์๋ฅผ ๋ํํ์ฌ API ๋๋ ์๋น์ค์ ์ ๊ทผํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ ํฐ์
๋๋ค.
- ์ฃผ๋ก OAuth 2.0 ๋ฐ OpenID Connect์ ๊ฐ์ ํ๋กํ ์ฝ์์ ์ฌ์ฉ๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ์์์ ์ ๊ทผํ ๊ถํ์ ๋ถ์ฌํ๊ณ ์ธ์ฆํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Access Token์ ์ผ๋ฐ์ ์ผ๋ก JWT ๋๋ ๋ค๋ฅธ ํ์์ ํ ํฐ์ผ ์ ์์ผ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์งง์ ์ ํจ ๊ธฐ๊ฐ์ ๊ฐ์ต๋๋ค.
-
Refresh Token:
- Refresh Token์ Access Token์ ๊ฐฑ์ ํ๊ฑฐ๋ ์ฌ๋ฐ๊ธํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํน์ํ ํ ํฐ์
๋๋ค.
- Access Token์ ์ผ๋ฐ์ ์ผ๋ก ์ ํจ ๊ธฐ๊ฐ์ด ์งง๊ธฐ ๋๋ฌธ์, Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ ์ ์์ต๋๋ค.
- Refresh Token์ ์ฃผ๋ก ๋ณด์์ ๊ฐํํ๊ณ , ๋ง๋ฃ๋ Access Token์ ๋์ฒดํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- Refresh Token์ ์ผ๋ฐ์ ์ผ๋ก Access Token๊ณผ๋ ๋ณ๋๋ก ์ ์ฅ ๋ฐ ๋ณดํธ๋๋ฉฐ, ๋ ๊ธด ์ ํจ ๊ธฐ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
37. OAuth์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
OAuth(Open Authorization)๋ ์ธํฐ๋ท์ ํตํด ๋ค๋ฅธ ์น ์๋น์ค ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ์ ํ๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๊ธฐ ์ํ ๊ถํ ๋ถ์ฌ ํ๋ ์์ํฌ์
๋๋ค. OAuth๋ ์ฌ์ฉ์ ๋๋ ์๋น์ค ์์ ์์ ๋์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์๋น์ค ๋๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. OAuth๋ ๋ค์ํ ์น ์๋น์ค ๋ฐ API์์ ์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ๊ตฌํํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
OAuth์ ํต์ฌ ์์์ ๊ฐ๋
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
-
์ธ์ฆ ์๋ฒ(Authentication Server): OAuth ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ํด ์ธ์ฆ ์๋ฒ์ ์์กดํฉ๋๋ค. ์ธ์ฆ ์๋ฒ๋ ์ฌ์ฉ์๋ฅผ ์๋ณํ๊ณ ์ธ์ฆ์ ์ํํฉ๋๋ค.
-
ํด๋ผ์ด์ธํธ(Client): OAuth๋ฅผ ์ฌ์ฉํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
๋๋ ์๋น์ค๋ฅผ ํด๋ผ์ด์ธํธ๋ผ๊ณ ํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ๋
๋๋ค.
-
๋ฆฌ์์ค ์๋ฒ(Resource Server): ์ฌ์ฉ์ ๋ฐ์ดํฐ ๋๋ ์๋น์ค์ ๋ํ ์ก์ธ์ค๊ฐ ํ์ํ ์๋ฒ ๋๋ API๋ฅผ ๋ฆฌ์์ค ์๋ฒ๋ผ๊ณ ํฉ๋๋ค.
-
๋ฆฌ์์ค ์์ ์(Resource Owner): ๋ฆฌ์์ค ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์ ์ดํ๋ ์ฌ์ฉ์๋ฅผ ๋ฆฌ์์ค ์์ ์๋ผ๊ณ ํฉ๋๋ค.
-
์ก์ธ์ค ํ ํฐ(Access Token): OAuth ํ๋ก์ธ์ค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์๋ฒ์ ์ก์ธ์คํ๊ธฐ ์ํ ๊ถํ์ ๋ถ์ฌํ๋ ํ ํฐ์
๋๋ค. ์ด ํ ํฐ์ ์ ํ๋ ๊ถํ์ ๊ฐ์ง๋ฉฐ, ์ ํจ ๊ธฐ๊ฐ์ด ์ ํ๋์ด ์์ต๋๋ค.
OAuth ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ์งํ๋ฉ๋๋ค:
-
์ ํ๋ฆฌ์ผ์ด์
๋ฑ๋ก: ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ OAuth ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ธ์ฆ ์๋ฒ ๋ฐ ๋ฆฌ์์ค ์๋ฒ์ ๋ฑ๋กํฉ๋๋ค.
-
์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ: ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํด ์ธ์ฆ ์๋ฒ๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ณ , ์ฌ์ฉ์๋ ์์ ์ ์๊ฒฉ ์ฆ๋ช
์ผ๋ก ์ธ์ฆํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ ์ ์๋ ๋ฆฌ์์ค์ ๋ฒ์๋ฅผ ์ ํํ๊ณ , ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
-
์ก์ธ์ค ํ ํฐ ์์ฒญ: ์ธ์ฆ์ด ์ฑ๊ณตํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์ก์ธ์ค ํ ํฐ์ ์์ฒญํฉ๋๋ค. ์ด ์์ฒญ์ ๊ถํ ์ฝ๋(authorization code)๋ ๋ฆฌ์์ค ์์ ์์ ์๊ฒฉ ์ฆ๋ช
(๋น๋ฐ ๋ฒํธ)์ ์ฌ์ฉํ์ฌ ์ด๋ฃจ์ด์ง ์ ์์ต๋๋ค.
-
์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ: ์ธ์ฆ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.
-
์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํ ๋ฆฌ์์ค ์๋ฒ ์ก์ธ์ค: ํด๋ผ์ด์ธํธ๋ ์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์๋ฒ์ ์ก์ธ์คํ๊ณ , ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ ์๋น์ค๋ฅผ ์์ฒญํฉ๋๋ค.
OAuth๋ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉ์์ ๋น๋ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ๋ฌํ์ง ์๋๋ก ํ๋ฉฐ, ์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ํ ์ ์ด๋ฅผ ์ ์งํ๋ฉด์ ๋ค๋ฅธ ์๋น์ค์ ์ํธ์์ฉํ ์ ์๋ ํ์ค ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๊ฒ์ ๋ง์ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ์์
๋ฏธ๋์ด ๋ก๊ทธ์ธ, API ์ก์ธ์ค ๋ฐ ๊ถํ ๋ถ์ฌ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
38. HTTP ์ํ์ฝ๋์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
HTTP(ํ์ดํผํ
์คํธ ์ ์ก ํ๋กํ ์ฝ) ์ํ ์ฝ๋๋ ์น ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ 3์๋ฆฌ ์ซ์ ์ฝ๋์
๋๋ค. ์ด ์ฝ๋๋ ํด๋ผ์ด์ธํธ์๊ฒ ํ์ฌ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. HTTP ์ํ ์ฝ๋๋ ์์ฒญ์ด ์ฑ๊ณตํ๋์ง, ์คํจํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์คํจํ ๊ฒฝ์ฐ ๊ทธ ์ด์ ๋ฅผ ์๋ ค์ค๋๋ค.
HTTP ์ํ ์ฝ๋๋ ๋ค์ ์ธ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋ ์ ์์ต๋๋ค:
-
1xx (Informational - ์ ๋ณด): ์์ฒญ์ด ๋ฐ์์ผ๋ฉฐ ์ฒ๋ฆฌ ์ค์์ ๋ํ๋ด๋ ์ํ ์ฝ๋์
๋๋ค. ์ค์ ์๋ต์ ์์ง ๋์ฐฉํ์ง ์์ ์ํ์ด๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
-
2xx (Successful - ์ฑ๊ณต): ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์์์ ๋ํ๋ด๋ ์ํ ์ฝ๋์
๋๋ค. ๊ฐ์ฅ ํํ ์ํ ์ฝ๋๋ 200(OK)์ด๋ฉฐ, ์์ฒญ์ด ์ฑ๊ณตํ๊ณ ํด๋ผ์ด์ธํธ๋ ์๋ต์ ๋ฐ์ต๋๋ค.
-
3xx (Redirection - ๋ฆฌ๋๋ ์
): ์ถ๊ฐ ์กฐ์น๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ๋ํ๋ด๋ฉฐ, ์์ฒญ์ ๋ค๋ฅธ ์์น๋ก ๋ฆฌ๋๋ ํธํด์ผ ํฉ๋๋ค.
-
4xx (Client Error - ํด๋ผ์ด์ธํธ ์ค๋ฅ): ์์ฒญ์ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋ํ๋ด๋ ์ํ ์ฝ๋์
๋๋ค. ์๋ฅผ ๋ค์ด, 404(Not Found)๋ ์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์์ ์๋ฏธํฉ๋๋ค.
-
5xx (Server Error - ์๋ฒ ์ค๋ฅ): ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ๋ฅผ ๋ํ๋ด๋ ์ํ ์ฝ๋์
๋๋ค. ์๋ฅผ ๋ค์ด, 500(Internal Server Error)๋ ์๋ฒ์์ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ์๋ฏธํฉ๋๋ค.
39. CI/CD์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
CI/CD๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ณ ํฅ์์ํค๊ธฐ ์ํ ๊ฐ๋
๊ณผ ๋ฐฉ๋ฒ๋ก ์ ๋ํ๋ด๋ ์ฉ์ด์
๋๋ค. CI๋ "์ง์์ ์ธ ํตํฉ(Continuous Integration)"์ ์ฝ์์ด๋ฉฐ, CD๋ "์ง์์ ์ธ ์ ๋ฌ(Continuous Delivery)" ๋๋ "์ง์์ ์ธ ๋ฐฐํฌ(Continuous Deployment)"์ ์ฝ์์
๋๋ค. ์ด ๋ ๊ฐ์ง ๊ฐ๋
์ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ์ ํจ์จ์ฑ๊ณผ ํ์ง์ ํฅ์์ํค๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
-
์ง์์ ์ธ ํตํฉ(CI - Continuous Integration):
- CI๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณต์ ์ฝ๋ ์ ์ฅ์(์: Git)์ ํธ์ํ ๋ ์๋์ผ๋ก ํตํฉ ๋ฐ ํ
์คํธ๋๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋ํ๋
๋๋ค.
- CI ์์คํ
์ ์ฝ๋ ํตํฉ ํ ์๋ํ๋ ๋น๋ ๋ฐ ํ
์คํธ๋ฅผ ์คํํ์ฌ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ง์ ํ์ธํฉ๋๋ค.
- ์ด๋ก ์ธํด ๊ฐ๋ฐ์๋ ๋น๋ฒํ ์ฝ๋ ํตํฉ๊ณผ ํ์ง ํฅ์์ ๋ฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ ์ฌ์ ์ธ ๋ฒ๊ทธ ๋ฐ ์ถฉ๋์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ฒ ๋ฉ๋๋ค.
-
์ง์์ ์ธ ์ ๋ฌ(CD - Continuous Delivery):
- CD๋ ์ํํธ์จ์ด๋ฅผ ํ๋ก๋์
ํ๊ฒฝ์ผ๋ก ์๋์ผ๋ก ์ ๋ฌํ๊ณ , ํ๋ก๋์
๋ฐฐํฌ๋ฅผ ์๋์ผ๋ก ์น์ธํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ํ๋
๋๋ค.
- CI์ ํจ๊ป CD๋ ๋น๋, ํ
์คํธ, ํจํค์ง ๋ฐ ํ๋ก๋์
ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌ๋ฅผ ์๋ํํฉ๋๋ค.
- CD๋ฅผ ํตํด ๊ฐ๋ฐ๋ ์ํํธ์จ์ด๋ ํ๋ก๋์
์ค๋น ์ํ๋ก ๊ณ์ ์ ๋ฌ๋๋ฏ๋ก, ๋ฆด๋ฆฌ์ฆ ๋ฒ์ ์ ๋ฐฐํฌ๋ฅผ ์ธ์ ๋ ์ํํ ์ ์์ต๋๋ค.
-
์ง์์ ์ธ ๋ฐฐํฌ(CD - Continuous Deployment):
- CD์ ํ ๋จ๊ณ๋ก, ์ํํธ์จ์ด ๋ณ๊ฒฝ ์ฌํญ์ด ํ
์คํธ ๋ฐ ์คํ
์ด์ง ํ๊ฒฝ์ ํต๊ณผํ๋ฉด ์๋์ผ๋ก ํ๋ก๋์
ํ๊ฒฝ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
- ์ฌ์ฉ์์ ์น์ธ ์์ด ํ๋ก๋์
๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
- ์ด ๋ฐฉ์์ ํด๋ผ์ฐ๋ ํ๊ฒฝ ๋ฐ ์น ๊ธฐ๋ฐ ์๋น์ค์์ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ์ง์์ ์ธ ํ์ ๊ณผ ๋ฐฐํฌ ์๋๋ฅผ ํฅ์์ํต๋๋ค.
40. TDD์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
TDD(Test-Driven Development)๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ค ํ๋๋ก, ๊ฐ๋ฐ์๊ฐ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ ๋ ํ
์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ทธ ๋ค์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์กฐํ๋ ๋ฐฉ๋ฒ๋ก ์
๋๋ค. TDD๋ ๋ค์ ์ธ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฆ
๋๋ค:
-
ํ
์คํธ ์์ฑ ๋จ๊ณ (Red - ๋นจ๊ฐ):
- ๋จผ์ , ์๋ก์ด ๊ธฐ๋ฅ ๋๋ ๋ชจ๋์ ๊ฐ๋ฐํ๊ธฐ ์ ์ ํด๋น ๊ธฐ๋ฅ ๋๋ ๋ชจ๋์ ๋ํ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋จ๊ณ์์ ์์ฑ๋ ํ
์คํธ ์ผ์ด์ค๋ ์์ง ๊ตฌํ๋์ง ์์ ๊ธฐ๋ฅ ๋๋ ๋ชจ๋์ ๊ฒ์ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์ด๋ก ์ธํด ํ
์คํธ๋ ์คํจํฉ๋๋ค(๋นจ๊ฐ ๋ถ) because the functionality is not yet implemented.
-
์ฝ๋ ์์ฑ ๋จ๊ณ (Green - ์ด๋ก):
- ์ด ๋จ๊ณ์์ ๋ชฉํ๋ ํ
์คํธ๋ฅผ ํต๊ณผํ๋๋ก ์ต์ํ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. ์ฝ๋ ์์ฑ์ ์ฃผ๋ก ํ
์คํธ๋ฅผ ํต๊ณผ์ํค๊ธฐ ์ํ ์ฝ๋ ์์ฑ์ ์ด์ ์ ๋ง์ถฅ๋๋ค. ์ฝ๋๊ฐ ์์ง ์๋ฒฝํ์ง ์์๋ ๋ฉ๋๋ค. ์ฃผ์ ๋ชฉํ๋ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ๊ฒ(์ด๋ก ๋ถ)์
๋๋ค.
-
๋ฆฌํฉํฐ๋ง ๋จ๊ณ (Refactor):
- ์ฑ๊ณตํ ํ
์คํธ๋ฅผ ํต๊ณผํ ํ, ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ณ ๋ฆฌํฉํฐ๋งํ๋ ๋จ๊ณ์
๋๋ค. ๋ฆฌํฉํฐ๋ง์ ์ฝ๋์ ๊ฐ๋
์ฑ, ํจ์จ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๋ ์์
์ ์ํํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์ฝ๋์ ํ์ง์ ๋์ด๊ณ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๋ฑ์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
TDD๋ฅผ ๋ฐ๋ฅด๋ฉด ํ
์คํธ ์ผ์ด์ค๋ ๊ฐ๋ฐ ์ค์ ์ฝ๋์ ์์ ๋์์ ์ ์ํ๊ณ , ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ํ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. TDD๋ฅผ ํตํด ์ํํธ์จ์ด์ ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ํฅ์์ํค๋ฉฐ, ์ฝ๋ ๋ณ๊ฒฝ์ ๋ํ ์์ ๊ฐ์ ์ ๊ณตํ๊ณ ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋๋ฐ ๋์์ด ๋ฉ๋๋ค.
TDD๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ๊ฐ๋ฐ์๋ค ๊ฐ์ ํ์
์ ์ด์งํ๋ฉฐ, ๋ณ๊ฒฝ ์ฌํญ์ด ์ฝ๋์ ์ํฅ์ ๋ฏธ์น ๋ ์ด๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
41. ํ๋ก์ธ์ค์ ์ฐ๋ ๋์ ๋ํด์ ์ค๋ช
ํ๊ณ ๊ทธ ์ฐจ์ด์ ๋ํด์ ์ค๋ช
ํด์ฃผ์ธ์.
ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ ๋๋ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ฉด์ ์์์ ๊ณต์ ํ๋ ์์ ์คํ ๋จ์์
๋๋ค.
์๋ฅผ ๋ค์ด ๋ผ๋ฉด์ ๋์ด๋ ํ๋ก์ธ์ค๊ฐ ๋์๊ฐ๊ณ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๊ทธ ๋ด๋ถ์์๋ ๋ฌผ์ ๋ฐ์์ค๋ ์ฐ๋ ๋, ๋ผ๋ฉด์ ๊ฐ์ ธ์ค๋ ์ฐ๋ ๋, ๋ถ์ ์ผ๋ ์ฐ๋ ๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
์์ฝํ์๋ฉด, ํ๋ก์ธ์ค๋ ๋
๋ฆฝ์ ์ด๊ณ ์์ฒด์ ์ธ ์คํ ํ๊ฒฝ์ ๊ฐ์ง๋ฉฐ, ์ค๋ ๋๋ ๊ฐ์ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ฉด์ ์์์ ๊ณต์ ํ๋ ์์ ์คํ ๋จ์์
๋๋ค.
42. ๋ฉํฐํ๋ก์ธ์ค์ ๋ฉํฐ์ฐ๋ ๋์ ํน์ง์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
๋ฉํฐ ํ๋ก์ธ์ค
๋ฉํฐ ํ๋ก์ธ์ค๋ ๊ฐ ํ๋ก์ธ์ค๋ค์ด ๋
๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์คํ๋๊ธฐ์ ํ๋์ ํ๋ก์ธ์ค์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ ์ํฅ์ ๋ฏธ์น์ง ์์ ์์ ์ ์
๋๋ค. ๋ํ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ฐ๋ ๋๊ฐ์ ํต์ ๊ณผ ๋ค๋ฅด๊ฒ ๋น์ฉ์ด ๋ง์ด๋ค๊ณ ๋ณต์กํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ธ์ค๋ ์์ฑ๊ณผ ์๋ฉธํ๋๋ฐ ์ฐ๋ ๋๋ณด๋ค ์๋์ ์ผ๋ก ๋ง์ ์๊ฐ๊ณผ ์์์ด ์์๋ฉ๋๋ค.
๋ฉํฐ์ฐ๋ ๋
๋ฉํฐ์ฐ๋ ๋๋ ๊ฐ ์ฐ๋ ๋๋ค์ด ํ๋์ ํ๋ก์ธ์ค ์์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฉฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ํ๋์ ์ฐ๋ ๋๊ฐ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด, ํ๋ก์ธ์ค ์ ์ฒด๊ฐ ์ํฅ์ ๋ฐ์ ์ ์์ต๋๋ค. ์ฐ๋ ๋๋ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ ๋๋ค๊ฐ์ ํต์ ์ด ๋น๊ต์ ๊ฐ๋จํ์ง๋ง ๋๊ธฐํ ๋ฌธ์ ๋ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ฐ๋ ๋๋ ์์ฑ๊ณผ ์๋ฉธ์ด ํ๋ก์ธ์ค๋ณด๋ค ์๊ฐ๊ณผ ์์์ด ์ ๊ฒ ๋ญ๋๋ค.
43. ์ฟผ๋ฆฌ ์ต์ ํ์ ๋ํด ์ค๋ช
ํด์ฃผ์๊ณ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช
ํด์ฃผ์ธ์.
44. DB ๋ก์ง ์ต์ํ๋ฅผ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
45. ํ
์คํธ์ฝ๋์ ๋ํด์ ์๋๋๋ก ์ค๋ช
ํด์ฃผ์๊ณ ํ์ฉ ๊ฒฝํ์ ๋ํด์ ๋ต๋ณํด์ฃผ์ธ์.
46. Array, LinkedList์ ๋ํด ์ค๋ช
ํด์ฃผ์๊ณ ๊ฐ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๋ง์ํด์ฃผ์ธ์.
47. AWS S3, EC2๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฌ์ฉ ๊ฒฝํ์ ๋ํด์ ๋ต๋ณํด์ฃผ์ธ์.
48. ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด์ ์๋๋๋ก ์ค๋ช
ํด์ฃผ์ธ์.