트랜스포머(Transformer) 아키텍처의 등장과 대규모 언어 모델(LLM)
AI의 본질은 "데이터로부터 패턴을 학습해, 새로운 입력에 대해 유용한 출력을 생성하는 시스템"이다.
큰 흐름으로 보면, 데이터를 수집하고 → 모델이 그 데이터의 구조와 패턴을 수치적으로 압축하여 학습하고 → 학습된 표현을 바탕으로 새로운 데이터에 대한 예측이나 생성을 수행한다. 오늘날의 핵심은 이 "압축과 표현"의 질을 극도로 높인 트랜스포머 기반 대형 모델들이다.
많은 개념이 있지만 중요 개념들을 간단히 알아보고자 한다.
< 모델 구조 >
신경망(Neural Network) : 인간의 뉴런에서 영감을 받은 수학적 함수 합성 구조로, AI의 기본 계산 단위
트랜스포머(Transformer) : 현대 LLM의 핵심 아키텍처. 문장 내 단어들의 관계를 병렬로 처리하는 어텐션 메커니즘 기반
어텐션 메커니즘(Attention Mechanism) : 입력의 어떤 부분에 "집중"할지를 동적으로 결정하는 트랜스포머의 핵심 연산
임베딩(Embedding) : 단어, 문장 등의 의미를 고차원 수치 벡터 공간에 표현하는 방식
역전파(Backpropagation) : 모델의 예측 오차를 거슬러 올라가며 가중치를 조정하는 학습 알고리즘
손실 함수(Loss Function) : 모델의 예측이 얼마나 틀렸는지를 수치로 측정하는 기준
옵티마이저(Optimizer) : 손실을 줄이는 방향으로 가중치를 업데이트하는 알고리즘 (Adam, SGD 등)
<스케일>
사전학습(Pre-training) & 파인튜닝(Fine-tuning) : 대규모 데이터로 범용 능력을 먼저 학습한 뒤, 특정 목적에 맞게 추가 학습하는 2단계 전략
RLHF(인간 피드백 강화학습) : 인간의 선호도 데이터를 이용해 모델이 더 유용하고 안전한 응답을 하도록 조정하는 기법
스케일링 법칙(Scaling Laws) : 모델 크기, 데이터 양, 연산량이 늘어날수록 성능이 예측 가능하게 향상된다는 경험적 법칙
<추론>
추론(Inference) : 학습이 끝난 모델이 실제 입력을 받아 출력을 생성하는 과정
분산 추론(Distributed Inference) : 하나의 모델이 너무 커서 단일 GPU에 올라가지 않을 때, 여러 GPU/서버에 분산해서 실행하는 기술
양자화(Quantization) : 모델의 가중치를 낮은 정밀도(예: 32비트 → 8비트)로 압축해 속도와 메모리를 절약하는 기법
KV 캐시(KV Cache) : 트랜스포머 추론 시 반복 계산을 줄이기 위해 이전 계산 결과를 저장해두는 메모리 최적화 기법
토크나이저(Tokenizer) : 텍스트를 모델이 처리할 수 있는 숫자 단위(토큰)로 분해하는 전처리 단계
<응용&패러다임>
프롬프트 엔지니어링(Prompt Engineering) : 모델에게 더 좋은 출력을 유도하기 위해 입력 텍스트를 설계하는 기술
RAG(검색 증강 생성) : 외부 지식 베이스를 실시간 검색해 모델의 응답에 반영하는 아키텍처
에이전트(AI Agent) : 도구 사용, 계획, 반복적 추론을 통해 복잡한 작업을 자율적으로 수행하는 AI 시스템
멀티모달(Multimodal) : 텍스트뿐 아니라 이미지, 오디오, 영상 등 여러 형태의 입력을 통합 처리하는 모델
# 트랜스포머 (Transformer)

