본문 바로가기

LLM은 도대체 뭘까

2026.10.2313분 읽기

지난 두 글에서는 LLM에게 무엇을 보여줄지를 이야기했다. 컨텍스트에 무엇을 넣고, 문서가 많으면 어떻게 찾아서 넣는지.

그런데 정작 LLM이 무엇인지는 제대로 이야기하지 않았다.

LLM은 Large Language Model, 큰 언어 모델이다. 한 줄로 줄이면 "다음에 올 단어를 맞히는 모델"인데, 이 한 줄이 왜 ChatGPT나 Claude 같은 물건이 되는지는 바로 와닿지 않는다.

LLM은 갑자기 나온 기술이 아니다. 머신러닝 안에 딥러닝이 있고, 딥러닝 안에 LLM이 있다.

┌─────────────────────────────────────────┐
│ 인공지능 (AI)                              │
│  ┌───────────────────────────────────┐  │
│  │ 머신러닝 (Machine Learning)          │  │
│  │  ┌─────────────────────────────┐  │  │
│  │  │ 딥러닝 (Deep Learning)         │  │  │
│  │  │  ┌───────────────────────┐  │  │  │
│  │  │  │ LLM                   │  │  │  │
│  │  │  └───────────────────────┘  │  │  │
│  │  └─────────────────────────────┘  │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘

이 글에서는 바깥 상자부터 안쪽으로 들어가 본다. 예시는 이번에도 쇼핑몰이다.

규칙을 짜던 시절

쇼핑몰에 리뷰가 하루 수천 개씩 쌓인다. 불만 리뷰만 골라서 상담팀에 넘기고 싶다.

가장 먼저 떠오르는 방법은 규칙을 짜는 것이다.

def is_complaint(review: str) -> bool:
    bad_words = ["환불", "불량", "최악", "떨어졌"]
    return any(word in review for word in bad_words)

금방 구멍이 보인다. "환불 안 하고 그냥 쓰려고요, 너무 편해요"는 불만으로 잡히고, "두 번 신고 버렸습니다"는 빠져나간다. 예외를 발견할 때마다 규칙을 하나씩 더하다 보면 코드는 끝없이 길어진다.

사람은 리뷰를 읽으면 바로 안다. 그런데 어떻게 아는지를 규칙으로 다 적을 수는 없다. 컴퓨터가 처음 부딪힌 벽이 이거다.

머신러닝, 예시를 보여 주고 규칙은 알아서

머신러닝은 방향을 뒤집는다. 규칙을 직접 짜는 대신 정답이 달린 예시를 잔뜩 보여 주고, 규칙은 컴퓨터가 데이터에서 찾게 한다.

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import LogisticRegression

reviews = [
    "배송 빠르고 사이즈 딱 맞아요",
    "가볍고 편해서 매일 신어요",
    "밑창이 2주 만에 떨어졌어요",
    "두 번 신고 버렸습니다",
]
labels = [0, 0, 1, 1]  # 1 = 불만

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(reviews)  # 리뷰 → 단어 개수 표

model = LogisticRegression().fit(X, labels)

print(model.predict(vectorizer.transform(["밑창이 금방 떨어졌어요"])))
# [1]

예제라서 리뷰가 네 개뿐이지만, 실제로는 정답을 단 리뷰 수만 개를 넣는다.

여기서 일어나는 일은 이렇다.

  1. 리뷰를 숫자로 바꾼다. 위 코드는 리뷰마다 어떤 단어가 몇 번 나왔는지를 센다.
  2. 모델은 단어마다 가중치라는 숫자를 하나씩 들고 있다. "떨어졌어요"는 불만 쪽으로, "편해서"는 만족 쪽으로 기우는 식이다.
  3. 처음엔 가중치가 엉망이라 예측도 엉망이다. 예측이 정답과 틀린 만큼 가중치를 조금씩 고친다.
  4. 이걸 수없이 반복하면 예시를 잘 맞히는 가중치가 남는다.

이 과정을 학습(Training)이라고 부르고, 학습이 끝난 가중치 묶음이 모델이다. 정답이 달린 예시로 배우는 방식은 지도 학습(Supervised Learning)이라고 한다.

머신러닝은 스팸 필터, 추천, 사기 거래 탐지 같은 곳에서 오래전부터 쓰였다. 그런데 한계가 하나 있었다.

무엇을 볼지는 여전히 사람이 정했다

위 코드에서 리뷰를 숫자로 바꾼 방법, "단어 개수 세기"는 사람이 정했다. 모델은 사람이 골라 준 특징(Feature) 위에서만 배운다.

