티스토리 뷰

서론: AI 시대, 왜 이 5가지 핵심 기술에 주목해야 하는가?
오늘날 인공지능(AI)은 단순한 공상 과학의 영역을 넘어 우리 일상의 모든 측면에 깊숙이 파고들고 있습니다. 스마트폰의 개인 비서부터 복잡한 산업 공정의 최적화에 이르기까지, AI는 이미 우리 삶의 필수적인 부분으로 자리 잡았습니다. 하지만 AI의 발전 속도는 너무나 빨라, 마치 거대한 파도처럼 몰아치는 기술의 흐름 속에서 어떤 기술이 진정으로 중요하며, 우리의 미래를 어떻게 변화시킬지 파악하기란 쉽지 않습니다. 특히 비전공자나 일반인에게는 인공지능 핵심 개념 자체가 하나의 거대한 장벽처럼 느껴질 수도 있습니다.
이 글은 이러한 기술의 복잡성을 해소하고, 다가올 AI 시대를 주도할 다섯 가지 핵심 기술, 즉 거대 언어모델(LLM), 거대 행동모델(LAM), 강화학습(Reinforcement Learning), 검색증강생성(RAG), 그리고 감성 컴퓨팅(Affective Computing)을 비전공자도 통찰력 있게 이해할 수 있도록 돕기 위해 기획되었습니다. 각 기술이 무엇인지, 어떤 원리로 작동하는지, 그리고 왜 우리가 이 기술들에 주목해야 하는지에 대한 명확하고 쉬운 설명을 제공할 것입니다. 이 기술들은 개별적으로도 강력하지만, 서로 결합될 때 훨씬 더 큰 시너지를 발휘하여 상상 이상의 가능성을 열어줍니다.
우리는 AI 기술의 발전이 단순히 자동화와 효율성을 넘어, 인간의 삶을 더욱 풍요롭고 의미 있게 만드는 방향으로 나아가고 있음을 목격하고 있습니다. 언어와 감정을 이해하고, 복잡한 환경에서 스스로 학습하여 최적의 결정을 내리며, 필요한 정보를 정확하게 찾아내는 AI의 능력은 이제 더 이상 먼 미래의 이야기가 아닙니다. 이러한 기술들이 어떻게 상호작용하며 더욱 강력하고 인간적인 AI를 만들어낼지 함께 탐구해 볼 시간입니다. 이 가이드를 통해 독자 여러분이 AI 기술의 본질을 이해하고, 다가오는 AI 시대의 변화를 예측하며, 그 속에서 새로운 기회를 발견하는 데 도움이 되기를 바랍니다. 지금부터 복잡해 보이는 AI 기술의 베일을 걷어내고, 그 안에 숨겨진 놀라운 가능성을 함께 탐험해 봅시다. 우리는 이 여정을 통해 단순한 지식 습득을 넘어, 미래 사회를 이해하고 주도할 수 있는 통찰력을 얻게 될 것입니다.
LLM (거대 언어모델)과 LAM (거대 행동모델): AI의 사고와 행동
AI 기술의 발전은 인간의 인지 능력을 모방하는 데 초점을 맞춰왔습니다. 그중에서도 특히 언어와 행동은 인간 지능의 핵심 요소라 할 수 있습니다. 바로 이 두 가지 능력을 AI에게 부여하는 기술이 거대 언어모델(LLM)과 거대 행동모델(LAM)입니다.
거대 언어모델(LLM)이란 무엇인가?
LLM(Large Language Model)은 말 그대로 '거대한' 양의 텍스트 데이터를 학습하여 인간의 언어를 이해하고 생성하는 능력을 가진 인공지능 모델입니다. 우리가 흔히 접하는 ChatGPT와 같은 대화형 AI가 바로 LLM의 대표적인 예시입니다. 이 모델들은 인터넷상의 방대한 텍스트, 예를 들어 책, 논문, 웹사이트, 대화 기록 등을 학습하여 언어의 패턴, 문법, 의미, 심지어 세상에 대한 일반적인 지식까지 습득합니다. 학습량이 워낙 방대하기 때문에 '거대'라는 이름이 붙었으며, 수십억 개에서 수천억 개에 이르는 매개변수(Parameter)를 가지고 있습니다.
LLM의 핵심 작동 원리는 '다음 단어 예측'입니다. 주어진 문맥(이전 단어들)을 기반으로 다음에 올 가장 적절한 단어를 예측하는 훈련을 반복함으로써, 문법적으로 올바르고 의미론적으로 자연스러운 문장을 생성하게 됩니다. 이러한 예측 능력은 단순한 단어 나열을 넘어, 질문에 답하고, 글을 요약하며, 번역하고, 심지어 새로운 창의적인 글을 쓰는 등 다양한 언어 관련 작업을 수행할 수 있게 합니다. 비전공자의 관점에서 보자면, LLM은 마치 세상의 모든 책을 읽고 이해한 '언어의 달인'과 같습니다. 어떤 질문에도 그럴듯한 답변을 내놓을 수 있고, 다양한 스타일로 글을 써낼 수 있는 능력을 가지고 있는 것이죠.
LLM은 트랜스포머(Transformer)라는 신경망 아키텍처를 기반으로 하는데, 이는 문장 내 단어들 간의 관계를 효율적으로 파악하는 '어텐션 메커니즘(Attention Mechanism)'을 활용하여 장거리 의존성(멀리 떨어진 단어 사이의 관계)을 효과적으로 학습할 수 있게 합니다.
간단한 LLM의 동작을 코드로 표현하자면 다음과 같습니다. 물론 실제 LLM은 훨씬 복잡합니다.
import random
class SimpleLLM:
def __init__(self, knowledge_base):
self.knowledge_base = knowledge_base # 단순화를 위해 미리 정의된 지식
self.vocabulary = set()
for text in knowledge_base:
self.vocabulary.update(text.split())
def generate_response(self, prompt, max_length=50):
# 실제 LLM은 복잡한 예측 모델을 사용하지만, 여기서는 간단히 키워드 매칭으로 시뮬레이션
response_candidates = []
prompt_words = prompt.lower().split()
for article in self.knowledge_base:
if any(word in article.lower() for word in prompt_words):
response_candidates.append(article)
if response_candidates:
# 관련된 지식 기반 문장을 찾아서 무작위로 일부를 반환
selected_article = random.choice(response_candidates)
sentences = selected_article.split('.')
return ". ".join(sentences[:random.randint(1, len(sentences))]).strip() + "."
else:
return "죄송합니다. 요청하신 내용에 대한 정보를 찾을 수 없습니다."
# 간단한 지식 기반 예시
knowledge = [
"인공지능은 컴퓨터 과학의 한 분야로, 인간처럼 생각하고 학습하며 문제를 해결하는 능력을 가진 기계를 만드는 것을 목표로 합니다.",
"거대 언어모델(LLM)은 방대한 텍스트 데이터를 학습하여 언어를 이해하고 생성하는 AI입니다. ChatGPT가 대표적인 예시입니다.",
"거대 행동모델(LAM)은 물리적 환경에서 행동을 계획하고 실행하는 AI 모델입니다. 로봇 제어 등에 활용됩니다.",
"강화학습은 시행착오를 통해 최적의 행동 정책을 학습하는 머신러닝 방법입니다.",
"RAG는 LLM의 약점을 보완하기 위해 외부 정보를 검색하여 생성 능력을 증강시키는 기술입니다.",
"감성 컴퓨팅은 AI가 인간의 감정을 인식하고 표현하며 상호작용하는 분야입니다. 사용자 경험 개선에 중요합니다."
]
# SimpleLLM 인스턴스 생성
my_llm = SimpleLLM(knowledge)
# 질문 예시
print("Q: LLM은 무엇인가요?")
print("A:", my_llm.generate_response("LLM이란 무엇인가요?"))
print("\nQ: 감성 컴퓨팅에 대해 알려주세요.")
print("A:", my_llm.generate_response("감성 컴퓨팅이 뭔가요?"))
print("\nQ: 날씨는 어떤가요?") # 지식 기반에 없는 질문
print("A:", my_llm.generate_response("오늘 날씨는 어떤가요?"))
행동하는 AI '거대 행동모델(LAM)'
LLM이 '생각'하고 '말'하는 AI라면, 거대 행동모델(LAM: Large Action Model)은 '행동'하는 AI라고 할 수 있습니다. LAM은 물리적 또는 디지털 환경에서 특정 목표를 달성하기 위해 일련의 행동을 계획하고 실행하는 데 특화된 AI 모델입니다. LLM이 언어적 지식을 통해 세상에 대한 이해를 넓힌다면, LAM은 환경과의 상호작용을 통해 행동적 지식을 습득합니다. 이는 로봇이 특정 작업을 수행하거나, 게임 캐릭터가 복잡한 전략을 구사하거나, 심지어 자율주행차가 도로 위에서 안전하게 운전하는 것과 같은 시나리오에서 중요하게 활용됩니다.
LLM과 LAM의 가장 큰 차이점을 명확히 하자면, LLM은 언어적 추론과 지식 생성에 초점을 맞추는 반면, LAM은 물리적 세계의 상태를 인지하고, 행동을 예측하며, 가장 효과적인 행동 순서를 결정하는 데 중점을 둡니다. 예를 들어, LLM은 "테이블 위의 사과를 냉장고에 넣어줘"라는 명령을 이해하고 그 절차를 언어로 설명할 수 있지만, 실제로 그 행동을 수행하는 것은 LAM의 영역입니다. LAM은 사과의 위치를 파악하고, 집는 방법을 결정하며, 냉장고 문을 열고, 사과를 넣은 후 문을 닫는 일련의 물리적 행동을 계획하고 실행합니다.
LAM은 종종 강화학습과 결합하여 환경으로부터 피드백을 받으며 스스로 최적의 행동을 학습합니다. 또한, 여러 센서로부터 정보를 받아들이고 (시각, 촉각 등), 이를 바탕으로 행동을 결정하는 멀티모달(multi-modal) 능력도 중요하게 다뤄집니다. 미래에는 LLM이 지능적인 계획을 수립하고, LAM이 이를 실제 행동으로 옮기는 방식으로 두 기술이 시너지를 낼 것으로 기대됩니다.
LAM의 개념을 코드로 간단히 표현하면 다음과 같습니다. 이 코드는 '로봇'이 특정 상태에서 취할 수 있는 '행동'을 선택하는 매우 단순화된 예시입니다.
import random
class Environment:
def __init__(self, items):
self.items = items
self.location = "주방" # 로봇의 현재 위치
def observe(self):
return f"현재 {self.location}에 있으며, 보이는 물건은 {', '.join(self.items)}입니다."
def apply_action(self, action, target_item=None):
if "이동" in action:
self.location = action.split(" ")[1]
return f"{self.location}으로 이동했습니다."
elif "집기" in action and target_item in self.items:
self.items.remove(target_item)
return f"{target_item}을 집었습니다."
elif "내려놓기" in action and target_item not in self.items: # 가방에 있다고 가정
self.items.append(target_item)
return f"{target_item}을 내려놓았습니다."
return "해당 행동을 수행할 수 없습니다."
class LargeActionModel:
def __init__(self, env):
self.env = env
self.actions = {
"주방으로 이동": "이동 주방",
"거실로 이동": "이동 거실",
"사과 집기": "집기 사과",
"사과 내려놓기": "내려놓기 사과"
}
self.action_history = []
def decide_and_act(self, goal):
observation = self.env.observe()
print(f"관찰: {observation}")
if "사과를 냉장고에 넣기" in goal:
if "사과" in self.env.items and self.env.location == "주방":
print(self.env.apply_action(self.actions["사과 집기"], "사과"))
self.action_history.append("사과 집기")
print("목표 달성을 위해 냉장고 위치로 이동해야 합니다.") # 실제로는 냉장고 위치 파악 후 이동
return True
elif "사과" not in self.env.items and "냉장고" in self.env.location: # 사과를 들고 냉장고 앞에 있다고 가정
print(self.env.apply_action(self.actions["사과 내려놓기"], "사과"))
self.action_history.append("사과 내려놓기")
print("사과를 냉장고에 넣었습니다!")
return True
else:
print(self.env.apply_action(self.actions["주방으로 이동"])) # 사과를 찾기 위해 주방으로 이동
self.action_history.append("주방으로 이동")
return False
return False
# 환경 설정
room_items = ["사과", "책", "컵"]
env = Environment(room_items)
# LAM 인스턴스 생성
my_lam = LargeActionModel(env)
# 목표 설정
goal = "사과를 냉장고에 넣기"
print(f"목표: {goal}")
# LAM이 행동을 결정하고 수행하는 과정
# 실제로는 여러 단계를 거쳐 목표를 달성함
step = 0
while not my_lam.decide_and_act(goal) and step < 5: # 임시로 5단계 제한
print(f"--- 단계 {step+1} 완료 ---")
step += 1
print(f"\n총 {len(my_lam.action_history)}번의 행동을 수행했습니다.")
print(f"최종 환경 상태: {env.observe()}")
결론적으로, LLM은 언어와 지식의 세계에서, LAM은 행동과 물리적 상호작용의 세계에서 AI의 지능을 확장합니다. 이 두 가지 모델이 유기적으로 결합될 때, 우리는 단순한 정보 제공을 넘어 실제로 세상에 개입하고 변화를 만들어내는 더욱 강력한 AI를 만나게 될 것입니다.
스스로 학습하고 최적의 길을 찾는 '강화학습(Reinforcement Learning)'
우리가 자전거를 배우거나 새로운 게임의 전략을 익힐 때를 생각해 봅시다. 처음부터 완벽하게 모든 것을 아는 사람은 없습니다. 우리는 여러 번 넘어지고 실패하면서, 혹은 시행착오를 통해 어떤 행동이 좋은 결과를 가져오고 어떤 행동이 나쁜 결과를 가져오는지 점차 깨닫게 됩니다. 이러한 인간의 학습 방식을 AI에 적용한 것이 바로 강화학습(Reinforcement Learning)입니다.
강화학습: 비전공자를 위한 핵심 개념
강화학습 비전공자도 쉽게 이해할 수 있도록, 강화학습을 구성하는 세 가지 주요 요소인 에이전트(Agent), 환경(Environment), 그리고 보상(Reward)에 대해 설명하겠습니다.
- 에이전트 (Agent): 학습하고 행동하는 주체입니다. 자전거 타기에서는 우리 자신이 에이전트이고, 게임에서는 플레이어 캐릭터가 에이전트가 됩니다. AI 강화학습에서는 인공지능 프로그램 자체가 에이전트 역할을 수행합니다. 이 에이전트는 환경을 관찰하고, 그 관찰을 바탕으로 어떤 행동을 할지 결정합니다.
- 환경 (Environment): 에이전트가 행동하고 상호작용하는 모든 외부 요소를 포함합니다. 자전거 타기에서는 길, 장애물, 날씨 등이 환경이며, 게임에서는 게임 맵, 다른 캐릭터, 게임 규칙 등이 환경이 됩니다. 에이전트의 행동에 따라 환경의 상태가 변하고, 에이전트는 이 변화된 환경을 다시 관찰합니다.
- 보상 (Reward): 에이전트가 특정 행동을 했을 때 환경으로부터 받는 피드백입니다. 이 보상이 긍정적이면(예: 자전거를 타고 균형을 잡았다, 게임에서 점수를 얻었다), 에이전트는 그 행동이 좋았다고 판단하고 앞으로도 그 행동을 할 가능성이 높아집니다. 보상이 부정적이면(예: 자전거에서 넘어졌다, 게임에서 HP가 줄었다), 그 행동을 피하게 됩니다. 강화학습의 궁극적인 목표는 장기적으로 가장 많은 보상을 얻을 수 있는 최적의 행동 전략, 즉 정책(Policy)을 학습하는 것입니다.
강화학습은 이러한 에이전트-환경-보상 사이클을 반복하면서 학습합니다. 에이전트는 현재 환경의 상태를 관찰(Observation)하고, 학습된 정책에 따라 행동(Action)을 선택합니다. 이 행동의 결과로 환경의 상태(State)가 변하고, 에이전트는 그에 따른 보상(Reward)을 받습니다. 이 보상을 바탕으로 에이전트는 자신의 정책을 업데이트하여 더 나은 행동을 할 수 있도록 학습합니다. 마치 아이가 뜨거운 주전자를 만졌다가 데이면 다음부터는 만지지 않는 것을 배우는 것과 유사합니다.
AI 에이전트 개발에서의 강화학습의 중요성
강화학습은 특히 스스로 의사결정을 내려야 하는 AI 에이전트 개발에 매우 중요합니다. 자율주행차, 로봇 제어, 게임 AI, 복잡한 시스템의 최적화(예: 물류 창고 로봇의 최단 경로 학습, 데이터 센터의 에너지 효율 관리) 등 다양한 분야에서 활용됩니다.
예를 들어, 자율주행차 에이전트에게는 충돌 없이 목적지에 도달하는 것이 긍정적인 보상이고, 사고를 내거나 경로를 이탈하는 것은 부정적인 보상입니다. 수많은 주행 시뮬레이션을 통해 에이전트는 이 보상 시스템 안에서 가장 안전하고 효율적인 운전 방법을 스스로 터득하게 됩니다.
강화학습은 초기에는 아무것도 모르는 상태에서 시작하여, 수많은 시행착오를 통해 전문가 수준의 성능을 발휘할 수 있다는 강력한 장점을 가지고 있습니다. 바둑 AI 알파고가 스스로 학습하여 세계 챔피언을 이긴 것이 바로 강화학습의 대표적인 성공 사례입니다. 복잡하고 예측 불가능한 환경에서 AI가 유연하게 대처하고 최적의 결정을 내릴 수 있도록 훈련시키는 데 강화학습은 없어서는 안 될 핵심 기술입니다.
강화학습의 가장 기본적인 개념인 "Q-러닝"의 매우 단순화된 코드 예시입니다. 이 코드는 에이전트가 두 가지 가능한 상태와 두 가지 가능한 행동 사이에서 보상을 최대화하는 방법을 학습하는 과정을 시뮬레이션합니다.
import numpy as np
# 1. 환경 정의 (매우 단순화된 예시)
# 상태(State): 0 (시작), 1 (목표 근처)
# 행동(Action): 0 (탐험), 1 (목표로 이동)
# 보상(Reward): 목표에 도달하면 높은 보상, 아니면 낮은 보상
R = np.array([
[-1, 10], # State 0: Action 0 (-1), Action 1 (10)
[-1, -1] # State 1: Action 0 (-1), Action 1 (-1) (목표 도착 후 더 이상 보상 없음)
])
# Q-테이블 초기화 (Q-값: 특정 상태에서 특정 행동을 했을 때 얻을 기대 보상)
Q = np.zeros_like(R, dtype=float)
# 2. 하이퍼파라미터 설정
gamma = 0.8 # 감가율(Discount Factor): 미래 보상을 얼마나 중요하게 생각할지 (0.8은 80% 중요하게 생각)
alpha = 0.1 # 학습률(Learning Rate): 새로운 정보를 얼마나 빨리 학습에 반영할지
epochs = 1000 # 학습 반복 횟수
# 3. 강화학습 과정 (Q-러닝 업데이트 규칙)
print("강화학습 시작...")
for i in range(epochs):
current_state = np.random.randint(0, 2) # 현재 상태를 무작위로 선택
if current_state == 0: # 상태 0에서만 행동 가능하다고 가정
possible_actions = [0, 1]
else: # 상태 1에서는 더 이상 행동하지 않음 (목표 도달)
possible_actions = []
if not possible_actions:
continue
action = np.random.choice(possible_actions) # 가능한 행동 중 하나를 무작위로 선택
# 다음 상태 결정 (간단하게, 상태 0에서 행동 1을 하면 상태 1로 간다고 가정)
if current_state == 0 and action == 1:
next_state = 1
else:
next_state = current_state # 다른 행동은 상태 변화 없음 (혹은 다른 상태로 간다고 가정할 수도 있음)
# Q-값 업데이트 (Q-러닝 공식)
# Q(s,a) = Q(s,a) + alpha * [ R(s,a) + gamma * max(Q(s',a')) - Q(s,a) ]
old_q_value = Q[current_state, action]
# 다음 상태(next_state)에서 가능한 모든 행동(a') 중 가장 큰 Q-값을 찾음
max_next_q = np.max(Q[next_state, :]) if next_state < Q.shape[0] else 0
new_q_value = old_q_value + alpha * (R[current_state, action] + gamma * max_next_q - old_q_value)
Q[current_state, action] = new_q_value
if i % 100 == 0:
print(f"Epoch {i}: Current Q-table:\n{Q.round(2)}")
print("\n강화학습 완료! 최종 Q-테이블:")
print(Q.round(2))
# 학습된 정책에 따라 최적의 행동 선택
print("\n학습된 정책에 따른 행동:")
current_state = 0
print(f"현재 상태: {current_state}")
while current_state != 1: # 목표 상태(1)에 도달할 때까지
best_action = np.argmax(Q[current_state, :]) # 현재 상태에서 가장 높은 Q-값을 가진 행동 선택
print(f" 최적 행동: {best_action} (0:탐험, 1:목표로 이동)")
if current_state == 0 and best_action == 1:
current_state = 1
else:
break # 다른 행동은 목표에 도달하지 못하므로 루프 종료
print(f" 다음 상태: {current_state}")
위 코드에서는 에이전트가 상태 0에서 '목표로 이동'(행동 1)을 선택했을 때 가장 큰 보상(10)을 얻는다는 것을 학습하게 됩니다. 학습이 반복될수록 Q-테이블의 값은 최적의 행동을 향해 수렴하며, 최종적으로 에이전트는 상태 0에서 행동 1을 선택하는 것이 가장 좋다는 것을 '알게' 됩니다. 실제 강화학습은 훨씬 복잡한 환경과 신경망을 사용하지만, 기본적인 원리는 이와 같습니다.
환각 없는 정확한 정보, '검색증강생성(RAG)'의 힘
거대 언어모델(LLM)은 놀라운 언어 생성 능력을 가지고 있지만, 한 가지 큰 약점이 있습니다. 바로 학습 데이터에 없는 정보나 최신 정보에 대해서는 부정확하거나 사실과 다른 내용을 마치 사실인 양 이야기하는 '환각(Hallucination)' 현상입니다. 이로 인해 LLM을 기반으로 한 AI 서비스는 중요한 결정이나 정확한 정보가 필요한 분야에 적용하기 어려웠습니다. 이러한 LLM의 한계를 극복하고, 더욱 정확하고 신뢰할 수 있는 정보를 제공하기 위해 등장한 기술이 바로 검색증강생성(RAG: Retrieval-Augmented Generation)입니다.
RAG 검색증강생성 원리
RAG 검색증강생성 원리는 이름 그대로 '검색(Retrieval)'과 '생성(Generation)'을 결합한 방식입니다. 기존 LLM이 단순히 학습된 지식만을 활용하여 답변을 생성하는 것과 달리, RAG는 질문이 들어왔을 때 외부의 신뢰할 수 있는 지식 기반에서 관련 정보를 '검색'한 후, 이 검색된 정보를 바탕으로 LLM이 '생성'하는 과정을 거칩니다. 비유하자면, LLM이 '뇌'라면 RAG는 '뇌'가 혼자 생각하는 것이 아니라 '도서관'이나 '인터넷 검색 엔진'을 참고하여 더 정확한 답변을 만들어내는 방식이라고 할 수 있습니다.
RAG의 작동 방식은 크게 세 단계로 나눌 수 있습니다.
- 색인화(Indexing): 방대한 양의 외부 문서(기업 내부 문서, 최신 뉴스 기사, 전문 논문 데이터베이스 등)를 LLM이 이해하고 검색하기 쉬운 형태로 미리 가공하여 저장합니다. 이때 문서를 작은 단위(청크)로 나누고, 각 청크의 의미를 벡터(Vector) 형태로 변환하여 데이터베이스에 저장하는 '벡터 데이터베이스(Vector Database)' 기술이 주로 사용됩니다. 벡터는 텍스트의 의미적 유사성을 숫자로 표현한 것이라 생각할 수 있습니다.
- 검색(Retrieval): 사용자의 질문이 들어오면, 이 질문 또한 벡터 형태로 변환됩니다. 그리고 벡터 데이터베이스에서 질문 벡터와 의미적으로 가장 유사한(가장 가까운) 문서 청크들을 찾아냅니다. 마치 도서관에서 키워드로 책을 찾듯이, 사용자의 질문과 가장 관련성이 높은 정보를 실시간으로 검색하는 과정입니다.
- 생성(Generation): 검색된 관련 문서 청크들을 LLM에게 질문과 함께 '컨텍스트'로 제공합니다. LLM은 이 외부 정보들을 참고하여 질문에 대한 답변을 생성합니다. 이렇게 외부 정보를 참고함으로써 LLM은 자신의 학습 데이터에 없는 최신 정보나 특정 분야의 전문 지식에 대해서도 정확하고 신뢰할 수 있는 답변을 제공할 수 있게 됩니다. 또한, '이 답변은 ~문서에서 발췌되었습니다'와 같이 출처를 명시할 수도 있어 정보의 투명성과 신뢰도를 크게 높일 수 있습니다.
RAG 실제 활용 사례
RAG는 이미 다양한 분야에서 혁신적인 변화를 가져오고 있습니다.
- 기업 내부 지식 검색 및 Q&A 시스템: 많은 기업들이 방대한 내부 문서(매뉴얼, 보고서, FAQ 등)를 가지고 있지만, 직원들이 필요한 정보를 찾기 어려운 경우가 많습니다. RAG는 이러한 내부 문서를 기반으로 정확하고 신속한 Q&A 시스템을 구축하여 직원들의 업무 효율성을 크게 향상시킬 수 있습니다.
- 고객 서비스 챗봇: 고객 문의에 대해 항상 최신 제품 정보나 정책을 바탕으로 정확한 답변을 제공해야 하는 챗봇에 RAG를 적용하여 고객 만족도를 높일 수 있습니다. '감성 컴퓨팅 실제 사례'와 결합하면 더욱 강력해집니다.
- 법률 및 의료 정보 시스템: 최신 법률 판례나 의료 연구 결과를 바탕으로 전문가들에게 정확한 정보를 제공하는 시스템에 RAG를 활용하여, 정보 오류로 인한 심각한 문제를 방지하고 의사 결정의 질을 높일 수 있습니다.
- 개인화된 정보 큐레이션: 사용자의 관심사와 질문에 따라 뉴스 기사나 논문 요약을 검색하고 생성하여 제공함으로써, 정보 과부하 시대에 맞춤형 정보를 효율적으로 얻을 수 있도록 돕습니다.
RAG는 LLM의 한계를 보완하고 AI의 실용적인 활용 범위를 넓히는 데 결정적인 역할을 하는 핵심 기술입니다. 정확성과 신뢰성이 중요한 분야에서 AI의 활용을 가속화하며, 우리가 AI로부터 얻는 정보의 질을 한 단계 끌어올리고 있습니다.
아래는 RAG의 원리를 보여주는 간단한 Python 코드 예시입니다. 이 예시는 '벡터 데이터베이스' 부분을 단순한 키워드 매칭으로 대체했지만, 검색된 문서를 LLM에 전달하여 답변을 생성하는 흐름을 보여줍니다.
import random
class DocumentStore:
def __init__(self, documents):
self.documents = documents
# 실제로는 벡터 임베딩 후 벡터 DB에 저장됩니다.
# 여기서는 단순화를 위해 문서 자체를 저장합니다.
def retrieve(self, query, top_k=2):
# 쿼리와 가장 관련성이 높은 문서를 검색 (실제로는 벡터 유사도 검색)
relevant_docs = []
query_words = query.lower().split()
for doc in self.documents:
# 단순 키워드 매칭으로 관련성 판단
if any(word in doc.lower() for word in query_words):
relevant_docs.append(doc)
# 관련성 높은 문서가 많을 경우, 무작위로 top_k개 선택
return random.sample(relevant_docs, min(top_k, len(relevant_docs)))
class SimpleRAG:
def __init__(self, document_store):
self.document_store = document_store
def generate_answer(self, query):
print(f"DEBUG: 쿼리 '{query}'에 대한 정보 검색 중...")
# 1. 문서 검색 (Retrieval)
retrieved_docs = self.document_store.retrieve(query)
if not retrieved_docs:
return "죄송합니다. 관련 정보를 찾을 수 없습니다."
# 검색된 문서를 컨텍스트로 결합
context = "\n".join(retrieved_docs)
print("DEBUG: 검색된 컨텍스트:")
for i, doc in enumerate(retrieved_docs):
print(f" [{i+1}] {doc[:50]}...") # 문서의 앞부분만 출력
# 2. LLM을 사용하여 답변 생성 (Generation)
# 실제 LLM 호출 대신, 검색된 컨텍스트를 활용하여 답변 생성 시뮬레이션
# 여기서는 컨텍스트에서 주요 정보를 추출하는 방식으로 단순화
response = f"귀하의 질문 '{query}'에 대해 검색된 정보를 바탕으로 답변합니다:\n"
response += context + "\n"
response += "이 정보가 도움이 되기를 바랍니다."
return response
# 외부 지식 기반 문서 예시
external_knowledge = [
"2023년 챗GPT는 전 세계적으로 큰 반향을 일으켰으며, AI 기술 발전에 기여했습니다.",
"RAG 기술은 LLM의 환각 현상을 줄이고 정확성을 높이는 데 중요한 역할을 합니다.",
"벡터 데이터베이스는 RAG 시스템에서 효율적인 문서 검색을 위해 사용되는 핵심 구성 요소입니다.",
"미래 AI 기술은 LLM, LAM, RAG 등의 시너지를 통해 더욱 발전할 것입니다.",
"감성 컴퓨팅은 AI가 인간의 감정을 인식하고 상호작용하는 기술입니다. 이는 사용자 경험을 개선합니다."
]
# 문서 저장소 및 RAG 시스템 초기화
doc_store = DocumentStore(external_knowledge)
rag_system = SimpleRAG(doc_store)
# 질문
query1 = "RAG 기술의 목적이 무엇인가요?"
print(f"\n[질문]: {query1}")
print(f"[답변]: {rag_system.generate_answer(query1)}")
query2 = "벡터 데이터베이스의 역할은 무엇인가요?"
print(f"\n[질문]: {query2}")
print(f"[답변]: {rag_system.generate_answer(query2)}")
query3 = "최신 AI 동향에 대해 알려주세요."
print(f"\n[질문]: {query3}")
print(f"[답변]: {rag_system.generate_answer(query3)}")
query4 = "세계에서 가장 높은 산은?" # 외부 지식에 없는 질문
print(f"\n[질문]: {query4}")
print(f"[답변]: {rag_system.generate_answer(query4)}")
위 코드를 실행하면, RAG 시스템이 질문에 따라 external_knowledge에서 관련 문서를 검색하고, 이를 바탕으로 '생성된' 답변을 제공하는 것을 볼 수 있습니다. 실제 RAG는 복잡한 임베딩 모델과 벡터 검색 알고리즘을 사용하지만, 이 예시는 핵심적인 '검색 후 생성'의 흐름을 보여줍니다.
인간처럼 느끼고 반응하는 AI, '감성 컴퓨팅(Affective Computing)'
인간은 단순히 논리적 사고만으로 소통하고 의사결정을 내리지 않습니다. 우리의 감정은 의사소통 방식, 행동, 그리고 세상과의 상호작용에 지대한 영향을 미칩니다. AI가 진정으로 인간과 자연스럽게 소통하고 협력하기 위해서는 이러한 감정의 영역을 이해하고 반응할 수 있어야 합니다. 바로 이러한 목표를 가진 분야가 감성 컴퓨팅(Affective Computing)입니다.
감성 컴퓨팅의 개념과 적용 분야
감성 컴퓨팅은 AI가 인간의 감정을 인식(recognition), 이해(understanding), 표현(expression), 그리고 이에 반응(response)하여 상호작용할 수 있도록 연구하고 개발하는 분야입니다. 이는 인간-컴퓨터 상호작용(HCI)을 더욱 풍부하고 인간 중심으로 만드는 데 핵심적인 역할을 합니다.
감성 컴퓨팅은 다음과 같은 방식으로 작동합니다.
- 감정 인식(Emotion Recognition): AI는 텍스트(문장의 긍정/부정적 뉘앙스), 음성(목소리의 톤, 속도, 높낮이), 얼굴 표정(미소, 찡그림), 심박수나 피부 전도도와 같은 생체 신호 등 다양한 데이터를 통해 사용자의 감정을 분석하고 분류합니다. 예를 들어, 텍스트 분석을 통해 사용자가 불만을 표현하는지, 기쁨을 표현하는지 파악할 수 있습니다.
- 감정 이해(Emotion Understanding): 단순히 감정을 분류하는 것을 넘어, 그 감정이 왜 발생했는지, 그리고 그 감정이 어떤 의미를 가지는지 맥락 속에서 이해하려고 시도합니다. 이는 사용자 경험을 개선하고, 보다 적절한 반응을 유도하는 데 필수적입니다.
- 감정 표현(Emotion Expression): AI 자신이 감정을 가지고 있지는 않지만, 인간의 감정 상태에 맞춰 적절한 감정적 반응을 보이는 것처럼 행동할 수 있습니다. 예를 들어, 사용자가 슬픔을 표현하면 위로하는 어조로 이야기하거나, 기쁨을 표현하면 함께 기뻐하는 반응을 보일 수 있습니다.
- 감정 기반 상호작용(Emotion-driven Interaction): 인식하고 이해한 감정을 바탕으로 AI의 행동이나 응답 방식이 변화합니다. 사용자가 스트레스를 받고 있다면 진정시키는 음악을 추천하거나, 간단한 작업을 대신 처리해 줄 수 있습니다.
감성 컴퓨팅 실제 사례 및 미래 인간-AI 협업
감성 컴퓨팅 실제 사례는 이미 우리 주변에서 다양하게 찾아볼 수 있으며, 그 적용 분야는 빠르게 확장되고 있습니다.
- 고객 서비스 및 챗봇: 사용자의 불만이나 좌절감을 인식하여 상담원을 연결하거나, 더욱 공감적인 답변을 제공하여 고객 만족도를 높입니다. 예를 들어, 텍스트 기반의 고객 문의에서 부정적인 감지가 높으면, 챗봇이 아닌 실제 상담사에게 연결하여 더욱 인간적인 응대를 유도할 수 있습니다.
- 교육 및 학습 지원: 학생의 학습 집중도, 좌절감, 흥미 등을 감지하여 맞춤형 학습 콘텐츠를 제공하거나, 학습 속도를 조절하는 데 활용됩니다. 학생이 특정 문제에서 지속적으로 어려움을 겪고 좌절감을 느낀다면, AI 튜터가 격려의 메시지를 보내거나 더 쉬운 보충 자료를 제공할 수 있습니다.
- 건강 관리 및 웰빙: 사용자의 스트레스 수준, 우울감 등을 감지하여 정신 건강 관리에 도움을 주거나, 수면 패턴 분석을 통해 최적의 휴식을 권장합니다. 감성 인식 기술은 심지어 노인 돌봄 로봇이 독거노인의 외로움이나 불안감을 감지하고 정서적 지원을 제공하는 데 활용될 수도 있습니다.
- 자동차 산업: 운전자의 피로도, 졸음, 스트레스 등을 감지하여 경고하거나, 음악을 재생하는 등 안전 운전을 돕는 시스템에 적용됩니다. 이는 졸음운전으로 인한 사고를 예방하는 데 결정적인 역할을 할 수 있습니다.
- 게임 및 엔터테인먼트: 플레이어의 감정에 따라 게임 스토리나 난이도를 조절하여 몰입감을 높입니다. 플레이어가 특정 상황에서 긴장하거나 기쁨을 느낀다면, 그에 맞는 게임 진행을 유도하는 식입니다.
미래의 인간-AI 협업에 있어 감성 컴퓨팅은 단순한 도구를 넘어, 진정한 동반자로서 AI의 역할을 가능하게 할 것입니다. AI가 우리의 감정을 이해하고 공감하며 반응할 수 있게 된다면, 우리는 AI와 더욱 신뢰하고 효율적으로 상호작용할 수 있게 됩니다. 이는 AI가 단순한 명령어 수행자를 넘어, 복잡한 사회적 상황과 개인적인 필요를 고려하는 '지능형 에이전트'로 발전하는 길을 열어줄 것입니다. 감성 컴퓨팅은 AI가 우리의 삶을 더욱 따뜻하고 인간적으로 만들어 줄 핵심 기술입니다.
다음은 텍스트에서 간단하게 감정을 분류하는 Python 코드 예시입니다. 실제 감성 컴퓨팅은 훨씬 정교한 모델을 사용하지만, 기본적인 개념을 이해하는 데 도움이 될 것입니다.
from collections import Counter
class SimpleAffectiveComputing:
def __init__(self):
# 긍정 및 부정 키워드 사전 (매우 단순화됨)
self.positive_keywords = {"좋아", "행복", "기뻐", "최고", "만족", "감사", "훌륭해"}
self.negative_keywords = {"싫어", "슬퍼", "화나", "짜증", "불만", "힘들어", "나빠"}
def analyze_sentiment(self, text):
words = text.lower().replace('.', '').replace(',', '').split()
positive_score = sum(1 for word in words if word in self.positive_keywords)
negative_score = sum(1 for word in words if word in self.negative_keywords)
if positive_score > negative_score:
return "긍정적"
elif negative_score > positive_score:
return "부정적"
else:
return "중립적"
def suggest_response(self, text):
sentiment = self.analyze_sentiment(text)
if sentiment == "긍정적":
return "기분이 좋으시다니 다행입니다! 더 즐거운 일이 있으시길 바랍니다."
elif sentiment == "부정적":
return "어떤 힘든 일이 있으신가요? 이야기해주시면 제가 할 수 있는 범위 내에서 도움을 드리겠습니다."
else:
return "어떤 도움이 필요하신가요?"
# 감성 컴퓨팅 시스템 인스턴스 생성
affective_system = SimpleAffectiveComputing()
# 텍스트 분석 및 반응 제안 예시
texts = [
"오늘 날씨가 너무 좋아서 기분이 정말 행복해!",
"아, 이 프로젝트 정말 너무 힘들어. 짜증 나 죽겠어.",
"이 영화는 그냥 그랬어. 나쁘지도 좋지도 않았어.",
"정말 훌륭한 아이디어네요. 아주 만족합니다.",
"이 서비스는 최악이야. 정말 싫어!"
]
for text in texts:
sentiment = affective_system.analyze_sentiment(text)
response = affective_system.suggest_response(text)
print(f"텍스트: '{text}'")
print(f"감정 분석: {sentiment}")
print(f"제안 반응: {response}\n")
이 코드는 특정 키워드의 출현 빈도를 기반으로 텍스트의 감성을 긍정, 부정, 중립으로 분류하고, 이에 따른 간단한 반응을 제안합니다. 실제 감성 컴퓨팅 시스템은 머신러닝 모델을 사용하여 더욱 복잡하고 미묘한 감정 변화까지 감지할 수 있습니다.
AI 기술 융합의 미래: 더 강력하고 인간적인 AI를 향한 여정
지금까지 우리는 LLM, LAM, 강화학습, RAG, 감성 컴퓨팅이라는 미래 AI 핵심 기술들을 개별적으로 살펴보았습니다. 각각의 기술은 그 자체로도 강력한 잠재력을 가지고 있지만, 이들이 서로 유기적으로 결합될 때 비로소 우리는 상상 이상의 시너지를 발휘하는 더욱 강력하고 '인간적인' AI 시스템을 구축할 수 있습니다. 이러한 기술들의 융합은 단순한 기술적 진보를 넘어, 인공지능이 우리 삶의 더 깊은 부분으로 들어와 진정한 조력자 역할을 할 수 있는 가능성을 열어줍니다.
멀티모달 AI와 통합된 지능: 기술 융합의 미래
미래 AI 기술 전망은 이러한 기술들의 통합, 특히 멀티모달(Multi-modal) AI의 형태로 구체화될 것입니다. 멀티모달 AI는 텍스트, 이미지, 음성, 비디오 등 다양한 형태의 데이터를 동시에 이해하고 처리하는 AI를 의미합니다. 여기에 우리가 살펴본 핵심 기술들이 어떻게 결합될 수 있는지 상상해봅시다.
- LLM + LAM + 강화학습: 생각하고 행동하는 자율 에이전트
- LLM은 복잡한 자연어 명령을 이해하고, 목표 달성을 위한 고수준의 계획을 수립합니다. 예를 들어, "냉장고에 있는 과일을 가져와서 샐러드를 만들어줘"와 같은 추상적인 명령을 이해하고, 이를 '과일 종류 파악 → 냉장고 문 열기 → 과일 집기 → 재료 세척 → 재료 자르기 → 샐러드 혼합'과 같은 구체적인 하위 작업들로 분해할 수 있습니다.
- LAM은 LLM이 세운 계획을 바탕으로 실제 물리적 환경에서 로봇 팔을 움직이거나, 자율주행 로봇을 이동시키는 등 구체적인 행동을 실행합니다. 이 과정에서 강화학습은 로봇이 시행착오를 통해 가장 효율적이고 안전한 행동 경로를 스스로 학습하도록 돕습니다. 로봇이 과일을 잡는 미세한 힘 조절이나, 장애물을 회피하는 경로 설정 등을 학습하는 데 강화학습이 필수적입니다.
- 시너지 효과: LLM의 추론 능력과 LAM의 행동 능력이 강화학습을 통해 끊임없이 개선되면서, AI는 복잡한 현실 세계 문제에 대한 이해와 해결 능력을 동시에 갖춘 진정한 '실천형 지능'으로 거듭날 것입니다. 이는 단순한 공장 자동화를 넘어, 노인 돌봄 로봇, 복잡한 수술 보조 로봇, 재난 구조 로봇 등 인간의 삶에 직접적으로 기여하는 AI 에이전트의 등장을 앞당길 것입니다.
- LLM + RAG + 감성 컴퓨팅: 공감하며 소통하는 지식 전문가
- LLM은 기본적인 대화와 정보 생성의 틀을 제공합니다.
- RAG는 LLM이 최신 정보나 특정 도메인의 전문 지식을 정확하게 검색하고 활용하도록 돕습니다. 예를 들어, 사용자가 특정 질병에 대해 질문하면, RAG는 최신 의료 논문이나 공신력 있는 의학 데이터베이스에서 정보를 찾아 LLM에 제공하고, LLM은 이를 바탕으로 환자에게 이해하기 쉬운 언어로 정확한 설명을 제공할 수 있습니다.
- 감성 컴퓨팅은 사용자의 감정 상태를 파악하여 LLM의 답변 방식이나 톤을 조절합니다. 만약 환자가 불안감을 느끼고 있다면, AI는 더욱 차분하고 위로하는 어조로 설명하거나, 필요한 경우 의료 전문가와의 상담을 추천할 수 있습니다.
- 시너지 효과: 이 조합은 단순한 정보 제공을 넘어, 사용자의 상황과 감정을 이해하고 공감하며, 가장 적절한 형태와 내용으로 정보를 전달하는 '지능형 조언자'를 탄생시킵니다. 법률 상담 챗봇, 심리 상담 AI, 개인화된 학습 튜터 등 신뢰와 인간적인 교류가 중요한 분야에서 혁신을 가져올 것입니다. 특히 감성 컴퓨팅 실제 사례를 통해 본 것처럼, 이 기술은 사용자 경험을 혁신적으로 개선할 잠재력을 가집니다.
- 총체적 AI 시스템의 미래 비전
결론적으로, 미래의 AI는 이러한 개별 기술들을 마치 퍼즐 조각처럼 맞춰나가는 방향으로 발전할 것입니다. LLM이 '생각하고 말하며', LAM이 '행동'하고, 강화학습이 '스스로 배우며', RAG가 '정확한 지식을 제공하고', 감성 컴퓨팅이 '인간과 공감'하는 통합된 시스템이 될 것입니다. 이러한 인공지능 핵심 개념들의 결합은 우리가 지금까지 상상했던 것 이상의 강력한 AI를 가능하게 합니다. 이는 단순한 자동화 수준을 넘어, 인간의 지능과 능력을 증강시키고, 복잡한 사회적 문제를 해결하며, 궁극적으로는 인간의 삶을 더욱 풍요롭게 만드는 데 기여할 것입니다.
물론 이러한 기술의 발전에는 윤리적 고려와 사회적 합의가 반드시 수반되어야 합니다. 하지만 분명한 것은, 이 핵심 기술들의 시너지가 인류에게 새로운 기회와 가능성을 제공하며, AI 미래 기술 전망을 더욱 밝게 만들 것이라는 점입니다.

