주니어 개발자도 이해 할 수 있는 아름다운 jvm 세상

90
주니어 개발자도 이해 있는 아름다운 JVM 세상 2014. 11 Darion Kim

Upload: darion-kim

Post on 07-Jul-2015

4.997 views

Category:

Software


6 download

DESCRIPTION

Bueatiful JVM World

TRANSCRIPT

Page 1: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

2014. 11Darion Kim

Page 2: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

나는 누구?Darion Kim (김헌기)

디에스멘토링 연구소 수석보

자칭 통신(통합의 신, God of Integration)

[email protected]

https://www.facebook.com/groups/serverside (율이아빠)

Page 3: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이 문서를 모든 Freshman에게 바칩니다.

(for YMS, JHJ)

Page 4: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이미 JVM에 대해서 아시거나 시니어 개발자분들은 여기까지만 …

Page 5: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

약속드립니다.절대 어렵게 얘기하지 않겠습니다.

Page 6: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

아름다운 JVM 세상을 만나 볼 준비가 되

셨습니까?

Page 7: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

사람들은 JVM을 뭐라고 얘기할까요?

Page 8: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM=

Java Virtual Machine

Page 9: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그 다음부터는 무진장 어렵게 얘기하더라구요. ㅠㅠ

Page 10: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

저는 어떻게 얘기할까요?

Page 11: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

혹시 프로그램(Program) 은 아세요?

Page 12: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

프로그램을 실행하면 프로세스(Process)가 생성됩니다.

Page 13: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?

디스크(Disk)에 있는 프로그램 파일(File)을 실행한다.

프로그램 파일이 메모리(Memory) 적재되면서 프로세스화 되어 프로세서(CPU)를 사용한다.

Page 14: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 그려볼까요?

DiskProgram.exe Loading

Memory

CPU

Process

Page 15: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

Process는 Disk, File, Memory, CPU와 관련되어 있네요.

기억해두세요.

Page 16: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM=

Process이라고 가정한다면

Page 17: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM도 Process 처럼 실행할수 있겠네요.

Page 18: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

에이~ 다들 아시면서… ^^

Page 19: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

java -cp 라이브러리 메인클래스

Page 20: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?디스크에 있는 java 프로그램에 메인클래스를 지정하여 실행한다.

-cp 옵션을 주어 라이브러리도 지정하여 실행한다.

라이브러리는 디렉토리, *.jar, *.zip 파일 절대경로이다.

Page 21: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

Disk

그림으로도 그려볼까요?

java

Loading

Memory

CPU

JVM

Main.class Main

LibraryLibrary

Page 22: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM도 Process 맞네요.

Page 23: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

끝까지 아니라고 하시는 분들은 여기까

지만 …

Page 24: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

자~ 그러면 좀더 심도있게 들어가 볼까요?

Page 25: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM 안쪽에서는 어떤일들이 벌어질까

요?

Page 26: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그럼 우선 Creator와 Class와 Object, Instance의 차이를 알아야 합니다.

Page 27: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?Creator = 조물주, 바로 여러분 입니다.

Class(*.class)는 조물주가 만든 뼈대입니다.

Class는 Object화 됩니다. = Instance

그말은 뼈대에 생명력을 불어넣으면 객체가 됩니다.

Page 28: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 그려볼까요?

Class Object Instance

Creator

Page 29: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

자~ 다시 Class, Object를 기억해주세요.

Page 30: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이제 정말로 아름다운 JVM 세상으로 들어갑니다. ^^

Page 31: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

아름다운 JVM 세상을 추상적으로 그려

봅니다.

Page 32: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

중요한 것은 쉽게 그립니다.

Page 33: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

정확한 기술 스펙이 보고 싶은 분들은 여기까지만 …

Page 34: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

아름다운 JVM 세상Beautiful JVM World

Page 35: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

어라! 아무것도 없네요.

Page 36: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

아닙니다.숨은 공신들이 있습

니다.

Page 37: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM 세상에는 각자 고유의 역할(Role)을 가지고 있는 객체가 있습니다.

Page 38: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

다시 한번…객체는 각자 고유의 역할(Role)이 있습니다.

Page 39: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

“창조주”로써 사람을 만들려고 했다면 사람답게 만들어야 하겠죠.

Page 40: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?사람을 만들려면 머리, 몸통, 팔, 다리의 정확한 역할을 정의한다.

머리와 몸통이 하나가 아니면 사람이 아니다.

팔과 다리가 두개가 아니면 사람이 아니다.

Page 41: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?

사람 괴물

Page 42: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

번외:우리는 OOP에서 사람(객체)을 사람답지 않게 생성합니다.

안그러십니까?

Page 43: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

다시 숨은 공신을 소개합니다.

Page 44: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

클래스로더(Classloader)Beautiful JVM World

Classloader

Page 45: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?

클래스로더(Classloader)

역할 : JVM 입구에서 클래스들을 로딩한다.

JVM 세상의 수문장 역할

Page 46: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

