자바 컴파일 순서
Java 컴파일 과정은 소스 코드를 실행 가능한 형식으로 변환하는 과정입니다.
소스코드 작성
- 개발자가 소스코드를 작성(. java)합니다.
컴파일
- 자바 컴파일러(Java Compiler)가 자바 소스를 컴파일합니다.
- 이때 나오는 파일은 자바 바이트 코드(. class) 파일로 변환해 줍니다.
- 아직은 컴퓨터가 읽을 수 없고, 클래스 파일은 JVM(자바 가상머신)에서 실행할 수 있는 형태입니다.
클래스 로딩
- 컴파일된 바이트 코드를 JVM의 클래스로더(class Loader)에게 전달합니다.
- 클래스 로더는 JVM에 메모리에 올려줍니다.
바이트 코드 실행
- 실행 엔진은 JVM 메모리에 올라온 바이트코드들을 명령어 단위로 하나씩 가져와서 실행합니다.
- 바이트 코드를 기계어로 변환하여 실제 하드웨어에서 프로그램이 실행되게 합니다.
- 인터프리터 : 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행.
- JIT 컴파일러 (Just -In-Time Compiler) : 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에 해당 메서드를 더 이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행
스프링부트에서의 자바 컴파일
💡빌드 및 배포
Maven이나 Gradle 같은 빌드 도구를 사용하여 소스 코드를 컴파일하고, 실행 가능한 JAR파일로 패키징 합니다.
이 과정에서 다양한 의존성과 함께 관리하고, 환경별 설정을 자동화할 수 있습니다.
💡 핫스왑 및 리로딩
개발 중 코드 변경 시, 'spring-boot-devtools'와 같은 도구를 사용하여 변경사항을 자주 컴파일 및 실행 과정을 반복합니다.
💡 테스트 및 품질 관리
컴파일 단계에서 문법 오류를 검출하고, 'Junit'과 'Spring Test'등의 단위, 통합 테스트를 실행하여 애플리케이션의 안정성을 확보합니다.
그렇다면 여기서 궁금한 점! JVM이란 무엇일까?
JVM( Java Virtual Machine )
자바를 실행하기 위한 가상 머신입니다.
독립적으로 자바를 실행가능하게 하며, 메모리 관리 및 보안 기능을 제공, 프로그램의 안정성을 높입니다.
JVM의 주요 역할
바이트 코드 해석 및 실행
- (. java) 파일을 (. class) 파일로 변환해 줍니다.
- 이 바이트 코드를 해석하거나, JIT컴파일을 통해 기계어로 변환하여 실제 실행합니다.
메모리 관리
- 가비지 컬렉션 수행, 자동으로 메모리 관리를 해줍니다.
보안 및 안정성
- 클래스 로더와 보안 관리자를 통해 자바 애플리케이션의 보안을 강화합니다.
플랫폼 독립
다시 말해, JVM이 없으면 자바를 사용할 수가 없다.
그럼 JVM은 어떻게 설치하는 것일까?
JDK (Java Development Kit)
애플리케이션을 개발하고 실행하기 위해 필요한 도구와 라이브러리를 제공하는 소프트웨어 개발 키트입니다.
JDK의 역할
- 개발
- 실행
- 도구제공
JDK의 구성요소
자바 컴파일러(javac)
- 자바 소스 코드(. java 파일)를 바이트코드(. class 파일)로 컴파일하는 도구입니다. 바이트코드는 JVM에서 실행될 수 있는 형식입니다.
JVM (Java Virtual Machine)
- 자바 바이트 코드를 실행하는 가상 머신입니다. JDK 자체에는 JVM이 포함되어 있습니다
자바 API 라이브러리
- 자바 개발에 필요한 다양한 클래스와 인터페이스를 포함하는 표준 라이브러리입니다.
- java.lang, java.util, java.io 등 다양한 패키지가 포함되어 있습니다.
자바 실행 환경 (JRE, Java Runtime Environment)
- 자바 애플리케이션을 실행하는데 필요한 라이브러리와 JVM을 포함합니다.
- JRE는 JDK의 하위 집합으로 자바를 실행하는데 필요한 구성요소만 포함되어 있습니다.
도구와 유틸리티
- javadoc, jar, javap, keytool 등의 다양한 유틸리티 도구가 포함되어 있습니다.
- 이 도구들은 코드 문서화, JAR 파일 생성, 바이트코드 디스어셈블링, 보안 키 관리 등 다양한 작업을 지원합니다.
다들 JDK를 설치한 적이 있을 것이다!
jdk를 설치해 자연스럽게 Java를 사용할 수 있었던 것이다!
'CS' 카테고리의 다른 글
[CS] 오버라이딩 오버로딩 (0) | 2024.05.29 |
---|---|
[CS] DDL, DML, DCL (0) | 2024.05.10 |
[CS] 세션(Session)과 쿠키(Cookie) (0) | 2024.05.08 |
[CS] HTTP, HTTPS (0) | 2024.05.08 |
[CS] 메모리 구조 (0) | 2024.05.08 |