텔레그램 채널
📘 BruDash Tech Guide Vol.2

프로그래밍 언어의 모든 것
역사부터 실전까지

기계어부터 Python, Rust까지 — 모든 프로그래밍 언어를 역사, 철학, 문법, 실전 활용까지 빠짐없이 다룹니다. 코딩을 모르는 사람도 "아, 이런 거구나" 할 수 있게.

📜

컴퓨터 언어의 역사기계어에서 현대 언어까지, 인류가 기계와 대화하는 법을 배운 이야기

프로그래밍 언어의 역사는 곧 "인간이 컴퓨터에게 일을 시키는 방법"의 진화 역사입니다. 처음에는 0과 1만 이해하는 기계에게 0과 1로 말해야 했지만, 지금은 거의 영어처럼 자연스러운 명령으로 복잡한 작업을 시킬 수 있게 되었습니다.

🔢 1세대: 기계어 (Machine Code) — 1940년대

세상 최초의 프로그래밍은 말 그대로 전기 스위치를 물리적으로 넣고 빼는 것이었습니다. ENIAC(1946년, 세계 최초의 범용 전자 컴퓨터)을 프로그래밍하려면 6명의 여성 프로그래머가 케이블을 뽑고 꽂으며 회로를 재배선해야 했습니다.

이후 프로그램을 숫자(0과 1)로 기록할 수 있게 되면서 "기계어" 시대가 열렸습니다. 기계어는 CPU가 직접 이해하는 유일한 언어입니다.

; x86 기계어의 예 — "Hello"를 출력하는 코드의 일부
10111000 00000100 00000000 00000000 00000000  ; MOV EAX, 4
10111011 00000001 00000000 00000000 00000000  ; MOV EBX, 1
10111001 [메모리 주소...]                        ; MOV ECX, msg
11001101 10000000                              ; INT 0x80 (시스템 콜)
😱 이걸 직접 썼다고요?
네, 진짜로요. 1940~50년대 프로그래머들은 이 0과 1을 종이에 손으로 적고, 천공카드(펀치카드)에 구멍을 뚫어서 컴퓨터에 넣었습니다. 숫자 하나 틀리면 프로그램 전체가 오작동했고, 오류를 찾는 것(디버깅)은 악몽이었습니다. 실제로 "버그(bug)"라는 용어는 1947년 하버드 Mark II 컴퓨터에 나방이 끼어서 고장 난 사건에서 유래했습니다.

🔤 2세대: 어셈블리어 (Assembly) — 1950년대

0과 1만 쓰는 건 너무 고통스러웠기 때문에, 사람이 읽을 수 있는 기호(니모닉)를 도입했습니다. 10111000 대신 MOV, 11001101 대신 INT 같은 영어 약어를 쓰는 겁니다.

; 어셈블리어 예제 — "Hello, World!" 출력 (Linux x86)
section .data
    msg db "Hello, World!", 10    ; 문자열 + 줄바꿈
    len equ $ - msg

section .text
    global _start

_start:
    mov eax, 4           ; 시스템콜: write
    mov ebx, 1           ; 파일 디스크립터: stdout
    mov ecx, msg         ; 출력할 문자열 주소
    mov edx, len         ; 문자열 길이
    int 0x80             ; 커널 호출

    mov eax, 1           ; 시스템콜: exit
    xor ebx, ebx         ; 종료 코드 0
    int 0x80

어셈블리어와 기계어는 1:1 대응 관계입니다. MOV EAX, 4는 정확히 10111000 00000100...으로 변환됩니다. 이 변환을 해주는 프로그램을 "어셈블러(Assembler)"라고 합니다.

어셈블리어는 기계어보다 훨씬 읽기 좋았지만, 여전히 CPU 아키텍처마다 완전히 다른 코드를 써야 했습니다. Intel CPU용 어셈블리와 ARM CPU용 어셈블리는 전혀 다른 언어나 마찬가지입니다.

💡 어셈블리가 아직도 쓰이는 곳
놀랍게도 어셈블리어는 2026년 현재도 쓰입니다! 운영체제 커널의 가장 낮은 층(부트로더, 인터럽트 핸들러), 임베디드 시스템(세탁기, 에어컨 칩), 보안 연구(악성코드 분석), 게임의 극한 최적화 등에서 여전히 필요합니다.

🚀 3세대: 고급 언어의 등장 — 1950~60년대

