week 3 hyowon - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

๋ชฉ์ฐจ

  • JAVA (๋‘์šฉ์„ )
      1. Java8์˜ heap ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š” ๊ทธ๋ฆฌ๊ณ  ํž™์˜์—ญ๊ณผ ์Šคํƒ์˜์—ญ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค
      1. ์ž๋ฐ”8์—์„œ ์†Œ๊ฐœ๋œ ๋žŒ๋‹ค์‹๊ณผ ๋ฉ”์†Œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋ผ.
      1. checked-exception VS unchecked-exception ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.
  • SPRING (์ฃผ์ข…ํ›ˆ)
      1. @Service, @Component์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€?
      1. ์Šคํ”„๋ง MVC ์›น ์š”์ฒญ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ์„ค๋ช…ํ•˜์‹œ์˜ค
      1. @EnableWebMvc ๋Š” ์–ด๋””์— ํ•„์š”ํ•œ์ง€ ์„ค๋ช…ํ•˜์‹œ์˜ค
  • Infra/์šด์˜ (์œ ์ •ํ˜„)
      1. heap dump๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”.
      1. ๋ ˆ๋””์Šค ์บ์‹œ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜?
      1. 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์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://postfiles.pstatic.net/MjAyMDA3MTRfMjIg/MDAxNTk0NjgyNzY3Mjc1.LVEJa5uSiyUsfyrcXL1NF5BMrEUZqsuJnKvLjSbqVqgg.kClJiUU0l9p8cbDRFEnIebR8qfS_kthuV_Dx2hdmD0Ag.PNG.willow_weed/Untitled.png?type=w773

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

๋ฉ”์„œ๋“œ์™€ ๋กœ์ปฌ ๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„.
๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

https://postfiles.pstatic.net/MjAyMDA3MTRfMTcg/MDAxNTk0NjgyODA2NjYw.80JIeI0p7qra77AdLa7wtSSNQO5SqE3Lar4eRzyfAXQg.FlQ4AEWnVO7cTX07R-PddVbSt6bOVZ2lhGHV1Yjourgg.PNG.willow_weed/Untitled_(2).png?type=w773

์ƒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค JVM์ด ์ƒˆ ์Šคํƒ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. JVM์€ ๋‹จ ๋‘ ๊ฐ€์ง€ ์ž‘์—…๋งŒ ์‹คํ–‰ํ•˜๋Š”๋ฐ, push์™€ pop์ž…๋‹ˆ๋‹ค. ์Šคํƒ์€ ์Šค๋ ˆ๋“œ ์ƒํƒœ๋ฅผ ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ๊ตฌ์กฐ์ฒด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. JVM์—์„œ ํ˜„์žฌ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋ ˆ์ž„์„ current frame๋ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ ํ”„๋ ˆ์ž„

์Šคํƒ ํ”„๋ ˆ์ž„์€ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ถ”๊ฐ€๋˜๊ณ (push) ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰ ์™„๋ฃŒ๋ ๋•Œ ์ œ๊ฑฐ(pop)๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด printStackTrace()๊ฐ€ ๋Œ๋ฉด์„œ ์ฐ๋Š” ๋กœ๊ทธ ํ•œ ์ค„์ด ํ•˜๋‚˜์˜ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์Šคํƒ ํ”„๋ ˆ์ž„์€ ์„ธ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  1. Local Variable (Array)
  2. Operand Stack
  3. 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)
  {
    
  } 
}

https://postfiles.pstatic.net/MjAyMDA3MTRfMzAg/MDAxNTk0NjgyODA3ODg4.NnbRt0IC6tXQ7lLWWjjyr4tng_Z4JyaniCwf_tDOMuUg.jqmmxhU2VRbE1vv7tGagtWccPSvBeJns10pDdvsDlCgg.PNG.willow_weed/Untitled_(3).png?type=w773

Operand Stack

  • ์ˆ˜ํ–‰ํ•  ์ค‘๊ฐ„ ์ž‘์—…์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์˜ ์ž‘์—…๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.
  • stack ๊ตฌ์กฐ๋กœ push, pop์„ ํ†ตํ•ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

https://postfiles.pstatic.net/MjAyMDA3MTRfMjYy/MDAxNTk0NjgyODA5ODgw.6T7J7S_XDb9GvUUzB9-0d2_czBQ8HSPa43hOaMlASRYg.QmwAfoRjKuGECzrrRnLNuaHtcc6A3pF0gDbf8F1OhA0g.PNG.willow_weed/Untitled_(4).png?type=w773

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();
}

๋žŒ๋‹ค ํ‘œํ˜„์‹์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

