티스토리 뷰

Java

Java, JVM, JDK, JRE는 어떻게 다른가?

Jaime.Lee 2020. 7. 21. 09:37

저는 취미생활(?)의 일환으로 네이버 지식인에 답변을 달아주고 있습니다. (현재 무려 바람신😎)

 

제가 대학생 때는 현재 창업한 회사에서 CTO로 활동하다가 모든 일을 맡아서 해야하는 실장이 되어버린 실력자 친구가 있었기 때문에 잘 모르면 무조건 그 친구에게 쪼르르 달려가서 질문을 하곤 했습니다. 하지만 그 친구를 만난 건 3학년 2학기.. 그 전까지는 고만고만한 친구들과 수업을 제끼고 당구를 치러 가는 게 더 좋았고, 그 친구들이 다 군대가고 나서는 혼자서 질문할 곳이 없어서 많이 힘들어하고 결국엔 휴학까지 했었습니다.

 

지식인에 올라오는 모든 질문이 저렇게 절박한 처지에 있는 사람이 올리는 글은 아니겠지만 혹시나 그런 처지에 있는 사람이 기댈 곳이 없어서 질문을 했을 수도 있기 때문에(?) 오지랖을 부려 최대한 친절하게 설명하려고 노력하는 편 입니다.

 

그 지식인에 올라오는 질문 중 정말 많은 비율을 차지하는 부분이 자바 설치, 환경 변수, 컴파일, 빌드 등 소스 코드와 상관 없이 환경을 설정하고 자바를 실행하기까지의 과정입니다. 그리고 그 때 사용되는 용어도 매우 다양합니다.

 

"자바 이클립스 컴파일 도와주세요", "이클립스 코딩 도와주실 분", "자바 빌드업이 왜 안 되나요?" 등 다양한 용어가 혼재하고 있습니다.

 

제가 회사에서 지원해줘서 인프런 강의를 하나 수강하고 있는데 바로 백기선님의 "더 자바, 코드를 조작하는 다양한 방법"입니다. 자바나 스프링 관련된 강의는 회사에서 지원해주면 제대로 듣지 않더라도 무조건 틀어놓고 다른 업무를 하고 있는데, 지난 번에 수강한 백기선님의 강의가 정말 맘에 들어서 커리큘럼 자체가 이미 다 아는 내용이지만 추가로 수강신청하였습니다.

 

위에서 설명한 강의의 첫 번째 강의가 바로 오늘 다룰 주제 입니다.

알고있지만 들으면서 더 정확하게 알게 되었고 이런 부분을 앞으로도 쭉 정리해나갈 예정입니다.

 

서론이 너무 길었습니다.

바로 설명충모드로 들어갑니다.

 

JVM (Java Virtual Machine)

자바 가상 머신으로 자바 바이트 코드를 OS에 특화된 코드로 변환하여 실행해 줍니다. 즉, 바이트 코드를 실행하는 표준이자 구현체를 일컫는 말 입니다. 아마 초보분들은 이 글을 읽어도 또 하나의 외울 것이 늘어났다고 생각하실 것 입니다. 아주 간단히 풀어서 설명하자면 .class 파일을 Windows, Mac OS, Linux 등의 OS에서 실행할 수 있게 해주는 가이드라인입니다. ".class 파일을 실행하려면 이렇게 저렇게 해라" 라는 내용이죠. 내용만 있으면 실행이 되지 않겠죠? 이 내용을 보고 구현한 벤더들이 바로 오라클, 아마존, Azul 등 입니다. 우리는 항상 오라클에서 자바를 다운받죠? 오라클 말고도 아마존이나 azul에서도 다운받을 수 있다는 뜻 입니다. 다시 한 번 좀 있어보이는 용어로 정리하면, 바이트 코드를 실행하는 표준(가이드라인)과 구현체(오라클 등이 구현)를 합한 것이 JVM 입니다.

 

JVM만 다운 받아 보신 분 있나요? 아마 없을 것 입니다. 왜냐하면 JVM만 홀로 제공하지 않기 때문이죠. JVM을 실행할 수 있는 최소한의 라이브러리까지 포함해서 배포하는데 이게 바로 JRE 입니다.

 

JRE (Java Runtime Environment)

바로 위에서 설명했듯이 JVM + 코어 라이브러리 + 설정과 리소스 파일로 구성되어 있습니다. 자바 애플리케이션을 실행할 수 있도록 구성된 배포 버전입니다. JRE를 설치하면 자바 애플리케이션을 실행할 수 있다는 뜻이죠. 현재는 굳이 JRE, JDK를 나눠서 다운받게 하지 않지만 예전에는 개발자가 아닌 경우 JRE만 따로 설치해서 자바 애플리케이션을 실행하곤 했습니다. 바로 앞에도 언급했지만 JRE만 설치할 경우 개발은 할 수 없습니다.

 

JDK (Java Development Kit)

JRE와 개발에 필요한 도구들로 구성되어 있습니다. 소스 코드를 작성할 때는 플랫폼과 상관없이 자바 언어로 개발할 수 있습니다. 오라클의 경우 자바 11버전부터 JDK만 제공합니다. 자바에 module 개념이 생기면서 jre를 직접 구성할 수 있게 되었기 때문입니다. (전 아직 자바 8버전까지밖에 사용해보지 못해서 module이 뭔지 모르는..)

 

Java

자바는 프로그래밍 언어 입니다. JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트 코드(.class)로 컴파일 할 수 있습니다. 그리고 2년 전 쯤 언급되었던 자바 유료화에 관해서 깔끔하게 정리하자면 "오라클에서 만든 Oracle JDK 11 버전부터 상용으로 사용할 때 유료" 입니다. 따라서 대부분의 경우 무료로 사용할 수 있습니다.

 

마지막으로 JVM을 기반으로 동작하는 프로그래밍 언어는 자바 외에도 클로저, 그루비, JRuby, Jython, Kotlin, Scala 등이 있습니다. JVM이 설치되어 있다면 앞서 나열한 언어로 소스 코드를 작성한 이후에 실행할 수 있다는 뜻 입니다. 자바랑 동일한 방식으로 실행시키진 않지만 플랫폼에 독립적인 환경인 JVM을 활용하기 위한 것으로 이 언어들도 Oracle JDK 11이상의 버전을 상용으로 사용할 경우 유료가 되기 때문에 JDK 버전을 선택할 때 주의해야 겠습니다.

 

 

댓글