1957년
FORTRAN (포트란) — 최초의 고급 프로그래밍 언어
IBM의 존 배커스(John Backus)가 만들었습니다. "FORmula TRANslation"의 약자로, 수학 공식을 그대로 코드로 쓸 수 있게 해준 혁명적 언어입니다. "이런 걸로 프로그래밍이 되겠어?"라며 회의적이던 프로그래머들도, FORTRAN 컴파일러가 사람이 짠 어셈블리만큼 빠른 코드를 만들어내자 입을 다물었습니다. 70년이 지난 지금도 과학 계산, 기상 예보, 핵 시뮬레이션에서 현역으로 활약 중입니다.
1958년
LISP — AI의 시작
MIT의 존 매카시(John McCarthy)가 만든 언어. 인공지능 연구를 위해 태어났습니다. 괄호의 언어라는 별명처럼 (+ 1 2) 같은 독특한 문법을 가집니다. 가비지 컬렉션, 동적 타이핑, 함수형 프로그래밍 등 현대 언어의 많은 개념이 LISP에서 시작되었습니다. "LISP는 이상한 언어가 아니라, 다른 언어들이 아직 LISP를 따라잡지 못한 것"이라는 말이 있을 정도.
1959년
COBOL — 비즈니스의 언어
그레이스 호퍼(Grace Hopper) 제독의 아이디어에서 출발. "프로그래밍 언어가 영어처럼 읽힐 수 있어야 한다"는 철학으로 만들어졌습니다. ADD SALARY TO TOTAL 같은 문법이 실제로 동작합니다. 미국 금융 시스템의 85%가 아직도 COBOL로 돌아간다는 사실! 2020년 코로나 실업급여 폭주 때, COBOL 프로그래머 구인 공고가 올라와 화제가 되기도 했습니다.
1964년
BASIC — 모든 사람을 위한 언어
다트머스 대학의 존 케메니와 토마스 커츠가 "비전공자도 프로그래밍할 수 있어야 한다"는 신념으로 만들었습니다. 빌 게이츠와 폴 앨런은 1975년 Altair BASIC을 만들어 Microsoft를 창업했습니다. 10 PRINT "HELLO" / 20 GOTO 10 — 이 코드를 학교 컴퓨터실에서 쳐본 기억이 있는 분도 계실 겁니다.
1970년
Pascal — 구조적 프로그래밍의 교과서
니클라우스 비르트(Niklaus Wirth)가 프로그래밍 교육을 위해 만들었습니다. GOTO 문 남발을 줄이고 구조적 프로그래밍(함수, 반복문, 조건문)을 강조했습니다. 이후 델파이(Delphi)로 진화하여 윈도우 프로그래밍에서 한때 큰 인기를 끌었고, 한국에서도 1990~2000년대 학원에서 많이 가르쳤습니다.
1972년
C — 현대 프로그래밍의 아버지
벨 연구소의 데니스 리치(Dennis Ritchie)가 UNIX 운영체제를 만들기 위해 개발. 어셈블리만큼 빠르면서도 고급 언어의 편리함을 갖춘 혁명적 언어입니다. C 이후의 모든 주요 언어(C++, Java, C#, JavaScript, Python, Go, Rust)는 C의 영향을 받았습니다. "C를 이해하면 컴퓨터를 이해하는 것"이라는 말이 있을 정도.
1983년
C++ — C에 객체지향을 더하다
벨 연구소의 비야네 스트롭스트룹(Bjarne Stroustrup)이 C에 클래스(class) 개념을 추가하며 만들었습니다. 처음에는 "C with Classes"라고 불렸습니다. 게임 엔진(언리얼, 유니티 내부), 브라우저 엔진(Chrome의 V8), 운영체제, 고빈도 트레이딩 시스템 등 속도가 생명인 곳에서 여전히 왕좌를 지키고 있습니다.
1991년
Python — "인생은 짧으니, 파이썬을 쓰자"
네덜란드의 귀도 반 로섬이 크리스마스 연휴에 취미로 만들기 시작한 언어. 30년 후 세계에서 가장 인기 있는 언어가 될 줄은 본인도 몰랐을 겁니다. "코드는 쓰는 횟수보다 읽히는 횟수가 훨씬 많다"는 철학 아래, 가독성을 최우선으로 설계되었습니다.
1995년
Java & JavaScript — 같은 해, 다른 세계
Java는 선 마이크로시스템즈에서, JavaScript는 넷스케이프에서 거의 동시에 탄생. 이름이 비슷한 건 마케팅 때문이지 기술적으로는 전혀 다른 언어입니다(Java : JavaScript = 자동차 : 자전거카 정도의 관계). Java는 "Write Once, Run Anywhere"로 엔터프라이즈를, JavaScript는 웹 브라우저를 정복했습니다.
2009~2015년
현대 언어들의 등장 — Go, Rust, Swift, Kotlin, TypeScript
기존 언어들의 한계를 극복하기 위해 새로운 언어들이 쏟아져 나왔습니다. Go(구글, 2009)는 서버의 간결함을, Rust(모질라, 2010)는 메모리 안전을, Swift(애플, 2014)는 iOS 개발의 현대화를, Kotlin(젯브레인즈, 2011)은 Java의 번거로움을, TypeScript(마이크로소프트, 2012)는 JavaScript의 불안정함을 각각 해결하기 위해 태어났습니다.
🌊 흥미로운 트렌드
프로그래밍 언어의 역사는 "추상화 수준이 점점 높아지는" 방향으로 진행됩니다. 기계어(0과 1) → 어셈블리(기호) → C(변수와 함수) → Python(거의 영어) → AI 코딩(자연어로 지시). 2025~26년 현재, Claude Code나 GitHub Copilot으로 "한국어로 설명하면 코드를 자동 생성"하는 시대가 되었으니, 이 추상화의 끝은 결국 "프로그래밍 언어가 자연어와 합쳐지는 것"일지도 모릅니다.
🧠

프로그래밍 패러다임코드를 짜는 세 가지 철학 — 절차형, 객체지향, 함수형

프로그래밍 패러다임이란 "문제를 어떤 방식으로 사고하고 코드로 표현하느냐"의 철학입니다. 같은 문제도 접근 방식에 따라 완전히 다른 코드가 나옵니다.

📝

절차형 (Procedural)

위에서 아래로 순서대로 실행. 요리 레시피처럼 단계별 명령. C, Pascal, BASIC

🏗️

객체지향 (OOP)

세상을 "객체"로 모델링. 자동차=객체, 속도=속성, 가속=행동. Java, C++, Python

🔗

함수형 (Functional)

수학 함수처럼 입력→출력. 상태 변경 없이 조합. Haskell, LISP, Erlang

📝 절차형 프로그래밍 — 요리 레시피 스타일

가장 직관적인 방식입니다. "1번을 하고, 2번을 하고, 3번을 하라"는 순서대로 명령을 나열합니다.

# 절차형으로 "카페 주문 처리" 프로그래밍

# 1단계: 주문 받기
order = input("무엇을 주문하시겠어요? ")
size = input("사이즈는요? (S/M/L) ")

# 2단계: 가격 계산
if order == "아메리카노":
    price = 4500
elif order == "라떼":
    price = 5000

if size == "L":
    price += 500

# 3단계: 결제
print(f"{order} {size} = {price}원입니다")

# 4단계: 음료 제조
print("음료를 제조 중입니다...")
print("완성! 가져가세요.")

장점: 이해하기 쉽고, 작은 프로그램에 적합합니다.
단점: 프로그램이 커지면 코드가 스파게티처럼 엉키기 쉽습니다.

🏗️ 객체지향 프로그래밍 (OOP) — 레고 블록 스타일

현실 세계를 "객체(Object)"로 모델링합니다. 객체는 속성(데이터)과 행동(함수)을 함께 가집니다. 마치 레고 블록처럼, 독립적인 부품을 조립해서 큰 프로그램을 만듭니다.

# 객체지향으로 "카페" 프로그래밍

class Coffee:
    def __init__(self, name, base_price):
        self.name = name             # 속성: 이름
        self.base_price = base_price # 속성: 기본가격

    def get_price(self, size):     # 행동: 가격 계산
        extra = {"S": 0, "M": 300, "L": 500}
        return self.base_price + extra[size]

class Cafe:
    def __init__(self):
        self.menu = [                # 속성: 메뉴판
            Coffee("아메리카노", 4500),
            Coffee("라떼", 5000),
        ]
        self.sales = 0              # 속성: 매출

    def take_order(self, coffee, size):  # 행동: 주문
        price = coffee.get_price(size)
        self.sales += price
        return f"{coffee.name} {size} = {price}원"

# 사용
my_cafe = Cafe()
americano = my_cafe.menu[0]
print(my_cafe.take_order(americano, "L"))  # 아메리카노 L = 5000원

OOP의 4대 원칙: 캡슐화(내부 구현 숨기기), 상속(부모 기능 물려받기), 다형성(같은 명령 다른 동작), 추상화(복잡한 것을 단순하게). 이 네 가지 개념만 이해하면 대부분의 OOP 코드를 읽을 수 있습니다.

🔗 함수형 프로그래밍 — 수학 공식 스타일

수학의 함수처럼 "입력이 같으면 출력도 항상 같다"는 원칙을 지킵니다. 상태(state)를 바꾸지 않고, 데이터를 변환하는 함수들을 연결해서 프로그래밍합니다.

# 함수형 스타일로 "주문 목록 → 총액 계산"

orders = [
    {"name": "아메리카노", "price": 4500},
    {"name": "라떼", "price": 5000},
    {"name": "카푸치노", "price": 5500},
]

# 함수를 조합 (파이프라인)
prices = map(lambda o: o["price"], orders)     # 가격만 추출
expensive = filter(lambda p: p >= 5000, prices) # 5000원 이상만
total = sum(expensive)                           # 합계

# 한 줄로 쓰면:
total = sum(filter(lambda p: p >= 5000,
            map(lambda o: o["price"], orders)))

print(f"5000원 이상 총액: {total}원")  # 10500원

핵심 개념: 순수 함수(부작용 없음), 불변성(데이터 변경 없음), 고차 함수(함수를 인자로 전달). 현대 언어들은 대부분 객체지향 + 함수형을 모두 지원하는 멀티 패러다임입니다. Python, JavaScript, Kotlin, Rust 모두 두 가지를 섞어 쓸 수 있습니다.

🤔 비전공자가 알아야 할 핵심
패러다임이 뭔지 몰라도 됩니다. 중요한 건 "프로그래머에게 어떤 스타일로 짜달라고 할 수 있다"는 것입니다. "이 코드 함수형으로 리팩토링해줘"라고 하면 상태 관련 버그가 줄어들고, "OOP로 짜줘"라고 하면 나중에 기능을 추가하기 쉬워집니다. 적재적소에 맞는 패러다임을 선택하는 것이 진짜 실력입니다.

Python 🐍 세계에서 가장 인기 있는 프로그래밍 언어

탄생
1991년
창시자
귀도 반 로섬
난이도
쉬움
인기 순위
#1 🏆

📖 역사 — 크리스마스에 시작된 취미 프로젝트

1989년 크리스마스 연휴, 네덜란드의 프로그래머 귀도 반 로섬(Guido van Rossum)은 "쉽고 재미있게 프로그래밍할 수 있는 언어"를 만들기로 했습니다. 이름은 그가 좋아하던 영국 코미디 쇼 "몬티 파이선(Monty Python)"에서 따왔습니다. 뱀과는 아무 상관이 없지만, 로고가 뱀이 되어버렸죠.

Python의 핵심 철학은 "The Zen of Python"이라는 19개 원칙에 담겨 있습니다. 그 중 가장 유명한 것:

  • "Beautiful is better than ugly" — 아름다운 코드가 추한 코드보다 낫다
  • "Readability counts" — 가독성이 중요하다
  • "There should be one obvious way to do it" — 한 가지 확실한 방법이 있어야 한다

Python은 처음에는 니치 언어였지만, 2000년대 구글이 핵심 언어로 채택하고, 2010년대 AI/머신러닝 붐과 함께 폭발적으로 성장했습니다. 2026년 현재 TIOBE, Stack Overflow, GitHub 모든 인기 순위에서 1위입니다.

✍️ 문법 기초 — 왜 쉬운가

Python이 쉬운 이유는 들여쓰기(indentation)가 문법이기 때문입니다. 다른 언어는 중괄호 {}로 코드 블록을 구분하지만, Python은 그냥 탭(Tab) 한 번이면 됩니다.

# Python — 세상에서 가장 읽기 쉬운 "Hello World"
print("안녕하세요, 세계!")

# 변수 선언 — 타입 지정 필요 없음
name = "태현"
age = 35
stocks = ["삼성전자", "SK하이닉스", "한화에어로"]

# 조건문 — 영어 읽듯이
if age >= 20:
    print(f"{name}님, 성인이시네요")
else:
    print("미성년자입니다")

# 반복문 — for each 스타일
for stock in stocks:
    print(f"관심종목: {stock}")

# 함수 정의
def calculate_return(buy_price, sell_price):
    """수익률을 계산하는 함수"""
    return (sell_price - buy_price) / buy_price * 100

result = calculate_return(50000, 65000)
print(f"수익률: {result:.1f}%")  # 수익률: 30.0%

# 딕셔너리 — 키:값 쌍
portfolio = {
    "삼성전자": {"매수가": 55000, "수량": 100},
    "SK하이닉스": {"매수가": 180000, "수량": 20},
}

# 리스트 컴프리헨션 — Python의 꽃
expensive = [name for name, info in portfolio.items()
             if info["매수가"] > 100000]
print(expensive)  # ['SK하이닉스']

🌟 왜 이렇게 인기인가?

  • 배우기 쉽다: 프로그래밍 입문자의 80% 이상이 Python으로 시작합니다
  • 라이브러리가 압도적: 40만 개 이상의 패키지가 PyPI에 있습니다. "필요한 기능이 이미 있다"
  • AI/데이터 과학 독점: TensorFlow, PyTorch, Pandas, NumPy — AI의 언어가 Python입니다
  • 다재다능: 웹(Django/Flask), 자동화, 데이터분석, 게임, IoT, 금융 — 못 하는 게 없음
  • 커뮤니티가 거대: Stack Overflow 질문의 30%가 Python 관련

📦 pip와 가상환경 — Python의 생태계

pip는 Python의 패키지 관리자입니다. 다른 사람이 만든 라이브러리를 한 줄로 설치할 수 있습니다.

# 패키지 설치
$ pip install pandas         # 데이터 분석 도구
$ pip install flask          # 웹 서버 프레임워크
$ pip install requests       # HTTP 요청
$ pip install pykrx          # 한국 주식 데이터!

# 가상환경 — 프로젝트별로 독립된 환경
$ python3 -m venv myproject  # 가상환경 생성
$ source myproject/bin/activate  # 활성화 (Mac/Linux)
$ pip install flask          # 이 환경에만 설치됨
$ deactivate                 # 빠져나오기
💡 가상환경이 필요한 이유
프로젝트 A는 Flask 2.0이 필요하고, 프로젝트 B는 Flask 3.0이 필요할 수 있습니다. 가상환경 없이 전역 설치하면 충돌이 일어납니다. 마치 각 프로젝트마다 별도의 "방"을 만들어주는 것이라고 생각하면 됩니다.

🏠 BruDash에서의 Python 활용

BruDash 시스템은 Python을 핵심 언어로 사용합니다:

  • flask_app.py: Flask 웹 서버 — 대시보드 전체를 서빙하는 백엔드
  • collect_data.py: 매일 장전 시장 데이터를 자동 수집
  • expert_rag.py: PDF 문서를 검색하는 RAG 시스템
  • kiwoom 연동: 키움증권 API로 실시간 주가 데이터 수집
  • pykrx: 한국 주식 시장 데이터 분석 (이평선, RSI 등 기술적 지표)
  • SQLite3: 모든 데이터를 SQLite DB에 저장/조회
  • 텔레그램 봇: python-telegram-bot으로 알림 발송
# BruDash의 실제 코드 예시 — 주식 데이터 수집
from pykrx import stock
import sqlite3
from datetime import datetime

# 오늘 코스피 전 종목 시세 가져오기
today = datetime.now().strftime("%Y%m%d")
df = stock.get_market_ohlcv(today, market="KOSPI")

# SQLite에 저장
conn = sqlite3.connect("kiwoom_data.db")
df.to_sql("market_data", conn, if_exists="replace")
conn.close()

print(f"{len(df)}개 종목 데이터 저장 완료")

⚠️ Python의 단점

  • 느리다: C보다 10~100배 느릴 수 있음. 인터프리터 언어의 숙명
  • GIL (Global Interpreter Lock): 진정한 멀티쓰레딩이 안 됨
  • 모바일 앱 개발엔 부적합: iOS/Android 앱은 Swift/Kotlin이 표준
  • 타입 안전성 부족: 실행해봐야 오류를 발견함 (최근 Type Hints로 개선 중)
🎯 이것만 기억하세요
"Python은 만능 스위스 아미 나이프"입니다. 속도가 중요한 게임 엔진이나 OS 커널에는 부적합하지만, 그 외 거의 모든 분야에서 "빠르게 만들고 빠르게 실행"할 수 있는 최고의 선택입니다. 특히 AI/데이터 분야에서는 사실상 유일한 선택지입니다.

JavaScript 🌐 웹의 유일한 언어, 그리고 그 너머

탄생
1995년
창시자
브렌던 아이크
난이도
보통
인기 순위
#2

📖 역사 — 10일 만에 만든 세계 정복 언어

1995년 5월, 넷스케이프의 프로그래머 브렌던 아이크(Brendan Eich)는 경영진으로부터 "10일 안에 웹 브라우저용 스크립트 언어를 만들어라"는 황당한 요청을 받습니다. 그는 정말로 10일 만에 언어의 프로토타입을 완성했습니다.

처음 이름은 "Mocha"였다가 "LiveScript"로 바뀌었고, 최종적으로 당시 핫했던 Java의 인기에 편승하려고 "JavaScript"로 마케팅 이름을 바꿨습니다. Java와는 기술적으로 전혀 관계가 없습니다. "Java와 JavaScript의 관계는 car와 carpet의 관계"라는 유명한 농담이 있을 정도.

10일 만에 만든 언어답게 초기에는 "장난감 언어"라는 비판이 많았습니다. 하지만 웹 브라우저에서 실행되는 유일한 프로그래밍 언어라는 독점적 위치 덕분에, 웹이 성장할수록 JavaScript도 성장했습니다. 2009년 Node.js의 등장으로 서버에서도 쓸 수 있게 되면서 "어디서나 JavaScript"의 시대가 열렸습니다.

✍️ 문법 — 유연한 만큼 위험한

// 기본 문법
let name = "태현";           // 변경 가능한 변수
const PI = 3.14159;          // 변경 불가능한 상수

// 함수 (여러 가지 방법)
function greet(name) {        // 전통적 방법
    return `안녕하세요, ${name}님!`;
}

const greet2 = (name) => `안녕, ${name}!`;  // 화살표 함수 (ES6)

// 객체 — JavaScript의 핵심 자료구조
const stock = {
    name: "삼성전자",
    code: "005930",
    price: 55000,
    getInfo() {
        return `${this.name}(${this.code}): ${this.price.toLocaleString()}원`;
    }
};

console.log(stock.getInfo());
// "삼성전자(005930): 55,000원"

// 배열 + 고차함수 (함수형 스타일)
const prices = [55000, 180000, 320000, 42000];
const expensive = prices
    .filter(p => p > 100000)           // 10만원 이상만
    .map(p => p * 1.1)                  // 10% 인상
    .reduce((sum, p) => sum + p, 0);    // 합계

// 비동기 처리 — JS의 핵심!
async function fetchStockPrice(code) {
    const response = await fetch(`/api/stock/${code}`);
    const data = await response.json();
    return data.price;
}

// Promise — "나중에 결과를 줄게"
fetchStockPrice("005930")
    .then(price => console.log(`현재가: ${price}`))
    .catch(err => console.error("오류!", err));

🖥️ 브라우저 vs 서버 (Node.js)

구분브라우저 JavaScriptNode.js (서버)
실행 환경Chrome, Firefox 등 웹 브라우저서버 컴퓨터
할 수 있는 것DOM 조작, 이벤트 처리, 애니메이션파일 읽기/쓰기, DB 접근, API 서버
접근 가능화면 요소, localStorage, Cookie파일 시스템, 네트워크, OS
접근 불가파일 시스템, OS 명령DOM, window 객체
엔진V8(Chrome), SpiderMonkey(Firefox)V8 (Chrome에서 추출)
대표 프레임워크React, Vue, AngularExpress, NestJS, Fastify

📦 npm — 세계 최대의 패키지 저장소

npm(Node Package Manager)은 200만 개 이상의 패키지가 등록된 세계 최대 소프트웨어 레지스트리입니다. Python의 pip와 같은 역할이지만 규모가 훨씬 큽니다.

# npm 사용법
$ npm init                   # 프로젝트 초기화
$ npm install express        # 웹 서버 프레임워크
$ npm install react          # UI 라이브러리
$ npm install axios          # HTTP 요청

# package.json에 의존성이 기록됨
# node_modules/ 폴더에 실제 코드가 설치됨
# (이 폴더는 거대해져서 밈이 될 정도...)
🤪 JavaScript의 유명한 이상한 점들
10일 만에 만든 부작용으로, JS에는 유명한 "이상한 동작"들이 있습니다:
[] + [] === "" (빈 배열 더하기 = 빈 문자열?!)
[] + {} === "[object Object]" (배열 + 객체 = 뭐??)
"11" + 1 === "111" (문자열 우선 연결)
"11" - 1 === 10 (뺄셈은 또 숫자로!)
NaN !== NaN (자기 자신과 같지 않은 유일한 값)
typeof NaN === "number" (숫자가 아닌데 타입은 숫자)
이런 함정들 때문에 TypeScript가 만들어졌습니다.

🏠 BruDash에서의 JavaScript 활용

  • dashboard.js: 대시보드 프론트엔드 전체 — 차트, 모달, 탭 전환, 실시간 업데이트
  • 시황 보고서 HTML: 다크모드 토글, 접기/펼치기, 평가 위젯, 인터랙티브 차트
  • API 통신: fetch로 Flask 서버와 JSON 데이터를 주고받음
  • DOM 조작: 종목 검색, 테마 필터링, 실시간 가격 표시

Rust 메모리 안전과 속도를 모두 잡은 혁명적 언어

탄생
2010년
창시자
그레이든 호어
난이도
어려움
만족도
#1 😍

📖 왜 만들어졌나 — 메모리 안전 문제

C/C++는 빠르지만 메모리를 프로그래머가 직접 관리해야 합니다. 이 과정에서 발생하는 버그들 — 버퍼 오버플로, Use-after-free, 널 포인터 역참조 등 — 은 전 세계 보안 취약점의 약 70%를 차지합니다. Microsoft는 자사 보안 패치의 70%가 메모리 안전 관련이라고 밝히기도 했습니다.

모질라(Firefox 만든 회사)의 그레이든 호어(Graydon Hoare)는 아파트 엘리베이터가 메모리 관련 소프트웨어 버그로 자꾸 고장 나는 것에 짜증이 나서 Rust를 만들기 시작했다는 일화가 있습니다.

Rust의 핵심 아이디어는 "컴파일 시점에 메모리 안전을 보장"하는 것입니다. 프로그램이 실행되기 전에 컴파일러가 메모리 관련 버그를 모두 잡아냅니다.

🔑 소유권(Ownership) — Rust의 핵심 개념

Rust에서 모든 값은 "소유자(owner)"가 있습니다. 소유자가 사라지면(스코프를 벗어나면) 값도 자동으로 메모리에서 해제됩니다. 중요한 규칙 세 가지:

  1. 각 값은 한 번에 하나의 소유자만 가질 수 있다
  2. 소유권이 이동(move)하면 원래 변수는 더 이상 유효하지 않다
  3. 소유자가 스코프를 벗어나면 자동으로 메모리 해제
// Rust — 소유권 예시
fn main() {
    let s1 = String::from("hello");  // s1이 소유자
    let s2 = s1;                       // 소유권이 s2로 이동!
    // println!("{}", s1);             // ❌ 컴파일 에러! s1은 더 이상 유효하지 않음
    println!("{}", s2);                // ✅ s2가 소유자이므로 OK

    // 빌려주기(borrowing) — 소유권을 넘기지 않고 참조만
    let s3 = String::from("world");
    print_length(&s3);                 // 빌려줌 (참조 전달)
    println!("s3 is still valid: {}", s3);  // ✅ 여전히 유효!
}

fn print_length(s: &String) {       // 빌려받기 (& = 참조)
    println!("길이: {}", s.len());
}   // s는 빌려온 것이므로 여기서 해제되지 않음
😤 Rust 컴파일러와의 전쟁
Rust를 배우는 과정은 종종 "컴파일러와 싸우는 것"이라고 묘사됩니다. 컴파일러가 매우 엄격해서 "이 코드는 위험할 수 있다"며 컴파일 자체를 거부합니다. 처음에는 짜증나지만, 이 덕분에 컴파일이 되면 런타임에 크래시할 일이 거의 없습니다. "컴파일이 됐으면 거의 맞는 코드"라는 뜻입니다.

어디에 쓰이나?

  • 시스템 프로그래밍: Linux 커널(6.1부터 Rust 공식 지원), Android, Windows 일부
  • 웹 브라우저: Firefox의 렌더링 엔진(Servo), Chrome의 일부
  • 클라우드: AWS의 Firecracker(Lambda 기반), Cloudflare Workers
  • 블록체인: Solana, Polkadot
  • CLI 도구: ripgrep(rg), bat, exa, fd — Rust로 만든 도구가 기존 것보다 빠름
  • WebAssembly: Rust는 WASM으로 컴파일하기 가장 좋은 언어
💡 Rust를 배워야 할까?
솔직히 대부분의 사람에게는 필요 없습니다. 시스템 프로그래밍이나 성능이 극도로 중요한 분야가 아니라면 Python이나 Go로 충분합니다. 하지만 "프로그래밍의 본질"을 깊이 이해하고 싶거나, 메모리와 동시성을 제대로 다루고 싶다면 Rust만큼 좋은 교재는 없습니다. Stack Overflow 설문에서 8년 연속 "가장 사랑받는 언어" 1위인 이유가 있습니다.

Go (Golang) 🐹 구글이 만든 초고속 서버 언어

탄생
2009년
창시자
로버트 그리즈머 외
난이도
쉬움
특기
동시성

📖 구글이 만든 이유 — C++에 지쳤다

구글 내부에서 C++ 프로젝트를 컴파일하는 데 45분이 걸렸습니다. 이에 짜증이 난 세 명의 전설적 프로그래머 — 로버트 그리즈머, 롭 파이크, 켄 톰프슨(유닉스와 C의 공동 창시자!) — 가 컴파일이 빨리 되면서도 쉽고 안전한 새 언어를 만들기로 했습니다. Go의 컴파일은 수십만 줄 코드도 몇 초면 끝납니다.

🔑 고루틴(Goroutine) — Go의 킬러 기능

고루틴은 초경량 쓰레드입니다. 일반 쓰레드가 1MB 메모리를 쓰는 반면, 고루틴은 2KB만 씁니다. 수백만 개의 고루틴을 동시에 돌릴 수 있어서, 수만 명이 동시 접속하는 서버를 효율적으로 만들 수 있습니다.

package main

import (
    "fmt"
    "time"
)

// 주식 가격을 가져오는 함수
func fetchPrice(stock string, ch chan string) {
    time.Sleep(1 * time.Second)  // API 호출 시뮬레이션
    ch <- fmt.Sprintf("%s: 55,000원", stock)
}

func main() {
    ch := make(chan string, 3)

    // 3개를 동시에 요청! (고루틴)
    go fetchPrice("삼성전자", ch)
    go fetchPrice("SK하이닉스", ch)
    go fetchPrice("한화에어로", ch)

    // 3개 결과를 받음 (총 ~1초, 3초가 아님!)
    for i := 0; i < 3; i++ {
        fmt.Println(<-ch)
    }
}

어디에 쓰이나?

  • Docker — 컨테이너 기술의 핵심이 Go로 작성
  • Kubernetes — 클라우드 오케스트레이션의 표준
  • 구글, 우버, 드롭박스의 백엔드 서버
  • Terraform, Prometheus, Grafana — DevOps 도구의 80%가 Go
  • 높은 동시성이 필요한 마이크로서비스, API 서버
🎯 Go vs Python vs Rust
Python: 가장 쉬움, 가장 느림, AI/데이터에 최적
Go: 꽤 쉬움, 꽤 빠름, 서버/네트워크에 최적
Rust: 가장 어려움, 가장 빠름(C급), 시스템에 최적
"빠르게 만들고 유지보수하기 쉬운 서버"를 원하면 Go가 정답입니다.

Java 엔터프라이즈의 왕, 30년의 유산

탄생
1995년
창시자
제임스 고슬링
난이도
보통
특기
엔터프라이즈

📖 역사 — "Write Once, Run Anywhere"

1990년대 초, 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)은 원래 가전제품(TV 셋톱박스)용 프로그래밍 언어를 만들고 있었습니다. "Oak"이라는 이름이었지만, 상표 문제로 팀이 좋아하던 커피 브랜드 Java(인도네시아 자바 섬 원산 커피)로 이름을 바꿨습니다.

