[JAVA] JVM, JRE, JDK 이해하기
오늘은 JVM, JRE, JDK에 대하여 알아보려고 합니다. 이들은 모두 앞의 글자 J로 시작하는 부분이 모두 Java의 약자입니다. 따라서 여러분들도 알다시피 모두 Java와 관련된 파일이라는 것을 짐작할 수 있을 거라 생각합니다. 일단 긴 설명은 이어서 하기로 하고 제가 열심히 그림 그림부터 보고 가겠습니다. 간단히 먼저 살펴보시면 좋을 거 같습니다.
자 위에서 보는 그림을 간단히 순서대로 설명하자면 아래와 같습니다
- Java가 실행이 되려면 먼저 JVM(Java Virtual Machine)이라는 일명 자바 가상 머신이 필요하다.
- JVM에는 크게 ClassLoader, Excution Engine, Garbage Collector(GC)가 존재한다.
- ClassLoader : 실행에 필요한 클래스 파일 또는 라이브러리 파일들을 하나로 모아준다.
- Excution Engine : 모아준 파일의 내용을 적절히 실행을 위해 메모리에 분산 배치한다.
- Garbage Collector : 실행중에 발생하는 메모리 파편(사용하고 난 쓰레기 메모리)를 정리한다.
- JVM을 포함하고 있는 JRE(Java Runtime Enviroment) 자바실행환경을 통해(설치된) OS(운영체제 : Linux, Windows, Mac 등등)에서 실행 파일이 동작한다.
- JDK(Java Development Kit) 자바개발킷은 자바가 실행되는 사용 환경에서는 필요 없으나 개발자가 Java를 통해 개발하기 위해 필요한 라이브러리 및 각종 파일들을 가지고 있다. 또한 개발자가 JDK를 설치하면 그 안에 JRE가 포함되어 있다.
이렇게 전체적인 그림에 대한 흐름을 간단히 설명 드렸습니다. 그럼 이제 구체적으로 하나씩 하나씩 더 상세히 살펴보기로 하죠.
JVM(Java Virtual Machine)
JVM은 앞서 살펴본 대로 Java에서 가장 핵심 코어인 자바가상머신입니다. 단어에서 딱 보기에도 머신이라는 말이 먼가 코어스럽죠? ^^
위 그림에서 보면 JVM은 "플랫폼 독립적(이식성)이다" 라는 말을 보셨을 겁니다. JVM에서 가장 핵심이 되는 단어라고 생각합니다. 왜냐하면 JAVA에 여러가지 장점들이 있지만 그중에서 단연 으뜸인, 가장 큰 장점 중 하나가 바로 개발자가 운영체제(OS)별로 따로, 즉 운영체제의 특성을 고려하여 따로 따로 개발하지 않아도 된다는 것이기 때문에 개발자들에겐 엄청난 메리트이죠.
만약 Mac, Windows, Unix 세 종류의 OS에따라 따로 따로 개발하고 컴파일해서 실행파일을 따로 만들어야 한다면 어떨까요? 비슷한 작업을 3번을 개발한다면? 그리고 오류가 날 경우 3개를 또 작업해야 한다면? 상상만해도 헬(지옥)이죠?
네. 그래서 Java는 개발자가 1개의 소스를 가지고 3개 또는 그보다 많은 OS에서 실행할 수 있는 환경을 만들어주는 역할을 하는 것이 바로 이 JVM 이라는 놈의 역할 입니다. 일명 이걸 유식한 말로 One Source Multi Use(원 소스 멀티 유즈 : 하나의 소스로 여러번 사용한다? 뭐 이런 뜻입니다)라고 합니다. 단, JVM은 OS마다 다르다(따라서 JVM 자체는 플랫폼에 의존적이다)
결론을 요약하자면, 컴파일된 바이너리 파일은 JVM이 설치된 OS에서 동작을 보증한다. 단, JVM 자체는 플랫폼에 의존적이라 OS마다 다르다.
JRE(Java Runtime Enviroment)
JRE는 JVM을 가지고 있는 실행환경을 위한 파일이라고 생각하시면 간단합니다. JVM을 구동하기 위한 파일들 또는 필요한 파일들을 가지고 있으며, 이를 통해 JVM의 실행 환경을 구성합니다. JRE가 가지고 있는 파일들은 아래의 이미지를 통해 더 자세히 살펴볼 수 있습니다.
물론 자바 개발을 위해 이 모든 것들을 다 외워야만 합니다.
라고 말한다면 미~~XX라고 하겠죠? ^^ 이 모든 것들은 그냥 "이렇게 생겼구나" 하고 넘어가시면 됩니다. 아마도 특별한 경우가 아니라면 거의 대부분의 자바 개발자들은 30%(?)도 사용하지 않을거라 생각합니다.(아! 물론 극히 개인적인 경험과 생각입니다. 검증은 독자의 몫입니다. ^^)
아무튼 JRE는 JVM을 실행하는데 꼭 필요한 파일과 라이브러리를 가지고 있는 실행환경이다.
JDK(Java Development Kit)
아! 물론 시대가 많이 좋아지고 편해져서 이제는 이 한개의 파일로 1석 3조가 가능해진 것입니다. 예전에는(나때는 말이야!) JDK와 JRE를 따로 따로 설치하고 그리고 또 개발 환경이라고 하는 환경설정도 해줘야 하는 아주 번거로운 작업이었습니다.
또한 개발자들은 이게 당연한 것으로 받아들여지는 시대였던거죠. ^^
어쨋거나 지금은 개발자들도 많이 편해진거 같으니 편안하게 설치하고 일하는 환경을 추천합니다. ^^
쓸데없는 이야기는 여기까지로 해두고, JDK의 결론은 Java를 개발하기위해 개발자들에게 필요한 파일들 위의 위 JRE에서 설명한 그림에서 상단의 파란색 부분들과 회색 부분들을 가지고 있는 개발자의, 개발자에 의한, 개발자를 위한 개발자 킷이다.
여기까지 Java의 필수 요소인 JVM, JRE, JDK에 대하여 간략히(?) 알아봤습니다. 읽어주신 여러분 오늘도 즐거운 그리고 즐기는 개발자가 되시길 바랍니다.
감사합니다.
댓글
댓글 쓰기