KT 에이블스쿨 9기 DX컨설턴트

[KT 에이블스쿨 9기 기자단] DX컨설턴트 7주차 후기

juhyo 2026. 5. 20. 23:28

안녕하세요 kt에이블스쿨 9기 기자단입니다.
오늘은 dx컨설턴트 트랙 7주차 후기를 작성하겠습니다.
 
먼저 7주차 일정을 간단히 브리핑 하겠습니다.
월~수요일엔 Langchain기반 Rag구현 수업이 있었고
목요일은 4차미프 1일차, 금요일엔 에이블데이가 진행됐습니다.
 
월화수 3일간은 저번주에 이어 LangChain기반 RAG구현에 대해 배웠습니다.
저번주에 비해 훨씬 자세하게 배웠고, 여러가지 실습도 진행했는데요.
실습을 하면서 단순히 LLM만 연결한다고 좋은 AI 시스템이 만들어지는 건 아니라는 걸 느꼈습니다.
특히 RAG에서는 어떤 문서를 검색하고, 그 결과를 어떻게 정리해서 전달하느냐가
답변 품질에 큰 영향을 준다는 점이 인상적이었습니다.
또 Vector DB, Hybrid Search, Reranking 같은 과정을 직접 적용해보면서
검색 품질을 높이는 과정이 왜 중요한지도 이해할 수 있었습니다.
LangGraph를 활용한 부분도 흥미로웠는데, 단순 체인보다 더 유연하게 흐름을 제어할 수 있어서
실제 서비스 구조와 비슷하다는 느낌을 받았습니다.
전체적으로 이번 실습은 단순 챗봇 구현보다는 RAG 시스템의 전체 흐름을 이해하는 데 도움이 되었던 것 같습니다.
 
아래는 수업시간에 배운 내용 중 중요하다고 생각되는 부분을 모아 정리했습니다.

Vector DB 구축하기

RAG 시스템에서 가장 중요한 요소 중 하나는 Vector DB이다.
문서를 벡터 형태로 저장하고, 질문과 가장 유사한 문서를 빠르게 검색할 수 있도록 도와준다.

임베딩 모델 생성

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small"
)
  • 텍스트를 숫자 벡터 형태로 변환한다.
  • 의미 기반 검색이 가능해진다.

Chroma Vector DB 생성

from langchain.vectorstores import Chroma

vectorstore = Chroma.from_documents(
    documents=split_docs,
    embedding=embeddings
)
  • 분할된 문서를 Vector DB에 저장한다.
  • 이후 Retriever를 통해 검색 가능하다.

Retriever 생성

retriever = vectorstore.as_retriever()

문서 검색

docs = retriever.invoke("휴가 규정을 알려줘")
  • 질문과 가장 유사한 문서를 검색한다.
  • RAG의 핵심 검색 단계이다.

Vector DB에 문서 추가하기

RAG 시스템은 새로운 문서를 지속적으로 추가할 수 있어야 한다.

문서 추가

vectorstore.add_documents(new_docs)
  • 새로운 문서를 기존 Vector DB에 저장한다.
  • 실시간 문서 업데이트 구조에 활용 가능하다.

핵심 개념

  • Vector DB는 단순 저장소가 아니다.
  • 의미 기반 검색을 위한 구조이다.
  • 문서가 많아질수록 검색 품질 관리가 중요해진다.

RAG 기반 챗봇 만들기

RAG는 검색(Retrieval)과 생성(Generation)을 결합한 구조이다.
기존 LLM은 학습된 데이터만 기반으로 답변하지만,
RAG는 외부 문서를 검색해서 최신 정보나 사내 문서 기반 답변이 가능하다.

RAG 체인 구성

from langchain.chains import RetrievalQA

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever
)

질문 실행

response = qa_chain.invoke({
    "query": "연차 사용 기준 알려줘"
})

print(response)

RAG의 장점

  • 최신 문서 기반 응답 가능
  • 환각(Hallucination) 감소
  • 기업 내부 데이터 활용 가능
  • FAQ 챗봇 구현 가능

