Menu
Coddy logo textTech

런타임 환경이란 무엇인가요?

런타임 환경은 프로그램이 실행되는 동안 그 주변에 필요한 소프트웨어입니다. 코드를 실행하는 엔진, 프로그램이 호출하는 표준 라이브러리, 그리고 메모리, 오류, 운영체제 접근을 관리하는 기능으로 이루어져요. JVM, Node.js, CPython이 그 예예요.

글쓴이: Kevin Spektor, 공동 창업자, CTO

업데이트: 2026년 9월 24일

Node.js에서 console.log(typeof process)를 실행하면 object가 출력돼요. 같은 줄을 크롬 콘솔에 붙여 넣으면 undefined가 출력돼요. 두 곳 모두 언어는 같은 자바스크립트지만, 프로그램이 서로 다른 두 런타임 환경 안에서 실행되고 있고, 각 환경이 주는 도구가 달라요.

console.log(typeof process);  // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser

런타임 환경이 제공하는 것

여러분의 코드는 무엇을 할지 설명할 뿐이에요. 코드가 실행될 때는 여러분이 한 줄을 쓰기도 전에 설치되어 있던 소프트웨어 계층에 기대요. 이 계층은 보통 다섯 부분으로 이루어져요.

  1. 실행 엔진. 누군가는 코드를 실행해야 해요. 인터프리터, 가상 머신, JIT 컴파일러가 그 일을 해요. CPython, 자바 가상 머신(JVM), V8이 실행 엔진이에요.
  2. 표준 라이브러리. 텍스트, 수학, 날짜, 파일, 네트워크를 다루는 미리 만들어진 함수들이에요. 파이썬의 json 모듈이나 자바의 java.util 패키지가 그 예예요.
  3. 메모리 관리. 런타임이 객체에 메모리를 할당하고, 파이썬, 자바, 자바스크립트에서는 아무도 쓰지 않는 메모리를 가비지 컬렉터로 다시 해제해요.
  4. 오류 처리. 무언가 잘못되면 런타임이 프로그램을 통제된 방식으로 멈추고, 트레이스백이나 스택 트레이스로 어디서 문제가 생겼는지 알려 줘요.
  5. 운영체제 접근. 파일 읽기, 네트워크 연결 열기, 환경 변수와 명령줄 인수 읽기는 모두 런타임을 거쳐요. 런타임이 프로그램을 대신해 운영체제에 요청해요.

파이썬 런타임에게 자기 자신에 대해 물어볼 수 있어요.

답은 코드가 어디서 실행되느냐에 따라 달라져요. 리눅스 서버에서 platform.system()은 'Linux'를, Mac에서는 'Darwin'을, 윈도우에서는 'Windows'를 돌려줘요. 재귀 한도(CPython의 기본값은 1000)는 파이썬 언어가 아니라 런타임이 정한 규칙이고, 첫 줄이 실행되기 전에 이미 불러와진 수십 개의 모듈은 런타임이 스스로를 준비한 흔적이에요.

자바: JDK, JRE, JVM의 차이

자바는 계층마다 이름이 따로 있어서 계층이 눈에 잘 보여요.

이름약자의 뜻들어 있는 것필요한 사람
JVMJava Virtual Machine바이트코드(.class 파일)를 실행하고 메모리를 관리하는 엔진아래 두 가지 모두에 포함
JREJava Runtime EnvironmentJVM과 표준 클래스 라이브러리자바 프로그램을 실행만 하는 사람
JDKJava Development KitJRE와 개발 도구: javac, jar, javadoc, jdb자바 프로그램을 작성하는 사람

흐름은 이래요. JDK 도구인 javac Main.java(컴파일러)가 소스 코드를 Main.class로 바꾸고, java Main이 JVM을 시작해요. JVM은 클래스를 불러와 런타임 환경의 라이브러리와 함께 실행해요. .class 파일 하나가 윈도우, macOS, 리눅스에서 모두 실행되는 이유가 JVM이에요. 운영체제마다 자기 JVM이 있고, 모두 같은 바이트코드를 이해하거든요.

자바 11부터 오라클은 JDK만 배포하고 JRE를 따로 내려받을 수 없게 했어요. Eclipse Temurin 같은 일부 배포판은 여전히 JRE 패키지를 내놓아요. 자바를 배우고 있다면 JDK를 설치하세요. JRE가 가진 것을 모두 담고 있어요. 자바 설치 가이드에서 과정을 따라갈 수 있어요.

자바스크립트: 브라우저와 Node.js

자바스크립트는 웹 페이지 안에서 실행되도록 설계되었기 때문에, 첫 런타임 환경은 브라우저였어요. 브라우저 런타임은 코드에 페이지의 document, window, 타이머, 네트워크 요청을 위한 fetch를 주고, 여러분의 파일에 직접 접근하는 것은 일부러 막아요.

Node.js는 구글의 V8 엔진을 브라우저 밖으로 꺼내 다른 런타임으로 감쌌어요. document는 없지만, 파일을 위한 fs, 서버를 위한 http 같은 모듈과, 환경 변수와 인수를 위한 process 객체가 있어요. Deno와 Bun은 같은 언어를 위한 더 새로운 런타임으로, 각자 자기 도구를 갖고 있어요. 모두 같은 핵심 자바스크립트를 실행하고, 다른 것은 그 주변이에요. 더 알아보려면 Node.js 런타임과 이벤트 루프 페이지를 읽어 보세요.