트랜스포머는 2017년 구글 팀의 논문 "Attention Is All You Need"에서 등장한 아키텍처로, 현재 GPT, Claude, Gemini를 포함한 거의 모든 최신 언어 모델의 기반이다.
이전까지 언어 처리에는 RNN(순환 신경망)이 주로 쓰였다.
RNN은 문장을 왼쪽에서 오른쪽으로 순서대로 처리하는 구조였는데, 두 가지 치명적인 문제가 있었다.
첫째, 문장이 길어질수록 앞부분의 정보가 희석되어 사라진다.
둘째, 순차 처리이기 때문에 병렬화가 불가능하여 학습이 느리다.
트랜스포머는 순서를 버리고 전체 문장을 한 번에 병렬로 처리하면서 이 두 문제를 동시에 해결했다.
트랜스포머의 핵심은 자기 어텐션(self-attention)과 피드포워드 네트워크의 반복 스택이다. 구조를 크게 보면 다음과 같다.
입력 토큰
↓
토큰 임베딩 + 위치 인코딩
↓
[트랜스포머 블록] × N번 반복
- 멀티헤드 셀프 어텐션
- 잔차 연결 + 레이어 정규화
- 피드포워드 네트워크
- 잔차 연결 + 레이어 정규화
↓
출력 (다음 토큰 확률 분포)
위치 인코딩이 필요한 이유는, 트랜스포머 자체는 순서 개념이 없어서 "나는 밥을 먹었다"와 "밥은 나를 먹었다"를 구별하지 못하기 때문이다.
위치 정보를 벡터에 더해줌으로써 순서 정보를 주입한다.
참고 : 트랜스포머(인공신경망) - 나무위키
# 어텐션 메커니즘 (Attention Mechanism)
어텐션은 "어떤 정보에 얼마나 집중할 것인가"를 동적으로 계산하는 메커니즘이다.
번역 시스템에서 처음 등장했는데, "I love you"를 한국어로 번역할 때 "사랑"이라는 단어를 생성할 시점에서 "love"에 더 집중해야 한다는 직관을 수학적으로 구현한 것이다.
셀프 어텐션의 핵심 연산은 Query, Key, Value 세 행렬로 이루어진다.
Attention(Q, K, V) = softmax(QKᵀ / √d_k) × V
직관적으로 설명하면, Query는 "나는 무엇을 찾고 있는가", Key는 "나는 어떤 정보를 가지고 있는가", Value는 "실제로 꺼내줄 내용"이다.
Q와 K의 내적(dot product)으로 유사도를 계산하고, softmax로 확률 분포를 만든 뒤, 그 가중치로 V를 합산한다.
√d_k로 나누는 이유는 차원이 커질수록 내적값이 커져서 softmax가 극단적인 값을 만들어내는 것을 방지하기 위한 수치 안정화 장치다.
"나는 사과를 먹었다" 처리 시:
"먹었다"의 Query →
"나는"의 Key와 유사도: 0.2
"사과를"의 Key와 유사도: 0.7 ← 높은 어텐션
"먹었다"의 Key와 유사도: 0.1
→ "사과를"의 Value를 70% 반영해서 표현 생성
# 임베딩 (Embedding)
컴퓨터는 텍스트를 직접 처리하지 못한다.
"사과"라는 단어를 모델에 입력하려면 수치로 변환해야 하는데,
단순히 1, 2, 3 같은 정수를 부여하면 "사과"와 "배" 사이의 관계가 "사과"와 "자동차" 사이의 관계와 같아지는 문제가 생긴다.
임베딩은 이 문제를 의미적 관계가 보존된 고차원 벡터 공간으로 해결한다.
임베딩의 핵심은 의미적으로 유사한 개념이 벡터 공간에서도 가까이 위치하도록 학습된다는 점이다.
Word2Vec의 유명한 예시인 "King - Man + Woman ≈ Queen"은 단어들의 관계가 벡터 연산으로 표현 가능함을 보여준다.
토큰 → 임베딩 룩업 테이블(학습 가능한 행렬)에서 해당 벡터를 가져옴 → 위치 인코딩 추가 → 트랜스포머 층을 거치며 문맥 반영 → 최종 표현 벡터
벡터 데이터베이스와 결합하면 의미 검색(semantic search)이 가능하다.
"강아지 사진 보여줘"와 "개 이미지 찾아줘"는 단어가 다르지만 임베딩 공간에서 유사하게 위치하므로 같은 결과를 반환할 수 있다.
RAG 시스템의 검색 단계가 이 원리로 동작한다.
# 역전파 (Backpropagation)
역전파는 모델의 예측 오차를 각 가중치가 얼마나 책임지는지 계산하고, 그에 따라 가중치를 조정하는 알고리즘이다.
이것이 없으면 신경망 학습 자체가 불가능하다. 수학적으로는 합성함수의 미분인 연쇄 법칙(chain rule)의 체계적인 적용이다.
모델이 "고양이" 이미지를 보고 "개"라고 예측했다면, 이 오차를 출력층부터 입력층 방향으로 역방향 전파하면서 각 가중치의 기울기(gradient)를 계산한다.
기울기는 "이 가중치를 아주 조금 바꾸면 오차가 얼마나 변하는가"를 의미한다.
# 손실 함수 & 옵티마이저 (Loss Function & Optimizer)
손실 함수는 "모델이 얼마나 틀렸는가"를 하나의 수치로 표현한다.
옵티마이저는 그 수치를 줄이기 위해 가중치를 어떻게 조정할지를 결정하는 알고리즘이다. 이 둘은 학습의 방향과 속도를 결정하는 핵심 요소다.
LLM 학습에서 주로 쓰이는 손실 함수는 교차 엔트로피(cross-entropy loss)다.
모델이 다음 토큰으로 "사과"를 예측할 확률이 0.8이고 정답이 "사과"라면 손실이 낮고, 0.1이라면 손실이 높다.
옵티마이저 중 현재 가장 널리 쓰이는 Adam(Adaptive Moment Estimation)은 각 가중치마다 개별적인 학습률을 적용한다.
자주 업데이트되는 가중치는 학습률을 줄이고, 드물게 업데이트되는 가중치는 학습률을 높여서 학습을 안정화한다.
학습률(learning rate)은 가중치를 한 번에 얼마나 이동시킬지 결정하는 하이퍼파라미터다.
너무 크면 손실 지형을 건너뛰어 발산하고, 너무 작으면 학습이 느리거나 지역 최소값에 갇힌다.
LLM 학습에서는 웜업(warmup) 후 코사인 스케줄로 학습률을 감소시키는 방식이 표준처럼 쓰인다.
# 사전학습 & 파인튜닝 (Pre-training & Fine-tuning)
사전학습은 대규모 범용 데이터(인터넷 텍스트, 책, 코드 등)로 모델의 일반적인 언어 능력을 학습하는 단계다.
파인튜닝은 그 위에 특정 목적(의료 문서 분석, 고객 서비스 등)에 맞는 데이터로 추가 학습해 전문화하는 단계다.
이 2단계 전략은 "범용 기반 위에 전문성을 올린다"는 전이학습(transfer learning)의 철학을 따른다.
사전학습이 끝난 모델은 언어의 구조와 세계에 대한 폭넓은 지식을 갖추고 있지만, 사용자 지시를 따르거나 안전하게 응답하도록 최적화되어 있지 않다.
파인튜닝의 주요 형태는 세 가지다.
- 지도 파인튜닝(SFT, Supervised Fine-tuning)은 사람이 작성한 고품질 예시 데이터로 "이런 입력에는 이런 출력"을 직접 학습시킨다.
- RLHF (인간 피드백 강화학습) 는 아래에서 별로도 다룬다.
- LoRA(Low-Rank Adaptation)는 전체 가중치를 업데이트하는 대신, 작은 어댑터 행렬만 학습하는 효율적인 파인튜닝 기법이다.
원본 모델 가중치를 고정하고 저랭크 행렬 두 개의 곱으로 업데이트를 근사함으로써, 수천억 파라미터 모델을 일반 GPU에서도 파인튜닝 가능하게 해준다.
# RLHF (인간 피드백 강화학습)
RLHF는 모델이 인간이 선호하는 방식으로 응답하도록 훈련하는 기법이다.
사전학습으로 강력한 언어 능력을 갖추더라도, 그 모델이 자연스럽게 도움이 되고, 해롭지 않고, 정직한 응답을 하지는 않는다.
RLHF는 이 간극을 좁히기 위한 정렬(alignment) 기술이다.
RLHF는 세 단계로 이루어진다.
1단계 - 지도 파인튜닝: 사람이 직접 작성한 이상적인 응답으로 모델을 기본 튜닝한다.
2단계 - 보상 모델 학습: 같은 질문에 대한 두 응답 중 어느 것이 더 나은지 사람이 판단한 데이터를 수집하고, 이를 기반으로 "좋은 응답의 점수를 예측하는" 보상 모델을 학습한다.
3단계 - PPO로 강화학습: 언어 모델이 생성한 응답을 보상 모델이 채점하고, 그 점수를 높이는 방향으로 언어 모델의 가중치를 업데이트한다.
최근에는 RLHF의 복잡성을 줄인 DPO(Direct Preference Optimization)도 널리 쓰인다. 보상 모델 없이 선호도 데이터에서 직접 정책을 최적화하는 방식이다.
# 추론 & 분산 추론 (Inference & Distributed Inference)
추론(inference)은 학습이 완료된 모델이 실제 입력을 받아 출력을 생성하는 과정이다.
학습과 달리 역전파가 없어 상대적으로 단순해 보이지만, LLM 서비스에서는 추론 비용과 지연 시간이 비즈니스의 생존을 결정하는 핵심 변수다.
분산 추론은 단일 GPU에 올라가지 않을 만큼 큰 모델을 여러 GPU/서버에 분산해서 실행하는 기술이다.
GPT-4 수준의 모델은 수백GB의 가중치를 가지는데, 단일 GPU 메모리는 수십GB 수준이므로 분산이 필수다.
분산 추론의 주요 전략은 크게 세 가지다.
텐서 병렬(Tensor Parallelism)은 하나의 행렬 연산을 여러 GPU에 나눠서 동시에 수행한다.
트랜스포머의 어텐션 헤드를 GPU 수만큼 분할하는 방식이 대표적이다.
파이프라인 병렬(Pipeline Parallelism)은 트랜스포머 층을 그룹으로 나눠 각 GPU에 할당하고,
배치의 다른 부분을 파이프라인으로 처리한다. GPU 간 통신은 줄지만, 특정 GPU가 놀게 되는 버블(bubble) 문제가 있다.
전문가 혼합(MoE, Mixture of Experts)은 모든 파라미터를 항상 사용하는 대신, 입력마다 일부 전문가 네트워크만 활성화한다.
파라미터 총량은 크지만 실제 계산량은 훨씬 적어서 효율적인 스케일링이 가능하다. Mixtral, GPT-4(추정)가 이 구조를 사용한다.
# 토크나이저 (Tokenizer)
토크나이저는 텍스트를 모델이 처리할 수 있는 정수 시퀀스로 분해하는 전처리 구성 요소다.
단어 단위나 문자 단위가 아닌, 빈도 기반의 서브워드(subword) 단위를 사용하는 것이 현대 LLM의 표준이다.
현재 가장 널리 쓰이는 알고리즘은 BPE(Byte Pair Encoding)다. 처음에는 모든 문자를 개별 토큰으로 시작해서,
가장 자주 함께 등장하는 쌍을 반복적으로 합쳐 어휘(vocabulary)를 구성한다.
초기: ["u", "n", "h", "a", "p", "p", "y"]
BPE: "pp" 자주 등장 → "pp"를 하나의 토큰으로
"un" 자주 등장 → "un"을 하나의 토큰으로
"happy" 자주 등장 → "happy"를 하나의 토큰으로
결과: ["un", "happy"] → 토큰 ID [234, 891]
# 프롬프트 엔지니어링 (Prompt Engineering)
프롬프트 엔지니어링은 모델의 가중치를 변경하지 않고 입력 텍스트의 구성을 통해 원하는 출력을 이끌어내는 기술이다.
LLM의 능력이 프롬프트에 따라 극단적으로 달라질 수 있다는 발견에서 체계화된 분야다.
Chain-of-Thought(CoT) 프롬프팅은 모델이 최종 답변 전에 단계별 추론 과정을 명시적으로 쓰도록 유도한다.
"단계별로 생각해봐"라는 단순한 지시가 수학 문제 정확도를 수십 퍼센트 높이는 것이 관찰되었는데,
이는 중간 추론 토큰들이 다음 토큰 예측에 필요한 "계산 공간"을 제공하기 때문으로 이해된다.
Few-shot 프롬프팅은 몇 가지 예시를 함께 제공해서 원하는 형식이나 스타일을 모델에게 보여주는 방식이다.
모델이 파인튜닝 없이 문맥만으로 새로운 태스크를 수행하는 것을 인-컨텍스트 학습(in-context learning)이라 한다.
# RAG (검색 증강 생성)
RAG는 LLM의 고정된 파라미터 지식의 한계를 보완하기 위해, 외부 지식 베이스에서 관련 정보를 실시간 검색해 모델의 컨텍스트에 주입하는 아키텍처다.
LLM의 추론 능력과 검색 시스템의 최신 정보를 결합하는 방식이다.
사용자 질문
↓
임베딩 변환 → 벡터 DB에서 유사 문서 검색 (k개)
↓
검색된 문서 + 원래 질문을 합쳐 컨텍스트 구성
↓
LLM이 컨텍스트 기반으로 응답 생성
핵심은 벡터 검색 단계다.
질문과 문서들을 동일한 임베딩 공간에 표현하고, 코사인 유사도나 내적으로 가장 관련 있는 문서를 찾는다.
FAISS, Pinecone, Weaviate 같은 벡터 데이터베이스가 이 역할을 담당한다.
기업 내부 문서 기반 챗봇, 최신 정보가 필요한 서비스, 환각을 줄여야 하는 고신뢰도 응용에 널리 쓰인다.
파인튜닝 대비 장점은 지식 베이스를 모델 재학습 없이 업데이트할 수 있고, 검색 결과를 출처로 제시할 수 있다는 점이다.
# AI 에이전트 (AI Agent)
AI 에이전트는 단순한 질답을 넘어, 목표를 달성하기 위해 도구를 사용하고, 계획을 세우고, 자신의 행동 결과를 관찰하며 반복적으로 추론하는 시스템이다.
LLM을 추론 엔진으로 삼아 웹 검색, 코드 실행, 파일 조작, API 호출 등의 도구를 자율적으로 활용한다.
# 컨텍스트 엔지니어링 (Context Engineering)
프롬프트 엔지니어링은 LLM에게 주어지는 일회성 텍스트 지시에 집중하는 반면, 컨텍스트 엔지니어링은 모델과의 지속적인 상호작용을 위한 컨텍스트 정보 아키텍처 전체에 집중한다.
에이전트, 멀티턴 대화, 장기 작업이 일반화되면서, 단순히 지시문을 잘 쓰는 것만으로는 모델이 일관되게 좋은 결과를 낼 수 없다는 사실이 명확해졌다.
컨텍스트는 시스템 프롬프트, 사용자 프롬프트, 상태/히스토리(단기 메모리), 장기 메모리, 검색된 정보(RAG), 사용 가능한 도구 정의, 구조화된 출력 형식이라는 여러 레이어로 구성된다.
여기서 핵심 통찰은 컨텍스트 창의 물리적 제약이다.
LLM을 새로운 종류의 운영체제로 보면, LLM 자체가 CPU이고 컨텍스트 창이 RAM이다.
RAM이 유한하듯 컨텍스트 창도 토큰 한계가 있으며, 운영체제가 RAM에 무엇을 올릴지 신중하게 결정하듯 컨텍스트 엔지니어링도 같은 역할을 한다.
단순히 많은 정보를 넣는 것은 해법이 아니다.
Stanford 연구는 관련 정보가 긴 컨텍스트의 중간에 위치할 때 LLM 성능이 크게 저하됨을 증명했다.
모델은 입력의 맨 앞이나 맨 끝에 핵심 정보가 있을 때 가장 잘 수행한다. 이것이 컨텍스트 엔지니어링이 내용뿐 아니라 구조에도 집착하는 이유다.
이 현상을 "context rot(컨텍스트 부패)"이라 부른다.
컨텍스트 창 구성 예시:
[시스템 프롬프트] ← 역할, 규칙, 출력 형식 정의
[장기 메모리 요약] ← 이전 세션의 압축된 핵심 정보
[RAG 검색 결과] ← 이 요청에만 관련된 외부 지식
[도구 정의] ← 현재 단계에서 필요한 도구만
[대화 히스토리] ← 최근 N턴 (오래된 것은 요약/압축)
[현재 사용자 메시지] ← 실제 요청
사용자 요청 수신
↓
의도 파악 → 어떤 종류의 컨텍스트가 필요한가?
↓
병렬 실행:
- 장기 메모리 조회 (사용자 선호, 이전 작업 결과)
- RAG 검색 (관련 문서, 최신 정보)
- 상태 확인 (현재 작업 단계, 진행 상황)
↓
컨텍스트 선별 및 압축 → 토큰 예산 내 최적 배치
↓
도구 목록 선별 → 지금 이 단계에 필요한 것만
↓
LLM 호출
↓
결과를 메모리/상태에 저장 → 다음 호출을 위한 컨텍스트 업데이트
참고 문서:
https://techblog.lycorp.co.jp/ko/building-an-llm-service-for-enterprise-1-context-engineering
# 하네스 엔지니어링 (Harness Engineering)