Java의 혁명적 아이디어는 JVM(Java Virtual Machine)입니다. Java 코드를 컴파일하면 "바이트코드"라는 중간 형태가 만들어지고, 이걸 각 운영체제의 JVM이 실행합니다. 덕분에 한 번 짜면 Windows, Mac, Linux 어디서든 돌아가는 "Write Once, Run Anywhere"가 실현되었습니다.

☕ Java의 특징

// Java의 "Hello World" — 왜 이렇게 길어??
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("안녕하세요, 세계!");
    }
}

// Python이면 print("안녕하세요, 세계!") 한 줄인데...
// Java는 클래스 선언, main 함수 선언, 접근 제어자 등이 필수입니다.
// 이런 "의식(ceremony)"이 Java의 장점이자 단점입니다.

// 주식 포트폴리오 관리 — OOP의 정석
public class Stock {
    private String name;
    private int price;
    private int quantity;

    public Stock(String name, int price, int quantity) {
        this.name = name;
        this.price = price;
        this.quantity = quantity;
    }

    public int getTotalValue() {
        return price * quantity;
    }

    public String toString() {
        return String.format("%s: %,d원 × %d주 = %,d원",
            name, price, quantity, getTotalValue());
    }
}

어디에 쓰이나?

  • 은행/금융: 한국 은행 시스템의 80%+ (국민은행, 신한은행 등) — Java 없으면 은행 멈춤
  • 안드로이드: Android 앱의 근간 (Kotlin과 함께)
  • 대기업 백엔드: 삼성, LG, SK, 네이버, 카카오 서버
  • 빅데이터: Hadoop, Spark, Kafka — Java/Scala 기반
  • 마인크래프트: 세계에서 가장 많이 팔린 게임이 Java로 만들어짐