쿼리 최적화

사용자 질문이 항상 검색에 적합한 형태는 아니다.
그래서 검색 전에 질문을 최적화하는 과정이 중요하다.

Query Rewrite 예시

question = "휴가 며칠 가능해?"

optimized_query = """
연차 휴가 사용 가능 일수 기준
"""

왜 중요한가?

  • 검색 정확도 향상
  • 모호한 질문 개선
  • Retriever 성능 향상
  • 불필요한 문서 검색 감소

핵심 포인트

LLM 성능보다 검색 품질이 더 중요한 경우가 많다.
특히 RAG에서는 “어떤 문서를 가져오느냐”가 전체 답변 품질을 크게 좌우한다.


Hybrid Search

기본 벡터 검색만 사용하면 정확한 키워드를 놓치는 경우가 있다.
그래서 실제 서비스에서는 보통:

  • Dense Retrieval(Vector Search)
  • Sparse Retrieval(BM25)

를 함께 사용하는 Hybrid Search 구조를 많이 사용한다.

Hybrid Search 개념

  • Dense Search: 의미 기반 검색
  • Sparse Search: 키워드 기반 검색

두 방식을 결합하면 검색 품질이 더 좋아진다.

핵심 개념

예를 들어:

  • 사용자가 정확한 규정명을 입력한 경우
  • 특정 키워드가 중요한 경우

BM25가 더 강할 수 있다.
반대로:

  • 자연어 질문
  • 유사 의미 검색

에서는 Vector Search가 강하다.


Reranking

검색된 문서가 항상 최적의 순서로 정렬되는 것은 아니다.
그래서 최종적으로 관련도가 높은 문서를 다시 정렬하는 과정이 필요하다.
이를 Reranking이라고 한다.

동작 흐름

  1. Retriever가 여러 문서를 검색
  2. Reranker가 관련도를 다시 계산
  3. 가장 적절한 문서를 상위에 배치

왜 중요한가?

RAG에서 가장 중요한 건:

  • 얼마나 좋은 문서를 가져오는가
  • 얼마나 정확한 순서로 정렬하는가

이다.
실제 서비스에서는 Reranking이 답변 품질에 큰 영향을 준다.


LangGraph 구조 이해

LangGraph는 상태(State) 기반으로 흐름을 제어하는 프레임워크이다.
기존 Chain 방식보다 더 복잡한 AI 워크플로우를 구성할 수 있다.

State 정의

from typing import TypedDict

class GraphState(TypedDict):
    question: str
    generation: str

그래프 생성

from langgraph.graph import StateGraph

workflow = StateGraph(GraphState)

노드 추가

workflow.add_node("retrieve", retrieve)
workflow.add_node("generate", generate)

핵심 개념

  • 상태 기반 흐름 관리
  • 복잡한 AI 프로세스 구성 가능
  • 조건 분기 가능
  • Agent 구조 구현 가능

LangGraph 조건 분기

LangGraph는 조건에 따라 흐름을 다르게 구성할 수 있다.

조건 분기 예시

workflow.add_conditional_edges(
    "retrieve",
    decide_next_step
)

활용 사례

  • 검색 결과가 없을 때 재검색
  • 질문 유형별 다른 처리
  • 특정 조건에서 Agent 실행
  • 품질 검증 후 재생성

기존 Chain과 차이점

기존 Chain:

  • 단순 순차 실행

LangGraph:

  • 상태 기반 흐름 제어
  • 조건 분기 가능
  • 복잡한 Agent 구조 구현 가능

LangGraph 기반 RAG 구현

LangGraph를 활용하면 더 복잡한 RAG 구조를 구현할 수 있다.
예를 들어:

  • 검색
  • 문서 검증
  • 답변 생성
  • 답변 평가

같은 과정을 하나의 그래프로 연결 가능하다.

핵심 흐름

retrieve -> grade_documents -> generate