파이썬: CPython과 그 친구들

"파이썬을 설치한다"는 말은 런타임 환경을 설치한다는 뜻이에요. CPython 인터프리터, 표준 라이브러리, 그리고 패키지를 추가하는 pip이에요. 같은 언어를 위한 다른 런타임도 있어요. PyPy는 속도를 위해 JIT 컴파일러를 더했고, MicroPython은 마이크로컨트롤러에서 돌아갈 만큼 작아요.

가상 환경(python3 -m venv .venv)은 새 런타임이 아니에요. 이미 있는 인터프리터를 가리키면서 한 프로젝트에 자기만의 설치 패키지 모음을 줘요. 그래서 두 프로젝트가 같은 라이브러리의 서로 다른 버전을 쓸 수 있어요. 가상 환경을 참고하세요.

컴파일 타임과 런타임

"런타임"은 어떤 순간을 가리키기도 해요. 소스가 번역되는 컴파일 타임과 대비되는, 프로그램이 실행되고 있는 기간이에요. 컴파일러가 거부하는 실수는 컴파일 타임 오류이고, 0으로 나누기처럼 프로그램이 실행되는 동안에만 나타나는 실수는 런타임 오류예요. 런타임 환경은 그 두 번째 기간에 함께 있는 소프트웨어예요.

기계어로 바로 컴파일되는 C에도 작은 런타임이 있어요. C 프로그램은 컴파일러 도구 체인이 제공하는 시작 코드에서 출발하고, printf와 malloc 같은 함수는 C 표준 라이브러리(대부분의 리눅스에서는 glibc, 윈도우에서는 Universal C Runtime)에서 와요. 가상 머신과 가비지 컬렉터가 없을 뿐이에요.

흔한 오해

  • "런타임 환경이 곧 운영체제다." 운영체제는 모든 프로그램을 위해 하드웨어를 관리해요. 런타임 환경은 그 위에 놓인 한 프로그램의 계층이에요. JVM 자체도 윈도우, macOS, 리눅스가 실행하는 프로그램이고, 운영체제를 대신하지 않아요.
  • "Node.js는 언어나 프레임워크다." Node.js는 자바스크립트를 위한 런타임 환경이에요. Express 같은 프레임워크는 그 안에서 실행되는 라이브러리예요.
  • "IDE를 설치하면 런타임도 설치된다." VS Code에는 파이썬도 자바도 들어 있지 않아요. 에디터와 런타임 환경은 따로 설치해요. 다만 IntelliJ IDEA 같은 일부 IDE는 JDK를 대신 내려받아 줄 수 있어요.
  • "언어가 같으면 어디서나 똑같이 동작한다." 파일 접근, 기본 한도, 쓸 수 있는 모듈처럼 런타임이 제공하는 기능은 다를 수 있어요. Node.js에서 도는 코드가 브라우저에서 실패하는 이유가 바로 그거예요.

다음으로 읽을 내용

대부분의 런타임 안에 있는 실행 엔진은 인터프리터이고, 그 페이지에서 컴파일러와의 비교도 볼 수 있어요. 모든 런타임의 아래에는 운영체제가 있어요. 아직 써 보지 않은 런타임에서 연습하려면 자바 강의나 자바스크립트 강의를 시작해 보세요.

자주 묻는 질문

런타임 환경의 예를 들어 줄 수 있나요?
대표적인 예는 JVM과 자바 표준 라이브러리로 이루어진 자바 런타임 환경(JRE)이에요. Node.js는 브라우저 밖에서 자바스크립트를 실행하는 런타임 환경이고, 브라우저 자체도 또 하나의 런타임 환경이에요. 파이썬에서는 CPython 인터프리터와 표준 라이브러리가 런타임이에요.
Node.js는 런타임 환경인가요?
네. Node.js는 구글의 V8 엔진 위에 만들어진 자바스크립트 런타임 환경이에요. 자바스크립트를 브라우저 밖에서 실행할 수 있게 해 주고, 파일, 네트워크, 프로세스를 다루는 모듈을 더해 줘요. 프로그래밍 언어도 프레임워크도 아니에요. Express 같은 프레임워크가 그 안에서 실행돼요.
런타임은 정확히 무슨 뜻인가요?
"런타임"에는 두 가지 뜻이 있어요. 하나는 컴파일 타임과 대비되는, 프로그램이 실행되고 있는 기간이에요. 그래서 그때에만 나타나는 오류를 런타임 오류라고 불러요. 다른 하나는 런타임 환경의 줄임말로, 그 기간 동안 프로그램을 받쳐 주는 소프트웨어예요.
JRE와 JDK 중 무엇을 설치해야 하나요?
자바로 코드를 작성한다면 JDK를 설치하세요. JDK에는 컴파일러 javac와 JRE의 모든 것이 들어 있어요. JRE만으로는 이미 있는 자바 프로그램을 실행할 수만 있어요. 자바 11부터 오라클은 JDK만 배포하므로, 최신 자바 버전이라면 JDK가 보통의 선택이에요.
JDK, JRE, JVM은 각각 무엇의 약자인가요?
JDK는 Java Development Kit(자바 개발 도구), JRE는 Java Runtime Environment(자바 런타임 환경), JVM은 Java Virtual Machine(자바 가상 머신)의 약자예요. JVM은 바이트코드를 실행하고, JRE는 JVM에 표준 라이브러리를 더한 것이고, JDK는 JRE에 javac 같은 개발 도구를 더한 것이에요.
Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기