week 3 jisoo - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
Java8μ heap λ©λͺ¨λ¦¬ ꡬ쑰λ₯Ό μ€λͺ ν΄μ£ΌμΈμ κ·Έλ¦¬κ³ νμμκ³Ό μ€νμμμ λν΄μ μ€λͺ νμμ€
JVMμ λ©λͺ¨λ¦¬ μμμΌλ‘ μλ° μ ν리μΌμ΄μ μ μ€νν λ μ¬μ©λλ λ°μ΄ν°λ€μ μ μ₯νλ μμμ΄λ€.
JVMμ΄ μ΄μ체μ μμμ μ€νλλ©΄μ ν λΉλ°λ λ©λͺ¨λ¦¬ μμμ΄λ€. Class Loaderμμ μ€λΉν λ°μ΄ν°λ€μ 보κ΄νλ μ μ₯μμ΄λ€.
μ΄ μμμ ν¬κ² Method Area, Heap Area, Stack Area, PC Register, Native Method Stack
λ‘ λλ μ μλ€.
μ΄μ€μ Heap μμκ³Ό Stack μμμ λΉκ΅ν΄λ³΄λ € νλ€.
- JVMμ΄ κ΄λ¦¬νλ νλ‘κ·Έλ¨ μμμ λ°μ΄ν°λ₯Ό μ μ₯νκΈ° μν΄ λ°νμ μ
λμ μΌλ‘ ν λΉ
νμ¬ μ¬μ©νλ μμμ΄λ€. -
New
μ°μ°μλ‘ μμ±λ κ°μ²΄ λλ κ°μ²΄(μΈμ€ν΄μ€)μ λ°°μ΄μ μ μ₯νλ€. - ν μμμ μμ±λ κ°μ²΄μ λ°°μ΄μ μ€ν μμμ λ³μλ λ€λ₯Έ κ°μ²΄μ νλμμ μ°Έμ‘°νλ€.
- μ°Έμ‘°νλ λ³μλ νλκ° μλ€λ©΄ μλ―Έ μλ κ°μ²΄κ° λμ΄ GCμ λμμ΄ λλ€.
- ν μμμ μ¬μ©κΈ°κ° λ° μ€λ λ 곡μ λ²μ κ°μ²΄κ° λ μ΄μ μ¬μ©λμ§ μκ±°λ λͺ μμ μΌλ‘ null μ μΈ μ GC(Garbage Collection) λμ κ΅¬μ± λ°©μμ΄λ GC λ°©λ²μ JVM λ²€λλ§λ€ λ€λ₯Ό μ μλ€. λͺ¨λ μ€λ λμμ 곡μ νλ€.
μ§μ λ³μ, νλΌλ―Έν°, λ¦¬ν΄ κ°, μ°μ°μ μ¬μ©λλ μμ κ°λ±μ΄ μμ±λλ μμμ΄λ€.
int a = 10; μ΄λΌλ μμ€λ₯Ό μμ±νλ€λ©΄ μ μκ°μ΄ ν λΉλ μ μλ λ©λͺ¨λ¦¬κ³΅κ°μ aλΌκ³ μ‘μλκ³ κ·Έ λ©λͺ¨λ¦¬ μμμ κ°μ΄ 10μ΄ λ€μ΄κ°λ€. μ¦, μ€νμ λ©λͺ¨λ¦¬μ μ΄λ¦μ΄ aλΌκ³ λΆμ¬μ£Όκ³ κ°μ΄ 10μΈ λ©λͺ¨λ¦¬ 곡κ°μ λ§λ λ€.
ν΄λμ€ Person p = new Person();
μ΄λΌλ μμ€λ₯Ό μμ±νλ€λ©΄ Person pλ μ€ν μμμ μμ±λκ³ newλ‘ μμ±λ Person ν΄λμ€μ μΈμ€ν΄μ€λ ν μμμ μμ±λλ€.
κ·Έλ¦¬κ³ μ€νμμμ μμ±λ pμ κ°μΌλ‘ ν μμμ μ£Όμκ°μ κ°μ§κ³ μλ€. μ¦, μ€ν μμμ μμ±λ pκ° ν μμμ μμ±λ κ°μ²΄λ₯Ό κ°λ¦¬ν€κ³ (μ°Έμ‘°νκ³ ) μλ κ²μ΄λ€.
λ©μλλ₯Ό νΈμΆν λλ§λ€ κ°λ³μ μΌλ‘ μ€νμ΄ μμ±λλ€.
- κ° μ€λ λλ§λ€ νλμ© μ‘΄μ¬νλ©°, μ€λ λκ° μμλ λ ν λΉλλ€.
- λ©μλλ₯Ό νΈμΆν λλ§λ€
νλ μ(Frame)
μμΆκ°(push)
νκ³ λ©μλκ° μ’ λ£λλ©΄ ν΄λΉ νλ μμμ κ±°(pop)
νλ λμμ μννλ€. - μ μ νμΆ(FILO, First In Last Out) κ΅¬μ‘°λ‘ pushμ pop κΈ°λ₯ μ¬μ©
- λ©μλ νΈμΆ μ μμ±λλ μ€λ λ μνμ 보λ₯Ό κΈ°λ‘νλ Frameμ μ μ₯
- λ©μλ μ 보, μ§μλ³μ, 맀κ°λ³μ, μ°μ° μ€ λ°μνλ μμ λ°μ΄ν° μ μ₯
- κΈ°λ³Έ(μμ)νμ λ³μλ μ€ν μμμ μ§μ κ°μ κ°μ§λ€.
- μ°Έμ‘°νμ λ³μλ ν μμμ΄λ λ©μλ μμμ κ°μ²΄ μ£Όμλ₯Ό κ°μ§λ€.
ν¨μν νλ‘κ·Έλλ°μ ν¨μμ μ
λ ₯λ§μ μμ‘΄νμ¬ μΆλ ₯μ λ§λλ κ΅¬μ‘°λ‘ μΈλΆμ μνλ₯Ό λ³κ²½νλ κ²μ μ§μ
νλ ν¨λ¬λ€μμΌλ‘ λΆμμ© λ°μμ μ΅μννλ λ°©λ²λ‘ .
-
μμν ν¨μ
- ν¨μμ μ€νμ΄ μΈλΆμ μνλ₯Ό λ³κ²½νμ§ μμ.
- λ©ν°μ°λ λμμλ μμ νκ³ , λ³λ ¬μ²λ¦¬ λ° κ³μ° κ°λ₯
- μ€μ§ μ λ ₯μ μν΄μλ§ μΆλ ₯μ΄ μ ν΄μ§. νκ²½μ΄λ μνμ μν₯μ λ°μμ μλ¨!
-
μ΅λͺ ν¨μ
- μ΄λ¦μ΄ μλ ν¨μ
- λλΆλΆμ νλ‘κ·Έλλ° μΈμ΄μμ
λλ€μ
μΌλ‘ νν
-
κ³ κ³ ν¨μ
- ν¨μλ₯Ό λ€λ£¨λ μμμ ν¨μ
- ν¨μλ νλμ κ°μΌλ‘ μ·¨κΈ
- ν¨μμ μΈμλ‘ ν¨μλ₯Ό μ λ¬ κ°λ₯
- β μΌκΈ κ°μ²΄ (μΌκΈ ν¨μ)
JAVAμλ ν¨μμ κ°λ μ΄ μμλ€.
μλ°μ λ©μλλ μΌκΈ ν¨μκ° μλλ―λ‘ λ€λ₯Έ λ©μλμ μΈμλ‘ μ λ¬ν μλ μμλ€.
λν μλ°λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ νΉμ±μΌλ‘ λ©μλλ κ°μ²΄μ νμλ₯Ό μ μνκ³ κ°μ²΄μ μνλ₯Ό λ³κ²½νλ€.
λλ¬Έμ JAVA8μμ λ¨ νλμ λ©μλλ§μ΄ μ μΈλ μΈν°νμ΄μ€μΈ ν¨μν μΈν°νμ΄μ€λ₯Ό λμ νλ€.
ν¨μν μΈν°νμ΄μ€μ κ²½μ° λλ€μμΌλ‘ ννμ΄ κ°λ₯ν μ μκ² μ 곡λμλ€.
- μμ ν¨μ λ§μ‘± : λλ€μ ννμ ν΅ν΄ μ λ ₯μ ν΅ν΄μλ§ μΆλ ₯μ΄ κ²°μ λ¨
- μ΅λͺ ν¨μ λ§μ‘± : λλ€μμ μ΄μ©νμ¬ μ΅λͺ ν¨μ μ μ κ°λ₯
- κ³ κ³ ν¨μ λ§μ‘± : ν¨μν μΈν°νμ΄μ€μ λ©μλμμ λλ€λ₯Έ ν¨μν μΈν°νμ΄μ€λ₯Ό μΈμλ‘ λ°μμ μμ.
β μ¦ ν¨μν μΈν°νμ΄μ€μ λλ€μμ λμ μΌλ‘ JAVAλ
ν¨μν νλ‘κ·Έλλ°μ 쑰건μ λ§μ‘±
νκ² λ¨.
-
Java8μμλ ν¨μλ₯Ό μΌκΈκ°μ²΄μ²λΌ λ€λ£° μ μκ² **
ν¨μν μΈν°νμ΄μ€
**λ₯Ό μ 곡νλ€. = λλ€μμ λ€λ£¨κΈ° μν μΈν°νμ΄μ€ -
λλ€μκ³Ό μΈν°νμ΄μ€μ λ©μλκ° 1:1λ‘ μ°κ²°λμ΄μΌ νκΈ° λλ¬Έμ λ¨ νλμ μΆμ λ©μλλ§ κ°μ§λ μΈν°νμ΄μ€λ₯Ό μλ―Ένλ€.
(staticν¨μλ μ¬λ¬ κ° κ°μ§ μ μλ€.)
-
μΌκΈκ°μ²΄λ μλ 쑰건μ λ§μ‘±ν΄μΌ νλ€.
-
**
λ³μμ κ°μ ν λΉ
ν μ μμ΄μΌ νλ€. -
ν¨μμ νλΌλ―Έν°
λ‘ λκ²¨μ€ μ μμ΄μΌ νλ€. -
ν¨μμ
λ°νκ°
μ΄ λ μ μμ΄μΌ νλ€.** -
ν¨μν μΈν°νμ΄μ€λ₯Ό μ΄μ©ν¨μΌλ‘μ κ°μ²΄λ₯Ό μ μΈνκ³ μ€λ²λΌμ΄λ©νλ... μ΄λ° λ²κ±°λ‘μ΄ μμ λ€μ μμ κ³
λ¨μν λλ€μ ν¨μλ₯Ό ν΅ν΄ μ½λλ₯Ό κ°κ²°νκ² μμ± ν μ μλ€.
javaμ ν°λ³νλ jdk1.5λΆν° μΆκ°λ μ λ€λ¦μ€μ λ±μ₯μ΄κ³ , λ νλ²μ jdk 1.8λΆν° μΆκ°λ λλ€μμ λ±μ₯μ΄λ€.
λλ€μμ λμ μΌλ‘ μΈν΄ μ΄μ μλ°λ κ°μ²΄μ§ν₯μΈμ΄μΈ λμμ ν¨μν μΈμ΄κ° λμλ€.
λλ€μμ΄λ κ°λ¨ν λ§ν΄μ λ©μλλ₯Ό νλμ μ
μΌλ‘ ννν κ²μ΄λ€. λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘, λλ€μμ μ΅λͺ
ν¨μ
λΌκ³ λ νλ€.
λλ€μ λ¬Έλ²μ μ»΄νμΌλ¬κ° μ΅λͺ
ν΄λμ€λ‘ λ³ν
νλ€. μ¦, ν¨μν μΈν°νμ΄μ€λ₯Ό μ»΄νμΌλ¬κ° ꡬννλλ‘ μμνλ ννλΌ λ³Ό μ μλ€
int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5) +1);
// μ λλ€μμ μλ λ©μλμ κ°λ€.
int method() {
return (int)(Math.random()*5) + 1;
}
κΈ°μ‘΄μλ λͺ¨λ λ©μλλ ν΄λμ€μ ν¬ν¨λμ΄μΌ νλ―λ‘, ν΄λμ€λ μλ‘ λ§λ€μ΄μΌ νκ³ , κ°μ²΄λ μμ±ν΄μΌλ§ λΉλ‘μ λ©μλλ₯Ό νΈμΆν μ μμλλ°, λλ€μμ μ΄ λͺ¨λ κ³Όμ μμ΄ μ€μ§ λλ€μ μ체λ§μΌλ‘ λ©μλμ μν μ λμ ν μ μλ€.
κ²λ€κ° λλ€μμ λ©μλμ 맀κ°λ³μλ‘ μ λ¬λμ΄μ§λ κ²μ΄ κ°λ₯νκ³ , λ©μλμ κ²°κ³Όλ‘ λ°νλ μ μλ€. λλ€μμΌλ‘ μΈν΄ λ©μλλ₯Ό λ³μμ²λΌ λ€λ£¨λ κ²
μ΄ κ°λ₯ν΄μ§ κ²μ΄λ€.
- λ©μλμ ν¨μμ μ°¨μ΄ : κ°μ²΄μ§ν₯ κ°λ μμλ ν¨μ λμ κ°μ²΄μ νμλ λμμ μλ―Ένλ λ©μλ€λ μ©μ΄λ₯Ό μ¬μ©νλ€. (λ©μλλ κ°μ²΄μ λ°λμ μν΄μΌν¨). κ·Έλ¬λ μ΄μ λ€μ λλ€μμ ν΅ν΄ λ©μλκ° νλμ λ 립μ μΈ κΈ°λ₯μ νκΈ°λλ¬Έμ ν¨μλΌλ μ©μ΄λ₯Ό μ¬μ©ν μ μλ€.
λ©μλ λ νΌλ°μ€(Method Reference)λ Lambda ννμμ λ κ°λ¨νκ² νννλ λ°©λ²μ΄λ€.
λ©μλ λ νΌλ°μ€λ μ΄λ¦μμ μ μ μλ―μ΄ λ©μλμ λ νΌλ°μ€λ₯Ό μ λ¬
νλ€λ μλ―Έμ΄λ©°, λλ€ννμμμ λ©μλ νΈμΆ 1νλ‘ μ½λκ° λλλ κ²½μ° λ©μλ λ νΌλ°μ€λ₯Ό μ΄μ©ν΄ μ΄λ―Έ μ€μΈ μ½λλ₯Ό λ μ€μΌμλμλ€.
λ©μλμ λ νΌλ°μ€λΌκ³ νμ§λ§ μλ°ν λ§ν΄ μλ°μμμ λ©μλλ μΌκΈ κ°μ²΄κ° μλκΈ°λλ¬Έμ κ°μ²΄μ λ νΌλ°μ€λ₯Ό μ λ¬νλ λ°©μμΌλ‘ μλνλ€.
Method Reference
λ₯Ό λ§λλ μ νμλ λ€μ 3κ°μ§κ° μλ€.
-
μ μ λ©μλ μ°Έμ‘°: Integerμ parseIntλ₯Ό
Integer::parseInt
λ‘ μ¬μ© κ°λ₯ -
λ€μν νμμ μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°: Stringμ length λ©μλλ₯Ό
String::length
λ‘ μ¬μ© κ°λ₯ -
κΈ°μ‘΄ κ°μ²΄μ μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°: Transaction κ°μ²΄λ₯Ό ν λΉλ°μ transaction μ§μ λ³μκ° μκ³ , Transaction κ°μ²΄μλ getValue λ©μλκ° μλ€λ©΄,
transaction::getValue
λ‘ μ¬μ© κ°λ₯
1. μ μ λ©μλ μ°Έμ‘° (μ μ ν΄λμ€::λ©μλλͺ
)
: νλΌλ―Έν°λ‘ μ λ¬λ°μ λ³μμ λ©μλλ₯Ό μ¬μ©νμ§ μκ³ , μ μ λ©μλμ μΈμλ‘ μ¬μ©λ¨. (String x) -> Integer.parseInt(x) μ κ²½μ° νλΌλ―Έν° xλ₯Ό parseIntμ μΈμλ‘ μ¬μ©λλ κ²μ λ³Ό μ μμ.
Function<String, Integer> f = Integer::parseInt;
Integer result = f.apply("123");
μΆμ²: https://multifrontgarden.tistory.com/126 [μ°λ¦¬μ§μλ§λΉ]
Integer ν΄λμ€μ μ μ λ©μλμΈ parseInt()
λ₯Ό λ©μλ λ νΌλ°μ€λ‘ μ λ¬νλ μμλ₯Ό μκ°ν΄λ³΄μ. ν΄λΉ ꡬν체 μμ€μμ μ¬μ©ν μ μλ μ§μλ³μλ String
νμ
μ strλ°μ μλ€. κ·Έλ¦¬κ³ λ¦¬ν΄νμ
μ μ λ€λ¦μ μ΄μ©ν΄ Integer
λ₯Ό 건λ€μ€μΌνλκ±Έ μΆλ‘ ν μ μλ€. λλ¬Έμ λ©μλλ§ μ λ¬ν΄μ£Όλ©΄ μ»΄νμΌλ¬κ° μμμ νΈμΆν΄μ£Όλκ²μ΄λ€.
2. μΈμ€ν΄μ€ λ©μλ μ°Έμ‘°
: 1λ²κ³Ό λΉμ·νλ° μ°¨μ΄μ μ΄λΌλ©΄ μ μ λ©μλμ μΈμκ° μλ κΈ°μ‘΄μ μ΄λ―Έ μμ±λ μΈμ€ν΄μ€μ μΈμλ‘ μ¬μ© λλ€.
μΈμμ νμ
μ΄ λͺ
νν λ ν΄λΉ νμ
ν΄λμ€::λ©μλλͺ
νμμΌλ‘ μμ±νλ€.
Function<String, Boolean> f = String::isEmpty;
Boolean result = f.apply("123");
3. μμ±μ λ©μλ μ°Έμ‘°
: Constructor λ©μλ λ νΌλ°μ€λ Constructorλ₯Ό μμ±ν΄μ£Όλ μ½λμ΄λ€.
public static class Company {
String name;
public Company(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
public static void main(String args[]) {
List<String> companies = Arrays.asList("google", "apple", "google", "apple", "samsung");
companies.stream()
.map(Company::new)
.forEach(Company::printName);
}
μ μμ μ½λμμ Company::new
μ μλ―Έλ name -> new Company(name)
μ κ°λ€.
μμΈ ν΄λμ€μ ꡬ쑰
- λͺ¨λ μμΈν΄λμ€λ
Throwable
ν΄λμ€λ₯Ό μμλ°κ³ μμΌλ©°, Throwableμ μ΅μμ ν΄λμ€Object
μ μμ ν΄λμ€μ΄λ€.
Throwable
μ μμλ°λ ν΄λμ€λ Error
μ Exception
μ΄ μλ€.
-
Errorλ μμ€ν λ 벨μ μ¬κ°ν μμ€μ μλ¬μ΄κΈ° λλ¬Έμ μμ€ν μ λ³νλ₯Ό μ£Όμ΄ λ¬Έμ λ₯Ό μ²λ¦¬ν΄μΌ νλ κ²½μ°κ° μΌλ°μ μ΄λ€.
-
λ°λ©΄ Exceptionμ κ°λ°μκ° λ‘μ§μ μΆκ°νμ¬ μ²λ¦¬ν μ μλ€.
-
Exceptionμ μλ§μ μμν΄λμ€λ₯Ό κ°μ§κ³ μλ€. κ·Έ μ€
RuntimeException
μ μ£Όλͺ©ν΄μΌ νλ€. -
RuntimeExceptionμ
CheckedException
κ³ΌUncheckedException
μ ꡬλΆνλ κΈ°μ€μ΄λ€. -
Exceptionμ μμ ν΄λμ€ μ€ RuntimeExceptionμ μ μΈν λͺ¨λ ν΄λμ€λ CheckedExceptionμ΄λ©°,
-
RuntimeExceptionκ³Ό κ·Έμ μμ ν΄λμ€λ€μ Unchecked Exceptionμ΄λΌ λΆλ₯Έλ€.
CheckedException
κ³Ό UncheckedException
μ λν΄ λ μμΈν μ΄ν΄λ³΄μ.
-
Checked Exceptionκ³Ό Unchecked Exceptionμ κ°μ₯ λͺ νν κ΅¬λΆ κΈ°μ€μ
βκΌ μ²λ¦¬λ₯Ό ν΄μΌ νλλβ
μ΄λ€. -
Checked Exception
μ΄ λ°μν κ°λ₯μ±μ΄ μλ λ©μλλΌλ©΄ λ°λμ λ‘μ§μ try/catchλ‘ κ°μΈκ±°λ throwλ‘ λμ Έμ μ²λ¦¬ν΄μΌ νλ€. -
λ°λ©΄μ
Unchecked Exception
μ λͺ μμ μΈ μμΈμ²λ¦¬λ₯Ό νμ§ μμλ λλ€. μ΄ μμΈλ νΌν μ μμ§λ§ κ°λ°μκ° λΆμ£Όμν΄μ λ°μνλ κ²½μ°κ° λλΆλΆμ΄κ³ , 미리 μμΈ‘νμ§ λͺ»νλ μν©μμ λ°μνλ μμΈκ° μλκΈ° λλ¬Έμ κ΅³μ΄ λ‘μ§μΌλ‘ μ²λ¦¬λ₯Ό ν νμκ° μλλ‘ λ§λ€μ΄μ Έ μλ€. -
λν μμΈλ₯Ό νμΈν μ μλ μμ μμλ ꡬλΆν μ μλ€. μΌλ°μ μΌλ‘ μ»΄νμΌ λ¨κ³μμ λͺ ννκ² Exception 체ν¬κ° κ°λ₯ν κ²μ
Checked Exception
μ΄λΌ νλ©°, μ€νκ³Όμ μ€ μ΄λ ν νΉμ λ Όλ¦¬μ μν΄ λ°κ²¬λλ ExceptionμUnchecked Exception
μ΄λΌ νλ€. -
λ°λΌμ μ»΄νμΌ λ¨κ³μμ νμΈν μ μλ μμΈλΌ νμ¬
Unchecked Exception
μ΄λ©°, μ€νκ³Όμ μ€ λ°κ²¬λλ€ νμ¬μRuntime Exception
μ΄λΌ νλ κ²μ΄λ€. -
λν Checked Exception / Unchecked Exception μμΈλ°μμ νΈλμμ μ roll-back μ¬λΆλ λ€λ₯΄λ€.
-
κΈ°λ³Έμ μΌλ‘
Checked Exception
μ μμΈκ° λ°μνλ©΄ νΈλμμ μ roll-backνμ§ μκ³ μμΈλ₯Ό λμ Έμ€λ€. -
νμ§λ§
Unchecked Exception
μ μμΈ λ°μ μ νΈλμμ μ roll-backνλ€λ μ μμ μ°¨μ΄κ° μλ€. -
νΈλμμ μ μ νλ°©μ μ¦, μ΄λ»κ² λ¬Άμ΄λλλμ λ°λΌμ
Checked Exception
μ΄λUnchecked Exception
μ΄λμ μν₯λκ° ν¬λ€.
roll-backμ΄ λλ λ²μκ° λ¬λΌμ§κΈ° λλ¬Έμ κ°λ°μκ° μ΄λ₯Ό μΈμ§νμ§ λͺ»νλ©΄, μ€νκ²°κ³Όκ° λ§μ§ μκ±°λ μμμΉ λͺ»ν μμΈκ° λ°μν μ μλ€.
κ·Έλ¬λ―λ‘ μ΄λ₯Ό μΈμ§νκ³ νΈλμμ
μ μ μ©μν¬ λ μ νλ°©μ(propagation behavior)κ³Ό λ‘€λ°±κ·μΉ λ±μ μ μ ν μ¬μ©νλ©΄ λμ± ν¨μ¨μ μΈ μ ν리μΌμ΄μ
μ ꡬνν μ μμ κ²μ΄λ€.
Springμ IoC 컨ν
μ΄λμμ κ΄λ¦¬λλ κ°μ²΄μμ νμνκΈ° μν΄ μ¬μ©νλ κ°μ₯ κΈ°λ³Έμ μΈ annotationμ΄λ€. μ¦, scan-auto-detection
κ³Ό dependency injection
μ μ¬μ©νκΈ° μν΄μ μ¬μ©λλ κ°μ₯ κΈ°λ³Έ μ΄λ
Έν
μ΄μ
μ΄λ€.
μ΄μΈμ λλ¨Έμ§ @Service, @Controller, @Repository
μ΄λ
Έν
μ΄μ
μ μ ν리μΌμ΄μ
μμ λ μ΄μ΄λ₯Ό λΆλ¦¬νλλ° μ¬μ©λλ€.
Web MVC μ½λμ μ¬μ©λλ μ΄λ
Έν
μ΄μ
μ΄λ€. @RequestMapping
μ΄λ
Έν
μ΄μ
μ ν΄λΉ μ΄λ
Έν
μ΄μ
λ°μμλ§ μ¬μ©ν μ μλ€.
λ€ μκ³ μλ―μ΄ data repository
λ₯Ό λνλ΄λ μ΄λ
Έν
μ΄μ
μ΄λ€. @Repositoryλ νλ«νΌ νΉμ exceptionμ μ‘μ Springμ unchecked exception
μΌλ‘ λ±μ΄λ΄μ€λ€. ( PersistenceExceptionTranslationPostProcessor )
λΉμ¦λμ€ λ‘μ§μ΄λ respository layer
νΈμΆνλ ν¨μμ μ¬μ©λλ€. λ€λ₯Έ μ΄λ
Έν
μ΄μ
κ³Ό λ€λ₯΄κ² @Component
μ μΆκ°λ κΈ°λ₯μ μλ€. νμ§λ§ λμ€μ Spring μΈ‘μμ μΆκ°μ μΈ exception handlingμ ν΄μ€ μλ μμΌλ λΉμ¦λμ€ λ‘μ§μλ ν΄λΉ μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ.
- ν΄λΌμ΄μΈνΈμ μμ²μ΄
DispatcherServlet
μ μ λ¬ -
DispatcherServlet
μHandlerMapping
μ μ¬μ©, ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬ν 컨νΈλ‘€λ¬ κ°μ²΄λ₯Ό μ°Ύμ -
DispatcherServlet
μ 컨νΈλ‘€ κ°μ²΄μhandleRequest()
λ©μλλ₯Ό νΈμΆνμ¬, ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬νλ€. -
Controller.handleRequest()
λ©μλλ μ²λ¦¬ κ²°κ³Ό μ 보λ₯Ό λ΄μModelAndView
κ°μ²΄λ₯Ό 리ν΄νλ€. -
DispatcherServlet
μViewResolver
λ‘ λΆν° μ²λ¦¬κ²°κ³Όλ₯Ό 보μ¬μ€View
λ₯Ό ꡬνλ€. -
View
λ ν΄λΌμ΄μΈνΈμ μ μ‘ν μλ΅μ μμ±νλ€.
- DispatcherServlet : ν΄λΌμ΄μΈνΈμ μμ²μ μ λ¬λ°μ μμ²μ λ§λ 컨νΈλ‘€λ¬κ° 리ν΄ν κ²°κ³Όκ°μ
View
μ μ λ¬νμ¬ μλ§μ μλ΅μ μμ±νλ€. - HandlerMapping : ν΄λΌμ΄μΈνΈμ μμ² URLμ μ΄λ€ 컨νΈλ‘€λ¬κ° μ²λ¦¬ν μ§ κ²°μ
- Controller : ν΄λΌμ΄μΈνΈμ μμ²μ μ²λ¦¬ν λ€, κ²°κ³Όλ₯Ό
DispatcherServlet
μκ² λ¦¬ν΄ - ModelAndView : 컨νΈλ‘€λ¬κ° μ²λ¦¬ν κ²°κ³Ό μ 보 λ° λ·° μ νμ νμν μ λ³΄λ€ λ΄μ
- ViewResolver : 컨νΈλ‘€λ¬μ μ²λ¦¬ κ²°κ³Όλ₯Ό μμ± ν λ·°λ₯Ό κ²°μ
- View : 컨νΈλ‘€λ¬μ μ²λ¦¬ κ²°κ³Ό νλ©΄μ μμ±
μΆμ²: https://csw7432.tistory.com/entry/Spring-MVC-μ£Όμ-ꡬμ±-μμ-λ°-μ²λ¦¬-νλ¦ [μ΅λλ νμλͺ»]
AnnotationκΈ°λ°μ μ€νλ§ MVCλ₯Ό μ¬μ©ν λμ μ€μ μ νΈνκ² ν΄μ£Όλ κΈ°λ₯μ νλ€. μ΄ν리μΌμ΄μ
컨ν
μ€νΈ μ€μ νμΌμ @EnableWebMvc
λ₯Ό λΆμ¬μ£Όλ©΄ μ΄ μ΄ν리μΌμ΄μ
컨ν
μ€νΈ μ€μ νμΌμ μ¬μ©νκ³ μλ DispatcherServlet
μ΄ κ°κ² λλ μ¬λ¬κ°μ§ μ λ΅λ€μ λ³ν νΉμ μΆκ°κ° μκΈ°κ³ μ»€μ€ν°λ§μ΄μ§ νκΈ°κ° λ μ©μ΄ν΄μ§λ€.
@EnableWebMvcλ₯Ό ν΅ν΄ μΆκ°λ beanλ€μ μ€μ μ 컀μ€ν°λ§μ΄μ§νκ² νλ μ리λ 'μμ'ꡬ쑰μ΄λ€.
@EnableWebMvcμ λ€μ΄κ°λ³΄λ©΄ μ¬λ¬ λ΄μ₯ ν¨μλ€μ΄ WebMvcConfigurerComposite
μ μ€μ μ μ‘μμ£Όλλ‘ μμ±λμ΄μλ€. λ°λΌμ μ΄λ₯Ό μ°λ¦¬κ° μνλ λλ‘ μ»€μ€ν°λ§μ΄μ§ νκΈ° μν΄μλ WebMvcConfigurer
λ₯Ό μμνλλ‘ νμ¬ WebMvcConfigurer
μ΄ κ°μ§ μμμ ν΅ν΄ μνλ 컀μ€ν°λ§μ΄μ§μ μ€ννλ κ²μ΄λ€.
@Configuration
@ComponentScan
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/", ".jsp");
}
}
JVM Heap Area μ κ΅¬μ± new μ°μ°μλ‘ μμ±λ κ°μ²΄μ λ°°μ΄μ μ μ₯νλ 곡κ°μ λλ€. GC λ‘ μ¬μ©νμ§ μλ κ°μ²΄λ€μ λ©λͺ¨λ¦¬λ‘ λ°νλ©λλ€. Heap Area μ’ λ₯ Permanent Generation: μμ±λ κ°μ²΄λ€μ μ 보μ μ£Όμκ°μ΄ μ μ₯λ κ³΅κ° New Area Eden: κ°μ²΄λ€μ΄ μ΅μ΄λ‘ μμ±λλ κ³΅κ° Survivor: Edenμμ μ°Έμ‘°λλ κ°μ²΄λ€μ΄ μ μ₯λλ κ³΅κ° μ€μ ν΅κ³λ‘λ μμ±λ 98% κ°μ²΄κ° 곧λ°λ‘ μ°λ κΈ° κ°μ²΄κ° λλ€κ³ νλ€. Old Area New Area μμ μΌμ μκ°μ΄μ μ°Έμ‘°λκ³ μλ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°
- Cache?
- νλ² μ½μ(μ²λ¦¬ν) λ°μ΄νλ₯Ό μμλ‘ μ μ₯νκ³ νμμ λ°λΌ μ μ‘,κ°±μ ,μμ νλ κΈ°μ λ‘ λ³΄ν΅μ λ°μ΄νμ 보κ΄μ₯μλ‘
μλ²μ λ©λͺ¨λ¦¬
λ₯Ό μ¬μ©νλ κ²½μ°κ° λ§λ€ - κ·Έλ κΈ° λλ¬Έμ λμ€ν¬μμ μ 보λ₯Ό μ»μ΄μ€λ κ²λ³΄λ€ ν¨μ¬
λΉ λ₯Έ I/Oμ±λ₯
μ μ»μ μ μμΌλ μλ²κ° λ€μ΄λκ±°λ μ¬λΆν λλ κ²½μ° μ¬λΌμ§λ μ±κ²©μνλ°μ±
μ κ°μ§κ³ μμ΄ - μμμ μΌλ‘ 보κ΄ν μ μλ, λ§ κ·Έλλ‘
μμμ μΌλ‘ 보κ΄
νκ³λΉ λ₯΄κ² κ·Έ μ 보μ μ κ·Ό
νκΈ° μν μ©λλ‘ μ¬μ©ν΄μΌ νλ€.(λ¬Όλ‘ μ 보μ μ±κ²©μ λ°λΌ λ³λμ λμ€ν¬λ°±μ λ° TTLλ±μ μ€μ μΌλ‘ μꡬ보κ΄μ΄λ μ€λκΈ°κ° μ μ§κ° κ°λ₯νλ€. λ¨ μ΄λ° μ€μ λ€μ΄ κΌ νμνλ€λ©΄ Cacheλ₯Ό μ μ©νλκ² λ§λμ§ ν λ²λ νλΉμ±μ κ²ν ν΄ λ³΄λκ² μ’κ² λ€)
- νλ² μ½μ(μ²λ¦¬ν) λ°μ΄νλ₯Ό μμλ‘ μ μ₯νκ³ νμμ λ°λΌ μ μ‘,κ°±μ ,μμ νλ κΈ°μ λ‘ λ³΄ν΅μ λ°μ΄νμ 보κ΄μ₯μλ‘
- Cacheλ₯Ό μ°λ λͺ©μ μ λ¨μνλ€.
- μλ²κ° λΆνμν
νΈλν½
μ μ€μΌ μ μκ³ , - κ·Έλ‘ μΈν΄ μΉμ΄ν리μΌμ΄μ
μλ²μ λΆν κ°μ
μν€κ³ , - μ΄ν리μΌμ΄μ μ λΉ λ₯Έ μ²λ¦¬μ±λ₯(μ‘°ν)μ ν보ν΄μ κΆκ·Ήμ μΌλ‘ μ΄ν리μΌμ΄μ λ₯Ό μ¬μ©νλ κ³ κ°μκ² μΎμ ν μλΉμ€κ²½νμ μ 곡νλ κ²μ΄λ€.
- μλ²κ° λΆνμν
- λ¨μν, λλ λ¨μν ꡬ쑰μ μ 보λ₯Ό -> μ 보μ λ¨μμ±
- λ°λ³΅μ μΌλ‘ λμΌνκ² μ 곡ν΄μΌ νκ±°λ -> λΉλ²ν λμΌμμ²μ λ°λ³΅
- μ 보μ λ³κ²½μ£ΌκΈ°κ° λΉλ²νμ§ μκ³ , λ¨μμ²λ¦¬ μκ°μ΄ μ€λ걸리λ μ 보μ΄κ³ -> λμ λ¨μμ²λ¦¬λΉμ©
- μ 보μ μ΅μ νκ° λ°λμ μ€μκ°μΌλ‘ μ΄λ€μ§μ§ μμλ μλΉμ€ νμ§μ μν₯μ κ±°μ μ£Όμ§ μλ μ 보
- ν¬νμ κ²μμ΄
- μΌνλͺ°μ ν«λμν, λ² μ€νΈμ λ¬, μΆμ² μνλ±
- μνμ μΉ΄ν κ³ λ¦¬μ μΉ΄ν κ³ λ¦¬λ³ λ±λ‘ μν μ
- λ°©λ¬Έμ μ, μ‘°ν μ, μΆμ² μ
- 1νμ± μΈμ¦μ 보 (SMS λ³ΈμΈμΈμ¦μ 보, IP μ 보λ±)
- 곡μ§μ¬ν, Q&A
- MSA ꡬ쑰μμλ λ€λ₯Έ μλΉμ€ μμ²μ λν μλ΅ λ°μ΄ν° μ μ₯μ κ±°μ νμμ !
- μ°λ¦¬κ° μΉμ¬μ΄νΈμμ 보λ λλΆλΆμ μ΄λ―Έμ§λ λ€ μΊμ±λ μ΄λ―Έμ§μ΄λ€.(CDNμ κ°μ₯ μ€μν κΈ°λ₯)
μνΈν ν΅μ μ μΌλ°μ μΌλ‘ TLS/SSL νλ‘ν μ½μ μ¬μ©νμ¬ μ΄λ£¨μ΄μ§λλ° TLS/SSL μνΈν κ³Όμ μμ νμν μ 보(μ¬μ©ν μνΈν μκ³ λ¦¬μ¦, ν€) μ κ΅νμ μν TLS Handshake
κ³Όμ μ΄ μ‘΄μ¬ν©λλ€. ν΄λΉ κ³Όμ μ ν΅νμ¬ μΈμ
μ μμ±ν μ μκ³ μ΄ ν λ λ
Έλμ ν΅μ μ μΈμ
μμμ μνλ©λλ€. SSL/TLS handshakeλ₯Ό μ¬μ©νλ©΄ SSL λλ TLS ν΄λΌμ΄μΈνΈ λ° μλ²κ° ν΅μ νλ 보μ ν€λ₯Ό μ€μ ν μ μμ΅λλ€.
SSL(Secure Sockets Layer)
μ Certificate Authority(CA)
λΌ λΆλ¦¬λ μλ νν°λ‘λΆν° μλ²μ ν΄λΌμ΄μΈνΈ μΈμ¦μ νλλ° μ¬μ©λ©λλ€. μ£Όλ‘ μ μ‘κ³μΈ΅κ³Ό μμ©κ³μΈ΅ μ¬μ΄μμ 보μμ‘°μΉλ₯Ό νλ λ° μ¬μ©ν©λλ€. HTTPS:// λ SSLμ μ¬μ©νλ κ²½μ°λ₯Ό μλ―Ένλ κ²μ΄μ£ .
TLS(Transport Layer Security)
λ‘ μ΅κ·Όμ λΆλ₯΄λλ° SSLμ κ³Όκ±° λͺ
μΉμ΄λΌμ κ°μ λ§μ
λλ€.
λͺ¨λ SSL/TLS μ°κ²°μ "Handshake" κ³Όμ μ κ±°μ³μΌ ν©λλ€. handshake κ³Όμ μ ν΅μ μ μνΈννλ λ° μ¬μ©ν μνΈν μκ³ λ¦¬μ¦κ³Ό ν€λ₯Ό κ²°μ νκ³ μλ²λ₯Ό νμΈνλ©° μ€μ λ°μ΄ν° μ μ‘μ μμνκΈ° μ μ 보μ μ°κ²°μ΄ μ΄λ£¨μ΄ μ‘λμ§ νμΈν©λλ€. μ΄ μ°κ²°μ νμΈνκΈ° μν κ³Όμ λλ¬Έμ handshakeλΌκ³ λ νμ£ .
-
μ¬μ©ν νλ‘ν μ½ λ²μ μ λμ.
-
μνΈν μκ³ λ¦¬μ¦ μ ν.
-
λμ§νΈ μΈμ¦μ κ΅ννκ³ μ ν¨μ± κ²μ¬νμ¬ μλ‘ μΈμ¦.
-
λΉλμΉ μνΈν κΈ°μ μ μ¬μ©νμ¬ κ³΅μ λΉλ°ν€λ₯Ό μμ±. κ·Έλ° λ€μ SSL λλ TLSλ 곡μ ν€λ₯Ό μ¬μ©νμ¬ λ©μΈμ§λ₯Ό λμΉ μνΈν λ°©μμΌλ‘ μνΈν.
λμΉν€κ° κ°μ§λ ν΄νΉμ μνμ λ§κ³ μ λμ¨ κ²μ΄ λ°λ‘ 곡κ°ν€(Public Key)μΈλ°μ. μνΈνμ 볡νΈνμ μ¬μ©νλ ν€λ₯Ό λΆλ¦¬νλ λ°©μμ
λλ€.
'handshake' κ·Έ μ체λ λΉλμΉ μνΈν
λ₯Ό μ¬μ©ν©λλ€. 곡κ°ν€μ κ°μΈν€λ κ°κ° λ³λλ‘ μ¬μ©λ©λλ€. λΉλμΉ μνΈν μμ€ν
μ λμ μ€λ²ν€λλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λͺ¨λ 보μ κ³Όμ μ μ 곡νλ λ° μ¬μ©ν μ μμ΅λλ€. κ·Έλμ 곡κ°ν€λ handshake νλ λμ μνΈ ν΄λ
μ μν μνΈν λ° κ°μΈν€λ‘ μ¬μ©λλ©° μλ²μ ν΄λΌμ΄μΈνΈκ° κ°κ° μλ‘ μμ±ν 곡μ ν€λ₯Ό μ€μ νκ³ κ΅ννκ² ν©λλ€.
μΈμ μ체λ 곡μ ν€λ₯Ό μ¬μ©νμ¬ λμΉ μνΈνλ₯Ό μννκΈ° λλ¬Έμ μ€μ μ°κ²°μμ μ€λ² ν€λλ₯Ό μ€μ¬μ€λλ€.
-
SSL / TLS ν΄λΌμ΄μΈνΈ μ»΄ν¨ν°κ° μμ μ λ²μ , μνΈ μκ³ λ¦¬μ¦ λͺ©λ‘, κ·Έλ¦¬κ³ μ¬μ© κ°λ₯ν μμΆ λ°©μμ "client hello" λ©μμ§μ λ΄μ μλ²λ‘ 보λ λλ€.
-
SSL / TLS μλ²λ ν΄λΌμ΄μΈνΈκ° μ 곡ν λͺ©λ‘μμ μλ²κ° μ νν μνΈ μκ³ λ¦¬μ¦, μ νν μμΆ λ°©μκ³Ό μΈμ ID λ° CA(Certificate Authority)κ° μ¬μΈν μλ²μ κ³΅κ° μΈμ¦μλ₯Ό "server hello" λ©μμ§μ λ΄μ μλ΅ν©λλ€. μ΄ μΈμ¦μλ λμΉν€κ° μμ±λκΈ° μ κΉμ§ ν΄λΌμ΄μΈνΈκ° λλ¨Έμ§ handshake κ³Όμ μ μνΈννλ λ°μ μΈ κ³΅κ°ν€λ₯Ό λ΄κ³ μμ΅λλ€.
-
SSL / TLS ν΄λΌμ΄μΈνΈλ μλ²μ λμ§νΈ μΈμ¦μκ° μ ν¨νμ§ μ λ’°ν μ μλ CA λͺ©λ‘μ ν΅ν΄ νμΈν©λλ€.
-
λ§μ½ CAλ₯Ό ν΅ν΄ μ λ’°μ±μ΄ ν보λλ©΄ ν΄λΌμ΄μΈνΈλ μμ¬ λμ(pseudo-random) λ°μ΄νΈλ₯Ό μμ±ν΄ μλ²μ 곡κ°ν€λ‘ μνΈνν©λλ€. μ΄ λμ λ°μ΄νΈλ λμΉν€λ₯Ό μ νλ λ°μ μ¬μ©λλ©° μ΄ λμΉν€λ λμ€μ λ©μμ§ λ°μ΄ν°λ₯Ό μνΈννλ λ° μ¬μ©λ©λλ€.
-
SSL / TLS μλ²κ° "ν΄λΌμ΄μΈνΈ μΈμ¦μ μμ²"μ λ³΄λΈ κ²½μ° ν΄λΌμ΄μΈνΈλ ν΄λΌμ΄μΈνΈμ λμ§νΈ μΈμ¦μ λλ "λμ§νΈ μΈμ¦μ μμ κ²½κ³ " μ ν¨κ» ν΄λΌμ΄μΈνΈμ κ°μΈ ν€λ‘ μνΈν λ μμμ λ°μ΄νΈ λ¬Έμμ΄μ 보λ λλ€. μ΄ κ²½κ³ λ κ²½κ³ μΌ λΏμ΄μ§λ§ μΌλΆ ꡬνμμ ν΄λΌμ΄μΈνΈ μΈμ¦μ΄ νμμΌ κ²½μ° handshake μ€ν¨ν©λλ€.
-
μλ²λ ν΄λΌμ΄μΈνΈμ μΈμ¦μλ₯Ό νμΈν©λλ€. λμ λ°μ΄νΈλ₯Ό μκΈ° κ°μΈν€λ‘ 볡νΈνν΄ λμΉ λ§μ€ν°ν€ μμ±μ νμ©ν©λλ€.
-
ν΄λΌμ΄μΈνΈλ handshakeμ ν΄λΌμ΄μΈνΈ λΆλΆμ΄ μλ£λμμμ μ리λ Finished λ©μμ§λ₯Ό μλ²μ 보λ΄λ©΄μ μ§κΈκΉμ§μ κ΅ν λ΄μμ ν΄μν κ°μ λμΉν€λ‘ μνΈννμ¬ λ΄μ΅λλ€.
-
μλ²λ μ€μ€λ‘λ ν΄μλ₯Ό μμ±ν΄ ν΄λΌμ΄μΈνΈμμ λμ°©ν κ°κ³Ό μΌμΉνλμ§ λ΄ λλ€. μΌμΉνλ©΄ μλ²λ λ§μ°¬κ°μ§λ‘ λμΉν€λ₯Ό ν΅ν΄ μνΈνν Finished λ©μμ§λ₯Ό ν΄λΌμ΄μΈνΈμκ² λ³΄λ λλ€.
-
μ΄νλΆν° SSL / TLS μΈμ λμ μλ²μ ν΄λΌμ΄μΈνΈλ λμΉν€λ‘ μνΈνλ μ΄ν리μΌμ΄μ (HTTP) λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μμ΅λλ€.
μΆμ²:
[μꡬλΈλ‘κ·Έ]