단어 개수만 보면 "안 좋아요"와 "좋아요"는 "좋아요"를 똑같이 갖고 있다. 어순도, 문맥도, 반어법도 사라진다. 그래서 예전 머신러닝 프로젝트는 시간 대부분을 "무엇을 특징으로 쓸지" 고민하는 데 썼다. 이걸 특징 공학(Feature Engineering)이라고 부른다.

사진은 더 어렵다. 리뷰에 올라온 신발 사진에서 밑창이 떨어졌는지 알아보려면, 사람이 "밑창 가장자리의 틈"을 숫자로 정의해야 한다. 사실상 불가능하다.

딥러닝, 무엇을 볼지도 알아서

딥러닝은 이 마지막 일까지 컴퓨터에 맡긴다.

딥러닝 모델은 신경망(Neural Network)이다. 아주 단순한 계산 단위(뉴런) 수천, 수만 개를 층(Layer)으로 쌓은 구조인데, 층이 깊어서(deep) 딥러닝이라고 부른다.

사진 픽셀 → [1층] 선과 모서리 → [2층] 곡선과 무늬 → [3층] 밑창, 끈 → ... → "밑창 분리"

앞쪽 층은 단순한 패턴을 잡고, 뒤쪽 층은 앞 층의 결과를 조합해 더 복잡한 개념을 잡는다. 어느 층이 무엇을 볼지는 사람이 정하지 않는다. 정답이 달린 사진을 잔뜩 보여 주고 틀린 만큼 가중치를 고치는 걸 반복하면, 층마다 쓸모 있는 특징을 알아서 배운다. 머신러닝과 같은 학습 방식인데, 가중치가 수백만 개에서 수십억 개로 늘었을 뿐이다.

아이디어 자체는 오래됐다. 빛을 본 건 2010년대 들어서다. 인터넷 덕분에 데이터가 쌓였고, 게임용 그래픽카드(GPU)가 이런 계산을 아주 빠르게 해낸다는 게 알려졌다. 2012년 이미지 인식 대회 ImageNet에서 딥러닝 모델 AlexNet이 기존 방법들을 큰 차이로 이기면서 분위기가 바뀌었다.

글을 읽는 딥러닝

사진 다음은 글이었다. 글을 다루려면 먼저 글을 숫자로 바꿔야 한다.

글은 먼저 토큰(Token)이라는 조각으로 쪼갠다. 컨텍스트 글에서 비용을 셀 때 나온 그 토큰이다. 그리고 토큰마다 숫자 목록을 붙이는데, 이게 RAG 글에서 본 임베딩이다. 뜻이 비슷한 토큰은 비슷한 숫자를 갖도록 함께 학습된다.

남은 문제는 순서와 문맥이었다. "밑창이 떨어져서 환불받았는데 새로 온 건 괜찮아요"라는 리뷰가 불만인지 아닌지는 문장 끝까지 읽고 앞뒤를 연결해야 알 수 있다.

한동안은 글을 앞에서부터 한 토큰씩 차례로 읽는 모델(RNN)을 썼다. 읽으면서 기억을 조금씩 넘겨주는 방식이라, 문장이 길어지면 앞부분을 잊었다. 한 토큰씩 차례로 읽으니 GPU로 한꺼번에 계산하기도 어려웠다.

2017년 Google 연구진이 「Attention Is All You Need」 논문에서 트랜스포머(Transformer)를 내놓으면서 이게 바뀌었다. 트랜스포머는 문장을 한 번에 펼쳐 놓고, 각 토큰이 다른 모든 토큰을 둘러보며 "지금 나를 이해하는 데 누가 중요한가"를 계산한다. 이걸 어텐션(Attention)이라고 부른다.

"밑창이 떨어져서 환불받았는데 새로 온 건 괜찮아요"

  "괜찮아요" 가 주로 보는 토큰 →  "새로 온 건"
  "떨어져서" 가 주로 보는 토큰 →  "밑창이"

멀리 떨어진 토큰끼리도 바로 연결되고, 모든 토큰을 동시에 계산할 수 있다. GPU를 쏟아부으면 그만큼 크게 키울 수 있는 구조가 생긴 셈이다. 지금의 LLM은 거의 전부 트랜스포머다.

LLM, 다음 토큰 맞히기

트랜스포머를 크게 키워서 무엇을 가르칠까? 여기서 나온 답이 놀랍도록 단순하다. 다음 토큰을 맞히게 한다.

"교환은 상품 수령 후 7일 ___"

  이내   72%
  안에   18%
  까지    6%
  ...

(확률은 설명을 위한 예시다.)