⚠️ Java의 현실
Java는 "지루하지만 안정적"입니다. 새로운 언어들에 비해 코드가 장황(verbose)하고, 최신 트렌드를 따라가는 속도가 느립니다. 하지만 30년간 검증된 안정성과 방대한 생태계 때문에 대기업과 금융권에서 대체하기 어렵습니다. 한국에서 Java 개발자 수요는 여전히 1위입니다.

C / C++ ⚙️ 모든 것의 기반, 하드웨어와 대화하는 언어

C 탄생
1972년
C++ 탄생
1983년
난이도
어려움
속도
최상 🚀

📖 C — 현대 프로그래밍의 원점

1972년, 벨 연구소의 데니스 리치(Dennis Ritchie)가 UNIX 운영체제를 만들기 위해 C를 개발했습니다. 당시 운영체제는 어셈블리어로만 만들 수 있다고 여겨졌는데, C는 어셈블리만큼 빠르면서도 고급 언어의 편리함을 갖춘 최초의 언어였습니다.

데니스 리치와 함께 UNIX를 만든 켄 톰프슨은 나중에 Go의 공동 창시자가 됩니다. 벨 연구소에서 시작된 C-UNIX의 혈통이 현대 컴퓨팅의 거의 모든 곳에 흐르고 있습니다.

