week 3 hyowon - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
๋ชฉ์ฐจ
- JAVA (๋์ฉ์ )
-
- Java8์ heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์ ๊ทธ๋ฆฌ๊ณ ํ์์ญ๊ณผ ์คํ์์ญ์ ๋ํด์ ์ค๋ช ํ์์ค
-
- ์๋ฐ8์์ ์๊ฐ๋ ๋๋ค์๊ณผ ๋ฉ์๋ ๋ ํผ๋ฐ์ค๋ฅผ ์ค๋ช ํ๋ผ.
-
- checked-exception VS unchecked-exception ์ฐจ์ด์ ์ ์ค๋ช ํด๋ณด์ธ์.
-
- SPRING (์ฃผ์ข
ํ)
-
- @Service, @Component์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
-
- ์คํ๋ง MVC ์น ์์ฒญ ์ฒ๋ฆฌ๊ณผ์ ์ ์ค๋ช ํ์์ค
-
- @EnableWebMvc ๋ ์ด๋์ ํ์ํ์ง ์ค๋ช ํ์์ค
-
- Infra/์ด์ (์ ์ ํ)
-
- heap dump๋ฅผ ํ๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํด๋ณด์ธ์.
-
- ๋ ๋์ค ์บ์๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋?
-
- SSL ํธ๋์์ดํน ๊ณผ์ ์?
-
1. Java8์ heap ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ค๋ช . ํ์์ญ๊ณผ ์คํ์์ญ ์ค๋ช
๋ฒค๋์ฌ๋ง๋ค ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
JVM์ ๊ธฐ์ค์ด ๋๋ ์คํ์ด ์กด์ฌํ๋ฉฐ, spec๋ง ๋ง์ถ๋ค๋ฉด JVM์ด๋ ์ด๋ฆ์ผ๋ก ๋ช ๋ช ๋ ์ ์์ต๋๋ค.
๋ํ์ ์ธ JVM์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
Hotspot JVM
: ์ค๋ผํด์ด ๋ฐฐํฌ ๋ฐ ์ ์ง๋ณด์ํ๋ JVM. Sun, Oracle, HP, Windows, Linux, MacOS์์ ์ ๊ณต.J9(IBM JVM)
: IBM์์ ๊ฐ๋ฐํ JVM. IBM์์ ์ ๊ณต.
๋ ๋ฒค๋์ฌ๋ ๊ฐ์ Java Class Libraries์ ๋ํ ๊ฐ์ ์ฐธ์กฐ์ฒด๋ฅผ ๊ตฌํํ์ง๋ง, JVM ๋ฐํ์์ ์๋ก ๋ค๋ฅด๊ฒ ๊ตฌํํ์ต๋๋ค. (์ธ๋๋ณ๋ก heap๊ณต๊ฐ์ ๋๋ hotspot jvm๊ณผ ๋ฌ๋ฆฌ IBM JVM์ 4๊ฐ์ง GC ๋ฐฉ์์ ๋ฐ๋ผ heap์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค.)
์ฐ๋ฆฌ๊ฐ ๋ง์ด ์ฌ์ฉํ๋ JVM์ Oracle์์ ๋ง๋ HotSpot JVM์ผ๋ก, HotSpot JVM์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
Heap
๊ฐ์ฒด ์ธ์คํด์ค์ Array๊ฐ ์ ์ฅ๋๊ณ ๋ชจ๋ Thread๋ค์ ์ํด ๊ณต์ ๋๋ ์์ญ
๋ชจ๋ **ํด๋์ค ์ธ์คํด์ค**
๋ฐ **๋ฐฐ์ด**
์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋ ๋ฐํ์ ๋ฐ์ดํฐ ์์ญ์
๋๋ค. ํ์ ๋ชจ๋ Thread๋ค์ ์์ ๊ณต์ ๋๋ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ํ, ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ง๋ค์์๋ ์ต๋ ๊ณต๊ฐ์ ๋๋ heap ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋๋ฉด JVM์ OutOfMemoryError
๋ฅผ ๋์ง๋๋ค.
๋ณ๊ฒฝ ์ฌํญ
PermGen ์ญ์
Heap์ JVM์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์, JVM์ด ์ค์ ํด์ค ์ ์๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ง์ ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋๋ฉด OutOfMemoryError
๋ฅผ ๋ฑ์ต๋๋ค. ๋๋ฌธ์ Heap ๋ด์ PermGen์ด ์ฌ๋ผ์ง๊ณ , native ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ด metaspace๋ก ์ฎ๊ฒจ๊ฐ์ต๋๋ค.
native ๋ฉ๋ชจ๋ฆฌ ์์ญ์ OS ๋ ๋ฒจ์์ ๊ณต๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ JVM๋ ๋ฒจ์์ ๊ด๋ฆฌํ๋ Heap๋ณด๋ค ๋ ๋ง์ ๊ณต๊ฐ์ ํ ๋นํด์ค ์ ์์ต๋๋ค.
java8์์๋ ์ ํ์ผ๋ก, 9๋ฒ์ ์์๋ ๋ํดํธ๋ก ์ ์ฉ๋ฉ๋๋ค.
// ์ฐธ๊ณ : (https://blog.voidmainvoid.net/184)
$ java -XX:+PrintFlagsFinal -version -server | grep MetaspaceSize
uintx InitialBootClassLoaderMetaspaceSize = 4194304 {product}
uintx MaxMetaspaceSize = 18446744073709547520 {product}
uintx MetaspaceSize = 21807104 {pd product}
uintx MaxHeapFreeRatio = 100 {manageable}
uintx MaxHeapSize := 4206886912 {product}
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Stack
๋ฉ์๋์ ๋ก์ปฌ ๋ณ์๋ค์ด ์ ์ฅ๋๋ ๊ณต๊ฐ.
๊ฐ ์ค๋ ๋๋ง๋ค ํ๋์ฉ ์กด์ฌํ๋ฉฐ ์ค๋ ๋๊ฐ ์์๋ ๋ ์์ฑ๋ฉ๋๋ค.
์ ์ค๋ ๋
๊ฐ ์คํ๋ ๋๋ง๋ค JVM์ด ์ ์คํ์ ์์ฑํฉ๋๋ค. JVM์ ๋จ ๋ ๊ฐ์ง ์์
๋ง ์คํํ๋๋ฐ, push์ pop์
๋๋ค. ์คํ์ ์ค๋ ๋ ์ํ๋ฅผ ์คํ ํ๋ ์์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ์ ์ฅํฉ๋๋ค. JVM์์ ํ์ฌ ์ํํ๊ณ ์๋ ํ๋ ์์ current frame๋ผ ํฉ๋๋ค.
์คํ ํ๋ ์
์คํ ํ๋ ์์ ๋ฉ์๋
๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์ถ๊ฐ๋๊ณ (push) ๋ฉ์๋๊ฐ ์คํ ์๋ฃ๋ ๋ ์ ๊ฑฐ(pop)๋ฉ๋๋ค.
์์ธ๊ฐ ๋ฐ์ํ๋ฉด printStackTrace()๊ฐ ๋๋ฉด์ ์ฐ๋ ๋ก๊ทธ ํ ์ค์ด ํ๋์ ์คํ ํ๋ ์์ ๋ํ๋ ๋๋ค.
์คํ ํ๋ ์์ ์ธ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
- Local Variable (Array)
- Operand Stack
- Constant Pool reference (Frame data) ํ์ฌ ์คํ์ค์ธ ๋ฉ์๋๊ฐ ์ํ ํด๋์ค์ ๋ฐํ์ ์์ ํ์ ๋ ํผ๋ฐ์ค
๊ฐ๊ฐ์ ํฌ๊ธฐ๋ ์ปดํ์ผ ์์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์ ์คํ ํ๋ ์์ ํฌ๊ธฐ๋ ๋ฉ์๋์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋ฉ๋๋ค.
Local Variable Array
- 0๋ถํฐ ์์๋๋ ๋จ์ด๋ฐฐ์ด
- ๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ๋ก์ปฌ๋ณ์๊ฐ ์ ์ฅ๋ฉ๋๋ค.
- ๋ฐฐ์ด์ ๊ฐ ์ฌ๋กฏ์ 4๋ฐ์ดํธ์ ๋๋ค.
- (primitive type) int, float, reference, returnAddress๋ 1์ฌ๋กฏ์ ์ฐจ์งํ๋ฉฐ, byte, short, char์ int๋ก ๋ณํ๋์ด ์ ์ฅ๋ฉ๋๋ค.
- Integer, Long, Double ๋ฑ์ ์ฐธ์กฐํ์ ์ผ๋ก Heap์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
- long, double์ ๋ฐฐ์ด์์ ์ฐ์๋ 2์ฌ๋กฏ์ ์ฐจ์งํฉ๋๋ค.
- ๊ฐ ๋ณ์๋ค์ ์ ์ธ๋ ์์๋๋ก ์ ์ฅ๋ฉ๋๋ค.
// Class Declaration
class Example
{
public void bike(int i, long l, float f,
double d, Object o, byte b)
{
}
}
Operand Stack
- ์ํํ ์ค๊ฐ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ์ ์์ ๊ณต๊ฐ์ ๋๋ค.
- stack ๊ตฌ์กฐ๋ก push, pop์ ํตํด ์ฐ์ฐ์ ์ํํฉ๋๋ค.
Frame data
- ๋ฉ์๋์ ํด๋นํ๋ ๋ชจ๋ ์ฌ๋ณผ์ด ์ ์ฅ๋ฉ๋๋ค.
- exception์ด ์์ผ๋ฉด catch ๋ธ๋ก๋ ์ฌ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค.
- constant pool ๋ถ์, ์ ์ ๋ฉ์๋ ๋ฆฌํด, ์์ธ ๋์คํจ์น ์ง์์ ์ํ ๋ฐ์ดํฐ
์ฐธ๊ณ
JVM specification 7, 8
Chapter 2. The Structure of the Java Virtual Machine
The Javaยฎ Virtual Machine Specification
JVM ํ๋
Tuning Java Virtual Machines (JVMs)
oracle JVM heap ๊ณต์๋ฌธ์
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.3
JVM Heap ๊ด๋ จ ํฌ์คํ
https://12bme.tistory.com/382
JVM stack Naver D2
https://d2.naver.com/helloworld/1230
java PermGen์ด ์ญ์ ๋ ์ด์
https://johngrib.github.io/wiki/java8-why-permgen-removed/
https://openjdk.java.net/jeps/122
2. Java 8์ ๋๋ค์๊ณผ ๋ฉ์๋ ๋ ํผ๋ฐ์ค ์ค๋ช
๋๋ค ํํ์
ํจ์(์ฝ๋ ๋ธ๋ก)๋ฅผ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋๋ค.
์ต๋ช ์ด๋ ํด๋์ค๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋์์ผ๋ฉฐ, ํ๋์ ๋ฉ์๋๋ฅผ ์ง๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ง ๋๋ค ํํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
public class RunnableTest {
public static void main(String[] args) {
// Anonymous Runnable
Runnable r1 = new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world two!");
// Run em!
r1.run();
r2.run();
}
๋๋ค ํํ์์ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ธ ์์ต๋๋ค.
- ์ ํ์ ํ์ ์ ์ธ : ๋งค๊ฐ๋ณ์์ ํ์ ์ ๋ฐ๋์ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ธ๋ ๊ดํธ ์๋ต๊ฐ๋ฅ : ๋งค๊ฐ๋ณ์๊ฐ ํ๋์ผ ๊ฒฝ์ฐ ๊ดํธ๋ฅผ ์๋ต๊ฐ๋ฅ
- ๋ฉ์๋ ๊ตฌํ๋ถ์ ์ค๊ดํธ ์๋ต๊ฐ๋ฅ : ๋จ์ผ ๋ช ๋ น๋ฌธ์ด๋ผ๋ฉด ์ค๊ดํธ ์๋ต๊ฐ๋ฅ
- return ์์ฝ์ด ์๋ต๊ฐ๋ฅ : ๋ณธ๋ฌธ์ ๋จ์ผ ํํ์๋ง ์์ฑํ๋ฉด ํด๋น ๊ฐ์ return
๋๋คํํ์์ ํ๋์ ์ธํฐํ์ด์ค์ ํ๋์ ์ถ์ ๋ฉ์๋๋ง ๊ฐ์ ธ์ผ ํ๋ค๊ณ ํ์ง๋ง, ์์ธ๊ฐ ์์ต๋๋ค.
@FunctionalInterface
interface testInterface {
int a = 0;
void test();
@Override
public boolean equals(Object object);
}
์ ์ธํฐํ์ด์ค๋ ๋ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ง๋์ง๋ง ๋๋คํํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ถ์๋ฉ์๋์ ๊ฐ์๋ฅผ ์ ๋ java.lang.Object ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ ์นด์ดํธํฉ๋๋ค.
์ธํฐํ์ด์ค ์ ์ธ๋ถ์ @FunctionalInterface
์ ํด๋น ์ธํฐํ์ด์ค๊ฐ ํจ์ํ ์ธํฐํ์ด์ค์์ ๋ํ๋ด๋ ์ ๋ณด์ฑ ์ ๋ํ
์ด์
์ผ๋ก ์ด ์ ๋ํ
์ด์
์ด ์์ด๋ ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ํจ์ํ์ธํฐํ์ด์ค์ ๊ธฐ์ค์ ์ถฉ์กฑํ๋์ง ์์์ฐจ๋ฆฝ๋๋ค.
๋๋ค ํํ์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ํฌํจํ ์ฌ๋ฌ ์ํฉ์์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- Variable declarations
- Assignments
- Return statements
- Array initializers
- Method or constructor arguments
- Lambda expression bodies
- Conditional expressions ?:
- Cast expressions
์ด์ Java์ ๋ฉ์๋๋ ์ ํ์ ์ผ๋ก ์ผ๊ธ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ผ๊ธ ๊ฐ์ฒด์ ์กฐ๊ฑด
- ๋ณ์(variable)์ ๋ด์ ์ ์๋ค
- ์ธ์(parameter)๋ก ์ ๋ฌํ ์ ์๋ค
- ๋ฐํ๊ฐ(return value)์ผ๋ก ์ ๋ฌํ ์ ์๋ค
๋ค๋ง, ๋ชจ๋ ๋ฉ์๋๊ฐ ์ผ๊ธ ๊ฐ์ฒด๊ฐ ๋ ์ ์๋ค. ๋๋ค์์ ์กฐ๊ฑด์ธ (@FunctionalInterface ๋ฅผ ๋ถ์ธ ํ๋์ ์ถ์๋ฉ์๋๋ง ์ง๋) ์ธํฐํ์ด์ค
์ ๋ฉ์๋๊ฐ ์๋๋ผ๋ฉด ๋๋ค ํํ์์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ํ ํ๊ณ๋ก์ ํจ์ํ์ ์๋ก ์ ์ํ ๊ฒ์ด ์๋, ๊ธฐ์กด์ ์กด์ฌํ๋ interface์ ํํ๋ฅผ ๋น์ด ๋๋ค์์ ํํํ์ ๋ฟ์ด๋ผ๋ ์ ๋ ์๋ค.
๋๋ค์์ด ์ ์ฉ๋ ์ธํฐํ์ด์ค
- java.util.Predicate
- java.util.Function
- java.util.Consumer
- java.util.Supplier
๋ฉ์๋ ๋ ํผ๋ฐ์ค
๋ฉ์๋๋ช ์ผ๋ก ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ฐ ๋์์ ์ค๋ค.
::
์ฌ๋ณผ๋ก ํํ๋๋ฉฐ, ์๋์ ๊ฐ์ ํ์
์ ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํฌ ์ ์๋ค.
- static ๋ฉ์๋
- instance ๋ฉ์๋(public)
- new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์์ฑ์ (TreeSet::new)
public class Java8Tester {
public static void main(String args[]) {
List names = new ArrayList();
names.add("Mahesh");
names.add("Suresh");
names.add("Ramesh");
names.add("Naresh");
names.add("Kalpesh");
names.forEach(System.out::println);
// ๊ธฐ์กด ๋ฐฉ์
// for(String s : names)
// System.out.println(s);
}
}
ํจ์ํ ์ธํฐํ์ด์ค | ํ๋ผ๋ฏธํฐํ์ | ๋ฐํ ํ์ | ์ถ์ ๋ฉ์๋ ์ด๋ฆ | ์ค๋ช | ๋ค๋ฅธ ๋ฉ์๋ |
---|---|---|---|---|---|
Runnable | ์์ | void | run | ์ธ์๋ ๋ฐํ ๊ฐ ์์ด ์ก์ ์ ์ํํ๋ค. | ์์ |
Supplier | ์์ | T | get | T ํ์ ๊ฐ์ ๊ณต๊ธํ๋ค. | ์์ |
Consumer | T | void | accept | T ํ์ ๊ฐ์ ์๋นํ๋ค. | andThen |
BiConsumer<T, U> | T, U | void | accept | T์ Uํ์ ๊ฐ์ ์๋นํ๋ค. | andThen |
Function<T, R> | T | R | apply | T ํ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ค. | compose, andThen, identity |
BiFunction<T, U, R> | T, U | R | apply | T์ Uํ์ ์ธ์๋ฅผ ๋ฐ๋ ํจ์๋ค. | andThen |
UnaryOperator | T | T | apply | T ํ์ ์ ์ ์ฉํ๋ ๋จํญ ์ฐ์ฐ์๋ค. | compose, andThen, identity |
BinaryOperator | T, T | T | apply | T ํ์ ์ ์ ์ฉํ๋ ์ดํญ ์ฐ์ฐ์๋ค. | andThen, maxBy, minBy |
Predicate | T | boolean | test | Boolean ๊ฐ์ ๋ฐํํ๋ ํจ์๋ค. | and, or, negate, isEqual |
BiPredicate<T, U> | T, U | boolean | test | ๋ ๊ฐ์ง ์ธ์๋ฅผ ๋ฐ๊ณ boolean ๊ฐ์ ๋ฐํํ๋ ํจ์๋ค. | and, or, negate |
์ฐธ๊ณ
๋๋ค ํํ์
https://m.blog.naver.com/2feelus/220695347170
https://imcts.github.io/java-lambda/
https://www.tutorialspoint.com/java8/java8_lambda_expressions.htm
๋๋ค ํต์คํํธ (๋งํฌ) - oracle
๋๋ค ํต์คํํธ part.1 (๋งํฌ) - oracle
๋ฉ์๋ ๋ ํผ๋ฐ์ค
https://imcts.github.io/java-method-reference/
https://www.tutorialspoint.com/java8/java8_method_references.htm
3. checked exception VS unchecked exception
์๋ฐ์ ์์ธ์๋ Checked Exception
๊ณผ, Unchecked Exception
์ด ์์ต๋๋ค.
๋ ์ฌ์ด์ ๊ตฌ๋ถ ๊ธฐ์ค์ **๊ผญ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋๊ฐ**
๋ก, Checked Exception์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ฉ์๋๋ผ๋ฉด ๋ฐ๋์ ๋ก์ง์ try/catch๋ก ๊ฐ์ธ๊ฑฐ๋ throw๋ก ๋์ ธ์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์ Unchecked Exception์ ๋ช
์์ ์ธ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋ฉ๋๋ค.
์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ์์ธ๋ฅผ ์ ์ ํ ๋ณต๊ตฌํ ์์๋ค๋ฉด ๊ฒ์ฌ ์์ธ๋ก, ๊ทธ๋ด ์ ์๋ค๋ฉด ๋น๊ฒ์ฌ ์์ธ๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค.
Throwable ๋ฅผ ์์๋ฐ์ ํด๋์ค ์ค Error, RuntimeException์ ์ ์ธํ ํด๋์ค๊ฐ checked exception์ ๋๋ค.
Checked Exception
์ ๊ฐ๋ฐ์๊ฐ ์ ์ดํ ์ ์๋ ํ๋ก๊ทธ๋จ ์ธ๋ถ์ ์ค๋ฅ๋ก์ ๊ฐ๋ฐ์์๊ฒ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์์๋ก ํ์ผ ์
๋ ฅ์ ๋ฐ์๋ ์ ์ฌํ์ง ์๋ ํ์ผ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๊ฑฐ๋, ์
๋ ฅํ ๋ฐ์ดํฐ์ ํ์์ด ์๋ชป๋์์๋ ๋ฐ์ํฉ๋๋ค.
๋ฐ๋ฉด Unchecked Exception
์ ๊ฐ๋ฐ์์ ์ค์๋ก ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ก ์๋ฅผ ๋ค๋ฉด ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฐ์ ํธ์ถํ๋ค๊ฑฐ๋, ํด๋์ค ๊ฐ์ ํ๋ณํ์ ์๋ชปํ๊ฑฐ๋, ์ ์๋ฅผ 0์ผ๋ก ๋๋๋ ค๊ณ ํ ๋ ๋ฐ์ํฉ๋๋ค.
4. @Service์ @Component์ ์ฐจ์ด
์คํ๋ง ํ๋ ์์ํฌ์์ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ๋ค๋ก, @Component๋ฅผ ์์๋ฐ์ ๋ง๋ ๊ฒ์ด @Service ์ด๋ค.
@Component
Spring์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด์์ ํ์ํด์ฃผ๋ ์ด๋ ธํ ์ด์
scan-auto-detection๊ณผ dependency injection์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ์ด๋ ธํ ์ด์
์ด ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ฉด DI ์ปจํ ์ด๋๋ ๊ฐ์ฒด๋ฅผ ์ฐพ์ง ๋ชปํ๋ค.
@Controller
Web MVC ์ฝ๋์ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ์ด๋ค. @RequestMapping ์ด๋ ธํ ์ด์ ์ ํด๋น ์ด๋ ธํ ์ด์ ๋ฐ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
@Repository
๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ ์ํจ
ํผ์์คํด์ค(persistence) ๋ ์ด์ด, ์์์ฑ์ ๊ฐ์ง๋ ์์ฑ(ํ์ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)
@Service
๋น์ฆ๋์ค ๋ก์ง์ด๋ respository layer๋ฅผ ํธ์ถํ๋ ํจ์์ ์ฌ์ฉ๋๋ค.
๋ค๋ฅธ ์ด๋ ธํ ์ด์ ๊ณผ ๋ค๋ฅด๊ฒ @Component์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ ์๋ค.
๊ทธ๋ฌ๋ ํ์ํ ๋ ํน์ ์์ธ, ์์ธ์ฒ๋ฆฌ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋ค.
@Service VS @Component
Therefore, you can annotate your component classes with @Component, but by annotating them with @Repository, @Service, or@Controller instead, your classes are more properly suited for processing by tools or associating with aspects. spring reference
์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ ํด๋์ค์ ๋จ์ํ @Component๋ฅผ ๋ถ์ผ ์๋ ์์ง๋ง,
@Repository, @Service, @Controller๋ฅผ ๋ถ์ธ๋ค๋ฉด ๊ทธ ํด๋์ค๊ฐ ๊ฐ์ง ๊ด์ (aspect)์ ๋ง๊ฒ ๋ ์ ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ
https://madplay.github.io/post/java-checked-unchecked-exceptions
https://boss109.tistory.com/64
5. ์คํ๋ง MVC์ ์น ์์ฒญ ์ฒ๋ฆฌ๊ณผ์ ์ค๋ช
- HTTP์์ฒญ
(๋ธ๋ผ์ฐ์ ,์น์ปจํ
์ด๋์ ๋์์ ๋ฐ์) ํ๋ฉด์ HTTP์์ฒญ์ DispatcherServlet
์ RequestMappingHandlerMapping
/RequestMappingHandlerAdaptor
๊ฐ ๋ฐ์ต๋๋ค.
DispatcherServlet
์ ์ผ์ข
์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์ญํ ์ ํฉ๋๋ค.
- ์์ฒญ
๋ฐ์์ ์ปจํธ๋กค๋ฌ๋ก ๊ฐ์ต๋๋ค.
- ์์ฑ
MVC. ์๋น์ค, ์๋น์คdao, ๋งคํผ ์ด์ฌํ ํด์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ชจ๋ธ์ ๋ฃ์ด์ค๋๋ค.
- ๋ชจ๋ธ/๋ทฐ ๋ฐํ
model๊ณผ ๋ทฐ(return ์์ ๋ฌธ์์ด)๋ฅผ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ผ๋ก ๋ฐํํฉ๋๋ค.
- ๋ชจ๋ธ
๊ทธ๊ฑธ JstlView๊ฐ ๋ฐ์๊ฐ์ง๊ณ ๊ทธ๋ฆฌ๋ค๊ฐ JSTL์ ๋ง๋๋ฉด ๋ชจ๋ธ์ ์ฐธ๊ณ ํ์ฌ HTML์ ์์ฑํฉ๋๋ค.
- ์์ฑ
์์ฑํ HTML์ (HTTPํต์ ์ ๊ด์ฅํ๋) ์๋ธ๋ฆฟ์ปจํ ์ด๋ํํ ๋๊ฒจ์ค๋๋ค.
- HTTP์๋ต
๊ฑ๊ฐ HTTPํต์ ์ ํตํด์ ํ์ฑํด์ ํ๋ฉด์ ๋จ๊ถ์ค๋๋ค.
์ถ์ฒ
week 9(MVC,spring,๋ฐฐ์ด)|์์ฑ์ hwp
6. @EnableWebMvc์ ์ฌ์ฉ์ฒ
@Enable ์ด๋ ธํ ์ด์ ์ ๊ฐ๋ฐ์๋ฅผ ๋์ ํด ๋ง์ ์ค์ ์ ๋์ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
์ฆ, @EnableWebMvc์ Spring MVC์์ ํ์ํ bean ์ค์ ์ ์๋์ผ๋ก ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ฉฐ,
@Configuration ์ค์ ์ ์ํฌํธํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด์์ต๋๋ค.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class) // == @Configuration ์ค์
public @interface EnableWebMvc {
}
๋ํ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฑ๋ก๋๋ Bean ์ด์ธ์ ์ถ๊ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ Bean ๋ฑ๋ก์ ์์ฝ๊ฒ ํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
7. heap dump tuning ๋ฐฉ๋ฒ
(1) IBM ์๋ฒ ๊ฒฝ์ฐ
ํ์ฅ์๊ฐ phd๋ก ๋๋๋ ํ์ผ์ด Heapdumpํ์ผ์ด๊ณ javacore๋ก ์์๋๋ ํ์ผ์ด Threaddump ํ์ผ์ด๋ค.
- IBM : -verbose:gc -Xverbosegclog:$LOG_HOME/ํ์ผ๋ช .log
(JEUSMain.xml ํ์ผ์ ์ด์ด์ ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ)
- IBM : JEUS์ ๋ถํ ํ๋ ๊ณ์ ์ ํ๊ฒฝํ์ผ(.profile, .cshrc๋ฑ)์ ์๋์ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉด OutOfMemory ๋ฐ์์์ ์ heapdump_ํด๋น๋ ์ง,pid.phd ๋ก ํ์ผ์ด ์์ฑ๋จ
export IBM_HEAPDUMP_OUTOFMEMORY=true
export IBM_JAVADUMP_OUTOFMEMORY=true
export IBM_JAVACOREDIR=$JAVCORE_HOMR
export IBM_HEAPDUMPDIR=$HEAPDUMP_HOME
(2) SUN ์๋ฒ ๊ฒฝ์ฐ
JDK 1.4.1์์๋ง ๋์ํ๊ณ 1.4.2์ดํ ๋ฒ์ ์์๋ ๋์ํ์ง ์๋๋ค๋ ์น๋ช ์ ์ธ ๋จ์ ์ด ์์๋ค.
SUN & HP : JDK1.4.2_12, JDK5_07์ด์์์๋ Heapdump์ ๋ก๊ทธ๋ก ๋จ๊ฒจ์ ๋ถ์์ด ๊ฐ๋ฅํจ.
-XX:+HeapDumpOnCtrlBreak
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=$LOG_HOME/ํ์ผ๋ช .hprof
์ต์ ์ ์ถ๊ฐํด์ ์คํํ๋ฉด ์๋์ ๊ฐ์ด ๋์จ๋ค.
$ java -XX:+HeapDumpOnOutOfMemoryError -mn256m -mx512m ConsumeHeap
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid2262.hprof ...
Heap dump file created [531535128 bytes in 14.691 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at ConsumeHeap$BigObject.(ConsumeHeap.java:22)
at ConsumeHeap.main(ConsumeHeap.java:32)
ํ์ผ์ ํ์ฌ ํด๋์ HPROF ๋ฐ์ด๋๋ฆฌ ํฌ๋ฉง์ผ๋ก ์์ฑ๋๊ณ JHAT(Java Heap Analysis Tool)์ ๊ฐ์ด HPROF ํฌ๋ฉง์ ์ง์ํ๋ ํด๋ก ๋ถ์ํ ์ ์๋ค.
JHAT : http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html
๋ง์ผ ํด๋๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด -XX:HeapDumpPath= ์ต์ ์ ์ด์ฉํ ์ ์๋ค.
-
๊ด๋ จ ๋งํฌ : http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/gdaog.html#gbzrr
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/gblfj.html
(3) HP ์๋ฒ ๊ฒฝ์ฐ
SUN JVM๊ณผ ๋์ผํ๋ฐ 1.5.0_04 ๋ 1.4.2_11๋ถํฐ ์ง์ํ๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ค.
Java Troubleshooting Guide for HP-UX Systems : http://docs.hp.com/en/5992-1918/5992-1918.pdf
๋ถ์ํ๋๋ฐ HPJtune๋ฅผ ์ฌ์ฉํ๋ค.
HPjtune : http://www.hp.com/products1/unix/java/java2/hpjtune/
8. ๋ ๋์ค ์บ์๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋?
(๋ ๋์ค ์บ์ ์ต์ ์ฌ์ฉ๋ฒ์ผ๋ก ์ดํด)
- ์ค๋ ๊ฑธ๋ฆฌ๋ ๋ช ๋ น (์ O(n)๊ด๋ จ ๋ช ๋ น์ด)์ ์ํํ์ง ์๋๋ค.
9. SSL ํธ๋์์ดํน ๊ณผ์ ์?
< SSL/TLS ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํต์ ํ๋ ๋จ๊ณ >
-
์ฌ์ฉํ ํ๋กํ ์ฝ ๋ฒ์ ์ ๋์.
-
์ํธํ ์๊ณ ๋ฆฌ์ฆ ์ ํ.
-
๋์งํธ ์ธ์ฆ์ ๊ตํํ๊ณ ์ ํจ์ฑ ๊ฒ์ฌํ์ฌ ์๋ก ์ธ์ฆ.
-
๋น๋์นญ ์ํธํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ณต์ ๋น๋ฐํค๋ฅผ ์์ฑ. ๊ทธ๋ฐ ๋ค์ SSL ๋๋ TLS๋ ๊ณต์ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ์ง๋ฅผ ๋์นญ ์ํธํ ๋ฐฉ์์ผ๋ก ์ํธํ.