장점

  • 검색 품질 향상
  • 불필요한 문서 제거
  • 답변 안정성 증가
  • Agent 기반 확장 가능

Agentic RAG 구현

Agentic RAG는 단순 검색 기반 RAG보다 더 발전된 구조이다.
LLM이 스스로:

  • 검색 필요 여부 판단
  • 검색 방식 선택
  • 추가 질문 생성
  • 재검색 수행

등을 수행할 수 있다.

Agentic RAG 특징

  • 자율적 의사결정 가능
  • 복잡한 질의 처리 가능
  • 반복 검색 가능
  • 동적 흐름 제어 가능

핵심 개념

기존 RAG는:

  • 검색 → 답변

형태였다면,
Agentic RAG는:

  • 판단
  • 검색
  • 검증
  • 재검색
  • 답변 생성

같은 복합적인 흐름을 가진다.





목요일엔 미니프로젝트 4차 1일차가 진행되었습니다!
2일차는 8주차 월요일에 진행되었지만 한번에 적는게 좋을껏 같아
7주차 4차 미프 후기에 같이 적도록 하겠습니다.
 
주제는 에이블스쿨 학습 도우미 구축입니다.
3차 미니프로젝트과 비슷하지만 직접 pdf를 만들고 거기에서 정보를 찾아 답변을 주는
rag를 활용하는 과제였습니다.
제가 이 주제를 보고 개인과제를 진행했을때
추가기능보다 에이블백서에 신경써야한다고 생각했습니다.
 
개별과제 후 조별미팅시간에도 문서관리에 신경을 쓰자는 의견이 나왔고,
저희 팀의 백서에 어떤 내용들이 들어가고, 다른팀과 차별화된 정보는 어떤걸 넣을껏인지
회의하는 시간을 가졌습니다.
 
2일차는 8주차 월요일에 진행되었습니다.
오전시간엔 문서관리 역할을 맡은 2명과 조장,발표자,서기 3명이 추가로
에이블백서 제작에 참가하였고, 나머지 3분은 구현에 참가하였습니다.
 
오후에도 백서를 계속 검토하며 고도화를 진행하였고
동시에 백서가 써진 형식에 맞게 코드를 수정하며 진행하였습니다.
 
그 결과 기존에 정한 데드라인 이내로
원활하게 작동되는 학습도우미 구축과 100장에 달하는 양질의 백서를 만들 수 있었습니다.
 
제가 발표를 맡았기 때문에 시연에 대비해 여러가지 질문을 던져보며
답변이 잘 나오도록 유도하였는데요.
질문을 하다보니 질문을 얼마나 자세히 하냐에 따라 답변의 퀄리티가 매우 달랐습니다.
이 부분은 아쉬웠지만 짧은 시간이내에
저희 조가 상의한대로 결과물이 잘 나온것같아 만족하였습니다.
또한 지금까지 했던 미프 통틀어서 시간이 가장 넉넉히 남았었고, 협업이 잘 진행되었던것 같아 좋았습니다.  
 
금요일엔 에이블데이가 진행되었습니다.
에이블데이 기념으로 스탠리 텀블러와 배달의 민족 3만원 쿠폰을 받았는데요.
배달의 민족 3만원 쿠폰은 금요일 점심에 치킨을 시켜먹었습니다.
에이블 데이에 어떤걸 했는지 간단히 브리핑하겠습니다.
오전엔 알고리즘 문제를 풀어야하는 코딩테스트가 2시간동안 진행되었습니다.
오후엔 포트폴리오 특강과 저희 팀끼리 키워드 맞추기를 진행하였습니다.
 
에이블데이에 가장 인상깊었던건 포트폴리오 특강입니다.
포트폴리오가 중요하다는 말만 많이 들었을 뿐, 아직 경험도 부족하고, 어떤식으로
포트폴리오를 구성해야 하는지 막막했는데요.
대략적인 가이드라인을 제시해주셔서 좋았습니다.
 
이상으로 7주차 후기를 마치겠습니다.
여기까지 읽어주셔서 감사합니다.