⚡ 포인터 — C의 꽃이자 악몽

포인터(pointer)는 메모리 주소를 직접 다루는 기능입니다. "변수의 값" 대신 "변수가 저장된 메모리 위치"를 조작할 수 있습니다. 이것이 C를 강력하게 만들지만, 동시에 가장 어렵게 만드는 요인입니다.

// C — 포인터 기초
#include <stdio.h>

int main() {
    int price = 55000;       // 주식 가격
    int *ptr = &price;       // ptr = price의 메모리 주소

    printf("가격: %d\n", price);     // 55000
    printf("주소: %p\n", ptr);       // 0x7ffee3a15b4c (메모리 주소)
    printf("값: %d\n", *ptr);        // 55000 (역참조)

    *ptr = 60000;                   // 포인터로 값 변경
    printf("변경 후: %d\n", price);  // 60000 (!)

    // 메모리 할당 — 직접 관리해야 함
    int *arr = (int*)malloc(10 * sizeof(int));  // 메모리 할당
    if (arr == NULL) return 1;               // 실패 체크 필수!
    // ... 사용 ...
    free(arr);                              // 반드시 해제! 안 하면 메모리 누수

    return 0;
}

어디에 쓰이나?

분야CC++
운영체제Linux, Windows, macOS 커널Windows 앱 계층
게임—언리얼 엔진, 대부분의 AAA 게임
임베디드세탁기, 에어컨, 자동차 ECU항공/우주 소프트웨어
데이터베이스SQLite, PostgreSQLMySQL, MongoDB
브라우저—Chrome(V8), Firefox
금융—고빈도 트레이딩 (HFT)
언어 런타임Python(CPython), RubyJava(JVM), Node.js(V8)
🤔 비전공자가 알아야 할 것
C/C++를 직접 배울 필요는 없습니다. 하지만 대부분의 프로그래밍 언어가 C/C++로 만들어졌다는 사실은 알아두세요. Python 자체가 C로 만들어졌고(CPython), JavaScript 엔진(V8)은 C++로 만들어졌습니다. 여러분이 Python 코드를 실행할 때, 밑바닥에서는 C 코드가 돌아가고 있는 겁니다.
📱