하네스 엔지니어링은 LLM을 제외한 에이전트 시스템의 나머지 모든 인프라를 설계하고 구축하는 규율이다.
공식적으로 정의하면 에이전트 = 모델 + 하네스이며, 하네스는 모델을 제외한 모든 것이다.
모델을 CPU, 컨텍스트 창을 RAM이라고 하면, 하네스는 운영체제이고 에이전트는 그 위에서 실행되는 애플리케이션이다.
OS 없이 CPU에서 직접 소프트웨어를 실행하지 않듯, 하네스 없이 에이전트를 배포하지 않는다.
AI 코딩 에이전트의 성능은 모델 자체보다 모델을 감싸는 환경(하네스)에 더 크게 좌우된다.
OpenAI는 "리포지토리 전체를 에이전트가 읽고 쓸 수 있는 세계로 설계하라"고 말하고, Anthropic은 "생성기와 평가기를 분리하여 품질 피드백 루프를 만들라"고 말한다.
접근 방식은 다르지만 결론은 같다: "코드를 짜는 게 아니라 환경을 설계하는 것"이 엔지니어의 새 역할이다.
관련 공식 문서 :
https://openai.com/ko-KR/index/harness-engineering/
https://www.anthropic.com/engineering/harness-design-long-running-apps
'1. AI' 카테고리의 다른 글
| AI Coding Workflow (0) | 2026.06.01 |
|---|---|
| AI 로 Local Search RAG 구현하기(테스트) (1) | 2026.04.21 |
| 에이전트 스킬 마켓플레이스 (0) | 2026.04.11 |
| Agent-Skills-for-Context-Engineering (0) | 2026.03.30 |
| 구글 Antigravity 활용하여 뉴스피드 대시보드 생성하기 (0) | 2026.03.08 |