0320 ~ 0402
# 0320 ~ 0402
# 0322 - ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง(Test Coverage)
# ํ์ดํธ ๋ฐ์ค ํ ์คํธ
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ ํ์ดํธ ๋ฐ์ค ํ ์คํธ์์ ์ฌ์ฉ๋๋ ๊ฐ๋
- ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ด๋ถ ๊ตฌ์กฐ์ ๋์์ ๊ฒ์ฌํ๋ ์ํํธ์จ์ด ํ ์คํธ ๋ฐฉ์, ๊ฐ๋ฐ์ ๊ด์ ์ ๋จ์ํ ์คํ ๊ธฐ๋ฒ
- ์ํํธ์จ์ด์ ๋์์ ๊ฒ์ฌํ๋ ๋ธ๋๋ฐ์ค ํ ์คํธ์๋ ๋ฐ๋๋๋ ๊ฐ๋
# ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋
- ๊ฒ์ฆ ์ค์ ์ํํธ์จ์ด ์ฝ๋๋ฅผ ์ผ๋ง๋งํผ ์คํ์์ผ ๋ดค๋์ง์ ๋ํ ์ฒ๋ = ์์ค์ฝ๋ ์ํ๋ฅ
- ์ ์ฒด ์ฝ๋ ์ค์ ํ
์คํธ๋ก ์คํ๋ ์ฝ๋์ ๋น์จ๋ก ํํ
- 0%๋ฉด ์คํ๋ ์ฝ๋๊ฐ ์๋๊ฒ์ด๊ณ 100%๋ฉด ์ ์ฒด ์ฝ๋๋ฅผ ๋ชจ๋ ์คํ์์ผ ๋ดค๋ค๋ ๊ฒ์ ์๋ฏธ
# ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ธก์ ํด์ผํ๋ ์ด์
- ํ ์คํธ ์์ ์์ฒด์ ํ์ง์ ๊ฐ๊ด์ /์ ๋์ ์ผ๋ก ํ์ธ์ด ๊ฐ๋ฅ
- ์ธก์ ๋ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ ํ
์คํธ ์ข
๋ฃ ์กฐ๊ฑด์ผ๋ก ํ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ด๋๋ผ์ธ์ด ๋ ์ ์์
- (ex. ์ปค๋ฒ๋ฆฌ์ง 80% ์ด์์ด๋ฉด ํ ์คํธ ์ข ๋ฃ)
- ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ํจ๊ณผ
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ 50%์ผ ๋ 25%์ ๋ถ๊ณผํ๋ ์ค๋ฅ ๊ฒ์ถ๋ฅ ์ด ์ปค๋ฒ๋ฆฌ์ง 90%์ผ ๋๋ 79%๊น์ง ์์น
# ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ์ข ๋ฅ
- ๊ตฌ๋ฌธ ์ปค๋ฒ๋ฆฌ์ง(Statement Coverage)
- ์คํ๋ ๋ผ์ธ ์ / ์คํ๊ฐ๋ฅํ ์ ์ฒด ๋ผ์ธ ์
- ๊ฒฐ์ ์ปค๋ฒ๋ฆฌ์ง(Branch or Decision Coverage)
- ๋ถ๊ธฐ๋ง๋ค True/False ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๊ฐ ์คํ๋๋์ง
- ๋ณํ ์กฐ๊ฑด/ ๊ฒฐ์ ์ปค๋ฒ๋ฆฌ์ง(MC/DC)
- Multiple condition Coverage์ ๋จ์ ์ ๋ณด์
- ๊ฐ ์กฐ๊ฑด์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ถ๊ธฐ์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธ
# ๋์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ์ด์
- ๋ฐฐํฌ ์์ ์ฑ
- ๋ฆฌํฉํ ๋ง
- ๋ถํ์ํ ํ๋ก๋์ ์ฝ๋ ์ญ์
- ํ๋ก๋์ ์ฝ๋์ ๋ํ ์ดํด๋ ์์น
# 0323 - JVM์ default Heap Size
JVM(Java Virutal Machine)์ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ฌ์ฉ ์ค์ธ Java ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง ๋ค์์ Java 8์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
# ๋ฐํ์์ ํ์ธ
Runtime.getRuntime().maxMemory()
# Java Default Heap/Perm Size ํ์ธ
- Linux
java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
# java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 128983616 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 2065694720 {product}
uintx MaxPermSize = 174063616 {pd product}
uintx PermSize = 21757952 {pd product}
java version "1.7.0_79"
2
3
4
5
6
7
8
9
10
11
12
- Windows
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
D:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize metaspacesize version"
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialBootClassLoaderMetaspaceSize = 4194304 {product}
uintx InitialHeapSize := 134217728 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 2147483648 {product}
uintx MaxMetaspaceSize = 4294901760 {product}
uintx MetaspaceSize = 21807104 {pd product}
java version "1.8.0_111"
2
3
4
5
6
7
8
9
10
11
12
# ์ด๊ธฐ ๊ฐ ๊ธฐ์ค
jvm์ server class๋ก ์คํํ๋ฉด ์ด๊ธฐ heap size๋ ๋ฉ๋ชจ๋ฆฌ์ 1/64 ์ด๊ณ , ์ต๋ heap size๋ 1/4๊น์ง ๋์ด๋๋ค.
# 0329 - Heap ์์ญ์ TLAB, PLAB
TLAB ๋ฐ PLAB๋ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด JVM์์ ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ธฐ์ ์ด๋ค.
# TLAB(Thread Local Allocation Buffers)๋ ๋ฌด์์ธ๊ฐ?
TLAB๋ ๊ฐ ์ค๋ ๋์์ ์์ ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ๊ฐ ์ค๋ ๋์๋ ์์ฒด TLAB๊ฐ ์์ด ์ค๋ ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๊ฒฝํฉ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋๋ค. ์ค๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ฉด JVM์ ์ค๋ ๋์ TLAB ๋ถ๋ถ์ ์์ฒญ์ ํ ๋นํ๋ค. TLAB๊ฐ ๊ฐ๋ ์ฐจ๋ฉด ์ค๋ ๋๋ ํ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ค. TLAB๋ ์์ ๊ฐ์ฒด์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ง๋ง ํ ์กฐ๊ฐํ๋ฅผ ์ ๋ฐํ ์๋ ์๋ค.
- Heap ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋, ๋ง์ฝ TLAB์ด ํ์ฑํ๋์ด ์๋ค๋ฉด ๊ฐ์ฒด๋ ์ฐ์ TLAB์ ์์นํ๊ฒ ๋๋ค.
- TLAB์ Eden ์์ญ์๋ง ์กด์ฌํ๋ค. ๋ฐ๋ผ์ TLAB์ ์ฌ์ฉํ๋ฉด ์๋ด ์์ญ์ ์ข ๋ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋์ง๋ง ๊ฐ์ฒด ์์ฑ์ ์ฑ๋ฅ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค.
- ๊ฐ ์ค๋ ๋๋ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํด ์์ ๋ง์ TLAB์ ๊ฐ์ง๊ณ ์๋ค.
- ๋ฐ๋ผ์ TLAB์ ์ด ํฌ๊ธฐ๋ ์ค๋ ๋ ์์ ๋น๋กํ๋ค.
- TLAB๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด -XX:+UseTLAB ์ต์ ์ ์ฌ์ฉํ๋ค.
- TLAB์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ค๋ฉด -XX:+UseTLAB ์ต์ ์ ์ฌ์ฉํ๋ค. ๋ํดํธ๋ 0์ธ๋ฐ ์ด๋๋ ์์คํ ์ด ์์์ ์กฐ์ ํ๊ฒ ๋๋ค.
# PLAB(Promotion Local Allocation BUffers)๋ ๋ฌด์์ธ๊ฐ?
- GC์์ Generation์ ์ฒญ์ํ๋ ๋์ ์ฌ์ฉ๋๋ค.
- ๊ฐ ์ค๋ ๋์ ์กด์ฌํ๋ค.
# 0331 - Java Comparable and Comparator
# ๋ฐฐ์ด ์ ๋ ฌ
String[] fruits = new String[] {"Pineapple","Apple", "Orange", "Banana"};
Arrays.sort(fruits);
int i=0;
for(String temp: fruits){
System.out.println("fruits " + ++i + " : " + temp);
}
2
3
4
5
6
7
8
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
2
3
4
# ArrayList ์ ๋ ฌ
List<String> fruits = new ArrayList<String>();
fruits.add("Pineapple");
fruits.add("Apple");
fruits.add("Orange");
fruits.add("Banana");
Collections.sort(fruits);
int i=0;
for(String temp: fruits){
System.out.println("fruits " + ++i + " : " + temp);
}
2
3
4
5
6
7
8
9
10
11
12
13
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
2
3
4
# Comparable ์ ๋ ฌ
public class Fruit implements Comparable<Fruit>{
private String fruitName;
private String fruitDesc;
private int quantity;
public int compareTo(Fruit compareFruit) {
//ascending order
return this.quantity - compareFruit.getQuantity();
//descending order
//return compareFruit.getQuantity() - this.quantity;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class SortFruitObject{
public static void main(String args[]){
List<Fruit> fruits = new ArrayList<>();
fruits.add(new Fruit("Pineapple", "Pineapple description",70));
fruits.add(new Fruit("Apple", "Apple description",100));
fruits.add(new Fruit("Orange", "Orange description",80));
fruits.add(new Fruit("Banana", "Banana description",90));
Collections.sort(fruits);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
fruits 1 : Pineapple, Quantity : 70
fruits 2 : Orange, Quantity : 80
fruits 3 : Banana, Quantity : 90
fruits 4 : Apple, Quantity : 100
2
3
4
# Comparator
public class Fruit {
private String fruitName;
private String fruitDesc;
private int quantity;
public static Comparator<Fruit> fruitNameComparator = new Comparator<Fruit>() {
public int compare(Fruit fruit1, Fruit fruit2) {
String fruitName1 = fruit1.getFruitName().toUpperCase();
String fruitName2 = fruit2.getFruitName().toUpperCase();
//ascending order
return fruitName1.compareTo(fruitName2);
//descending order
//return fruitName2.compareTo(fruitName1);
}
};
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Collections.sort(fruits, Fruit.fruitNameComparator);
fruits 1 : Apple, Quantity : 100
fruits 2 : Banana, Quantity : 90
fruits 3 : Orange, Quantity : 80
fruits 4 : Pineapple, Quantity : 70
2
3
4
# 0402 - Servlet(์๋ธ๋ฆฟ)
# Servlet
์๋ธ๋ฆฟ์ ํ ์ค๋ก ์ ์ํ๋ฉด ์๋์ ๊ฐ๋ค
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ Servlet ํด๋์ค์ ๊ตฌํ ๊ท์น์ ์งํจ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
๊ฐ๋จํ ๋งํด์, ์๋ธ๋ฆฟ์ด๋ ์๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์น์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ๊ธฐ์ ์ด๋ค. ์ข๋ ์ค๋ช ํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ํ ์์ฒญ์ ํ๋ฉด ๊ทธ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ ์กํด์ฃผ์ด์ผ ํ๋๋ฐ, ์ด๋ฌํ ์ญํ ์ ํ๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด๋ค.
# ์๋ธ๋ฆฟ ํน์ง
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ๋์ ์ผ๋ก ์๋ํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ปดํฌ๋ํธ
- html์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์๋ตํ๋ค
- Java Thread๋ฅผ ์ด์ฉํ์ฌ ๋์ํ๋ค
- MVC ํจํด์์ Controller๋ก ์ด์ฉ๋๋ค
- HTTP ํ๋กํ ์ฝ ์๋น์ค๋ฅผ ์ง์ํ๋ javax.servlet.http.HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค
- UDP๋ณด๋ค ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค
- HTML ๋ณ๊ฒฝ ์ Servlet์ ์ฌ์ปดํ์ผํด์ผ ํ๋ ๋จ์ ์ด ์๋ค.
# Servlet ๋์ ๋ฐฉ์
- ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๊ฐ URL์ ์ ๋ ฅํ๋ฉด HTTP Request๊ฐ Servlet Container๋ก ์ ์กํ๋ค.
- ์์ฒญ์ ์ ์ก๋ฐ์ Servlet Container๋ HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
- web.xml์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์๊ฐ ์์ฒญํ URL์ด ์ด๋ ์๋ธ๋ฆฟ์ ๋ํ ์์ฒญ์ธ์ง ์ฐพ๋๋ค.
- ํด๋น ์๋ธ๋ฆฟ์์ service๋ฉ์๋๋ฅผ ํธ์ถํ ํ ํด๋ผ์ด์ธํธ์ GET, POST์ฌ๋ถ์ ๋ฐ๋ผ doGet() ๋๋ doPost()๋ฅผ ํธ์ถํ๋ค.
- doGet() or doPost() ๋ฉ์๋๋ ๋์ ํ์ด์ง๋ฅผ ์์ฑํ ํ HttpServletResponse ๊ฐ์ฒด์ ์๋ต์ ๋ณด๋ธ๋ค.
- ์๋ต์ด ๋๋๋ฉด HttpServletRequest, HttpServletResponse ๋ ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํจ๋ค.
# Servlet Container(์๋ธ๋ฆฟ ์ปจํ ์ด๋)
์๋ธ๋ฆฟ์ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํ ์ด๋
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ฃผ๊ณ ์๋ตํ ์ ์๊ฒ, ์น์๋ฒ์ ์์ผ์ผ๋ก ํต์ ํ๋ฉฐ ๋ํ์ ์ธ ์๋ก ํฐ์บฃ(Tomcat)์ด ์๋ค. ํฐ์บฃ์ ์ค์ ๋ก ์น ์๋ฒ์ ํต์ ํ์ฌ JSP(์๋ฐ ์๋ฒ ํ์ด์ง)์ Servlet์ด ์๋ํ๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
# Servlet Container ์ญํ
์น์๋ฒ์์ ํต์ ์ง์
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ๊ณผ ์น์๋ฒ๊ฐ ์์ฝ๊ฒ ํต์ ํ ์ ์๊ฒ ํด์ค๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์์ผ์ ๋ง๋ค๊ณ listen, accept ๋ฑ์ ํด์ผํ์ง๋ง ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ API๋ก ์ ๊ณตํ์ฌ ๋ณต์กํ ๊ณผ์ ์ ์๋ตํ ์ ์๊ฒ ํด์ค๋ค. ๊ฐ๋ฐ์๊ฐ ๊ทธ๋์ ๋น์ง๋์ค ๋ก์ง์ ๋ํด์๋ง ์ด์ ์ ๋๊ฒ๋ ๋์์ค๋ค.
์๋ธ๋ฆฟ ์๋ช ์ฃผ๊ธฐ(Life Cycle)๊ด๋ฆฌ
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ ํ์๊ณผ ์ฃฝ์์ ๊ด๋ฆฌํ๋ค. ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ๋ก๋ฉํ์ฌ ์ธ์คํด์คํํ๊ณ , ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ์ ํ ์๋ธ๋ฆฟ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ๋ํ ์๋ธ๋ฆฟ์ด ์๋ช ์ ๋ค ํ ์๊ฐ์๋ ์ ์ ํ๊ฒ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์งํ์ฌ์ฌ ํธ์๋ฅผ ์ ๊ณตํ๋ค.
๋ฉํฐ์ฐ๋ ๋ ์ง์ ๋ฐ ๊ด๋ฆฌ
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ์ด ์ฌ ๋ ๋ง๋ค ์๋ก์ด ์๋ฐ ์ฐ๋ ๋๋ฅผ ํ๋ ์์ฑํ๋๋ฐ, HTTP ์๋น์ค ๋ฉ์๋๋ฅผ ์คํํ๊ณ ๋๋ฉด, ์ฐ๋ ๋๋ ์๋์ผ๋ก ์ฃฝ๊ฒ๋๋ค. ์๋๋ ์ฐ๋ ๋๋ฅผ ๊ด๋ฆฌํด์ผ ํ์ง๋ง ์๋ฒ๊ฐ ๋ค์ค ์ฐ๋ ๋๋ฅผ ์์ฑ ๋ฐ ์ด์ํด์ฃผ๋ ์ฐ๋ ๋์ ์์ ์ฑ์ ๋ํด์ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
์ ์ธ์ ์ธ ๋ณด์ ๊ด๋ฆฌ
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๋ณด์์ ๊ด๋ จ๋ ๋ด์ฉ์ ์๋ธ๋ฆฟ ๋๋ ์๋ฐ ํด๋์ค์ ๊ตฌํํด ๋์ง ์์๋ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ ๋ณด์๊ด๋ฆฌ XML ๋ฐฐํฌ ์์ ์์๋ค๊ฐ ๊ธฐ๋กํ๋ฏ๋ก, ๋ณด์์ ๋ํด ์์ ํ ์ผ์ด ์๊ฒจ๋ ์๋ฐ ์ฝ๋๋ฅผ ์์ ํ์ฌ ๋ค์ ์ปดํ์ผ ํ์ง ์์๋ ๋ณด์๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
# Servlet ์๋ช ์ฃผ๊ธฐ
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปจํ ์ด๋๋ ํด๋น ์๋ธ๋ฆฟ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธํ๊ณ ์์ ๊ฒฝ์ฐ init()๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ ์ฌํ๋ค. init()๋ฉ์๋๋ ์ฒ์ ํ๋ฒ๋ง ์คํ๋๊ธฐ ๋๋ฌธ์, ์๋ธ๋ฆฟ์ ์ฐ๋ ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํด์ผํ๋ ๊ฒ์ด ์๋ค๋ฉด ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๊ตฌํํ๋ฉด ๋๋ค. ์คํ ์ค ์๋ธ๋ฆฟ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด ์๋ธ๋ฆฟ์ ํ๊ดดํ๊ณ init()์ ํตํด ์๋ก์ด ๋ด์ฉ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค.
- init()์ด ํธ์ถ๋ ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ์ service()๋ฉ์๋๋ฅผ ํตํด ์์ฒญ์ ๋ํ ์๋ต์ด doGet()๊ณผ doPost()๋ก ๋ถ๊ธฐ๋๋ค. ์ด๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ค๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ผ๋ก ์์ฑ๋ HttpServletRequest, HttpServletResponse์ ์ํด request์ response๊ฐ์ฒด๊ฐ ์ ๊ณต๋๋ค.
- ์ปจํ ์ด๋๊ฐ ์๋ธ๋ฆฟ์ ์ข ๋ฃ ์์ฒญ์ ํ๋ฉด destroy()๋ฉ์๋๊ฐ ํธ์ถ๋๋๋ฐ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฒ๋ง ์คํ๋๋ฉฐ, ์ข ๋ฃ์์ ์ฒ๋ฆฌํด์ผํ๋ ์์ ๋ค์ destroy()๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๊ตฌํํ๋ฉด ๋๋ค.