ClassClass

Class Class

Page 47: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

로딩된 클래스는 객체화 될수 있습니다.

Page 48: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?

Car a = new Car();

Car : 클래스

a : 객체

Page 49: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

CarClass

Class Class

a

Page 50: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

객체를 여러개 생성하면

Page 51: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?

Car a = new Car();

Car b = new Car();

House c = new House();

Food d = new Food();

Page 52: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면Beautiful JVM World

Classloader

Class

CarClass

Food House

ab

cd

Page 53: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

객체가 무한대로 많이 생성되면 어떻게

될까요?

Page 54: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면Beautiful JVM World

Classloader

Class

CarClass

Food House

ab

cd

Object

Object

Object

ObjectObject

Object

Object

Object Object

Object

ObjectObject

Object

Object

Object

Object

Object

Page 55: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM 세상의 객체 밀도가 점점 높아집니

다.

Page 56: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그러다가 …

Page 57: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이렇게 되다가 …

Page 58: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

OOME(OutOf MemoryError)

Page 59: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

하지만 정상적인 상황에서는 OOME가 발생하지 않습니다.

Page 60: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

왜 그럴까요?

Page 61: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

또 하나의 숨은 공신을 소개합니다.

Page 62: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

Garbage CollectorBeautiful JVM World

Classloader

Class

CarClass

Food House

ab

cd

Object

Object

Object

Object

Object

Object Object

Object

ObjectObject

Object

Object

Object

Object

Object

finalize

finalize

finalize

finalize

finalize

finalize

finalize finalize

Page 63: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?

Garbage Collection : 객체가 더 이상 참조가 없다고 판별(finalize)된 경우 Garbage Collector에 의해 호출됩니다.

즉 객체를 JVM 세상에서 소멸 시킵니다.

Page 64: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?Beautiful JVM World

Classloader

Class

Class

Food Housed

Object

Object Object

Object

Object

ObjectObject

Object

Object

Object

finalizedCar

Page 65: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

WAS(Web Application Server) =

JVM 이란 생각은 해보셨나요?

Page 66: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

맞습니다.WAS도J2EE 스펙을 준수한 JVM입니다.

Page 67: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?Beautiful JVM World

Classloader

AServletCar.jsp

FoodServlet House.jsp

ab

cd

BServlet

Page 68: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM 세상은 항상 아름답기만 할까요?

Page 69: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

절대 아닙니다.

Page 70: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

조물주와 조물주의 친구분들은 불손한 클래스를 만들수있습니다.

Page 71: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

뭣도 모르고 만든 클래스가 최고의 불손한 클래스입니다.

Page 72: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

불손한 클래스의 의해 생성된 객체들이 JVM 세상을 반드시 어지럽게 합니다.

Page 73: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

어떻게 해결해야 하나요?

Page 74: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

프로파일링(Profiling)을 해야합니다.

Page 75: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

프로파일링을 하려면 클래스로더와 친해져

야 합니다.

Page 76: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 자세히 설명하면?우리는 클래스로더의 역할을 알고 있습니다.

클래스로더에 Hook Class를 적용합니다.

프로파일링 대상 클래스가 로딩될 때 낚아채어 측정 로직을 심어놓습니다.

프로파일 측정을 수행합니다. (ex:메소드 수행시간 측정)

프로파일링 대상 클래스는 자신에 몸속에 심어놓은 로직을 인지하지 못하고 평소와 동일하게 활동합니다.

Page 77: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

Hooking Class

Page 78: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그림으로도 설명하면?Beautiful JVM World

Classloader

AServletCrazy.jsp

FoodServlet House.jsp

maddest-amaddest-b

cd

BServlet

hook Profiler

Page 79: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

불손한 클래스에서 생성된 객체는 호환, 전쟁, 마마보다도 무섭습니다.

Page 80: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이 아름다운 JVM 세상에 Memory Leak, Infinite Loop의 암세포를 확산시킵니다.

Page 81: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

결국엔 아름다운 JVM 세상에 OutOfMemoryError,

Process of Hanging과 같은 종말을 가져다 줍니다.

Page 82: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

JVM 종말…

Page 83: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

그래서 프로파일링으로 원인 클래스 및 객체를 찾아제거해야 하는 것입니다.

Page 84: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

찾아서 반드시 제거하라~!

Page 85: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

프로파일링이 어려울것 같으시죠?

Page 86: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

APM (Application Performance Management) 솔루션을 구매하여 사용하

시면 간단합니다.

Page 87: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

무료로 하실려면 JDK에 포함된 JConsole이나 VisualVM을 사용하시면 됩니다.

Page 88: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

좀더 특화된 프로파일링을 원하시면 Java

Instrumentation 기법을 사용하여 구현하시면 됩니다.

Page 89: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

아름다운 JVM세상은 우리가 반드시 추구해야 되는 세상입니다.

Page 90: 주니어 개발자도 이해 할 수 있는 아름다운 JVM 세상

이상 율이아빠였습니다.