자바를 공부하다보면 ‘런타임(Runtime)’과 ‘컴파일 타임(Compiletime)’이라는 단어를 접할 수 있다. 이 용어는 서로 다른 두가지 타입의 에러를 나타낼 때 사용되기도 한다. 두 타입의 에러에 대해 더 정확하게 이해하기 위해 이번에는 자바의 런타임에 대해 알아보도록 하자.
Java로 작성한 코드를 실행하려면, 컴파일이라는 과정을 통해 기계어 코드로 변환하여 실행 가능한 프로그램을 만들어야 한다. 이를 컴파일 타임이라고 한다.
컴파일 타임 에러는 프로그램이 성공적으로 컴파일되는 것을 방해하는 Syntax error, 파일참조 오류에 의해 발생한다. 이때 컴파일러는 에러를 발생시키고 문제가 일어나 코드의 라인을 가리킨다.
오류 유형
🔎 Java의 컴파일 과정에 대해 더 잘 알아보고 싶다면?
사용자는 컴파일 과정을 마친 프로그램을 실행한다. 이때 응용프로그램이 동작되어지는 것을 런타임이라고 한다.
소스코드가 컴파일에 성공하여 실행 가능한 상태가 되었지만, 프로그램은 실행 중에 버그를 일으킬 수 있다. 이때 발생하는 오류를 런타임 오류라고 한다. 이러한 오류는 개발자가 원인을 잘 찾아서 해결해야 한다.
오류 유형
먼저 JRE와 JDK의 차이에 대해 알아보자.
https://docs.oracle.com/javase/8/docs/index.html
JRE(Java Runtime Environment)란 컴파일된 자바 프로그램을 실행하기 위해 필요한 모든 것들을 모아둔 패키지이다. JRE에는 자바 가상 머신(Java Virtual Machine), 자바 클래스 라이브러리(Java Class libraries), 자바 클래스 로더(Java class loader)가 포함된다.
JDK(Java Development Kit)는 Java의 모든 기능을 가지고 있는 SDK(Software Development Kit)이다. JRE가 가지고 있는 기능 뿐만 아니라 컴파일러(javac
)와 편의성 도구(javadoc
, jdb
등) 등이 있다.
즉, JDK는 JRE를 포함하고 있다.
만약 컴파일된 Java 프로그램을 실행하기만 한다면, JRE만 설치하면 된다. 하지만 Java 프로그래밍을 한다면(코드를 직접 작성하고) JDK를 설치해야 한다.
그렇지만 Java 프로그래밍을 수행하지 않아도 JDK를 설치해야하는 경우가 있다. JSP로 웹애플리케이션을 배포하여, 애플리케이션 서버에서 Java 프로그램을 실행하려고 한다고 하여도 JDK는 필요하다. 그 이유는 애플리케이션 서버가 JSP를 Java Servlet 변환하고 이때 Servlet을 컴파일하기 위해 JDK가 필요하기 때문이다.
+) 위 문장을 잘 이해하기 위해 서블릿에 대해 정리된 글을 첨부한다. https://mangkyu.tistory.com/14
JRE
bin/
: Java 실행 엔진을 포함한다. JVM을 실행하는 java
(윈도우의 경우, javaw
)를 갖는다. 이밖에도 keytool
과 policytool
과 같은 편유틸리티 프로그램도 갖는다.conf/
: 사용자 편집을 위한 구성 파일을 갖는다.lib/
: 여러 종류의 보조 파일들이 있다. (.jar
, configuration file, property file, fonts, translations, certs …) 가장 중요한 파일은 자바 표준 라이브러리에 해당하는 .class
파일을 포함한 modules
이다.JDK
JDK는 JRE를 포함한다.
bin/
: 확장된 개발 도구들을 포함한다. 자바 컴파일러인 javac와 jar, javadoc, jshell 등을 갖는다.jmods/
표준 라이브러리용 JMOD 파일을 갖는다. jlink
와 함께 사용되는 것을 허용한다.기본 클래스로더 중 최상위 클래스 로더이다. jre/lib
경로에서 찾을 수 있다.
다음의 파일들을 포함한다.
rt.jar
: Runtime classesi18n.jar
: Internationalization classescharsets.jar
: Character conversion classesBootstrap ClassLoader는 JVM이 시작될 때 이러한 클래스들을 가져온다.
자바 플랫폼으로 확장하기 위한 클래스들로 jre/lib/extn
에 있다. extension classpath라고도 한다. 사용자들은 이 경로에 커스텀한 jar
파일들을 추가하기도 한다.
자바 플랫폼은 특정 설정을 유지하기 위해 property setting 을 사용한다. 어떻게 사용하는냐에 따라 /jre/lib/
안에 있는 다른 폴더에 위치한다.
calendar.properties
: Calendar configurationlogging.properties
: Logging configurationnet.properties
: Networking configuration/jre/lib/deploy/
: Deployment properties/jre/lib/management/
: Management Properties위에서 언급한 것 외에도 다음 파일 등을 갖는다.
jre/lib/security
: Security managementjre/lib/applet
: 특정 작업을 수행하기 위한 응용프로그램을 위한 경로jre/lib/fonts
: 폰트와 관련된 파일들이 저장되어 있다.💡 Summary
자바로 작성한 코드를 실행하려면, 기계어로 변환하는 컴파일 시점(Compiletime)을 거친다. 컴파일이 완료된 코드를 사용자가 실행하여 동작되는 것을 런타임(Runtime)이라고 한다.
자바의 모든 기능을 갖는 JDK(Java Development Kit)는 JRE를 포함한다. JRE는 Java Virtual Machine(JVM), Java Program을 실행하기 위한 Class, Property 파일로 구성된다.
Reference