0320 ~ 0402


# 0320 ~ 0402

# 0322 - ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€(Test Coverage)

# ํ™”์ดํŠธ ๋ฐ•์Šค ํ…Œ์ŠคํŠธ

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ž€

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•ด์•ผํ•˜๋Š” ์ด์œ 

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์˜ ์ข…๋ฅ˜

# ๋†’์€ ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์˜ ์ด์ 


# 0323 - JVM์˜ default Heap Size

JVM(Java Virutal Machine)์˜ ๊ธฐ๋ณธ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์€ ์‚ฌ์šฉ ์ค‘์ธ Java ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ๋‹ค์Œ์€ Java 8์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ๋‹ค.

# ๋Ÿฐํƒ€์ž„์‹œ ํ™•์ธ

Runtime.getRuntime().maxMemory()
1

# Java Default Heap/Perm Size ํ™•์ธ

java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
1
# 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"
1
2
3
4
5
6
7
8
9
10
11
12
java -XX:+PrintFlagsFinal -version 2>&1 | findstr /I "heapsize permsize version"
1
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"
1
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๋Š” ์ž‘์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ ํž™ ์กฐ๊ฐํ™”๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

# PLAB(Promotion Local Allocation BUffers)๋ž€ ๋ฌด์—‡์ธ๊ฐ€?


# 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);
}
1
2
3
4
5
6
7
8
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
1
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);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple
1
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;
		
	}	
}
1
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);
	}	
}
1
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
1
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);
	    }

	};
}
1
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);
1
fruits 1 : Apple, Quantity : 100
fruits 2 : Banana, Quantity : 90
fruits 3 : Orange, Quantity : 80
fruits 4 : Pineapple, Quantity : 70
1
2
3
4

# 0402 - Servlet(์„œ๋ธ”๋ฆฟ)

# Servlet

์„œ๋ธ”๋ฆฟ์„ ํ•œ ์ค„๋กœ ์ •์˜ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค

ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Servlet ํด๋ž˜์Šค์˜ ๊ตฌํ˜„ ๊ทœ์น™์„ ์ง€ํ‚จ ์ž๋ฐ” ์›น ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์„œ๋ธ”๋ฆฟ์ด๋ž€ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ์ˆ ์ด๋‹ค. ์ข€๋” ์„ค๋ช…ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋– ํ•œ ์š”์ฒญ์„ ํ•˜๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ํ•˜๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

# ์„œ๋ธ”๋ฆฟ ํŠน์ง•

# Servlet ๋™์ž‘ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž(ํด๋ผ์ด์–ธํŠธ)๊ฐ€ URL์„ ์ž…๋ ฅํ•˜๋ฉด HTTP Request๊ฐ€ Servlet Container๋กœ ์ „์†กํ•œ๋‹ค.
  2. ์š”์ฒญ์„ ์ „์†ก๋ฐ›์€ Servlet Container๋Š” HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  3. web.xml์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ URL์ด ์–ด๋Š ์„œ๋ธ”๋ฆฟ์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์ฐพ๋Š”๋‹ค.
  4. ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์—์„œ service๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ GET, POST์—ฌ๋ถ€์— ๋”ฐ๋ผ doGet() ๋˜๋Š” doPost()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  5. doGet() or doPost() ๋ฉ”์†Œ๋“œ๋Š” ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ ํ›„ HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋ณด๋‚ธ๋‹ค.
  6. ์‘๋‹ต์ด ๋๋‚˜๋ฉด HttpServletRequest, HttpServletResponse ๋‘ ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธ์‹œํ‚จ๋‹ค.

# Servlet Container(์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ)

์„œ๋ธ”๋ฆฟ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์ฃผ๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ, ์›น์„œ๋ฒ„์™€ ์†Œ์ผ“์œผ๋กœ ํ†ต์‹ ํ•˜๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ํ†ฐ์บฃ(Tomcat)์ด ์žˆ๋‹ค. ํ†ฐ์บฃ์€ ์‹ค์ œ๋กœ ์›น ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์—ฌ JSP(์ž๋ฐ” ์„œ๋ฒ„ ํŽ˜์ด์ง€)์™€ Servlet์ด ์ž‘๋™ํ•˜๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

# Servlet Container ์—ญํ• 

# Servlet ์ƒ๋ช…์ฃผ๊ธฐ

image

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๋Š” ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—†์„ ๊ฒฝ์šฐ init()๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ ์žฌํ•œ๋‹ค. init()๋ฉ”์†Œ๋“œ๋Š” ์ฒ˜์Œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ธ”๋ฆฟ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค. ์‹คํ–‰ ์ค‘ ์„œ๋ธ”๋ฆฟ์ด ๋ณ€๊ฒฝ๋  ๊ฒฝ์šฐ, ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ์„ ํŒŒ๊ดดํ•˜๊ณ  init()์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•œ๋‹ค.
  2. init()์ด ํ˜ธ์ถœ๋œ ํ›„ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ์„œ service()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด doGet()๊ณผ doPost()๋กœ ๋ถ„๊ธฐ๋œ๋‹ค. ์ด๋•Œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์ƒ์„ฑ๋œ HttpServletRequest, HttpServletResponse์— ์˜ํ•ด request์™€ response๊ฐ์ฒด๊ฐ€ ์ œ๊ณต๋œ๋‹ค.
  3. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„œ๋ธ”๋ฆฟ์— ์ข…๋ฃŒ ์š”์ฒญ์„ ํ•˜๋ฉด destroy()๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š”๋ฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๋ฉฐ, ์ข…๋ฃŒ์‹œ์— ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์ž‘์—…๋“ค์€ destroy()๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.