결론: 미래 AI 시대를 주도할 핵심 기술에 대한 통찰
우리는 이 글을 통해 미래 AI 시대를 이끌어갈 다섯 가지 핵심 기술, 즉 거대 언어모델(LLM), 거대 행동모델(LAM), 강화학습, 검색증강생성(RAG), 그리고 감성 컴퓨팅에 대해 깊이 있게 탐구했습니다. 이 기술들은 각각 독자적인 강력한 능력을 가지고 있지만, 서로 결합될 때 시너지 효과를 발휘하여 더욱 진보된 AI 시스템을 구축한다는 점을 강조했습니다. 비전공자부터 기본적인 AI/IT 지식이 있는 독자들까지, 이 복잡해 보이는 기술들이 우리 삶에 미칠 영향과 그 핵심 개념들을 통찰력 있게 이해하는 계기가 되었기를 바랍니다.
LLM이란 무엇인가? 우리는 LLM이 방대한 텍스트 데이터를 학습하여 인간의 언어를 이해하고 생성하는 AI의 '두뇌' 역할을 한다는 것을 살펴보았습니다. 이는 정보의 바다에서 언어의 의미를 파악하고 새로운 지식을 창조하는 데 필수적인 능력입니다.
거대 행동모델 LAM 설명에서는 LLM의 언어적 지능을 넘어, 실제 환경에서 행동을 계획하고 실행하는 AI, 즉 '행동하는 AI'의 중요성을 인지했습니다. LLM LAM 차이점을 통해 이 두 가지 모델이 각각 사고와 행동이라는 인간 지능의 두 가지 축을 담당하며 상호 보완적으로 작용한다는 점을 이해할 수 있었습니다.
강화학습 비전공자도 이해하기 쉽게, AI가 시행착오를 통해 스스로 최적의 길을 찾아 학습하는 원리를 살펴보았습니다. 이는 예측 불가능한 환경에서 AI가 유연하게 대처하고 능동적으로 문제를 해결하는 데 필수적인 학습 패러다임입니다.
RAG 검색증강생성 원리를 통해서는 LLM의 '환각' 현상을 극복하고 최신, 정확한 정보를 제공하여 AI의 신뢰성을 획기적으로 높이는 방법을 알게 되었습니다. 감성 컴퓨팅 실제 사례를 통해 AI가 인간의 감정을 인식하고 표현하며 상호작용함으로써, 더욱 인간적인 사용자 경험을 제공하고 AI가 우리의 진정한 동반자가 될 수 있음을 확인했습니다.
이 모든 인공지능 핵심 개념들이 개별적인 섬처럼 존재하기보다는, 거대한 AI 대륙을 이루는 연결된 지반이라는 점이 중요합니다. LLM의 추론 능력과 LAM의 행동 능력이 강화학습을 통해 끊임없이 개선되고, RAG를 통해 검증된 지식이 주입되며, 감성 컴퓨팅을 통해 인간의 감정과 맥락을 이해하며 소통하는 AI. 이러한 통합된 AI는 단순히 작업을 자동화하는 수준을 넘어, 인간의 삶을 더 풍요롭고 의미 있게 만드는 새로운 시대의 문을 열 것입니다.
미래 AI 시대는 더 이상 SF 영화 속 이야기가 아닙니다. 그것은 이미 우리 눈앞에 펼쳐지고 있으며, 이 기술들을 이해하는 것이 곧 미래를 통찰하고 대비하는 첫걸음입니다. 이 가이드가 여러분이 다가오는 AI 미래 기술 전망을 이해하고, 그 속에서 새로운 기회를 발견하며, 변화를 주도하는 데 도움이 되기를 진심으로 바랍니다. AI는 우리의 삶을 변화시킬 강력한 도구이며, 그 도구를 이해하고 현명하게 활용하는 것은 이제 우리 모두의 몫입니다.
'DEV' 카테고리의 다른 글
| pinPOINT 완벽 가이드: 분산 시스템 성능 최적화를 위한 APM 마스터하기 (1) | 2026.01.25 |
|---|---|
| 그라파나(Grafana) 마스터 가이드: 설치부터 대시보드 구축, 알림, 실전 활용까지 완벽 정리 (0) | 2026.01.25 |
| AI 시대 핵심 기술 총정리: SLM, HBM, 공간지능, 과적합, OCR 완벽 이해 (0) | 2026.01.25 |
| 인공지능 미래의 청사진: 기호주의, 뉴로모픽, 대화형 AI부터 데이터 라벨링까지 심층 분석 (0) | 2026.01.25 |
| AI 시대 데이터 성공 전략: 랭글링부터 딥러닝까지 완벽 가이드 (0) | 2026.01.25 |
- Total
- Today
- Yesterday
- AI기술
- 데이터베이스
- 오픈소스DB
- springai
- ElasticSearch
- 펄
- 시스템아키텍처
- spring프레임워크
- AI
- 로드밸런싱
- 개발생산성
- 코드생성AI
- Java
- Oracle
- 서비스안정화
- llm최적화
- 인공지능
- 해외
- 성능최적화
- Rag
- 프롬프트엔지니어링
- 업무자동화
- LLM
- 직구
- 웹개발
- 개발자가이드
- 마이크로서비스
- 배민
- 자바AI개발
- 미래ai
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
