์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- URN
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- 2024-08-21
- swagger
- ์ฑ์ฉํ์ ํ
- AndroidStudio
- reflection
- fontstyle
- Factory Method Pattern
- ํ๋ IT&E
- OpenAPI
- ๊ธฐ์ด100์
- Python
- http method
- IOC
- uri
- datepicker
- url
- Kotlin
- FACTORY
- Dialog
- 2024-08-20
- menutab
- Android Studio
- udp
- di
- ์ฝ๋์
- ์ด๋ ธํ ์ด์
- tcp
- OOP
dingdong coding
JAVA_Spring ๋ณธ๋ฌธ
1. ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์๋ Serial, Parallel, Parallel Old, CMS(Concurrent Mark Sweep), G1(Garbage First GC) ๊ฐ ์์ต๋๋ค.
• ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ช
2. try-with-resources์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
์์๋ฐ๋ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. try(...)์์ ์ ์ธ๋ ๊ฐ์ฒด(์์ํ ๋น)๋ค์ ๋ํด์ ์ข ๋ฃ๋ ๋ ์๋์ผ๋ก ์์์ ํด์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฆ try์์ ์ ์ธ๋ ๊ฐ์ฒด๊ฐ AutoCloseable์ ๊ตฌํํ์๋ค๋ฉด Java๋ try๊ตฌ๋ฌธ์ด ์ข ๋ฃ๋ ๋ ๊ฐ์ฒด์ close()๋ฉ์๋๋ฅผ ํธ์ถํด ์ค๋๋ค.
• ์์ ๋ฐ๋ฉ ๋ฌธ์ ๋?
try-catch-finally๋ฅผ ์ฌ์ฉํ๋ฉด null๊ฒ์ฌ์ ํจ๊ป ์ง์ close๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด ์์๋ฐ๋ฉ์ ์ํด ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ์ค์ ๋๋ try๊ตฌ๋ฌธ์์ ์๋ฌ๋ฐ์ ์ ์์์ ๋ฐ๋ฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ธฐ๋ ํฉ๋๋ค.
• try-catch-finally
public static void main(String args[]) throws IOException {
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new FileInputStream("file.txt");
bis = new BufferedInputStream(is);
int data = -1;
while((data = bis.read()) != -1){
System.out.print((char) data);
}
} finally {
// close resources
if (is != null) is.close();
if (bis != null) bis.close();
}
}
• try-with-resources
public static void main(String args[]) {
try (
FileInputStream is = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(is)
) {
int data = -1;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
• ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ช
Java - Try-with-resources๋ก ์์ ์ฝ๊ฒ ํด์ ํ๊ธฐ
3. Spring์ DI, DL, IoC, AOP์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
DI๋ Dependency Injection์ ์ฝ์๋ก ์์กด์ฑ ์ฃผ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ์ธ๋ถ์์ ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฒฐ์ ํด์ฃผ๋ ๋์์ธ ํจํด์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ด์ ๋ฌ์ ํด๋์ค ๋ ๋ฒจ์์๋ ์์กด๊ด๊ณ๊ฐ ๊ณ ์ ๋์ง ์๋๋ก ํ๊ณ ๋ฐํ์ ์์ ๊ด๊ณ๋ฅผ ๋์ ์ผ๋ก ์ฃผ์ ํฉ๋๋ค. ์ฆ, ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ด ์๋ ์ธ๋ถ์์ ์์ฑํ ํ ์ฃผ์ ์์ผ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ์ด์ฉํ๋ฉด ๋ชจ๋ ๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๊ณ ์ ์ฐ์ฑ์ด ๋์์ง๋๋ค.
DL์ด๋ Dependency Lookup์ ์ฝ์๋ก ์์กด์ฑ ๊ฒ์์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ Bean์ ์ ๊ทผํ๊ธฐ ์ํด ์ปจํ ์ด๋๊ฐ ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํ์ฌ Bean์ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ค. ์ฆ ์์กด์ฑ์ ๊ฐ๋ ๋น์ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ค.
Ioc๋ Inversion of control์ ์ฝ์๋ก ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ๋ง๊ทธ๋๋ก ๋ฉ์๋๋ ๊ฐ์ฒด์ ํธ์ถ์์ ์ ๊ฐ๋ฐ์๊ฐ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์์ ๊ฒฐ์ ๋๋ ๊ฒ์ ๋๋ค. ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ค๋ธ์ ํธ(๋น)์ ์์ฑ๊ณผ ์์กด ๊ด๊ณ์ค์ , ์ฌ์ฉ, ์ ๊ฑฐ ๋ฑ์ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ๋์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๋ด๋นํ๋ฉฐ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ฝ๋ ๋์ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ ๊ฐ๊ณ ์์์ Ioc๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ( ๊ทธ ์ธ ์ ์ด๊ถ์ ํ๋ ์ ์ํฌ์์ ๊ฐ์ ธ๊ฐ๋ค๋ ๋ง๋ก๋ ์ฐ์)
AOP๋ Aspect Oriented Programming์ ์ฝ์๋ก ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํฉ๋๋ค.
์ด๋ ์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ์ ์ธ ๊ด์ , ๋ถ๊ฐ์ ์ธ ๊ด์ ์ผ๋ก ๋๋์ด์ ๋ณด๊ณ ๊ทธ ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ ๋ชจ๋ํ ํ๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค. ( ์ฌ๊ธฐ์ ๋ชจ๋ํ๋ ์ด๋ค ๊ณตํต๋ ๋ก์ง์ด๋ ๊ธฐ๋ฅ์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ ) ์ฆ, ํฉ์ด์ง ๊ด์ฌ์ฌ๋ฅผ Aspect๋ก ๋ชจ๋ํํ๊ณ ํต์ฌ์ ์ธ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฌ์ฉํ์๋ ์ทจ์ง๊ฐ ์์ต๋๋ค.
( + ํก๋จ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋ชจ๋์ฑ์ ์ฆ๊ฐ์ํค๋ ๋ชฉ์ , ๋๋ถ๋ถ์ ์์คํ ์ด ๊ณตํต์ผ๋ก ๊ฐ์ง๋ ๋ณด์, ๋ก๊ทธ ๊ฐ์ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํด์ ์ ์ํ๋ ๊ฒ )
4. Lombok ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์๊ณ ์๋์? ์๊ณ ์๋ค๋ฉด ๋กฌ๋ณต์ด ๋ง๋๋ ๋ฉ์๋๋ค์ด ์์ฑ๋๋ ์์ ์ ์ธ์ ์ธ๊ฐ์?
Lombok์ด๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์๋์์ฑ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค. Lombok์ ์ฌ์ฉํ๋ฉด Getter, Setter, Equlas, ToString ๋ฑ๊ณผ ๋ค์ํ ๋ฐฉ๋ฉด์ ์ฝ๋๋ฅผ ์๋์์ฑ ์ํฌ ์ ์์ต๋๋ค.
Lombok์ ์์ค์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ ๊ณผ์ ์ ๊ฐ์ ํด์ ์ถ๊ฐ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ ๋๋ค. ์ด๊ฒ์ ์ ๋ ธํ ์ด์ ํ๋ก์ธ์ฑ์ด๋ผ๊ณ ํ๋๋ฐ ์ด๋ฌํ ์ ๋ ธํ ์ด์ ํ๋ก์ธ์ฑ์ ์๋ฐ ์ธ์ด์ ํฌํฉ๋ ๊ธฐ๋ฅ์ ๋๋ค.
• Annotation Processor๋?
Annotation Processor๋ ์ปดํ์ผ ๋จ๊ณ์์ Annotation์ ์ ์๋ ์ผ๋ ฌ์ ํ๋ก์ธ์ค๋ฅผ ๋์ํ๊ฒ ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ปดํ์ผ ๋จ๊ณ์์ ์คํ๋๊ธฐ ๋๋ฌธ์, ๋น๋ ๋จ๊ณ์์ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๊ฒ ํ ์ ์๊ณ , ์์ค์ฝ๋ ๋ฐ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์ฌ์ฉํ๋ ์๋ก ์๋ฐ์ @Override๊ฐ ์์ผ๋ฉฐ, Lombok(๋กฌ๋ถ)์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ต๋๋ค.
5. ์ฒดํฌ ์์ธ์ ์ธ์ฒดํฌ ์์ธ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
์ธ์ฒดํฌ ์์ธ๋ RuntimeException์ ์์ํ ๊ฒ์ ๋งํ๊ณ , ์ฒดํฌ์์ธ๋ ์ด ์ธ์ ์์ธ๋ค์ ๋งํฉ๋๋ค.
์ฒดํฌ ์์ธ๋ RuntimeException์ ์์ํ์ง ์๋ ์์ธ๋ค์ ๋งํ๋๋ฐ ์ฒดํฌ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ ์์ธ๋ค์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ํจ๊ป ์์ฑํด์ผํฉ๋๋ค. ( catch๋ฌธ์ผ๋ก ์์ธ๋ฅผ ์ก๋ , throws๋ก ์์ธ๋ฅผ ์์ ์ ํธ์ถํ ํด๋์ค๋ก ๋์ง๋ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํด์ผํ๋๋ฐ) ์์ธ๋ฅผ ํด๊ฒฐํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ํ์ ์ผ๋ก๋ IOException์ด๋ SQLException ๋ฑ์ด ์กด์ฌํฉ๋๋ค.
์ธ์ฒดํฌ ์์ธ๋ RuntiemException์ ์์ํ ์์ธ๋ผ๊ณ ํฉ๋๋ค. ์ด๋ ๋ช ์์ ์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ธํ ํฌ ์์ธ๋ผ ๋ถ๋ฆ ๋๋ค.์ธ์ฒดํฌ ์์ธ๋ ๋ฐ๋ก catch๋ฌธ์ผ๋ก ์ก๊ฑฐ๋ throws๋ก ์ ์ธํ์ง ์์๋ ๋ฉ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ์ค๋ฅ๊ฐ ์์ ๋ ๋ฐ์ํ๋๋ก ์๋๋ ๊ฒ๋ค์ ๋๋ค. ๋ํ์ ์ผ๋ก NullPointException์ด๋ IllegalArgumentException ๋ฑ์ด ์กด์ฌํฉ๋๋ค.
6. ํด๋์ค์ ๊ฐ์ฒด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
ํด๋์ค๋ ๊ณตํต๋๋ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ฝ๋๋ฅผ ๊ตฌํํ ๊ฒ์ ๋๋ค. (๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋ )
OOP์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ณ์์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ผ์ข ์ ํ์ ๋๋ค. ํด๋์ค๋ฅผ ๋ง๋๋ ์ด์ ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํ ๊ฒ์ผ๋ก ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ํ (๋ฉค๋ฒ๋ณ์)์ ๋ฉ์๋(ํจ์)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ex ) ์ค๊ณ๋๋ฉด
๊ฐ์ฒด(์ธ์คํด์ค)๋ ํด๋์ค์์ ์ ์ํ ๊ฒ์ ๋ฐํ์ผ๋ก ์ค์ ์ ์ฅ๊ณต๊ฐ์ธ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๊ฒ์ผ๋ก, ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๋๋ ์๋ณ์์ ์ํด ์ฐธ์กฐ๋๋ ๊ณต๊ฐ์ ์๋ฏธํฉ๋๋ค.
7. JVM ๊ตฌ์กฐ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
JVM ๊ตฌ์กฐ๋ ํฌ๊ฒ Garbage Collector, Execution Engine, Class Loader, Runtime Data Area 4๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค.
์๋ฐ ์์ค ํ์ผ์ ์๋ฐ ์ปดํ์ผ๋ฌ์ ์ํด์ ๋ฐ์ดํธ ์ฝ๋ ํํด์ธ ํด๋์ค ํ์ผ์ด ๋ฉ๋๋ค. ์ด ํด๋์ค ํ์ผ์ ํด๋์ค ๋ก๋๊ฐ ์ฝ์ด๋ค์ด๋ฉด์ JVM์ด ์ํ๋ฉ๋๋ค.
Class Loader๋ JVM ๋ด๋ก ํด๋์ค ํ์ผ์ ๋ก๋ํ๊ณ , ๋งํฌ๋ฅผ ํตํด ๋ฐฐ์นํ๋ ์์ ์ ์ํํ๋ ๋ชจ๋์ ๋๋ค. ๋ฐํ์ ์์ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ๋ก๋ํฉ๋๋ค.
Execution Engine๋ ํด๋์ค ๋ก๋๋ฅผ ํตํด JVM ๋ด์ Runtime Data Area์ ๋ฐฐ์น๋ ๋ฐ์ดํธ ์ฝ๋๋ค์ ๋ช ๋ น์ด ๋จ์๋ก ์ฝ์ด์ ์คํํฉ๋๋ค.
Garbage Collector๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์์ฑ๋ ๊ฐ์ฒด๋ค ์ค์์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ค์ ํ์ ํ ์ ๊ฑฐํ๋ ์ญํ ์ ํฉ๋๋ค.
Runtime Data Area๋ JVM์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ๋ค์ ์ ์ฌํ๋ ์์ญ์ ๋๋ค. ์ด ์์ญ์ ํฌ๊ฒ Method Area, Heap Area, Stack Area, PC Register, Native Method Stack์ผ๋ก ๋๋ ์ ์์ต๋๋ค.
• ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ช
JVM ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋? (JAVA)
8. ์ปฌ๋ ์ ๊ด๋ จ ๋ฉ์๋ ์๊ณ ์๋ ๊ฒ๋ค ์ค๋ช ํด์ฃผ์ธ์
9. ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์๋์ ๋ฌธ์ ๊ฐ ์๋์ง ์ง๋จํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌด์์ด ์์๊น์?
Survivor ์์ญ ์ค ํ๋๋ ๋ฐ๋์ ๋น์ด์๋ ์ํ๋ก ๋จ์์์ด์ผ ํฉ๋๋ค. ๋ง์ฝ Survivor ์์ญ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๊ฑฐ๋, ๋ ์์ญ ๋ชจ๋ ์ฌ์ฉ๋์ด 0์ด๋ผ๋ฉด ์์คํ ์ด ์ ์์ ์ธ ์ํฉ์ด ์๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ถ๊ฐ์ ์ผ๋ก GC์ ๋ํ ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ์ต์ ์ ์์ ํ ์ง ์ฝ๋๋ฅผ ์์ ํ ์ง ์ ํด์ผํฉ๋๋ค.
• ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ช
[๊ธฐ์ ๋ฉด์ ] CS ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ - ๊ฐ๋ฐ ์ธ์ด (7/8)
10. Spring MVC์ ๋ํด ์ค๋ช ํ๊ณ , ์ด๋ ํ ํ๋ฆ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋์ง ์ค๋ช ํด์ฃผ์ธ์
Spring MVC๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ MVC ํจํด ๊ธฐ๋ฐ์ ์น ํ๋ ์ ์ํฌ ์ ๋๋ค. Spring MVC๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑ์์๋ฅผ Model, View, Controller๋ก ๋ถ๋ฆฌํฉ๋๋ค. ์ปดํฌ๋ํธ๋ก๋ DispatcherServlet, HandlerMapping, Controller, ViewResolver, View๊ฐ ์์ต๋๋ค. ์์ฒญ์ฒ๋ฆฌ๋ DispatcherServlet์ด Controller์ ์ ๋ฌํ๋ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ ์๋์ ๊ฐ์ต๋๋ค.
• DispatcherServlet : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ๋ฌ ๋ฐ์ ์ปจํธ๋กค๋ฌ์๊ฒ ์์ฒญ์ ์ ๋ฌํ๊ณ ์ปจํธ๋กค๋ฌ๊ฐ ๋ฆฌํดํ ๊ฒฐ๊ณผ ๊ฐ์ view์๊ฒ ์ ๋ฌํ์ฌ ์๋ง์ ์๋ต์ ํ๋๋ก ํ๋ ๊ฒ, ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ค์์์ ์ฒ๋ฆฌํ๋ ์คํ๋ง MVC์ ํต์ฌ ๊ตฌ์ฑ์์, web.xml์ ํ ๊ฐ์ด์์ DispatcherServlet์ ์ค์ ํจ.
• HandlerMapping : ํด๋ผ์ด์ธํธ์ ์์ฒญ URL์ ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ง๋ฅผ ๊ฒฐ์
• Controller : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ท ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatcherServlet์๊ฒ ์๋ ค์ค
• ModelAndView : ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ์ ๋ณด ๋ฐ ๋ทฐ ์ ํ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด์๋๋ ์ธํธ
• ViewResolver : ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ ๋ทฐ๋ฅผ ๊ฒฐ์
• View : ์ปจํธ๋กค๋ฌ์์ ๋ฆฌํด ๋ฐ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅ
1 ) DispatcherServlet์ web.xml์ ์ ์๋ URL ํจํด์ ๋ง๋ ์์ฒญ์ ๋ฐ๊ณ URL ์ปจํธ๋กค๋ฌ์ ๋งตํ ์์ ์ HandlerMapping์ ์์ฒญํฉ๋๋ค.
2 ) HandlerMapping์ URL์ ๊ธฐ์ค์ผ๋ก ์ด๋ค ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ HandlerExecution Chain๊ฐ์ฒด์ ๋ด์์ ๋ฆฌํดํ๋๋ฐ, ์์ฒญ์ ํด๋นํ๋ Interceptor๊ฐ ์์ ๊ฒฝ์ฐ ํจ๊ป ์ค๋๋ค.
3 ) HandlerAdapter๋ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ญํ ์ ํ๋๋ฐ ์คํ๋ Interceptor๊ฐ ์์ ๋๋ Interceptor์ preHandle() ๋ฉ์๋๋ฅผ ์คํํ ๋ค์ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
4 ) ์ปจํธ๋กค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌ ํ ๋ค ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ๋ฐ ModelAndView๋ฅผ DispatcherServlet์ ์ ๋ฌํฉ๋๋ค.
5 ) DispatcherServlet์ ์ปจํธ๋กค๋ฌ์์ ์ ๋ฌ๋ฐ์ View ์ด๋ฆ๊ณผ ๋งค์นญ๋๋ ์ค์ View ํ์ผ์ ์ฐพ๊ธฐ ์ํด ViewResolver์๊ฒ ์์ฒญํฉ๋๋ค.
6 ) ViewResolver๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ๋ทฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ์ปจํธ๋กค๋ฌ์์ ์ ๋ฌ๋ฐ์ View ์ด๋ฆ์ ์๋ค๋ก prefix, suffix ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ๊ฐ์ด ์ค์ ์ฌ์ฉํ ๋ทฐ ํ์ผ ๊ฒฝ๋ก๊ฐ ๋จ. ViewResolver๋ ๋งตํ๋๋ View ๊ฐ์ฒด๋ฅผ DispatcherServlet์ ์ ๋ฌํฉ๋๋ค.
7 ) DispatcherServlet์ ViewResolver์ ์ ๋ฌ๋ฐ์ View Model์ ๋๊ฒจ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด์ ์์ฑํฉ๋๋ค.
• ๋ ๊ตฌ์ฒด์ ์ธ ์ค๋ช
11. ์ปฌ๋ ์ ์ธํฐํ์ด์ค์ ์์ ๊ตฌ์กฐ์ ๊ฐ๊ฐ์ ํน์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
12. ์ปฌ๋ ์ ์ค์ ์์ ์๊ฒ ์ค๋ช ํ ์ ์๋ ๊ฒ์ ์ค๋ช ํด์ฃผ์ธ์
12-1. ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ ๋ฌด์์ด๊ณ , ์ ์ฌ์ฉํ๋์ง ์ค๋ช ํด์ฃผ์ธ์
์๋ฐ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
๋ฐฐ์ด์ ์ฌ์ด์ฆ๊ฐ ๊ณ ์ ๋์ด์๊ณ , ๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ง ๋ด์ ์ ์์ต๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ญ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ค์๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ํด ์ปฌ๋ ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
์ค๋ณต์ ํ์ฉํ์ง ์๋ Set, ์์๋๋ก ๋ฃ๋ List, key ์ value๋ก ๊ฐ์ ๋ด์ ์ ์๋ map์ด ์์ต๋๋ค.
13. Aop์์ Aspect, Advice, Pointcut ๋ฐ Joinpoint์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
Aspect๋ ์ฌ๋ฌ ๊ฐ์ฒด์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ด์ฌ์ฌํญ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ์ํ ์ฝ๋์ธ Advice์ Advice๋ฅผ ์ด๋์ ์ ์ฉํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ Point Cut์ ํฉ์น ๊ฐ๋ ์ผ๋ก AOP๋ฅผ ์ ์ฉํ๋ฉด ํต์ฌ ๊ธฐ๋ฅ ์ฝ๋ ์ฌ์ด์ ์นจํฌ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ ์ธ Aspect๋ก ๊ตฌ๋ถํด๋ผ ์ ์์ต๋๋ค.
JoinPoint๋ Advice๊ฐ ์ ์ฉ๋ ์ ์๋ ์์น๋ฅผ ๋งํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ํธ์ถํ๋ ๋ชจ๋ ๋น์ฆ๋์ค ๋ฉ์๋๋ก ์กฐ์ธ ํฌ์ธํธ ์ค์์ ํฌ์ธํธ ์ปท์ด ๋๊ธฐ ๋๋ฌธ์ ํฌ์ธํธ ์ปท์ ํ๋ณดํ๊ณ ์๊ฐํ ์ ์์ต๋๋ค.
PointCut์ Advice๋ฅผ ์ ์ฉํ ํ๊ฒ์ ๋ฉ์๋๋ฅผ ์ ๋ณํ๋ ์ ๊ทํํ์์ ๋๋ค. ์ฆ, ํน์ ์กฐ๊ฑด์ ์ํด ํํฐ๋ง๋ ์กฐ์ธ ํฌ์ธํธ๋ก ์๋ง์ ์กฐ์ธ ํฌ์ธํธ ์ค์์ ํน์ ๋ฉ์๋์์๋ง ๊ณตํต ๊ธฐ๋ฅ์ ์ํ์ํค๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค.
Advice๋ ์ธ์ ๊ณตํต ๊ด์ฌ ๊ธฐ๋ฅ์ ํต์ฌ ๋ก์ง์ ์ ์ฉํ ์ง๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค. (๊ณตํต๊ธฐ๋ฅ์ ์ ์ฉํ๋ค๋ ๊ฒ์ด๋ค) ์ฆ, ํก๋จ ๊ด์ฌ์ ํด๋นํ๋ ๊ณตํต ๊ธฐ๋ฅ์ ์ฝ๋๋ก ๋ ๋ฆฝ๋ ํด๋์ค์ ๋ฉ์๋๋ก ์์ฑํฉ๋๋ค. ( Target ํด๋์ค์ ์กฐ์ธ ํฌ์ธํธ์ ์ฝ์ ๋์ด์ ธ ๋์ํ ์ ์๋ ์ฝ๋ )
14. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌด์์ธ๊ฐ์?
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object Oriented Programming)์ ๊ฐ์ฒด ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ํ์ค์ธ๊ณ์ ์ฌ๋ฌผ์ ๊ฐ์ฒด๋ก ๋ณด๊ณ , ๊ทธ ๊ฐ์ฒด๋ก๋ถํฐ ๊ฐ๋ฐํ๊ณ ์ ํ๋ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ๋ฝ์์ ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ธฐ๋ฒ์ ๋๋ค. ๊ณตํต๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๋ฌถ์ ํด๋์ค๋ฅผ ์ ์ํ๊ณ ํด๋น ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ ํ๋ ๊ฒ์ผ๋ก ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
+ ํด๋์ค ๋จ์ ๋ชจ๋ํ ๊ฐ๋ฅ, ๋ํํ๋ก์ ํธ์ ์ ํฉ
+ ์ฒ๋ฆฌ์๋๊ฐ ์ ์ฐจ์งํฅ์ ๋นํด ์๋์ ์ผ๋ก ๋๋ฆผ
์ค๊ณ ์์น
• SRP ( Single Responsibility Principle, ๋จ์ผ ์ฑ ์ ์์น ) : ํด๋์ค๋ ๋จ ํ๋์ ๋ชฉ์ ์ ๊ฐ์ ธ์ผ ํ๋ฉฐ, ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ ์ด์ ์ฌ์ผ ํ๋ค.
• OCP ( Open-Closed Principle, ๊ฐ๋ฐฉ ํ์ ์์น ) : ํด๋์ค๋ ํ์ฅ์ ์ด๋ ค์๊ณ ๋ณ๊ฒฝ์๋ ๋ซํ์์ด์ผํ๋ค.
• LSP ( Liskov Substitution Principle,๋ฆฌ์ค์ฝํ ์นํ ์์น ) : ์์ํ์ ์ ๊ฐ์ฒด๋ฅผ ํ์ํ์ ์ผ๋ก ๋ฐ๊พธ์ด๋ ํ๋ก๊ทธ๋จ์ ์ผ๊ด๋๊ฒ ๋์ํด์ผํ๋ค.
• ISP ( Interface Segregation Principle, ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น ) : ํด๋ผ์ด์ธํธ๋ ์ด์ฉํ์ง ์๋ ๋ฉ์๋์ ์์กดํ์ง ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ถ๋ฆฌํด์ผํ๋ค. ์ฆ, ์ธํฐํ์ด์ค๋ ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌ
• DIP ( Dependency Inversion Principle, ์์กด ์ญ์ ์์น ) : ํด๋ผ์ด์ธํธ๋ ์ถ์ํ(์ธํฐํ์ด์ค)์ ์์กดํด์ผํ๋ฉฐ ๊ตฌ์ฒดํ(๊ตฌํ๋ ํด๋์ค)์ ์์กดํด์๋ ์๋๋ค.
15. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
1) ์บก์ํ : ์ฝ๋๋ฅผ ์ฌํ์ฉํ๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก, ํด๋์ค๋ผ๋ ์บก์์ ๊ด๋ จ์๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ํ๋๋ก ๋ฌถ๊ณ , ์ธ๋ถ๋ก๋ถํฐ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ฐจ๋จํ๋ฉฐ ์์ ๋๋ ์กฐ์ํ ์ ์๋ ๋์์ ๋ด๋ถ์ ๋๋ ๋ฐฉ์. ์ฆ, ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ ์ ์๊ณ , ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํด์ ๊ฒฐ๊ณผ๋ง ๋ฆฌํด๋ฐ๋๋ก ํฉ๋๋ค.
2) ์ถ์ํ : ๊ฐ์ฒด์งํฅ ๊ด์ ์์ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ผ๋ก ์ค์ํ ์ ๋ณด๋ง ํํํจ์ผ๋ก์จ ์ฌ๋ฌผ์ ๊ณตํต์ ์ธ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ํ์ ํด ์ด๋ฆ์ ๋ถ์ฌ ํด๋์ค๋ฅผ ๋ง๋๋ ํ์
3) ๋คํ์ฑ : ํ๋์ ๋ฉ์๋๋ ํด๋์ค๊ฐ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ๊ฒ. ๋ํ์ ์ผ๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ด๋ ์ค๋ฒ๋ก๋ฉ์ด ์์ต๋๋ค. ์ด๋ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์คํ์์ผ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ผ๋ก ๋์ํฉ๋๋ค.
16. ์์์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋จ์ ์ ์ฐํ๊ฒ ํ๋ ๊ธฐ๋ฐ์ด ์์์ ๋๋ค. ํด๋์ค๋ผ๋ฆฌ๋ ์์์ ๋ฐ์ ์ ์์ผ๋ฉฐ, ์์์ ๋ฐ๋ ๊ฒฝ์ฐ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, ํด๋์ค๋ก๋ถํฐ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋งํฉ๋๋ค. ๋ค๋ฅธ ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ ์์ ํ ์ผ์ด ์๋ค๋ฉด ํด๋น ํด๋์ค๋ฅผ ์ง์ ์์ ํ๋ ๊ฒ์ด ์๋ ์์์ ๋ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ๋ถ๋ถ๋ง ๋ณ๊ฒฝํด์ ์ฌ์ฉํฉ๋๋ค. ๋ํ ์๋ฐ๋ ๋ค์ค ์์์ ์ง์ํ์ง ์๊ณ 1๊ฐ์ ํด๋์ค๋ง ์์์ ๋ฐ์ ์ ์์ต๋๋ค. ๋ค์ค์์์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ๋ชฉ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํฉ๋๋ค.
17. Spring์ ํน์ง์ ๋ฌด์์ ๋๊น?
1) POJO ๊ธฐ๋ฐ : ์๋ฐ ์ฝ๋๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ๊ทธ๋๋ก ์คํ๋ง์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2) ์์กด์ฑ ์ฃผ์ : ๋ฉ์๋๋ ๊ฐ์ฒด์ ํธ์ถ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ธ๋ถ์ ์ํด์ ๊ฒฐ์ ํฉ๋๋ค.
3) AOP์ ์ง์ : ๋ณด์, ๋ก๊ทธ ๊ฐ์ ํก๋จ ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌํ์ฌ ๊ณตํต ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ๋๋ก ๋๋ ๊ธฐ๋ฒ์ ์ง์ํฉ๋๋ค.
4) ํธ๋์ญ์ ์ ์ง์ : ํธ๋์ ์ ์ ์ฒ๋ฆฌ๋ฅผ ์ ๋ ธํ ์ด์ ์ด๋ XML๋ก ์ค์ ํ ์ ์์ต๋๋ค.
* POJO (Plain Old Java Object) ๋ ์ค๋๋ ๋ฐฉ์์ ๊ฐ๋จํ ์๋ฐ Object, ์คํ๋ง ์ ์ ํ๋ ์์ํฌ ๋ฑ์ด ๋ฌด๊ฑฐ์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ฐ๋ฐํด์ ์ฌ์ฉํ๊ฒ๋ ์ฉ์ด. ์คํ๋ง์ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ ๋ ๋ณ๋์ API๋ฅผ ์ฌ์ฉํ์ง ์๋ POJO ๊ตฌ์ฑ์ผ๋ก ์ ์์ด ๊ฐ๋ฅ
'๐์ทจ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SERVER_NETWORK (0) | 2022.07.03 |
---|---|
PROGRAMMING (0) | 2022.07.03 |