Swift & Kotlin모바일 세계의 공식 언어들

🍎 Swift — 애플 생태계의 새로운 심장
탄생
2014년
창시자
크리스 라트너
난이도
보통
용도
iOS/macOS

2014년 WWDC에서 애플이 깜짝 발표한 새 언어. 기존 Objective-C(1984년 탄생, 괄호 지옥으로 악명)를 대체하기 위해 만들어졌습니다. 창시자 크리스 라트너는 LLVM 컴파일러의 창시자이기도 합니다(나중에 테슬라 → 구글 → SiFive → Modular를 거치며 Mojo 언어도 만듦).

// Swift — 간결하고 안전한 코드
struct Stock {
    let name: String
    var price: Int
    let code: String

    var formattedPrice: String {
        return "\(name): \(price.formatted())원"
    }
}

let samsung = Stock(name: "삼성전자", price: 55000, code: "005930")
print(samsung.formattedPrice)  // 삼성전자: 55,000원

// Optional — nil(값 없음)을 안전하게 처리
var stockPrice: Int? = nil   // "값이 있을 수도 없을 수도"
if let price = stockPrice {
    print("가격: \(price)")
} else {
    print("가격 정보 없음")
}

용도: iPhone/iPad 앱(UIKit, SwiftUI), macOS 앱, Apple Watch, Apple TV, 서버(Vapor). iOS 앱을 만들려면 Swift는 필수입니다.

🤖 Kotlin — Java의 진화, Android의 미래
탄생
2011년
창시자
젯브레인즈
난이도
보통
용도
Android

IntelliJ IDEA(가장 인기 있는 Java IDE)를 만든 젯브레인즈(JetBrains)가 개발한 언어. Java의 장황함과 boilerplate(반복 코드)에 지친 개발자들을 위해 만들어졌습니다. JVM 위에서 돌아가기 때문에 기존 Java 코드와 100% 호환됩니다. 2019년 구글이 Android 공식 언어로 선언하면서 폭발적으로 성장했습니다.

// Java vs Kotlin 비교 — 같은 기능

// Java — 장황함의 극치 (약 20줄)
// public class Stock {
//     private String name;
//     private int price;
//     public Stock(String name, int price) { ... }
//     public String getName() { return name; }
//     public void setName(String name) { this.name = name; }
//     public int getPrice() { return price; }
//     ... equals, hashCode, toString ...
// }

// Kotlin — 한 줄! 😲
data class Stock(val name: String, var price: Int)

// 위 한 줄이 Java의 getter, setter, equals, hashCode,
// toString, copy를 전부 자동 생성합니다!

val samsung = Stock("삼성전자", 55000)
println(samsung)  // Stock(name=삼성전자, price=55000)

// Null 안전 — Kotlin의 핵심
var price: Int? = null    // ?는 "null 가능"을 명시
println(price?.toString() ?: "가격 없음")  // 안전하게 처리

용도: Android 앱(공식 언어), 서버(Ktor, Spring Boot), 멀티플랫폼(Kotlin Multiplatform으로 iOS+Android 공유 코드). 한국 IT 기업에서 Java → Kotlin 전환이 빠르게 진행 중입니다.

TypeScript 🔷 JavaScript에 질서를 가져온 언어

탄생
2012년
창시자
앤더스 하일스버그
난이도
보통
관계
JS의 상위호환

