# 프로그램과 언어 — 파이썬 · 자바스크립트 · Node

> **이 장에서 배우는 것**
> 프로그래밍 언어가 무엇이고 왜 여러 개인지, "런타임"이 왜 따로 필요한지,
> 그리고 이 매뉴얼에 나오는 Node.js · 파이썬이 각각 무슨 자리인지.

## 언어는 사람이 읽으려고 있는 것입니다

컴퓨터가 실제로 이해하는 것은 0과 1뿐입니다. 사람이 그걸로 일을 시킬 수는
없으니, 사람이 읽고 쓸 수 있는 문장으로 적고 **그걸 기계어로 옮기는 단계**를
둡니다. 그 문장의 문법이 프로그래밍 언어입니다.

```python
총액 = 가격 * 수량
if 총액 > 100000:
    print("무료배송")
```

**보면 대충 읽힙니다.** 그게 목적입니다.

## 언어가 여러 개인 이유

한국어와 영어처럼 **잘하는 분야가 다릅니다.**

| 언어 | 주로 쓰는 곳 | 이 매뉴얼에서 만나는 자리 |
|---|---|---|
| **파이썬**(Python) | 데이터 분석, AI, 자동화 스크립트 | AI 예제 코드가 거의 다 파이썬입니다 |
| **자바스크립트**(JavaScript) | 웹 화면, 서버 | 브라우저 안에서 도는 모든 것 |
| SQL | 데이터베이스 조회 | [데이터베이스](/guide/it-database) |
| 셸(bash) | 명령을 이어 붙이는 것 | 터미널에 치는 줄 |

**AI 예제가 파이썬인 것은 관행입니다.** 데이터·AI 쪽 도구가 파이썬으로 먼저
만들어졌고 그래서 예제도 파이썬으로 쓰입니다. 다른 언어로 못 하는 것이 아니라
**보여주기 좋은 공용어**에 가깝습니다.
([내 컴퓨터를 모델 서버로](/guide/ht-model-api)의 예제가 파이썬인 이유입니다.)

## 런타임 — 언어를 실행해주는 프로그램

여기가 헷갈리는 지점입니다. 언어로 적은 글은 **그 자체로는 안 돕니다.** 읽고
실행해주는 프로그램이 따로 있어야 합니다. 그걸 런타임이라고 합니다.

```mermaid
graph TD
  A["사람이 적은 코드<br/>app.js · script.py"] --> B["런타임<br/>Node.js · Python"]
  B --> C["실제로 돌아가는 프로그램"]
```

| 언어 | 런타임 | 확인 명령 |
|---|---|---|
| 자바스크립트 | **Node.js** | `node --version` |
| 파이썬 | **Python** | `python3 --version` |

> **자바스크립트는 원래 브라우저 안에서만 돌았습니다.** 그것을 브라우저 밖으로
> 꺼내 내 컴퓨터에서 돌게 해주는 것이 Node.js 입니다. 그래서 "Node를
> 설치한다"는 말은 **자바스크립트로 만든 프로그램을 돌릴 수 있게 한다**는
> 뜻입니다.

## 그래서 HyperTeams가 Node를 요구합니다

[준비물](/guide/ht-prerequisites)이 Node.js LTS를 깔라고 하는 이유가 이것입니다.
하이퍼팀즈(HyperTeams)가 자바스크립트로 만들어져 있어서, 그것을 실행할 런타임이
필요합니다.

```
✗ "HyperTeams가 Node.js로 만들어졌으니 나도 자바스크립트를 배워야 하나"
✓ 한글 문서를 읽으려고 한글 프로그램을 까는 것과 같습니다 — 쓸 줄 알 필요는 없습니다
```

**LTS**(Long Term Support, 장기 지원)는 "한동안 고쳐주기로 약속한 안정 버전"을
말합니다. 최신 버전은 더 새롭지만 덜 검증됐습니다. **업무용은 LTS입니다.**

## 패키지와 버전

프로그램은 남이 만든 부품을 가져다 씁니다. 그 부품 하나가 **패키지**이고, 그걸
받아오는 도구를 패키지 매니저라고 합니다.

| 언어 | 패키지 매니저 | 부품이 쌓이는 곳 |
|---|---|---|
| 자바스크립트 | `npm` · `pnpm` | `node_modules` 폴더 |
| 파이썬 | `pip` | 가상환경 |

**버전이 왜 늘 따라다니냐면**, 부품이 바뀌면 그걸 쓰는 프로그램이 조용히
깨지기 때문입니다. `v20.11.0` 처럼 세 자리로 적고, 앞자리가 바뀌면 "안 맞을 수
있다"는 신호입니다.

## 스크립트와 앱

같은 코드라도 쓰임에 따라 이렇게 부릅니다.

| | 스크립트 | 애플리케이션 |
|---|---|---|
| 성격 | 한 번 돌고 끝 | 계속 떠 있음 |
| 예 | 파일 정리, 리포트 생성 | HyperTeams, 웹 서비스 |
| 자리 | [예약 실행](/guide/ht-schedule)에 걸어두는 것 | 켜두는 것 |

에이전트에게 "매일 아침 이걸 정리해줘"를 맡기면 대개 **스크립트**가 나옵니다.
그것을 예약에 거는 것이 [파이프라인](/guide/ht-pipelines)입니다.

## 자주 하는 오해

### "코드를 읽을 줄 알아야 이 매뉴얼을 볼 수 있나요"

**아니요.** 예제는 "이렇게 생겼다"를 보이려고 넣는 것이고, 필요하면 에이전트에게
"이 코드가 무슨 일을 하는지 한국어로 설명해줘"라고 시키면 됩니다. 그게 언어
모델이 가장 잘하는 일 중 하나입니다.

### "파이썬을 깔아야 하나요"

**HyperTeams를 쓰는 데는 필요 없습니다.** Node.js만 있으면 됩니다. 파이썬은
[모델 서버](/guide/ht-model-api) 예제처럼 직접 코드를 짤 때 나옵니다.

---

## 확인

**1. Node.js는 프로그래밍 언어입니까?**

<details>
<summary>답</summary>

**아닙니다.** 언어는 자바스크립트이고, Node.js는 그것을 브라우저 밖에서
실행해주는 **런타임**입니다.
</details>

**2. HyperTeams가 Node.js를 요구하는 이유는?**

<details>
<summary>답</summary>

**HyperTeams가 자바스크립트로 만들어졌기 때문**입니다. 실행할 런타임이
있어야 합니다. 사용자가 자바스크립트를 알 필요는 없습니다.
</details>

**3. 업무용으로 최신 버전과 LTS 중 무엇을 고릅니까?**

<details>
<summary>답</summary>

**LTS**입니다. 한동안 고쳐주기로 약속한 안정 버전이라 업무용에 맞습니다.
</details>

---

여기까지가 **내 컴퓨터 한 대** 이야기입니다. 다음부터는 그 밖으로 나갑니다 →
[네트워크와 통신](/guide/it-network)