https://postfiles.pstatic.net/MjAyMDA3MTRfMjc3/MDAxNTk0NjgyODExNDg5.lZpgA2JspVTEfXfP5L0VgEZyYtNIVTm6yfudhqWyAj8g.nKH-Xn8mpUup1seQQiTjwx5WlV7eThJ0DE1Bpq8tzVog.PNG.willow_weed/Untitled_(5).png?type=w773

  • ์„ ํƒ์  ํƒ€์ž… ์„ ์–ธ : ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๋ฐ˜๋“œ์‹œ ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹ธ๋Š” ๊ด„ํ˜ธ ์ƒ๋žต๊ฐ€๋Šฅ : ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ผ ๊ฒฝ์šฐ ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žต๊ฐ€๋Šฅ
  • ๋ฉ”์„œ๋“œ ๊ตฌํ˜„๋ถ€์˜ ์ค‘๊ด„ํ˜ธ ์ƒ๋žต๊ฐ€๋Šฅ : ๋‹จ์ผ ๋ช…๋ น๋ฌธ์ด๋ผ๋ฉด ์ค‘๊ด„ํ˜ธ ์ƒ๋žต๊ฐ€๋Šฅ
  • 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

 

๋ฉ”์„œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค

๋ฉ”์„œ๋“œ๋ช…์œผ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค.

:: ์‹ฌ๋ณผ๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  1. static ๋ฉ”์„œ๋“œ
  2. instance ๋ฉ”์„œ๋“œ(public)
  3. 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์€ ๋ช…์‹œ์ ์ธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ์ ์ ˆํžˆ ๋ณต๊ตฌํ•  ์ˆ˜์žˆ๋‹ค๋ฉด ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋กœ, ๊ทธ๋Ÿด ์ˆ˜ ์—†๋‹ค๋ฉด ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://postfiles.pstatic.net/MjAyMDA3MTRfMjEz/MDAxNTk0NjgyODEyNzk5.QvW_bdP5GTBRR0ueI8edw2SCUfAlccLl2v_DZUHCCbEg.ZH4cudwIgkgljGc5-OtooQcMVseENxykKwGacDSiSMMg.PNG.willow_weed/1_IVfiNbsnKLrQK_fBIHYSBw.png?type=w773

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์˜ ์›น ์š”์ฒญ ์ฒ˜๋ฆฌ๊ณผ์ • ์„ค๋ช…

  1. HTTP์š”์ฒญ

(๋ธŒ๋ผ์šฐ์ €,์›น์ปจํ…Œ์ด๋„ˆ์˜ ๋„์›€์„ ๋ฐ›์•„) ํ™”๋ฉด์˜ HTTP์š”์ฒญ์„ DispatcherServlet์˜ RequestMappingHandlerMapping/RequestMappingHandlerAdaptor ๊ฐ€ ๋ฐ›์Šต๋‹ˆ๋‹ค.

DispatcherServlet์€ ์ผ์ข…์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์š”์ฒญ

๋ฐ›์•„์„œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ

MVC. ์„œ๋น„์Šค, ์„œ๋น„์Šคdao, ๋งคํผ ์—ด์‹ฌํžˆ ํ•ด์„œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ชจ๋ธ์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

  1. ๋ชจ๋ธ/๋ทฐ ๋ฐ˜ํ™˜

model๊ณผ ๋ทฐ(return ์˜†์˜ ๋ฌธ์ž์—ด)๋ฅผ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ชจ๋ธ

๊ทธ๊ฑธ JstlView๊ฐ€ ๋ฐ›์•„๊ฐ€์ง€๊ณ  ๊ทธ๋ฆฌ๋‹ค๊ฐ€ JSTL์„ ๋งŒ๋‚˜๋ฉด ๋ชจ๋ธ์„ ์ฐธ๊ณ ํ•˜์—ฌ HTML์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ

์ƒ์„ฑํ•œ HTML์„ (HTTPํ†ต์‹ ์„ ๊ด€์žฅํ•˜๋Š”) ์„œ๋ธ”๋ฆฟ์ปจํ…Œ์ด๋„ˆํ•œํ…Œ ๋„˜๊ฒจ์ค๋‹ˆ๋‹ค.

  1. 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= ์˜ต์…˜์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

(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 ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๋‹จ๊ณ„ >

  1. ์‚ฌ์šฉํ•  ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „์— ๋™์˜.

  2. ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ.

  3. ๋””์ง€ํ„ธ ์ธ์ฆ์„œ ๊ตํ™˜ํ•˜๊ณ  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜์—ฌ ์„œ๋กœ ์ธ์ฆ.

  4. ๋น„๋Œ€์นญ ์•”ํ˜ธํ™” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต์œ  ๋น„๋ฐ€ํ‚ค๋ฅผ ์ƒ์„ฑ. ๊ทธ๋Ÿฐ ๋‹ค์Œ SSL ๋˜๋Š” TLS๋Š” ๊ณต์œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„ธ์ง€๋ฅผ ๋Œ€์นญ ์•”ํ˜ธํ™” ๋ฐฉ์‹์œผ๋กœ ์•”ํ˜ธํ™”.

https://t1.daumcdn.net/cfile/tistory/9973E13B5C46B5B707

์ถœ์ฒ˜

https://wangin9.tistory.com/entry/๋ธŒ๋ผ์šฐ์ €์—-URL-์ž…๋ ฅ-ํ›„-์ผ์–ด๋‚˜๋Š”-์ผ๋“ค-5TLSSSL-Handshake