✨ 1일 1개발지식

[비전공자 전공자 되기 Part 5] 🧠 개발자라면 알아야 할 프로그래밍 기초 개념 정리 — 고급어부터 SDK까지

twoweekhee 2026. 3. 24. 09:35

안녕하세요! 트윅히입니다.

오늘은 컴퓨터 언어의 레벨과 종류에 대해서 스리슬쩍 알아보겠습니다.!!

 

저도 이 시리즈 포스팅을 하며 명확하게 이해를 더 하고 있어요.

강의를 보거나 무언가 찾아볼때 100프로 얻어내겠다는 마음보다

하나라도 얻어가는 게 있으면 무척 기뻐하는 편인데여

 

사실 현업을 하다보면 간극 매꾸는 게 쉽지 않은데 이런 글들을 자주 보며

기초를 다지고 그걸로 또 응용을 해보고 하는 과정이 재밌는 것 같아요!

 

요즘 개발 공부하는 게 무척 즐겁습니다. ㅎㅎㅎ

 


📋 목차

  1. 고급어(High-level)와 저급어(Low-level)란?
  2. Native 언어 vs Managed 언어
  3. 컴파일러(Compiler) — 통번역사
  4. 인터프리터(Interpreter) — 동시통역사
  5. 컴파일러 vs 인터프리터 비교
  6. API — 공구 하나
  7. SDK — 공구 세트
  8. 마치며

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를 설치하면 되겠네" 하는 식으로요 😊

앞으로도 이런 기초 개념들을 꾸준히 정리해 나가겠습니다.

궁금한 점이나 추가로 다뤘으면 하는 주제가 있다면 댓글로 알려주세요!