마이크로소프트의 앤더스 하일스버그(C#, 터보 파스칼, 델파이의 창시자이기도 한 레전드!)가 만들었습니다. TypeScript는 JavaScript에 타입(type)을 추가한 것입니다. 모든 JavaScript 코드는 유효한 TypeScript 코드이기도 합니다.

// JavaScript — 아무 타입이나 막 넣을 수 있음
let price = 55000;
price = "오만오천";     // 에러 없음! 숫자에 문자열을 넣어도 됨
price = [1, 2, 3];       // 에러 없음! 배열도 됨...
// 나중에 price + 1000 하면? "오만오천1000" ... 😱

// TypeScript — 타입을 미리 선언
let price: number = 55000;
// price = "오만오천";   // ❌ 컴파일 에러! number에 string 불가
// price = [1, 2, 3];   // ❌ 컴파일 에러! number에 array 불가
price = 60000;            // ✅ OK! number만 가능

// 인터페이스 — 객체의 구조를 미리 정의
interface Stock {
    name: string;
    code: string;
    price: number;
    change?: number;  // ?는 선택적(optional)
}

function displayStock(stock: Stock): string {
    return `${stock.name} (${stock.code}): ${stock.price.toLocaleString()}원`;
}

// ✅ 올바른 사용
displayStock({ name: "삼성전자", code: "005930", price: 55000 });

// ❌ 컴파일 에러! 필수 필드 누락
// displayStock({ name: "삼성전자" });

// ❌ 컴파일 에러! 타입 불일치
// displayStock({ name: "삼성전자", code: "005930", price: "비싸" });

TypeScript의 핵심 가치는 "실행하기 전에 오류를 발견"하는 것입니다. 팀 프로젝트에서 "이 함수에 뭘 넣어야 하지?"라는 혼란을 없애주고, IDE(VS Code)가 자동 완성을 정확하게 제안할 수 있게 해줍니다.

📊 TypeScript의 성장
2020년 이후 새로 시작하는 프로젝트의 과반수가 TypeScript를 채택합니다. React, Vue, Angular 등 모든 주요 프레임워크가 TypeScript를 공식 지원하며, Deno(Node.js의 후속)는 아예 TypeScript가 네이티브 언어입니다. "2026년에 JavaScript로 새 프로젝트를 시작하는 건 권장되지 않는다"는 말이 나올 정도.

SQL 🗄️ 데이터의 언어, 모든 곳에 있는 보이지 않는 힘

탄생
1974년
유형
선언형 언어
난이도
쉬움
필수도
★★★★★

SQL(Structured Query Language)은 데이터베이스에 질문하는 언어입니다. 다른 언어들이 "이렇게 해라(How)"를 지시하는 반면, SQL은 "이걸 달라(What)"만 말합니다. 어떻게 찾을지는 데이터베이스 엔진이 알아서 최적화합니다.

-- 기본 조회 — "이걸 보여줘"
SELECT name, price, change_pct
FROM realtime_prices
WHERE change_pct > 10
ORDER BY change_pct DESC
LIMIT 20;

-- 해석: "실시간 가격 테이블에서, 등락률 10% 이상인 종목의
--        이름/가격/등락률을, 등락률 내림차순으로, 20개 보여줘"

-- BruDash 실제 쿼리 — 섹터별 대장주 찾기
SELECT s.sector,
       sn.name,
       rp.change_pct,
       rp.trade_amount
FROM sectors s
JOIN stock_names sn ON s.code = sn.code
JOIN realtime_prices rp ON s.code = rp.code
WHERE s.sector = '방산'
ORDER BY rp.change_pct DESC;

-- 결과:
-- 방산 | 한화에어로스페이스 | +8.5% | 5,234억
-- 방산 | LIG넥스원         | +5.2% | 1,823억
-- 방산 | 현대로템          | +3.1% | 987억

-- 집계 — 투자자별 순매수 합계
SELECT date,
       SUM(individual) AS 개인,
       SUM(foreign_) AS 외인,
       SUM(institution) AS 기관
FROM market_investor
GROUP BY date
ORDER BY date DESC
LIMIT 5;

-- 데이터 추가
INSERT INTO predictions (date, rank, code, name, predicted_direction, reason)
VALUES ('2026-04-03', 1, '012450', '한화에어로스페이스', 'up', '방산 수출 확대');

-- 데이터 수정
UPDATE predictions
SET hit = 1, actual_high_pct = 3.5
WHERE date = '2026-04-03' AND rank = 1;

주요 SQL 데이터베이스

이름특징대표 사용처
SQLite파일 하나로 동작, 설치 불필요, 가벼움모바일 앱, 소규모 서비스, BruDash
PostgreSQL가장 강력한 오픈소스 DB, 확장성 최고스타트업, 금융, GIS
MySQL가장 널리 쓰이는 오픈소스 DB워드프레스, 쇼핑몰, 웹서비스
Oracle엔터프라이즈 1위, 가격 비쌈대기업, 은행, 공공기관
SQL Server마이크로소프트의 DB기업 환경, .NET
🎯 SQL은 비개발자도 알면 좋은 언어
데이터 분석, 마케팅, 기획, 재무 — SQL을 알면 "데이터를 직접 뽑아볼 수 있어서" 개발자에게 의존하지 않아도 됩니다. 배우는 데 일주일이면 충분하고, 투자 대비 효용이 가장 높은 기술 중 하나입니다. BruDash의 모든 데이터(주가, 테마, 수급, 적중률)는 SQLite DB에 SQL로 저장/조회됩니다.

HTML / CSS 🎨 웹의 뼈대와 옷 — 지금 보고 있는 이 페이지!

엄밀히 말하면 HTML과 CSS는 "프로그래밍 언어"가 아닙니다. HTML은 마크업 언어(문서 구조를 표현), CSS는 스타일시트 언어(문서의 외관을 꾸밈)입니다. 하지만 웹을 다루려면 반드시 알아야 합니다.

📄 HTML — 웹페이지의 골격

<!-- HTML = 문서의 구조를 정의 -->
<html>
  <head>
    <title>BruDash 시황 보고서</title>
  </head>
  <body>
    <h1>오늘의 시황</h1>
    <p>코스피가 5,600을 돌파했습니다</p>

    <div class="card">
      <h2>TOP 10 관심종목</h2>
      <ul>
        <li>삼성전자 — 반도체 수출 호조</li>
        <li>한화에어로 — 방산 수출 확대</li>
      </ul>
    </div>
  </body>
</html>

🎨 CSS — 웹페이지의 의상

/* CSS = 어떻게 보일지 정의 */
.card {
    background: #ffffff;        /* 배경색 */
    border-radius: 12px;       /* 둥근 모서리 */
    padding: 24px;             /* 안쪽 여백 */
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);  /* 그림자 */
    transition: transform 0.2s;  /* 애니메이션 */
}

.card:hover {
    transform: translateY(-4px);  /* 마우스 올리면 살짝 위로 */
}

/* 반응형 — 화면 크기에 따라 다르게 */
@media (max-width: 768px) {
    .card { padding: 16px; }
    body { font-size: 16px; }
}

지금 보고 있는 이 페이지가 바로 HTML+CSS로 만들어졌습니다! 히어로 배너의 그라데이션, 카드의 둥근 모서리, 반응형 레이아웃 — 모두 CSS의 작품입니다. BruDash의 시황 보고서도 매일 새로운 HTML/CSS 디자인으로 만들어집니다.

Shell / Bash 💻 터미널의 언어, 시스템 관리의 기본

Bash 탄생
1989년
유형
명령어 인터프리터
난이도
기초 쉬움
필수도
★★★★☆