인터넷의 글, 책, 코드에서 문장을 가져와 뒷부분을 가리고, 다음 토큰을 맞히게 한다. 틀리면 가중치를 고친다. 이걸 수조 개의 토큰에 대해 반복한다. 정답은 원래 문장에 이미 들어 있으니 사람이 일일이 정답을 달아 줄 필요도 없다. 앞에서 본 지도 학습처럼 정답으로 배우긴 하지만 그 정답을 데이터가 스스로 만들어 내서, 이런 방식을 자기 지도 학습(Self-supervised Learning)이라고 부른다. 이 단계를 사전 학습(Pre-training)이라고 부른다.

다음 토큰을 잘 맞히려면 생각보다 많은 걸 알아야 한다. "대한민국의 수도는" 다음을 맞히려면 지리를 알아야 하고, 코드의 다음 줄을 맞히려면 문법과 논리를 알아야 하고, 소설의 다음 문장을 맞히려면 인물의 감정을 따라가야 한다. 다음 토큰 맞히기라는 단순한 목표를 아주 많은 글에 대해 풀다 보니, 문법과 지식과 추론 패턴이 가중치 안에 쌓였다.

이름의 "Large"는 이 규모를 가리킨다. 2020년 OpenAI의 GPT-3는 가중치(파라미터)가 1,750억 개였고, 지금 모델은 그보다 훨씬 크다. 같은 해 OpenAI는 모델 크기와 데이터, 계산량을 늘릴수록 성능이 예측 가능하게 좋아진다는 스케일링 법칙을 발표했고, 그 뒤로 모델은 계속 커졌다.

이어 쓰는 기계가 어떻게 대답을 할까

사전 학습만 끝난 모델은 사실 대답을 하지 않는다. 이어 쓴다.

입력:  운동화 사이즈 교환 되나요?
출력:  운동화 사이즈 교환 되나요? 반품은요? 배송비는 누가 내나요? ...

인터넷에서 질문 다음에는 또 다른 질문이 오는 경우도 많으니, 모델 입장에서는 자연스러운 이어 쓰기다.

그래서 한 번 더 가르친다. 사람이 직접 쓴 "질문과 좋은 대답" 예시로 추가 학습을 시키고(Instruction Tuning), 모델이 내놓은 여러 대답 중 사람이 더 낫다고 고른 쪽을 따르도록 다듬는다. 뒤의 방법을 RLHF(Reinforcement Learning from Human Feedback)라고 부르고, OpenAI가 2022년 InstructGPT 논문에서 효과를 보였다. 같은 해 11월 이렇게 다듬은 모델로 ChatGPT가 나왔다.

이 단계를 거치면 같은 모델이 질문에 답하고, 지시를 따르고, 해서는 안 되는 말을 피하는 어시스턴트가 된다. 바탕의 지식은 사전 학습에서 왔고, 말하는 방식은 이 단계에서 왔다.

그래서 이렇게 동작한다

이제 앞선 글들에서 본 현상들이 왜 생기는지 설명할 수 있다.

한 토큰씩 쓴다. LLM은 답을 한 번에 만들지 않는다. 다음 토큰 하나를 고르고, 그걸 입력 끝에 붙여서 다시 다음 토큰을 고른다. 답이 화면에 한 글자씩 흘러나오는 이유다.

매번 처음부터 읽는다. 학습이 끝나면 가중치는 고정된다. 대화하는 동안 모델이 새로 배우는 건 없다. 그래서 컨텍스트 글에서 본 것처럼 지난 대화를 매번 다시 보내야 한다.

모르는 것도 그럴듯하게 쓴다. LLM은 데이터베이스에서 사실을 꺼내 오지 않는다. 가장 그럴듯한 다음 토큰을 고를 뿐이다. 학습한 적 없는 우리 쇼핑몰 교환 규정을 물어도, 그럴듯한 규정 문장을 이어 쓴다. 이게 환각(Hallucination)이고, RAG로 진짜 문서를 컨텍스트에 넣어 주는 이유다.

학습 이후의 일은 모른다. 사전 학습에 쓴 데이터가 끝나는 시점이 있다. 그 뒤의 일은 컨텍스트로 알려주거나 검색 도구를 쥐여 줘야 한다.

규칙을 짜던 프로그램에서 출발해, 예시로 배우는 머신러닝, 무엇을 볼지도 스스로 배우는 딥러닝, 그리고 다음 토큰을 맞히다 언어를 익힌 LLM까지 왔다. 시리즈를 거꾸로 읽은 셈인데, 이 모델 위에 컨텍스트를 채우고, RAG로 문서를 찾아 넣고, LangChain과 LangGraph로 도구를 쥐여 준 게 지금까지의 이야기다.

참고 자료

Zero's Blog

소프트웨어를 만들며 배우고 인생을 살면서 느끼는 것들을 기록해요.

© 2026 Yeongsu Han (zero). All rights reserved.