안녕하세요! 트윅히입니다.
오늘은 컴퓨터 언어의 레벨과 종류에 대해서 스리슬쩍 알아보겠습니다.!!
저도 이 시리즈 포스팅을 하며 명확하게 이해를 더 하고 있어요.
강의를 보거나 무언가 찾아볼때 100프로 얻어내겠다는 마음보다
하나라도 얻어가는 게 있으면 무척 기뻐하는 편인데여
사실 현업을 하다보면 간극 매꾸는 게 쉽지 않은데 이런 글들을 자주 보며
기초를 다지고 그걸로 또 응용을 해보고 하는 과정이 재밌는 것 같아요!
요즘 개발 공부하는 게 무척 즐겁습니다. ㅎㅎㅎ

📋 목차
- 고급어(High-level)와 저급어(Low-level)란?
- Native 언어 vs Managed 언어
- 컴파일러(Compiler) — 통번역사
- 인터프리터(Interpreter) — 동시통역사
- 컴파일러 vs 인터프리터 비교
- API — 공구 하나
- SDK — 공구 세트
- 마치며
1. 고급어(High-level)와 저급어(Low-level)란?
처음 이 용어를 들으면 뭔가 고급어는 어렵고, 저급어는 쉬울 것 같다는 느낌이 드는데... 사실 정반대입니다 😅
high level / low level은 "기계에 가깝냐, 사람에 가깝냐"의 차이입니다.
구분 특징
| 저급어 (Low-level) | 기계(CPU)에 가까운 언어. 대표적으로 **기계어(machine code)**와 어셈블리어 |
| 고급어 (High-level) | 사람이 이해하기 쉬운 언어. 우리가 흔히 쓰는 Python, Java, JavaScript 등 |
고급어로 작성한 코드는 보통 함수(function) 단위로 묶어서 구조화합니다.
그래서 팀원과 협업하거나 나중에 코드를 다시 읽을 때도 훨씬 수월합니다.
그리고 여기서 자연스럽게 나오는 질문 — "그럼 고급어로 작성한 코드를 기계가 어떻게 실행해?" 🤔
바로 번역(Translation) 과정이 필요합니다.
고급어를 기계어로 바꿔주는 것이죠.
이걸 해주는 게 바로 컴파일러와 인터프리터입니다.
2. Native 언어 vs Managed 언어
프로그래밍 언어는 런타임 환경 기준으로도 나눌 수 있습니다.
🦾 Native 언어
- 컴파일하면 CPU가 직접 실행할 수 있는 기계어가 생성됩니다.
- 중간 단계 없이 하드웨어와 직접 대화하는 방식이에요.
- 대표 언어: C, C++, Rust
- 장점: 실행 속도가 매우 빠릅니다.
- 단점: 메모리 관리를 개발자가 직접 해야 합니다. (실수하면 크래시 💥)
🤝 Managed 언어
- 컴파일하면 중간 언어(Bytecode 등)가 생성되고, **런타임(VM)**이 이를 대신 실행해 줍니다.
- 메모리 관리(GC, Garbage Collection)를 런타임이 알아서 해줘요.
- 대표 언어: Java (JVM), C# (.NET), Kotlin
- 장점: 메모리 관리 걱정이 줄고, 플랫폼 독립성을 가집니다.
- 단점: 런타임을 거치므로 Native보다 오버헤드가 있습니다.
3. 컴파일러(Compiler) — 통번역사
컴파일러는 책 한 권을 통째로 번역해서 출판하는 통번역사에 비유할 수 있습니다.
고급어로 작성된 소스 코드 전체를 읽고, CPU가 실행할 수 있는 기계어로 한 번에 번역합니다.
[소스 코드] → [컴파일러] → [기계어 실행 파일] → [실행]
예를 들어 C로 작성한 코드를 컴파일하면 .exe 또는 바이너리 파일이 생성되고, 이후 실행 시에는 번역 과정 없이 바로 실행됩니다.
장점:
- 실행 속도가 빠릅니다. (번역은 이미 끝났으니까요!)
- 배포 시 소스 코드를 노출하지 않아도 됩니다.
단점:
- 코드를 수정하면 다시 컴파일해야 합니다.
- 플랫폼(OS, CPU)에 따라 다르게 컴파일해야 할 수 있습니다.
대표 언어: C, C++, Rust, Go
4. 인터프리터(Interpreter) — 동시통역사
인터프리터는 회의장에서 실시간으로 말을 옮겨주는 동시통역사입니다.
소스 코드를 미리 번역하지 않고, 한 줄씩 읽으면서 즉시 실행합니다.
[소스 코드] → [인터프리터가 한 줄 읽기] → [즉시 실행] → [다음 줄...]
Python을 터미널에서 바로 실행해 본 경험이 있다면, 바로 그게 인터프리터 방식입니다.
# 이 코드를 저장 없이 바로 실행할 수 있어요
>>> x = 10
>>> print(x * 2)
20
장점:
- 코드 수정 후 즉시 실행 가능 → 개발 사이클이 빠릅니다.
- 플랫폼에 상관없이 인터프리터만 있으면 실행됩니다.
- 동적으로 코드를 생성하거나 실행하는 것도 유연하게 가능합니다.
단점:
- 실행 시마다 번역이 일어나므로 컴파일러보다 느립니다.
- 런타임 오류가 실행 중에 발견됩니다.
대표 언어: Python, JavaScript, Ruby
💡 JavaScript는 조금 특별한 케이스입니다.
원래 인터프리터 언어였지만,
V8 같은 현대 엔진은 JIT(Just-In-Time) 컴파일을 사용해 Native에 가까운 성능을 내기도 해요.
🎯 알아두면 좋은 사실: 크롬 브라우저 안에는 V8이라는 JavaScript 엔진이 내장되어 있습니다.
V8은 C++로 작성되어 있고, JIT 컴파일을 통해 JavaScript를 굉장히 빠르게 실행합니다.
덕분에 웹 브라우저에서도 꽤 복잡한 앱을 돌릴 수 있게 된 거예요!
5. 컴파일러 vs 인터프리터 비교
항목 컴파일러 인터프리터
| 번역 시점 | 실행 전 (한 번에) | 실행 중 (한 줄씩) |
| 실행 속도 | ⚡ 빠름 | 🐢 상대적으로 느림 |
| 수정 후 재실행 | 다시 컴파일 필요 | 바로 실행 가능 |
| 오류 발견 시점 | 컴파일 타임 | 런타임 |
| 유연성 | 낮음 | 높음 |
| 대표 언어 | C, C++, Go, Rust | Python, JS, Ruby |
대한민국 백엔드 개발자들이 사랑하는 자바는 하이브리드 언어라고 볼 수 있는데요!
이와 관련한 내용은 다음 포스팅에서 다뤄보겠습니다. ㅎㅎㅎ
6. API — 공구 하나
API = Application Programming Interface
Interface라는 단어가 핵심입니다. 인터페이스는 "함수(코드 묶음)"를 의미해요.
쉽게 말해, API는 공구 하나입니다. 🔧
예를 들어 카카오 지도 API를 사용한다고 하면, 카카오가 이미 만들어놓은 지도 기능을 내 앱에서 함수를 호출하는 방식으로 가져다 쓰는 것입니다. 내가 지도를 직접 구현할 필요가 없어요.
// 카카오 지도 API 사용 예시 (개념적 코드)
const map = new kakao.maps.Map(container, options);
// ↑ 이게 바로 API를 통해 기능을 호출하는 것입니다
API는 "어떻게 구현했는지"는 숨기고, "어떻게 사용하는지"만 공개합니다. 공구를 쓸 때 내부 구조를 몰라도 되는 것처럼요.
7. SDK — 공구 세트
SDK = Software Development Kit
API가 공구 하나라면, SDK는 공구 세트입니다. 🧰
SDK는 개발에 필요한 여러 API, 라이브러리, 문서, 예제 코드, 개발 도구 등을 하나로 묶어놓은 패키지입니다.
예를 들어 Anthropic Claude SDK를 설치하면:
pip install anthropic
이 한 줄로 Claude API를 호출하는 데 필요한 인증 처리, 요청/응답 파싱, 에러 핸들링 등 다양한 도구들이 한꺼번에 설치됩니다.
import anthropic # SDK 임포트
client = anthropic.Anthropic(api_key="...") # 인증
message = client.messages.create( # API 호출
model="claude-opus-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "안녕!"}]
)
API vs SDK 정리:
구분 설명 비유
| API | 특정 기능을 호출하는 인터페이스 | 공구 하나 (드라이버) |
| SDK | API + 라이브러리 + 도구 묶음 | 공구 세트 (드라이버, 망치, 렌치...) |
8. 마치며
오늘 다룬 개념들을 한 줄로 정리하면:
- 저급어 → 기계어, 고급어 → 사람이 읽는 코드
- Native = 기계와 직접 대화, Managed = 런타임이 중간에서 도와줌
- 컴파일러 = 미리 다 번역, 인터프리터 = 한 줄씩 즉석 번역
- API = 공구 하나, SDK = 공구 세트
이런 개념들은 처음엔 추상적으로 느껴지지만, 실제로 언어를 선택하거나 라이브러리를 쓸 때 자연스럽게 떠오르기 시작합니다.
"아, 이게 컴파일 언어라서 이런 특징이 있구나", "이건 SDK를 설치하면 되겠네" 하는 식으로요 😊
앞으로도 이런 기초 개념들을 꾸준히 정리해 나가겠습니다.
궁금한 점이나 추가로 다뤘으면 하는 주제가 있다면 댓글로 알려주세요!
'✨ 1일 1개발지식' 카테고리의 다른 글
| [비전공자 전공자 되기 Part 7] 🗂️ 자료구조 입문: 스택, 큐, 그리고 이진 트리까지 (1) | 2026.04.03 |
|---|---|
| [비전공자 전공자 되기 Part 6] ☕ 자바는 컴파일러 언어일까, 인터프리터 언어일까? — 하이브리드의 비밀 (0) | 2026.03.25 |
| [비전공자 전공자 되기 Part 4] 💻 개발자라면 알아야 할 운영체제 핵심 개념 정리(커널과 OS..등) (1) | 2026.03.23 |
| [비전공자 전공자 되기 Part 3] 💻 컴퓨터는 어떻게 계산할까? — 디지털 회로부터 메모리 관리까지 (0) | 2026.03.22 |
| [비전공자 전공자 되기 Part 2] 💻 컴퓨터는 어떻게 데이터를 이해할까? — 비트(bit)부터 이미지까지 (1) | 2026.03.16 |