Java 아키텍처

발행: (2026년 2월 4일 오후 01:33 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

JDK

JDK(Java Development Kit)는 Java 애플리케이션을 개발하기 위한 도구와 라이브러리를 제공하며, JRE와 JVM과 함께 작동합니다. JRE(Java Runtime Environment)는 Java 프로그램을 실행하는 데 필요한 라이브러리와 JVM을 제공합니다. JVM(Java Virtual Machine)은 시스템 상에서 컴파일된 Java 바이트코드를 실행합니다.

Java Source Code
(.java)


┌────────────────────────┐
│          JDK           │
│                        │
│  Development Tools     │
│  ┌──────────────────┐ │
│  │ javac → Compile  │ │
│  │ java  → Run      │ │
│  │ javadoc → Docs   │ │
│  │ jar   → Package  │ │
│  └─────────┬────────┘ │
│            │          │
│            ▼          │
│        ┌────────┐     │
│        │  JRE   │     │
│        │        │     │
│        │  JVM   │     │
│        │ + Libs │     │
│        └────────┘     │
└────────────────────────┘


OS / Hardware

JRE

Java Runtime Environment(JRE)는 Java 프로그램이 정상적으로 실행되기 위해 필요한 소프트웨어 패키지입니다. JRE는 Java 바이트코드를 해석과 Just‑In‑Time(JIT) 컴파일을 결합하여 실행하는 Java Virtual Machine(JVM)으로 구성됩니다. JRE는 주로 Java 애플리케이션을 실행하는 역할을 담당하고, 배포 도구는 주로 Java Development Kit(JDK)에서 제공됩니다.

                    .class file (Bytecode)


┌─────────────────────────┐
│           JRE           │
│   (Java Runtime Env.)   │
│                         │
│  ┌───────────────┐      │
│  │      JVM      │      │
│  │───────────────│      │
│  │ Execution     │      │
│  │ Engine        │      │
│  │ ┌─────────┐   │      │
│  │ │Interpreter│ │      │
│  │ └─────────┘   │      │
│  │ ┌─────────┐   │      │
│  │ │   JIT    │ │      │
│  │ │ Compiler │ │      │
│  │ └─────────┘   │      │
│  └───────────────┘      │
│  ┌───────────────┐      │
│  │ Java Libraries│      │
│  │ (API Classes) │      │
│  └───────────────┘      │
└─────────────────────────┘


        Output

JVM

JVM은 Java 바이트코드를 위한 실행 환경을 제공하는 가상 머신입니다. JVM은 Java 코드와 하드웨어 및 운영 체제 사이의 중간 계층 역할을 하여, Java 프로그램이 다양한 플랫폼과 시스템에서 효율적이고 안정적으로 실행될 수 있도록 합니다.

      Bytecode
   (.class)


┌───────────────────────┐
│          JVM          │
│                       │
│  ┌─────────────────┐ │
│  │  Class Loader   │ │
│  └────────┬────────┘ │
│           │          │
│           ▼          │
│  ┌─────────────────┐ │
│  │ Runtime Data    │ │
│  │    Areas        │ │
│  │ (Heap, Stack)  │ │
│  └────────┬────────┘ │
│           │          │
│           ▼          │
│  ┌─────────────────┐ │
│  │ Execution       │ │
│  │   Engine        │ │
│  │ (Interpreter + │ │
│  │   JIT + GC)    │ │
│  └────────┬────────┘ │
│           │          │
│           ▼          │
│        Output        │
└───────────────────────┘
0 조회
Back to Blog

관련 글

더 보기 »

Garbage Collection 심층 분석 (JAVA)

이 댓글을 숨기시겠습니까? 게시물에서는 숨겨지지만 댓글의 퍼머링크를 통해 여전히 볼 수 있습니다. 하위 댓글도 숨깁니다.

Java 소개

!소개용 Java 커버 이미지https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s...

Zig vs Go: 제네릭

소개 Go는 버전 1.18에서 generics를 도입하여 함수와 struct를 타입으로 매개변수화할 수 있게 했습니다. Zig는 오랫동안 compile‑time generics를 지원해 왔습니다.