안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

자바 (Java)

[Java] Java SE, JDK, JRE, JVM, 자바 프로그램의 실행 원리

피그브라더 2020. 7. 8. 22:05

1. 자바 기본 용어

1-1. Java SE (Java Platform, Standard Edition)

  • 자바의 표준안으로서, 자바가 어떠한 문법적인 구성을 가지는 언어인지를 정의하고 있다.
  • 즉 이것은 언어 그 자체가 아닌 언어의 설계도(Specification, 명세서)에 해당한다.
  • 이 설계도에 따라서 자바가 만들어진다. Java SE 19는 자바 버전 19에 대한 명세서이다(계속 발전한다).
  • 이 명세서는 JCP(Java Community Process)라는 조직에 의해서 만들어진다.

 

1-2. JDK (Java Development Kit) : 개발자를 위한 자바

  • Java SE의 표준안에 따라 만들어진 구체적인 소프트웨어이다.
  • 자바 프로그램을 개발하기 위해서는 반드시 이것을 다운로드하여서 설치해야 한다.
  • 자바 컴파일러, 개발을 위한 각종 도구, JRE(JVM, 라이브러리, 각종 파일들) 등이 포함되어 있다.
  • 설치 경로 (EX. C:\Program Files\Java\jdk-19) : 자바 컴파일러(javac.exe), 자바 런처(java.exe) 등 존재

 

1-3. JRE (Java Runtime Environment) : 일반인을 위한 자바

  • 자바로 만들어진 프로그램을 구동하기 위해서는 반드시 이것을 다운로드하여서 설치해야 한다.
  • 자바 프로그램이 실제로 동작하는 데 필요한 JVM(자바 런처), 라이브러리, 각종 파일들이 포함되어 있다.

 

1-4. JVM (Java Virtual Machine) : 자바 가상 머신

  • 자바 프로그램이 실제로 구동되는 환경이다.
  • 자바로 만들어진 소프트웨어는 JVM이라는 가상화된 환경에서 구동되고, 하드웨어나 운영체제에 따라서 달라질 수 있는 호환성의 문제는 각 운영체제 버전에 맞춰서 만들어진 JVM이 알아서 해결한다.
  • 하나의 자바 프로그램이 어떠한 환경에서도 실행될 수 있는 것은 바로 JVM의 역할 때문이다.

 

1-5. JAVA 버전 종류

  • JAVA SE (Standard Edition) : 일반적인 데스크탑 프로그램의 개발을 위한 자바
  • JAVA EE (Enterprise Edition) : 기업 환경에서의 개발을 위한 자바 → 무거움 (확대판)
  • JAVA ME (Micro Edition) : 소형 기기(모바일 등) 환경에서의 개발을 위한 자바 → 가벼움 (축소판)

 

1-6. 환경 변수 설정

  • 명령 프롬프트에서 실행 파일(.exe)을 실행시키기 위해서는 그 실행 파일이 현재 경로 혹은 환경 변수 path에 등록된 값(경로)에 존재해야 한다.
  • 환경 변수란 운영체제에 등록된 정보로서, 이곳에 값(경로)이 등록된다.
  • 따라서 javac.exe와 java.exe를 path에 등록해두는 것이 편하다.
  • 이를 위해, [고급 > 환경 변수 > Path]에 들어가서 "C:\Program Files\Java\jdk-19\bin"을 새로 추가해준다. 이렇게 하면 이제 언제 어디서든 javac.exe와 java.exe를 실행시킬 수 있다. (JDK 버전에 따라 경로는 다를 수 있음)

 

2. 자바 프로그램의 실행 원리

2-1. 일반적인 프로그램의 실행 구조

  • 프로그램 ▶ 운영체제 ▶ 하드웨어
  • 운영체제에 매우 의존적이다. (운영체제마다 커널 코드가 다르기에, 같은 소스 코드라도 리눅스에서와 윈도우에서의 컴파일 결과가 다르다.)
  • 따라서 윈도우에서 개발한 프로그램의 실행 파일은 리눅스에서 실행되지 않는다.

 

2-2. 자바 프로그램의 실행 구조

  • 자바 프로그램 ▶ 자바 가상 머신 (JVM) ▶ 운영체제 ▶ 하드웨어
  • 운영체제에 독립적이다.
  • 운영체제마다 그에 맞는 JVM이 존재하며 자바 프로그램과 JVM의 통신 방식은 이미 규격화되어 있다.
  • 즉 JVM은 운영체제에 의존적이지만, 자바 프로그램은 운영체제에 독립적이다.

 

2-3. 자바 컴파일러 (javac.exe)

  • 자바 가상 머신(JVM)이 인식하고 실행할 수 있는 자바 바이트 코드를 생성해낸다.
  • 즉 자바 소스 파일(.java)을 읽고 자바 클래스 파일(.class)들을 만들어낸다.

 

2-4. 자바 런처 (java.exe)

  • 자바 가상 머신(JVM) 위에서 자바 바이트 코드가 실행될 수 있도록 도와주는 프로그램이다.