728x90
우리가 Java코드를 작성하면 그것이 어떻게 우리가 사용하는 웹 서버(혹은 프로그램)가 되는걸까?
먼저 프로그램이 동작하는 기본 원리를 집자면, 기계어가 머신에서 (해석되어) 실행되는 것이다.
컴파일(complie)과정
java코드(.java) -> (자바 컴파일러(javac)를 통해) -> bytecode(.class)
- .java를 컴파일해서 .class로 만들고 .class파일을 jar압축한다.
c언어로 보는 컴파일 과정
런타임(Runtime) 과정
bytecodes(.class) -> (자바엔진(JVM)을 통해) -> 기계어(binary code)
- Interpreter 인터프리터 = 자바 엔진(JVM)
- JVM은 JVM을 사용하고 있는 os, cpu에 따라서 바이너리 코드를 만든다.
Interllj가 알려주는 컴파일에러
JRE(Java Runtime Environment)
java "구동"을 위한 모든것
이전에 배운 javascript runtime environment는 2가지 종류가 있다고 했다.
- Web Browser(V8 기반 Chrome): Web API + Javascript Engine
- Web Server(V8 기반 Node.js): Node API(+LIBUV) + Javascript Engine
-> 엔진+ 라이브러리(API)가 런타임 환경이다.
Java Runtime Environment도 Javascript 때와 구성은 동일하다.
- JRE: Other Libraries(API) + JVM(Java Virutal Machine)
JDK(Java Development Kit)
JRE + Java "개발"을 위한 모든 것(컴파일러 등)
Java를 위한 SDK(Software Development Kit)
JRE와 JDK를 용례에 따라 구분
- java "개발"을 한다: JDK설치
- Intellij IDE를 통해 자바 개발을 하고 싶다면, 자바 개발에 필요한 모든 도구가 필요하기에 JDK 설치
- 리눅스 혹은 Docker의 컨테이너에서 자바를 빌드하기 위해서는 JDK설치
- Dockerfile내에서 자바를 빌드만할 수도 있고, 자바를 빌드하고 구동까지 할 수 있다.
- spring에서 Dockerfile생성하는 법
FROM eclipse-temurin:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
이 Dockerfile인 경우 자바를 빌드만 한 경우
- java 를 "구동만" 시키고 싶다: JRE 설치
- 리눅스 혹은 Dockerfile의 컨테이너에서 자바를 구동하기 위해서는 JRE 설치
- Docker Image 정의 방식 = Dockerfile 정의 방식 | 자바 구동은 일반적으로 Gradle Run으로 실행
- JRE 를 베이스이미지로 사용 시 -> JAR 가져다 -> JRE로 바로 구동
- JDK를 베이스이미지로 사용 시 -> 소스코드 가져다 -> (JDK로) JAR로 컴파일 후 -> 구동
- 컴파일이 필요한가? 를 생각해볼 필요가 있을까를 생각해보면 효율적으로 이미지를 생성할 수 있을 거 같다
- 도커 파일에서 자바를 빌드하고 구동을 해야한다면 JDK를 베이스 이미지로 사용
- 리눅스 혹은 Dockerfile의 컨테이너에서 자바를 구동하기 위해서는 JRE 설치
728x90
'ASAC 웹 풀스택' 카테고리의 다른 글
Java 기본 문법 및 JVM 구성(3) - ⭐️Exception 예외 처리 (3) | 2024.09.27 |
---|---|
Java 기본 문법 및 JVM 구성(2) - 자바 개발 환경 설정(Intellij, Gradle, Lombok) (2) | 2024.09.25 |
React 의 특장점, 렌더 라이프사이클 및 Hook(7) - immer(리렌더링 이슈 해결) (1) | 2024.09.22 |
React 의 특장점, 렌더 라이프사이클 및 Hook(6) - Ref (0) | 2024.09.22 |
React 의 특장점, 렌더 라이프사이클 및 Hook(4) - State (1) | 2024.09.22 |