week 1 incheol - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
JAVA
-
JVM, JDK, JRE๋ ๋ฌด์์ธ๊ฐ?
- JRE : ์๋ฐ ์คํ ํ๊ฒฝ์ ์ค์๋ง๋ก JVM์ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐํ ํ์ผ๋ค์ด ๊ฒฐํฉ๋ ์๋ฐ๋ฅผ ์คํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ์ด๋ค.
- JDK : ์๋ฐ ๊ฐ๋ฐ ํคํธ์ ์ค์๋ง๋ก JRE์ ์ปดํ์ผ๋ฌ, ๋๋ฒ๊ฑฐ ๋ฑ ๊ฐ๋ฐ๋๊ตฌ๋ฅผ ํฌํจํ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
- JVM : ์๋ฐ ๊ฐ์ ๋จธ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋์ค ๋ก๋๋ฅผ ํตํด ์ฝ์ด ๋ค์ฌ API์ ํจ๊ป ์คํ์์ผ์ค๋ค.
- ๊ตฌ์ฑ
- class loader
- .java ์์ค๋ฅผ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผํ๋ฉด .class ํ์ผ์ธ ๋ฐ์ดํธ์ฝ๋๊ฐ ์์ฑ๋๋ค. ์ด๋ ๊ฒ ์์ฑ๋ ํด๋์ค ํ์ผ๋ค์ ์ฎ์ด์ JVM์ด ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ Runtime Data Area๋ก ์ ์ฌํ๋ ์ญํ ์ ํ๋ค.
- execution engine
- ํด๋์ค ๋ก๋์ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ํด๋์ค(๋ฐ์ดํธ ์ฝ๋)๋ค์ ๊ธฐ๊ณ์ด๋ก ๋ณ๊ฒฝํด ๋ช ๋ น์ด ๋จ์๋ก ์คํํ๋ ์ญํ ์ ํ๋ค.
- garbage collector
- Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด๋ค ์ค์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ ์ ํ๋ค. GC๊ธฐ ์คํน๋๋ ๋์ GC๋ฅผ ์ํํ๋ ์ฐ๋ ๋๊ฐ ์๋ ๋ค๋ฅธ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ์ผ์์ ์ง๋๋ค. ํนํ Fulll GC๊ฐ ์ผ์ด๋์ ์ ์ด๊ฐ ๋ชจ๋ ์ฐ๋ ๋๊ฐ ์ ์งํ๋ค๋ฉด ์ฅ์ ๋ก ์ด์ด์ง๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
- runtime data area
- ๊ฐ๊ฐ์ ์ค๋ ๋์์ ๋์ํ๋ PC Register, JVM Stack, Native Method Stack์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ ๊ณต์ ์ค๋ ๋์์ ๋์ํ๋ Heap๊ณผ Method Area๊ฐ ์๋ค.
- class loader
- ์ญํ
- OS์ ๋
๋ฆฝ์ ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ์์ผ ์ค๋ค.
- JVM ์คํ ๊ณผ์
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด JVM์ OS๋ก๋ถํฐ ์ด ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋๋ค. JVM์ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค.
- ์๋ฐ ์ปดํ์ผ๋ฌ(javac)๊ฐ ์๋ฐ์์ค(.java)์ฝ๋๋ฅผ ์ฝ์ด ๋ค์ฌ ์๋ฐ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํ์ํจ๋ค.
- ์ด ๋ณ๊ฒฝ๋ Class ํ์ผ๋ค์ Class Loader๋ฅผ ํตํด JVM ๋ฉ๋ชจ๋ฆฌ์์ญ(Runtime Data Areas) ์์ญ์ผ๋ก ๋ก๋ฉํ๋ค.
- ๋ก๋ฉ๋ classํ์ผ๋ค์ Execution engine์ ํตํด ํด์๋๋ค.
- ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ Runtime Data Areas์ ๋ฐฐ์น๋์ด ์ค์ง์ ์ธ ์ํ์ด ์ด๋ฃจ์ด์ง๊ฒ๋๋ค.์ด๋ฌํ ์คํ๊ณผ์ ์์์ JVM์ ํ์์ ๋ฐ๋ผ Thread Synchronization๊ณผ GC๊ฐ์ ๊ด๋ฆฌ ์์ ์ ์ํํ๋ค.
- JVM ์คํ ๊ณผ์
- GC๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ํ์ธํ์ฌ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌ ํด์ค๋ค.
- ์ฐธ๊ณ ์ฌํญ
- ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ(๋ฉ์๋ ์์ญ, ์คํ ์์ญ, ํ ์์ญ)
-
๋ฉ์๋ ์์ญ : ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ, static ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญ
-
์คํ ์์ญ : ๊ธฐ๋ณธํ ๋ฐ์ดํฐ, ๋ก์ปฌ ๋ณ์(์ฐธ์กฐํ์ผ ๊ฒฝ์ฐ ์ฃผ์๊ฐ๋ง ์ ์ฅ๋จ)๊ฐ ์ ์ฅ๋๋ ์์ญ
์คํ ์์ญ์ ๋ฐ์ดํฐ๋ ๋ฉ์๋ ์คํ ์ดํ์๋ ์ญ์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐธ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ฉ์๋ ์ข ๋ฃ ์ดํ์ ์คํ ์์ญ์ ์ฃผ์๊ฐ์ ์ ๊ฑฐ๋์ง๋ง ํ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๋จ์ ์๊ฒ ๋๋ค. ํ ์์ญ์ ๋์ด์ ์ฐธ์กฐ๋์ง ์๋ ๋ฐ์ดํฐ๋ ๊ฐ๋น์ง ์ฝ๋ ํฐ์ ์ํด ์ ๊ฑฐ๋๋ค.
-
ํ ์์ญ : ์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญ
-
- ์๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ญ(๋ฉ์๋ ์์ญ, ์คํ ์์ญ, ํ ์์ญ)
- ์ฐธ๊ณ ์ฌํญ
- GC ๋์ ์๋ฆฌ
- ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ young generation(eden, survivor1, survivor2) , old generation, permanent generation ์ผ๋ก ๋๋์ด ์ง๋ค.
- ๋ฐ์ดํฐ๋ young generation(eden โ survivor1 โ survivor2) โ old generation ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ฐธ์กฐ๋๋ ๊ธฐ์ค์ผ๋ก ์ฎ๊ฒจ์ง๋ค.
- young generation์์ ๋ฐ์ํ๋ gc๋ฅผ minor gc ๋ผ๊ณ ํ๊ณ , old generation์์ ๋ฐ์ํ๋ gc๋ฅผ major gc๋ก ๋ถ๋ฅธ๋ค.
- minor gc๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ์ง ์๊ณ , major gc์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ๊ฒ ๋๋ค. ๋๋ถ๋ถ์ gc๋ฅผ ํ๋ํ๋ ๊ฒฝ์ฐ๋ major gc์์ ๋ฐ์ํ๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ์์ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ํ์ธํ์ฌ ์๋์ผ๋ก ์ ๊ฑฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌ ํด์ค๋ค.
- OS์ ๋
๋ฆฝ์ ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ์์ผ ์ค๋ค.
- ๊ตฌ์ฑ
-
์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ํด ์ค๋ช ํ์์ค
- Method Area : ํด๋์ค ๋ฉค๋ฒ ๋ณ์์ ์ด๋ฆ, ๋ฐ์ดํฐ ํ์ , final class ๋ณ์
- Heap Area(new,survive,old,perm,native โ new,survive,old,metaspace) : new ํค์๋๋ก ์์ฑ๋ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ์์ฑ๋๋ ์์ญ, static ๋ณ์(jdk8 ๋ฒ์ ์ด์), ์์ํ๋ String Object(jdk8 ๋ฒ์ ์ด์)
- Stack Area : ์ง์ญ ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ, ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ์์ ๊ฐ์ด ์์ฑ๋๋ ์์ญ
- PC Register : ์ฐ๋ ๋๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ ์์ญ์ผ๋ก ์ฐ๋ ๋๊ฐ ์คํ๋๋ ๋ถ๋ถ์ ์ฃผ์์ ๋ช ๋ น์ ์ ์ฅํ๋ ์์ญ
- Native method stack : ์๋ฐ ์ธ ์ธ์ด๋ก ์์ฑ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค. (๋ณดํต C/C++ ๋ฑ์ ์ฝ๋๋ฅผ ์ํํ๊ธฐ ์ํ ์คํ)
-
๊ฐ๋น์ง ์ปฌ๋ ํฐ ์๋ ์๋ฆฌ๋ฅผ ์ค๋ช ํ์์ค
- ํ ์์ญ์ ๊ฐ์ฒด ์ค ์ฐธ์กฐํ์ง ์๋ ๊ฐ์ฒด(Garbage)๋ฅผ ์ฐพ์ ๋ธ๋ค.
- ์ฐพ์๋ธ Garbage ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
- GC ๋์์ด ๋๋ ๊ฐ์ฒด
- ๋ชจ๋ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ null ์ธ ๊ฒฝ์ฐ
- ๊ฐ์ฒด๊ฐ ๋ธ๋ญ ์์์ ์์ฑ๋๊ณ ๋ธ๋ญ์ด ์ข ๋ฃ๋ ๊ฒฝ์ฐ
- ๋ถ๋ชจ ๊ฐ์ฒด๊ฐ null์ด ๋ ๊ฒฝ์ฐ, ์์ ๊ฐ์ฒด๋ ์๋์ ์ผ๋ก GC ๋์์ด ๋๋ค.
- ๊ฐ์ฒด๊ฐ weak ์ฐธ์กฐ๋ง ๊ฐ์ง๊ณ ์์ ๊ฒฝ์ฐ
- ๊ฐ์ฒด๊ฐ Soft ์ฐธ์กฐ์ด์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด ๋ฐ์ํ ๊ฒฝ์ฐ
- JDK 8 ๊น์ง๋ parallel GC๊ฐ ๊ธฐ๋ณธ์ด์๋ค.
- parallel GC๋ ๋ฉํฐ ์ฐ๋ ๋ฉ ๊ฐ๋ฅ
- JDK 9 ์ดํ์๋ G1 GC๊ฐ ๊ธฐ๋ณธ์ด์๋ค. (์์ธํ ์ค๋ช
ํ์)
- G1 GC๋ ์์ ์ดํด๋ณธ GC์๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ค. ์์ ์ดํด๋ณด์๋ Eden, Survivor, Old ์์ญ์ด ์กด์ฌํ์ง๋ง ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ๊ณ ์ ๋ ์์น์ ์กด์ฌํ๋ ๊ฒ์ด์๋๋ฉฐ, ์ ์ฒด ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ Region ์ด๋ผ๋ ํน์ ํ ํฌ๊ธฐ๋ก ๋๋ ์ ๊ฐ Region์ ์ํ์ ๋ฐ๋ผ ๊ทธ Region์ ์ญํ (Eden, Survivor, Old)์ด ๋์ ์ผ๋ก ๋ถ์ฌ๋๋ ์ํ์ด๋ค.
- GC์ ๋์ ์์ญ์ด ์ฌ๋ฌ๊ฐ์ region์ผ๋ก ๋๋์ด ์๊ธฐ ๋๋ฌธ์ GC๊ฐ ์ผ์ด๋๋ฉด ์ ์ฒด heap์ ๋ํด์ GC๋ฅผ ํ์ง ์๊ณ ์ผ๋ถ region์์๋ง GC๋ฅผ ์ํํ๋ค. โ ์ ์ฒด ์์ญ์ gcํ์ง ์๊ณ ์ผ๋ถ ์์ญ์์๋ง ์ํํ๋ฏ๋ก stw๊ฐ ๋ ์งง์์ ธ ๋น์ฉ์ ์ธ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ด๋ค. (๋์ ํ ์ฌ์ด์ฆ๊ฐ ๋ ํ์ํ๋ค)
SPRING
- ์คํ๋ง๋ถํธ ์ ์คํ๋ง์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ์์ค
- ์คํ๋ง๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ๋ง ํ๋ ์์ํฌ์์ ์ค์ ํ์๋ ์ ๋ณด๋ค์ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์๋๋ก ๊ฒฝ๋ํ๋์ด ์ ๊ณตํ ํ๋ ์์ํฌ์ด๋ค.
- ์คํ๋ง๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ์ ์ง์คํ ์ ์๋๋ก ์คํ๋ง ํ๋ ์์ํฌ์์ ์์ฑํ๋ ๋ง์ ์ค์ (๋ณด์ผ๋ฌํ๋ ์ดํธ)๋ค์ ํจํค์งํ์ฌ ๊ฐํธํ๊ฒ ์ ๊ณตํ ์ ์๋๋ก ํ์๋ค.
- ํน์ง
- @SpringBootApplication : @SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration ์ด๋ ธํ ์ด์ ์ ์ถ์ฝํ์๋ค.
- ์คํ๋ง๋ถํธ ์คํํฐ : ์คํ๋ง ํ๋ ์์ํฌ์์ ์ฌ์ฉํ์๋ ๋ค์ํ ํ๋ฌ๊ทธ์ธ์ ์๋ก ๊ฐ์ ์์กด์ฑ์ด ์ถฉ๋๋๋ ์ด์๊ฐ ๋น๋ฒํ ๋ฐ์ํ์๋ค. ๊ทธ๋ ๋ค ๋ณด๋ ํ๋ฌ๊ทธ์ธ์ ๋ฒ์ ๊ด๋ฆฌํ๋๋ฐ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ์๋ค. ์คํ๋ง ๋ถํธ ์์๋ ์คํํฐ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ ๊ณต๋์ด ์ํธ๊ฐ์ ์์กด์ฑ ์ถฉ๋์ ๋ํ ๋ ธ๋ ฅ์ ์ต๋ํ ์ค์ผ ์ ์๊ฒ ๋์๋ค.
- ๋ด์ฅํํฐ์บฃ : ์คํธ๋ง ํ๋ ์์ํฌ์์๋ ๋ณ๋๋ก was๋ฅผ ์คํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ์ด ์คํํ์๋ค. ์คํ๋ง๋ถํธ์์๋ was๊ฐ ๋ด์ฅ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ์๋์ผ๋ก was๊ฐ ์คํ๋ ์ ์์๋ค.
- ์คํ๋ง์ ํน์ง์ ๋ํด์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋น๋์ด ์ค๋ช
ํ์์ค
- ์คํ๋ง์ ๋ชฉ์ ์ POJO๋ฅผ ์ด์ฉํด ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ฐ๋ฐํ ์ ์๋๋ก ์ง์ํด์ฃผ๋ ๋ฐ ์๋ค. POJO๋ฐฉ์์ ๊ฐ๋ฐ์ ๋๊ธฐ ์ํด ์คํ๋ง์ IOC/DI, AOP, PSA์ ๊ฐ์ ๊ฐ๋ฅ๊ธฐ์ ์ ํ๋ ์์ํฌ์ ์ปจํ ์ด๋๋ผ๋ ๋ฐฉ์์ ํตํด ์ ๊ณตํ๋ค.
- IOC/DI
- ๋ ๊ฐ์ ์ค๋ธ์ ํธ๋ฅผ ๋ถ๋ฆฌํด์ ๋ง๋ค๊ณ , ์ธํฐํ์ด์ค๋ฅผ ๋์ด ๋์จํ๊ฒ ์ฐ๊ฒฐํ ๋ค ์ค์ ์ฌ์ฉํ ๋์์ DI๋ฅผ ํตํด ์ธ๋ถ์์ ์ฃผ์ ํ๋ค.
- ํ์ฉ ๋ฐฉ๋ฒ
- ์์กด ๋์์ ๊ตฌํ์ ๋ณ๊ฒฝ(์ ๋ตํจํด)
- ํต์ฌ๊ธฐ๋ฅ์ ๋์ ์ธ ๋ณ๊ฒฝ
- ๋ถ๊ฐ๊ธฐ๋ฅ ์ถ๊ฐ(๋ฐ์ฝ๋ ์ดํฐ ํจํด)
- ํ๋ก์ : ํ์ํ ์์ ์์ ์ค์ ์ฌ์ฉํ ์ค๋ธ์ ํธ๋ฅผ ์ด๊ธฐํํ๊ณ ๋ฆฌ์์ค๋ฅผ ์ค๋นํ๊ฒ ํด์ฃผ๋ ์ง์ฐ ๋ก๋ฉ์ ์ ์ฉํ๋ ค๊ณ ํ ๋
- ํ ํ๋ฆฟ/์ฝ๋ฐฑ : ์ฝ๋ฐฑ์ ์ผ๋ง๋ ์ง ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฑด ๊ฐ๋ฐ์ ํตํ ์ ์ฐํ ํ์ฅ์ฑ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด๋ฉฐ, ํ ํ๋ฆฟ์ ํ ๋ฒ ๋ง๋ค์ด๋๋ฉด ๊ณ์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๊ฑด ๊ธฐ๋ฅ์ ํ์ฅ์๋ ๋ณํ์ง ์๋๋ค.
- ์ฑ๊ธํค๊ณผ ์ค๋ธ์ ํธ : DI๋ฅผ ํ๋ ์์ํฌ๋ก ์ด์ฉํ๋ค๋ ๊ฑด DI ๋์ ์ค๋ธ์ ํธ๋ฅผ ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ์ด๋ค. ์คํ๋ง์์๋ ์ฑ๊ธํค ์ธ์๋ ๋ค์ํ ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด DI์ ์ฌ์ฉํ ์๋ ์๋ค. HTTP ์์ฒญ๋น ํ๋์ ์ค๋ธ์ ํธ๊ฐ ๋ง๋ค์ด์ง๊ฑฐ๋, HTTP ์ธ์ ๋น ํ๋์ฉ ์ค๋ธ์ ํธ๊ฐ ๋ง๋ค์ด์ง๊ฒ ํ ์ ์๋ค.
- AOP
- ๊ณตํต ๊ด์ฌ ์ฌํญ์ ๊ตฌํํ ์ฝ๋๋ฅผ ํต์ฌ ๋ก์ง์ ๊ตฌํํ ์ฝ๋ ์์ ์ฝ์ ํ๋ค.
- ์ฉ์ด
- Advice : JoinPoint์ ์ฝ์ ๋์ด ๋์ํ ์ ์๋ ์ฝ๋
- JoinPoint : Advice๋ฅผ ์ ์ฉ ๊ฐ๋ฅํ ์ง์
- PointCut : ์ค์ ๋ก Advice๊ฐ ์ ์ฉ๋๋ JoinPoint
- Weaving : Advice๋ฅผ ํต์ฌ ๋ก์ง ์ฝ๋์ ์ ์ฉํ๋๊ฒ
- Aspect : ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ณตํต ๊ด์ฌ ์ฌํญ
- Advisor : Advice + PointCut
- ์๋น ์ธ๊ฐ์ง
- ์ปดํ์ผ ์์ ์๋น : AspectJ์์ ์ฌ์ฉํ๋ ๋ฐฉ์
- ํด๋์ค ๋ก๋ฉ ์์ ์๋น : AOP ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JVM์ด ํด๋์ค๋ฅผ ๋ก๋ฉํ ๋, ํด๋์ค ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์์ด์ ํธ๋ฅผ ์ ๊ณต(์๋ณธ ํด๋์ค ํ์ผ์ ๋ณ๊ฒฝํ์ง ์๊ณ ํด๋์ค๋ฅผ ๋ก๋ฉํ ๋ JVM์ด ๋ณ๊ฒฝ๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋๋ก ํจ)
- ๋ฐํ์ ์์ ์๋น : ํ๋ก์๋ฅผ ์ด์ฉํ AOP ๊ตฌํ(๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๋ง Advice๋ฅผ ์ ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋ ๊ฐ ๋ณ๊ฒฝ๊ณผ ๊ฐ์ JoinPoint์ ๋ํด์๋ ์ ์ฉ๋ถ๊ฐ)
- PSA
- ํ๊ฒฝ๊ณผ ์ธ๋ถ ๊ธฐ์ ์ ๋ณํ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค
- ์๋น์ค ์ถ์ํ์ ์ข์์๋ JDBC์ด๋ค.
- JDBC๋ผ๋ ํ์ค์คํ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ DBMS๋ฅผ ์ค๋ผํด์ ์ฌ์ฉํ๋, MYSQL์ ์ฌ์ฉํ๋ ๊ณตํต๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฅ์ ๊ด๊ณ์์ด ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ด ํ ์ ์๋ ๋์์ธํจํด(์ด๋ํฐ ํจํด)์ ์ ์ฉํด ๋ค์์ ๊ธฐ์ ์ ๊ณตํต ์ธํฐํ์ด์ค๋ก ์ ์ดํ ์ ์๋๋ก ํ๊ฒ์ ์๋น์ค ์ถ์ํ๋ผ๊ณ ํ๋ค.
- ๋๋ ์คํ๋ง ์บ์๊ฐ ์๋ค.
- ์คํ๋ง์ ์๋น์ค ์ถ์ํ๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค
- PSA
- ํ๊ฒฝ๊ณผ ์ธ๋ถ ๊ธฐ์ ์ ๋ณํ์ ๊ด๊ณ์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ธฐ์ ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค
- ์๋น์ค ์ถ์ํ์ ์ข์์๋ JDBC์ด๋ค.
- JDBC๋ผ๋ ํ์ค์คํ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ DBMS๋ฅผ ์ค๋ผํด์ ์ฌ์ฉํ๋, MYSQL์ ์ฌ์ฉํ๋ ๊ณตํต๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข ๋ฅ์ ๊ด๊ณ์์ด ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ด ํ ์ ์๋ ๋์์ธํจํด(์ด๋ํฐ ํจํด)์ ์ ์ฉํด ๋ค์์ ๊ธฐ์ ์ ๊ณตํต ์ธํฐํ์ด์ค๋ก ์ ์ดํ ์ ์๋๋ก ํ๊ฒ์ ์๋น์ค ์ถ์ํ๋ผ๊ณ ํ๋ค.
- ๋๋ ์คํ๋ง ์บ์๊ฐ ์๋ค.
- PSA
์ํคํ ์ฒ
-
๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์งํฅ์ ์ฐจ์ด์ ๋ํด ์ค๋ช ํ์์ค
์ ์ฐจ์งํฅ์ด๋ ํ๋ก์์ ธ(procedure)๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฒ์ด๋ค. ํ๋ก์์ ธ๋ ๋์ฒด๋ก ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌํํ๋ค. ๋จ์ ์ ๋ฐ์ดํฐ ํ์ ์ด๋ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๋, ํจ๊ป ์์ ํด์ผ ํ๋ ํ๋ก์์ ๊ฐ ์ฆ๊ฐํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด๋ ์์ ๋ง์ ๋ฐ์ดํฐ์ ํ๋ก์์ ธ๋ฅผ ๊ฐ๋๋ค. ๊ฐ์ฒด๋ ์์ ๋ง์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ ๊ฐ์ฒด๋ค์ ์๋ก ์ฐ๊ฒฐ๋์ด ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์์์ ํ๋ฆ์ ๋จผ์ ์ธ์ฐ๊ณ ํ์ํ ์๋ฃ๊ตฌ์กฐ์ ํจ์๋ค์ ์ค๊ณํ๋ ๋ฐฉ์์ด๊ณ , ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ๋๋ก ์๋ฃ๊ตฌ์ ์ด๋ฅผ ์ค์ฌ์ผ๋ก ํ ๋ชจ๋๋ค์ ๋จผ์ ์ค๊ณํ ๋ค์์ ์ด๋ค์ ์คํ์์์ ํ๋ฆ์ ์ง๋ ๋ฐฉ์์ด๋ค.
์ ์ฐจ์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๋ง ๊ทธ๋๋ก ์คํ ์์, ์ฆ ์ ์ฐจ๊ฐ ๋ ์ค์ ์ด ๋๊ณ , ๊ฐ์ฒด์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ํ์ํ ๊ฐ์ฒด๋ค์ ์ข ๋ฅ์ ์์ฑ ๋ฑ์ด ๋ ์ค์ ์ด ๋๋ค.
๊ฐ์ฒด๋ ๊ธฐ์กด์ ๋ฐฉ์์ธ ๋ณ์ ๋ฐ๋ก, ํจ์ ๋ฐ๋ก์ ๋ถ์ฐ์ ์ด๊ณ ํต์ผ์ฑ ์๋ ์ถ์ํ ๊ณผ์ ์ ํตํฉํ์ฌ ํํ๋์(๋ฌธ์ ํด๊ฒฐ๋์)์ ์ข ๋ ๋ชจ๋ํํ๊ธฐ ์ฝ๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ ๋ถ๊ณผํ๋ฉฐ(๋ชจ๋ํ ๊ฐํ์ ๋ถ์ฐ๋ฌผ์ธ ์ ๋ณด์๋ํ, ์์ ๋ฐ ๋คํ์ฑ์ ํตํ ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ, ์ด๋ฅผ ๊ธฐ๋ฐํ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ ์ฉ์ด์ฑ์ด OOP์ ์ง์ ํ ํน์ง์ด์ ์ ์ฒด์ฑ์ผ์ง๋ ๋ชจ๋ฅธ๋ค)
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ก๊ทธ๋จ์ ์์์ ํ๋ฆ์ ๋จผ์ ์ธ์ฐ๊ณ ํ์ํ ์๋ฃ๊ตฌ์กฐ์ ํจ์๋ค์ ์ค๊ณํ๋ ๋ฐฉ์์ด๊ณ , ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ๋๋ก ์๋ฃ๊ตฌ์กฐ์ ์ด๋ฅผ ์ค์ฌ์ผ๋ก ํ ๋ชจ๋๋ค์ ๋จผ์ ์ค๊ณํ ๋ค์์ ์ด๋ค์ ์คํ์์์ ํ๋ฆ์ ์ง๋ ๋ฐฉ์์ด๋ค
-
SOLID ์์น์ ๋ํด ์๋๋๋ก ์ค๋ช ํ์์ค
- ๋จ์ผ ์ฑ ์ ์์น : ๊ฐ์ฒด๋ ๋จ ํ๋์ ์ฑ ์๋ง์ ๊ฐ์ ธ์ผ ํ๋ค. : ์ฑ ์์ด ๋ง์์ง๋ฉด ํด๋์ค ๋ด๋ถ์ ํจ์๋ผ๋ฆฌ ๊ฐํ ๊ฒฐํฉ์ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ฉฐ ์ด๋ ์ ์ง๋ณด์์ ๋น์ฉ์ด ์ฆ๊ฐํ๊ฒ ๋๋ฏ๋ก ์ฑ ์์ ๋ถ๋ฆฌ์ํฌ ํ์๊ฐ ์๋ค.
- ๊ฐ๋ฐฉ ํ์ ์์น : ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ธฐ๋ฅ์ ์์ ํ๊ฑฐ๋ ์ถ๊ฐํ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค. : OCP๋ฅผ ๋ง์กฑํ ์ค๊ณ๋ ๋ณ๊ฒฝ์ ์ ์ฐํ๋ฏ๋ก ์ ์ง๋ณด์ ๋น์ฉ์ ์ค์ฌ์ฃผ๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ ๋ํ ๋์์ง๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
- ๋ฆฌ์ค์ฝํ ์นํ ์์น : ์์ ํด๋์ค๋ ๋ถ๋ชจํด๋์ค์์ ๊ฐ๋ฅํ ํ์๋ฅผ ์ํํ ์ ์์ด์ผ ํ๋ค. : ์์ ๊ด๊ณ์์๋ ์ผ๋ฐํ ๊ด๊ณ(IS-A)๊ฐ ์ฑ๋ฆฝํด์ผ ํ๋ค. ์ผ๋ฐํ ๊ด๊ณ์ ์๋ค๋ ๊ฒ์ ์ผ๊ด์ฑ์ด ์๋ค๋ ๊ฒ์ด๋ค.
- ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น : ํ ํด๋์ค๋ ์์ ์ด ์ฌ์ฉํ์ง ์๋ ์ธํฐํ์ด์ค๋ ๊ตฌํํ์ง ๋ง์์ผ ํ๋ค. ํ๋์ ์ผ๋ฐ์ ์ธ ์ธํฐํ์ด์ค๋ณด๋ค๋ ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ๋ซ๋ค. : ์์ ์ด ์ฌ์ฉํ์ง ์๋ ๊ธฐ๋ฅ์๋ ์ํฅ์ ๋ฐ์ง ๋ง์์ผ ํ๋ค.
- ์์กด ์ญ์ ์์น : ์์กด ๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๋ณํํ๊ธฐ ์ฌ์ด๊ฒ ๋ณด๋จ ๋ณํํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์์กดํด์ผ ํ๋ค. : ์์กด๊ด๊ณ๋ฅผ ๋งบ์ ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ๋๊ฒ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ค.
-
์บก์ํ์ ๋ํด ์ค๋ช ํ์์ค
์บก์ํ๋ ๊ฐ์ฒด๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ์ง๋์ง๋ฅผ ๊ฐ์ถ๋ ๊ฒ์ด๋ค.
๋จ์ํ ํ๋ผ์ด๋นํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ ๋ด๋ถ์ ์ธ ๊ธฐ๋ฅ์ ์ด์ ์ ๋ง์ถ์ด์ผ ํ๋ค.
๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๊ธฐ ์ํ ์ฉ๋๋ก ์บก์ํ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ์ฒด์ ๋ํ ์ฑ ์์ด ๋ถ์ฐ๋ ์ ์๋ค.
์บก์ํ๋ฅผ ํ๊ธฐ ์ํ ๋๊ฐ์ง ๊ท์น์ด ์๋ค.
- ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ : ์ฐธ์กฐํ ๊ฐ์ฒด์ ๋ฐ์ดํฐ์ ๋ํ ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ์ ์ง์ ๊ตฌํํ์ง ๋ง๊ณ ๊ตฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์ฌ ๋ฐ์ดํฐ์ ๋ํ ์ฑ ์์ ์ ๊ฐ ์ํฌ ์ ์๋ค.
- ๋ฐ๋ฏธํ ๋ฅด์ ๋ฒ์น : 1 ๋์ค๋ง ์ฌ์ฉํ ๋ฟ 2 ๋์ค๋ก ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค. ์ด๊ฒ์ ๋ฌป์ง ๋ง๊ณ ์์ผ๋ผ์ ์ฐ์ฅ์ ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๋ ์ฌ์ฉ์ ์ ์ฅ์์๋ ์ ํ์๊ฐ ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ด๋ถ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ด๋ถ ๊ธฐ๋ฅ์ ๋ณํ์ ๋ฒ์๊ฐ ์ธ๋ถ์๋ ๋ ธ์ถ๋์ด ์์กด์ฑ์ด ๋ฎ์ ์ง๋ค.