week 1 leekyunghee - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
1์ฃผ์ฐจ
JAVA
* JVM, JDK, JRE๋ ๋ฌด์์ธ๊ฐ?
JVM์ ๋ฌผ๋ฆฌ์ ์ธ ํํ๊ฐ ์๋ ์ํํธ์จ์ด๋ก์ ํ๋์ ๊ฐ๋
์ผ๋ก ์กด์ฌํฉ๋๋ค. ์ด๊ฒ์ "VIRTUAL"์ ๋ปํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ JVM์ ๋
์์ ์ผ๋ก ์๋ํ
์์๋ ๋ฉ์ปค๋์ฆ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ ํ๋์ ์ถ์ฝ๋ ์ปดํจํฐ์ ๊ฐ์ ์๋ฏธ์์ "MACHINE"์ด๋ผ๋ ๋จ์ด๊ฐ ์กฐํฉ๋ ๊ฒ์
๋๋ค.
JVM์ JAVA ํ๋ก๊ทธ๋จ๊ณผ OS์ ์ฌ์ด์ ์ค๊ฐ ๋ค๋ฆฌ ์ญํ์ด๋ฉฐ JAVA ํ๋ก๊ทธ๋จ์ด OS์ ๋
๋ฆฝ์ ์ผ๋ก ์คํ ๋ ์ ์๊ฒ ํด์ค๋๋ค.
Java Compiler๋ฅผ ํตํด Java Source File์ ByteCode๋ก ๋ณํํ์ฌ JVM์ ๋๊ฒจ์ฃผ๋ฉด JVM์ OS๊ฐ ByteCode๋ฅผ ์ดํดํ ์ ์๋๋ก ํด์ ํด์ค๋
๋ค.
-
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด ์ค๋ช ํ์์ค Java ๋ฉ๋ชจ๋ฆฌ ์์ญ์ค stack๊ณผ heap ์์ญ์ ์ด์ ์ ๋ง์ถ์ด์ ์ค๋ช ํ๋ค.
-
๊ฐ๋น์ง ์ปฌ๋ ํฐ ์๋ ์๋ฆฌ๋ฅผ ์ค๋ช ํ์์ค. Serial GC old ์์ญ์ GC๋ mark-sweep-compact์ด๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค. Old์์ญ์ ์๋ ์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ฒด๋ค์ ํ์(Mark) ํ๊ณ ํด๋น ๊ฐ์ฒด๋ค์ ๋ชจ๋ ์ ๊ฑฐ(Sweep)ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด์ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ค๊ฐ์ค๊ฐ ๋น ๊ณต๊ฐ์ด ์๊ธฐ๊ณ ์ด ๋ถ๋ถ์ ์ ๊ฑฐ ํ๊ธฐ ์ํด ๊ฐ ๊ฐ์ฒด๋ค์ด ์ฐ์๋๊ฒ ์์ด๋๋ก ํ์ ์ ๋ถ๋ถ๋ถํฐ ์ฑ์์ ๊ณต๊ฐ์ ์ ๋ฆฌํฉ๋๋ค.(Compact)
Parallel GC Parallel GC๋ Serial GC์ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ต๋๋คํ์ง๋ง Serial GC๋ GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ค๋ ๋๊ฐ ํ๋์ธ ๋ฐ๋ฉด Parallel GC๋ GC๋ฅผ ์ฒ๋ฆฌํ๋ ์ฐ๋ ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Serial GC ๋ณด๋ค ๋น ๋ฅด๊ฒ ๊ฐ์ฒด๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. Parallel GC๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ๊ณ ์ฝ์ด์ ๊ฐฏ์๊ฐ ๋ง์ ๋ ์ ๋ฆฌํฉ๋๋ค.
Permanent ์์ญ ๋ณดํต Class์ Meta ์ ๋ณด๋ Method์ Meta ์ ๋ณด, Static ๋ณ์์ ์์ ์ ๋ณด๋ค์ด ์ ์ฅ๋๋ ๊ณต๊ฐ์ผ๋ก ํํ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ ์์ญ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด ์์ญ์ Java 8๋ถํฐ๋ Native ์์ญ์ผ๋ก ์ด๋ํ์ฌ Metaspace์์ญ์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ธฐ์กด Prem ์์ญ์ ์กด์ฌํ๋ Static Object๋ Heap ์์ญ์ผ๋ก ์ฎ๊ฒจ์ ธ์ GC์ ๋์์ด ๋ ์ ์๋๋ก ํ์์ต๋๋ค. ์ด์ ๋ Perm ์์ญ์ด ๊ฝ ์ฐจ๋ฉด OOM(Out Of MemoryError)์ด ๋ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ํด๊ฒฐ ๋ฐฉ์์ผ๋ก ์ด๋ฌํ ํด๊ฒฐ ๋ฐฉ์์ด ๋์ค๊ฒ ๋์์ต๋๋ค. (Heap ์์ญ์ JVM์ ์ํด ๊ด๋ฆฌ๋ ์์ญ์ด๋ฉฐ, Native ๋ฉ๋ชจ๋ฆฌ๋ OS ๋ ๋ฒจ์์ ๊ด๋ฆฌํ๋ ์์ญ์ผ๋ก ๊ตฌ๋ถ)
SPRING
* ์คํ๋ง๋ถํธ์ ์คํ๋ง์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ์์ค
* ์คํ๋ง์ ํน์ง์ ๋ํด์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋น๋์ด ์ค๋ช
ํ์์ค
* ์คํ๋ง์ ์๋น์ค ์ถ์ํ๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค
์ํคํ ์ฒ
* ๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์งํฅ์ ์ฐจ์ด์ ๋ํด ์ค๋ช
ํ์์ค
* SOLID ์์น์ ๋ํด ์๋๋๋ก ์ค๋ช
ํ์์ค
* ์บก์ํ์ ๋ํด ์ค๋ช
ํ์์ค