Java 기본 문법 및 JVM 구성(1) - Java동작 원리

ASAC 웹 풀스택
2024. 9. 25. 11:13
목차
  1. 컴파일(complie)과정
  2. 런타임(Runtime) 과정
  3. Interllj가 알려주는 컴파일에러
  4. JRE(Java Runtime Environment)
  5. JDK(Java Development Kit)
728x90

우리가 Java코드를 작성하면 그것이 어떻게 우리가 사용하는 웹 서버(혹은 프로그램)가 되는걸까?

먼저 프로그램이 동작하는 기본 원리를 집자면, 기계어가 머신에서 (해석되어) 실행되는 것이다.

기계어를 프로그램(정적)이라고 하고, CPU 및 메모리가 할당되어 실행되면 프로세스(동적)라고 한다.

컴파일(complie)과정

java코드(.java) -> (자바 컴파일러(javac)를 통해) ->  bytecode(.class)

  • .java를 컴파일해서 .class로 만들고 .class파일을 jar압축한다.

 

c언어로 보는 컴파일 과정

C 언어 는 어떤 머신에 구동할지 컴파일 단계에서 옵션을 주어 머신에 맞는 기계어를 컴파일(생성) - C, C++ 코드 (.c .cpp) 의 경우에는 컴파일러(GCC/LLVM)을 통해 ⇒ 기계어 (Binary Code) 변환 후 바로 머신 에 동작

런타임(Runtime) 과정

bytecodes(.class) -> (자바엔진(JVM)을 통해) -> 기계어(binary code)

  • Interpreter 인터프리터 = 자바 엔진(JVM)
  • JVM은 JVM을 사용하고 있는 os, cpu에 따라서 바이너리 코드를 만든다.

Java 언어 는 컴파일 단계에서 단일 바이트코드 생성 후 JVM 이 머신에 맞추어 기계어로 인터프리팅 후 실행

 

Interllj가 알려주는 컴파일에러

Intellij 에서 컴파일 시 인지되는 문법 오류 등을 발생시키는걸 컴파일 에러 라 하고, 실제 동작중에 발생하는 에러는 런타임 에러

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를 베이스 이미지로 사용
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
  1. 컴파일(complie)과정
  2. 런타임(Runtime) 과정
  3. Interllj가 알려주는 컴파일에러
  4. JRE(Java Runtime Environment)
  5. JDK(Java Development Kit)
'ASAC 웹 풀스택' 카테고리의 다른 글
  • Java 기본 문법 및 JVM 구성(3) - ⭐️Exception 예외 처리
  • Java 기본 문법 및 JVM 구성(2) - 자바 개발 환경 설정(Intellij, Gradle, Lombok)
  • React 의 특장점, 렌더 라이프사이클 및 Hook(7) - immer(리렌더링 이슈 해결)
  • React 의 특장점, 렌더 라이프사이클 및 Hook(6) - Ref
hapBday
hapBday
hapBday
개발자로 성장하기 위한 기록들
hapBday
전체
오늘
어제
  • 분류 전체보기 (205)
    • CS (12)
      • 컴퓨터네트워크 (11)
      • 운영체제 (0)
      • 분산 시스템 (0)
      • 데이터베이스 (1)
    • Spring (47)
      • Spring 핵심 원리 (13)
      • Spring MVC (15)
      • Spring DB (12)
      • Spring Security (6)
    • JPA (14)
    • 알고리즘 (30)
      • 프로그래머스 (6)
      • 백준 (20)
    • Design Pattern (0)
    • 언어 (5)
      • JAVA (5)
    • ASAC 웹 풀스택 (38)
      • Spring Boot (21)
      • React (0)
      • DevOps (8)
    • 트러블슈팅 (17)
    • DevOps (5)
      • Docker (5)
    • ETC (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • github

공지사항

  • 블로그 이전

인기 글

태그

  • 구현
  • spring boot
  • 김영한
  • CSRF
  • multi-stage
  • basicerrorcontroller
  • Java
  • Spring
  • 오블완
  • CORS
  • MVC
  • Session
  • JPA
  • cookie
  • x-lock
  • 백준
  • currency control
  • spring security
  • 프로그래머스
  • docker
  • docker workflow
  • docker best practices
  • 티스토리챌린지
  • s-lock
  • 3-layerd 아키텍쳐 패턴
  • S3
  • aws lambda
  • 트랜잭션
  • jwt
  • 인프런

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.3.0
hapBday
Java 기본 문법 및 JVM 구성(1) - Java동작 원리
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.