Shell은 운영체제와 대화하는 텍스트 인터페이스이고, Bash(Bourne Again Shell)는 가장 널리 쓰이는 Shell의 한 종류입니다. Mac의 기본은 Zsh(Bash의 친척)입니다.

# 기본 명령어
$ ls                         # 파일 목록 보기
$ cd /srv/brudash/dashboard  # 디렉토리 이동
$ cat file.txt               # 파일 내용 보기
$ mkdir new_folder            # 폴더 생성
$ rm old_file.txt             # 파일 삭제
$ grep "에러" log.txt          # 파일에서 "에러" 찾기

# 파이프 — 명령어를 연결하는 마법
$ cat log.txt | grep "ERROR" | wc -l
# 해석: 로그 파일을 읽어서 → ERROR가 있는 줄만 골라서 → 줄 수를 세라

# BruDash의 실제 Shell 사용 예시
$ sqlite3 kiwoom_data.db "SELECT name, change_pct FROM realtime_prices ORDER BY change_pct DESC LIMIT 5"
# 오늘 급등 TOP 5 조회

$ sudo systemctl restart brudash
# BruDash 서버 재시작

$ python3 collect_data.py
# 데이터 수집 스크립트 실행

# 쉘 스크립트 — 여러 명령을 자동화
#!/bin/bash
# theme_curator.sh — 매일 07:30 자동 실행
echo "테마 정비 시작..."
python3 collect_curator_data.py
# Claude Code가 테마 분석 수행
echo "완료!"
💡 Shell을 알면 할 수 있는 것
서버 관리(원격 접속, 로그 분석, 서비스 관리), 작업 자동화(cron 스케줄링), 데이터 처리(텍스트 파싱, 일괄 변환), Git 버전 관리 등. Claude Code 같은 AI 에이전트도 Shell 명령어로 시스템과 상호작용합니다. CLI(Command Line Interface)에 익숙해지면 GUI로는 불가능한 수준의 자동화가 가능해집니다.
🧭

언어 선택 가이드상황별로 뭘 쓸지 — 실전 의사결정 트리

📊 언어별 종합 비교

언어난이도속도주요 분야연봉 수준
Python쉬움느림AI, 데이터, 자동화, 웹높음
JavaScript보통보통웹 프론트엔드/백엔드높음
TypeScript보통보통대규모 웹 프로젝트높음
Java보통빠름엔터프라이즈, Android높음
Kotlin보통빠름Android, 서버높음
Swift보통빠름iOS/macOS매우 높음
Go쉬움빠름서버, 클라우드, DevOps매우 높음
Rust어려움최고시스템, 안전성 필수최고
C/C++어려움최고OS, 게임, 임베디드높음
SQL쉬움—데이터베이스(보조 스킬)

🌳 상황별 언어 선택 가이드

뭘 만들고 싶나요?
🌐 웹사이트 → JavaScript/TypeScript
📱 iOS 앱 → Swift
🤖 Android 앱 → Kotlin
🧠 AI/데이터 → Python
🖥️ 서버 → Go / Java
🎮 게임 → C++ / C#
⚙️ OS/시스템 → Rust / C
📊 데이터 분석 → SQL + Python
🤷 잘 모르겠다 → Python
🎯 Claude Code로 지시할 때 알면 좋은 것

프로그래밍 언어를 직접 쓸 줄 몰라도, 각 언어의 특성을 알면 AI에게 더 정확한 지시를 할 수 있습니다.

  • "Flask로 API 서버 만들어줘" — Python의 웹 프레임워크를 알면 가능한 지시
  • "이 JavaScript에 TypeScript 타입 추가해줘" — 둘의 관계를 알면 가능
  • "SQLite에서 등락률 TOP 20 쿼리 짜줘" — SQL이 뭔지 알면 가능
  • "이 Python 코드 async로 바꿔서 속도 높여줘" — 비동기 개념을 알면 가능
  • "Rust 소유권 에러가 나는데 빌려쓰기(borrowing)로 바꿔줘" — 개념만 알아도 지시 가능

BruDash 시스템이 바로 이 패턴입니다. Python(Flask), JavaScript(프론트엔드), SQL(데이터), Shell(서버 관리) — 이 네 가지가 합쳐져서 매일 아침 시황 보고서가 만들어지고, 텔레그램으로 알림이 가고, 대시보드가 업데이트됩니다. 코드를 한 줄도 직접 안 짜고, Claude Code에게 자연어로 지시해서 이 모든 걸 만들고 운영하는 것이 가능합니다.

🔮 프로그래밍 언어의 미래

현재 진행 중인 트렌드

  • AI 코딩의 부상: GitHub Copilot, Claude Code, Cursor — 자연어로 설명하면 코드를 자동 생성. 2026년 현재, 코드의 30~50%를 AI가 작성한다는 조사도 있습니다.
  • Rust의 확산: Linux 커널, Android, Windows 등 시스템 소프트웨어에서 C/C++를 점진적으로 대체 중
  • WASM (WebAssembly): 브라우저에서 C++/Rust급 속도를 내는 기술. JavaScript의 독점이 깨질 수 있음
  • Mojo: Python의 문법 + C++의 속도를 목표로 하는 새 언어 (LLVM 창시자가 만듦)
  • Zig: C의 현대적 대체제를 목표로 하는 시스템 언어

10년 후 예측

프로그래밍 언어의 미래는 "추상화의 끝"입니다. 기계어 → 어셈블리 → C → Python의 진화 끝에, 결국 자연어 자체가 프로그래밍 언어가 되는 시대가 올 것입니다. "이런 앱을 만들어줘"라고 말하면 AI가 최적의 언어를 선택하고 코드를 짜는 세상. 하지만 그때도 "무엇을 만들지"와 "어떤 구조로 만들지"를 결정하는 것은 여전히 인간의 몫입니다. 프로그래밍의 본질은 코딩이 아니라 문제 해결이니까요.

면책 조항

본 글은 일반 정보 제공 및 시장 분석 참고 목적으로 작성된 자료이며, 특정 종목에 대한 매수·매도·보유 권유나 추천이 아닙니다. 본문에 기재된 모든 수치·전망·시나리오·적정가치는 작성 시점의 공개 정보에 기반한 추정치이며 실제와 다를 수 있습니다.

주식 투자는 원금 손실 가능성이 있는 고위험 행위입니다. 모든 투자 결정과 그에 따른 손익은 전적으로 투자자 본인의 책임이며, 본 글을 참고하여 이루어진 어떠한 투자 행위의 결과에 대해서도 작성자(brudash)는 일체의 법적·금전적 책임을 지지 않습니다.

본 글에 포함된 모든 정보는 부정확하거나 시점에 따라 변경될 수 있으며, 출처·근거의 정확성을 보장하지 않습니다. 투자 결정 전 본인의 투자 목적·재무 상황·위험 수용도를 충분히 고려하고, 필요 시 자격을 갖춘 투자 전문가와 독립적으로 상담하기 바랍니다.

💬 브루대시 텔레그램 채널

매일 아침 모닝브리핑, 장중 긴급 알림, 새 분석글 소식을 먼저 받아 보세요.

텔레그램 채널 입장하기 →