728x90

✅ RAG에서 Vector DB가 중요한 이유

RAG는 결국 “검색 + 생성”

  • RAG = Retrieval-Augmented Generation
  • LLM이 답변하기 전, 외부 데이터에서 유사한 정보를 찾아오는 과정이 핵심
  • 이 “검색”을 맡는 것이 바로 Vector DB

✅ Vector DB란?

Vector Database = 의미(semantics)를 숫자로 비교하는 데이터베이스

  • 텍스트 → 임베딩(Embedding) → 벡터로 변환
  • 수학적으로 코사인 유사도 같은 계산으로
  • “이 질문과 비슷한 내용이 뭐지?”
  • 수백만~수십억 개 벡터 중에서 가장 가까운 벡터를 빠르게 찾아줌

✅ RAG에 Vector DB가 필요한 이유

LLM 한계 보완

  • LLM은 학습된 지식만 답변
  • 최신 정보, 사내 데이터는 알 수 없음
  • → Vector DB에서 최신 문서를 검색 후 LLM에 context로 주입

의미 기반 검색

  • “책상” ≈ “데스크”
  • 키워드 검색은 못 잡아내는 의미적 유사도까지 검색 가능

대용량 데이터 처리

  • 수백만 개 문서도 빠르게 유사도 검색

✅ 대표적인 Vector DB들

아래는 RAG 개발자들이 가장 많이 쓰는 Vector DB들 + 특징!


1. Pinecone

  • 완전 관리형 SaaS
  • Scale-out이 매우 쉽고 빠름
  • Multi-tenant 지원 → 여러 프로젝트 분리 관리
  • Hybrid Search 지원 (벡터+키워드)
  • 단점: 유료, 비용 다소 높음

2. Weaviate

  • 오픈소스 + SaaS 모두 가능
  • Graph-like 관계 탐색 가능 (Vector Graph)
  • Hybrid Search 지원
  • 자체적으로 Text2Vec 플러그인 제공
  • REST API, GraphQL 지원

3. Qdrant

  • Rust 기반 → 성능 빠름
  • Hybrid Search 지원
  • Docker로 손쉽게 로컬 실행 가능
  • 오픈소스 무료
  • 클라우드 서비스도 있음

4. Milvus

  • 가장 유명한 오픈소스 Vector DB
  • 수십억 벡터 저장 가능
  • Disk-based storage → 대규모 데이터에 유리
  • 복잡한 Index 옵션 다양
  • 단점: 세팅이 다소 복잡

5. Elasticsearch (Vector Search)

  • 전통 검색엔진 + Vector Search 추가
  • BM25 + 벡터 혼합 검색 가능
  • 이미 Elasticsearch 쓰고 있다면 도입 쉬움
  • 벡터 전용 DB보단 성능 약간 떨어질 수 있음

✅ RAG + Vector DB 동작 흐름

질문 → Embedding 생성 → Vector DB 검색 → Top-K 유사 문서 반환
→ LLM에게 context로 주입 → 최종 답변 생성

✅ Vector DB 선택 시 고려사항

  • 데이터 규모 (수백만 vs 수십억)
  • Hybrid Search 필요한가?
  • Latency (속도)
  • 운영 편의성 (SaaS vs Self-Hosted)
  • 비용

✅ 한 줄 요약

“RAG에서 Vector DB는 LLM의 두뇌에 최신 기억을 꽂아주는 USB다!”

 

728x90
728x90

**MCP(Model Context Protocol)**는 AI Agent가 외부 도구나 리소스(API, 데이터베이스, 크롤러 등)와 표준화된 방식으로 연결되도록 돕는 프로토콜이에요.
쉽게 말해, USB-C 포트처럼 LLM을 다양한 시스템과 연결하는 통로라고 볼 수 있죠.

이번에는 MCP 스타일로 JSON-RPC 통신을 흉내 내는 간단한 Node.js 예시 코드를 작성해봤습니다.
MCP가 어떻게 Host ↔ Client 간에 메시지를 주고받는지 이해하는 데 도움이 될 거예요.


✅ MCP 스타일 JSON-RPC 예제

예제 시나리오

  • 사용자가 “2 + 3 계산해줘” 요청
  • Host가 MathClient에게 계산 요청
  • MathClient가 계산 후 결과 반환
  • Host가 사용자에게 결과 전달

1. Math Client(Server 역할)

실제로는 MCP Client이지만, 네트워크 상에서 JSON-RPC Server로 동작하는 구조

// mathClient.js
import express from "express";
import bodyParser from "body-parser";

const app = express();
app.use(bodyParser.json());

app.post("/rpc", (req, res) => {
  const { method, params, id } = req.body;

  console.log("요청 받음:", method, params);

  if (method === "add") {
    const result = params.a + params.b;
    res.json({
      jsonrpc: "2.0",
      result,
      id,
    });
  } else {
    res.json({
      jsonrpc: "2.0",
      error: {
        code: -32601,
        message: "Method not found",
      },
      id,
    });
  }
});

app.listen(4000, () => {
  console.log("Math Client (Server) running on http://localhost:4000/rpc");
});

2. Host 역할

실제 MCP Host처럼 Client에게 JSON-RPC 메시지를 보내는 코드

// host.js
import axios from "axios";

async function callMathClient() {
  const payload = {
    jsonrpc: "2.0",
    method: "add",
    params: {
      a: 2,
      b: 3,
    },
    id: 1,
  };

  const response = await axios.post(
    "http://localhost:4000/rpc",
    payload,
    { headers: { "Content-Type": "application/json" } }
  );

  console.log("Math Client 응답:", response.data);
}

callMathClient();

실행 순서

1. Math Client 실행

node mathClient.js

2. Host 실행

node host.js

3. 출력 결과

Math Client 응답: { jsonrpc: '2.0', result: 5, id: 1 }

✅ MCP 스타일로 이해하기

이 예제는 MCP의 작동 방식을 아주 단순화한 것이지만, 개념적으로는 똑같아요:

  • 사용자 → “2+3 계산해줘”
  • Host → 어떤 Client가 처리할지 판단 (Planner 역할)
  • Math Client → 계산 수행
  • Host → 사용자에게 결과 반환

MCP의 실제 동작

실제 MCP 환경에서는:

✅ JSON-RPC 규격 메시지 사용
✅ Tool마다 Client로 분리 → 재사용 가능
✅ Host가 Plan → Execute → Observe 루프 제어
✅ 멀티 Agent, 멀티 Tool 관리 가능

예)

  • Weather API Client
  • DB Query Client
  • Web Browser Client
  • Code Executor Client

이처럼 MCP는 LLM Agent 개발의 USB-C 포트 같은 표준 역할을 하며, AI가 더 넓은 세상과 연결될 수 있도록 돕고 있습니다. 🚀

728x90
728x90

MCP란 무엇인가? LLM Agent 동작 흐름으로 이해하는 Model Context Protocol

최근 AI 개발 분야에서 가장 많이 회자되는 키워드 중 하나가 LLM Agent입니다.
ChatGPT, Claude 같은 LLM(Large Language Model)이 단발성 질의응답에 주로 쓰였다면, 이제는 도구를 스스로 호출하고 복잡한 작업을 계획-실행-관찰 루프(Plan-Execute-Observe Loop)로 수행하는 LLM Agent가 새로운 트렌드로 떠오르고 있죠.

그런데 이렇게 복잡해진 에이전트 개발 생태계에 새로운 표준을 제안한 것이 바로 **MCP (Model Context Protocol)**입니다.

오늘은 LLM과 LLM Agent의 차이를 간단히 비교하고, MCP가 어떤 구조와 동작 원리로 작동하는지 살펴보겠습니다.


✅ LLM vs LLM Agent — 무엇이 다를까?

먼저 아래 표를 보면서 간단히 정리해 볼게요.

항목LLMLLM Agent
주요 역할 단발성 언어 작업 (요약, 번역) 계획-실행-관찰 루프로 복잡한 태스크 수행
Memory 없음 있음 (대화 기록, 작업 히스토리 기억)
Tool 사용 불가능 가능 (API, 계산, DB, 웹검색 등)
Planner 없음 있음 (도구를 언제, 어떻게 쓸지 판단)
실행 방식 정적 응답 (입력 → 출력) 동적 행동 (입력 → 툴 호출 → 결과 해석 → 반복)
유연성 낮음 높음 (실시간 검색, 계산, API 활용)
지속적 작업 어려움 가능 (장기 과제, 다단계 플로우)
 

예를 들어 사용자가 “오늘 서울 날씨 알려줘”라고 물었을 때,

  • LLM은 기존에 학습한 지식으로 “오늘 서울은 맑고 기온은 26도”라고 대답하지만,
  • LLM Agent는 실제 날씨 API를 호출해 최신 데이터를 가져와서 답변합니다.

✅ MCP란 무엇인가?

**MCP (Model Context Protocol)**는 LLM Agent 개발을 위한 표준 프로토콜입니다.

  • Claude LLM을 제공하는 Anthropic이 주도적으로 제안
  • AI 앱 개발 생태계의 USB-C 포트 역할
    • USB-C가 여러 장치를 표준 방식으로 연결하듯,
    • MCP는 다양한 데이터 소스, 도구, 외부 리소스를 LLM과 연결하는 표준화된 방법을 제공

기존 Agent 프레임워크들이 제각각이던 방식을 통합하고자 등장한 것이 바로 MCP예요.


✅ MCP의 기본 구조

MCP는 크게 Host, Client, Server 세 가지로 이루어져 있습니다.

  • Host
    • 전체 Agent를 실행하고 관리
    • 여러 Client와 연결되어, 작업을 분배하거나 통제
  • Client
    • 실제 LLM 모델 또는 특정 기능(API 호출, DB 쿼리 등)을 실행
    • Host의 요청을 받아 실행 후 결과 반환
  • Server
    • MCP 메시지를 송수신하는 실제 서버
    • JSON-RPC 기반으로 통신

이렇게 역할을 나누어 MCP는 다음과 같은 흐름으로 작동합니다:

  1. 사용자가 “서울 날씨 알려줘”라고 Host에 요청
  2. Host는 해당 요청을 “WeatherAPI Client”에 전달
  3. Client가 실제 API 호출 → 결과를 JSON 형태로 응답
  4. Host가 응답을 정리해 사용자에게 전달

✅ MCP의 장점과 한계

장점

  • 여러 Agent 프레임워크를 하나의 표준으로 통합 가능
  • 개발자들이 공통 규격으로 플러그인 개발 가능
  • Tool 호출, Context 관리 등을 효율적으로 처리

한계

  • 아직 초기 표준 → 생태계가 완전히 자리잡지 않음
  • 벤더별 커스텀 규격이 여전히 존재
  • 속도 및 비용 이슈 (API 호출 많아질수록 비용 증가)

하지만 LLM Agent 시대가 본격화되면서, MCP가 “AI의 USB-C”로 자리 잡을 가능성은 충분히 큽니다.


✅ MCP SDK

MCP를 직접 다뤄보려면 Anthropic이나 오픈소스 커뮤니티에서 제공하는 MCP SDK를 활용할 수 있습니다.

  • JSON-RPC 기반으로 MCP 메시지를 주고받음
  • Node.js, Python 등 여러 언어 SDK가 준비 중
  • 커스텀 Client 개발 가능 (예: 크롤러, DB 쿼리, 특정 API 호출 등)

추후 더 많은 예제 코드와 함께 MCP SDK 활용법도 다뤄보겠습니다!


LLM Agent 시대에는 단순히 대답만 하는 모델로는 부족합니다.
여러 도구를 호출하고, 데이터를 가공하며, 더 유연하게 동작할 수 있어야 하죠.

MCP는 이 흐름을 뒷받침할 중요한 표준 프로토콜입니다.
AI와 개발이 더욱 긴밀하게 연결될 미래를 기대해 봅니다. 🚀

혹시 MCP나 LLM Agent 관련해 더 다뤄보고 싶은 주제가 있다면 댓글로 알려 주세요!

728x90
728x90

AI 증강 개발(AI-Augmented Development)이란 무엇인가요?

최근 개발 트렌드에서 빼놓을 수 없는 키워드가 바로 AI 증강 개발입니다.
이는 개발자와 AI가 협업하여 생산성과 코드 품질을 높이는 방식을 의미합니다.
즉, AI가 개발자를 대체하는 것이 아니라, 개발자가 더 창의적이고 고차원적인 문제 해결에 집중할 수 있도록 개발 과정을 보조해 주는 것이 핵심이에요.


AI 증강 개발의 주요 기능

1. 코드 생성 및 완성

  • AI가 문맥을 이해해 적절한 코드를 제안
  • 보일러플레이트 코드 자동 생성

2. 코드 리뷰 및 품질 향상

  • 버그, 보안 취약점, 코드 스타일 검사
  • 성능 개선 포인트 제안

3. 문서화 지원

  • 주석 생성, API 문서 작성, 기술 문서 초안 작성

4. 디버깅 지원

  • 에러 원인 분석, 해결책 제시, 로그 분석

5. 지식 관리

  • 코드베이스 이해 돕기
  • 관련 문서 및 자료 추천
  • 팀 내 지식 공유 촉진

Cursor AI Notepad로 AI 증강 개발 가속화하기

Cursor AI가 제공하는 Notepad는 AI 증강 개발을 한층 효율적으로 만드는 도구예요.
Notepad는 Composer와 채팅 사이에서 컨텍스트를 공유하는 메모장 같은 존재입니다.

특히 개발자들이 자주 참조하는 규칙, 코드 템플릿, 문서 등을 한 곳에 정리해 두고 @ 멘션으로 불러올 수 있는 점이 매우 강력합니다.


Notepad의 활용 사례

동적 보일러플레이트 생성
→ API 핸들러, 컴포넌트 템플릿, 서비스 생성 규칙 등을 저장

아키텍처 문서화
→ 프론트/백엔드 구조, 데이터 모델 설계, 시스템 아키텍처 가이드라인 정리

코딩 가이드라인
→ 코딩 컨벤션, 네이밍 규칙, 커밋 메시지 규칙 등 공유

팀 규칙 관리
→ 코드 리뷰 절차, 배포 프로세스, 릴리즈 노트 규칙 정리


역할 기반 개발 프로세스

AI 증강 개발의 효과를 극대화하려면 역할 정의가 중요합니다.
아래는 Cursor AI Notepad의 문서 구조와 함께 정리된 대표 역할들입니다.

📝 기획자 (planner.md)

  • 사용자 중심 기획
  • 정보 구조, 기능 명세, 사용자 시나리오 설계
  • PRD(제품 요구사항 정의서), 사용자 여정도, MVP Scope 작성

🖥️ 프론트엔드 개발자 (frontend-ui.md)

  • UX/UI 중심 개발
  • 반응형, 애니메이션, 디자인 시스템 구현
  • 성능 최적화, 컴포넌트 재사용성 극대화

🛠️ 풀스택 개발자 (fullstack.md)

  • Next.js, TypeScript, Notion API 기반 개발
  • AI 도구를 활용한 개발 최적화
  • 코드 품질 관리, 생산성 향상

🌐 번역가

  • 공식 문서 번역
  • 신속한 지식 습득 지원

각 역할별로 마크다운 문서로 정리해두면, 팀 내 지식 공유와 커뮤니케이션이 훨씬 원활해집니다.


PRD와 SRS, 그리고 MVP

AI 증강 개발은 문서화도 매우 중요합니다.

  • PRD (Product Requirements Document)
    → 제품이 무엇인지, 누구를 위한 것인지, 왜 필요한지를 비즈니스 관점에서 설명
  • SRS (Software Requirements Specification)
    → 제품을 어떻게 만들 것인지, 아키텍처와 기술 명세를 기술 관점에서 설명
  • MVP (Minimum Viable Product)
    → 최소한의 기능만 담은 초기 제품으로, 핵심 가치를 검증하는 것이 목표

이러한 문서들이 Cursor AI Notepad에 정리되어 있으면 팀 전체의 이해도와 속도가 크게 높아집니다.


AI가 개발을 대체하는 시대는 아닙니다.
다만, AI는 개발자의 가장 든든한 비서이자 동료가 될 수 있습니다.

앞으로 AI와 함께 더 똑똑하고 빠르게 개발해보세요! 🚀

혹시 이 내용 중 더 자세히 알고 싶은 주제 있으신가요? 댓글로 알려주세요!

728x90
728x90

들어가며

  • 사람은 소리를 들으면 곧잘 단어를 알아듣고, 다시 소리를 낼 수 있습니다.
  • 그런데 컴퓨터에게 “소리를 듣고 글자로 바꿔라(STT)”, 혹은 “글자를 읽고 자연스럽게 말해라(TTS)” 라고 하면, 이게 생각보다 엄청 복잡한 일입니다.
  • 그 이유는 소리 신호가 시간에 따라 계속 변하고, 말소리는 단순한 신호가 아니기 때문이죠.
  • 오늘은 AI 음향 모델이 소리를 어떻게 이해하고 처리하는지, 대표적인 기술들과 함께 쉽게 설명해보겠습니다.

왜 음향 모델이 필요한가?

  • 소리는 파도와 같다.
    → 소리는 파형(waveform). 하지만 AI는 “이 파형이 무슨 글자인지” 모르죠.
  • 음향모델은 이 파형 속에서 ‘발음 단위(phoneme)’ 라는 기본 단위로 신호를 쪼개고 분석합니다.
  • 예: “she” → /sh/ + /iy/
  • 즉 음향모델은 파형 → 음소 → 단어 로 가는 다리 역할을 합니다.

MFCC: 소리의 DNA 뽑아내기

  • 사람이 목소리를 구별하듯, AI도 소리의 ‘특징’을 뽑아야 합니다.
  • 여기서 등장하는 게 MFCC(Mel-Frequency Cepstral Coefficients).
  • 비유: 소리를 “색깔 스펙트럼”으로 나누어 특징 벡터로 만드는 것.
  • 음성 신호 → 작은 시간 단위로 자르기 → 스펙트럼 뽑기 → 로그와 DCT로 변환 → MFCC 벡터 추출.

GMM (Gaussian Mixture Model)

  • MFCC 벡터를 보고 이게 어떤 소리일지 확률적으로 판단하는 모델.
  • 비유: 여러 개의 종(鐘)을 울려보고 “지금 울린 소리는 어느 종 소리랑 가장 비슷한가?”를 확률로 따지는 것.
  • GMM은 “이 소리가 어느 음소에 속할 확률”을 계산합니다.
  • 수식적으로 각 feature vector는 여러 Gaussian 분포의 혼합으로 모델링.

HMM (Hidden Markov Model)

  • GMM이 “순간”을 잘 본다면, HMM은 “흐름”을 본다.
  • 말은 이어지기 때문에, 앞 음소가 뭐였느냐가 다음 음소에 영향을 미침.
  • HMM은 숨겨진 상태(음소) → 관찰값(MFCC) 의 관계를 모델링.
  • 비유: 문장 읽기 게임 → 눈으로 본 글자(관찰값)는 보이지만, 머릿속 생각(숨겨진 상태)은 안 보이는 것과 같음.
  • HMM은 상태 전이 확률, 방출 확률로 음성 시퀀스를 모델링.

GMM-HMM의 결합

  • GMM + HMM → 음향모델의 전통적 조합.
  • GMM은 각 프레임의 음소 분포를 계산.
  • HMM은 음소들의 시퀀스를 모델링.
  • 비유: GMM은 단일 사진을 분석, HMM은 사진들을 이어붙여 영화로 보는 것.

하이브리드 모델 (DNN-HMM, LSTM-HMM)

  • GMM-HMM보다 더 똑똑한 게 필요해졌다!
  • GMM은 선형적 가정, 단순한 분포라 한계가 있음.
  • 그래서 GMM 대신 DNN, LSTM을 쓰기 시작:
    • DNN-HMM: GMM 대신 DNN이 분포를 학습
    • LSTM-HMM: 시간 흐름을 더 잘 기억
  • 비유: GMM은 수학적 공식으로만 소리를 구분, DNN은 소리를 보고 “느낌적으로” 구분 가능.

Viterbi 디코더

  • HMM-HMM 또는 Hybrid Model의 필수 도구.
  • 가장 높은 확률의 음소 시퀀스(숨겨진 상태)를 찾아내는 알고리즘.
  • 비유: 미로에서 가장 가능성 높은 길을 찾는 네비게이션.

최근 트렌드

  • Deep Learning으로 Acoustic Model 완전 대체 → End-to-End 모델(LAS, CTC)도 뜨고 있음.
  • 하지만 Hybrid Model도 여전히 많이 쓰인다 (실제 상용 STT 엔진들).

정리

  • 소리의 파동 → MFCC
  • MFCC → GMM 혹은 DNN으로 분류
  • 시간 흐름 → HMM
  • HMM + GMM = GMM-HMM
  • GMM 대신 DNN/LSTM → 하이브리드 모델
  • End-to-End 모델(LAS, Transformer 등)로도 발전 중

✅ 이해를 돕는 비유 정리

개념 비유
MFCC 색깔 스펙트럼 뽑아내듯 소리의 특징 벡터화
GMM 여러 종 소리와 비교해 비슷한 종 찾기
HMM 글자 읽기 게임 – 머릿속 생각은 안 보인다
Viterbi 미로에서 가장 가능성 높은 길 찾기
Hybrid Model 수학 대신 ‘느낌적 판단’을 배우는 AI
728x90
728x90

🤖 딥러닝이란?

딥러닝은 데이터를 통해 스스로 학습하고 판단하는 인공지능 기술이에요.
사람의 뇌 구조를 본뜬 '인공 신경망'을 이용해 이미지, 소리, 텍스트 등 다양한 정보를 분석하죠.
우리가 흔히 쓰는 넷플릭스 추천, 포토앱의 자동 분류도 다 딥러닝 덕분!


🛠️ 케라스란?

케라스(Keras)는 복잡한 딥러닝 모델을 쉽고 간결한 코드로 구현할 수 있게 도와주는 파이썬 기반 도구예요.
복잡한 수학 없이도, 딥러닝을 '만들고 실행'까지 가능하게 해줘서 입문자에게 최고예요!


📐 딥러닝 기본 구조 (한눈에 보기)

  • 입력층: 예를 들어, 28x28 이미지 픽셀
  • 은닉층: 데이터의 특징을 추출
  • 출력층: 숫자/이미지/문자 등 예측 결과 제공

💻 직접 만들어보는 AI 모델 (코랩 실습 예시)

import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten

# 1) 데이터 준비
:contentReference[oaicite:7]{index=7}
:contentReference[oaicite:8]{index=8}
:contentReference[oaicite:9]{index=9}

# 2) 모델 구성
model = Sequential([
    :contentReference[oaicite:10]{index=10}
    :contentReference[oaicite:11]{index=11}
    :contentReference[oaicite:12]{index=12}
])

# 3) 컴파일
:contentReference[oaicite:13]{index=13}
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 4) 학습
:contentReference[oaicite:14]{index=14}

# 5) 평가
:contentReference[oaicite:15]{index=15}
:contentReference[oaicite:16]{index=16}

구글 코랩에 붙여넣기만 하면 바로 실행 가능! 🤩


🎯 왜 코랩 & 케라스인가?

  • 💸 무료 GPU 지원
  • ⏱ 빠른 실행 속도
  • 💬 초보자도 이해할 수 있는 직관적인 코드

🔜 다음 단계로는?

🧠 CNN (Convolutional Neural Network)

  • 이미지 처리 특화된 딥러닝 구조예요.
  • 필터(커널)를 통해 사진 속 윤곽, 모양, 패턴을 잡아냅니다.
  • 예: 얼굴 인식, 자율주행 자동차, X-ray 판독 등에 활용

🧠 RNN (Recurrent Neural Network)

  • 시간 순서를 고려하는 네트워크로, 텍스트나 음성 처리에 강력해요.
  • 과거 데이터를 기억하며 문맥을 이해할 수 있어요.
  • 예: 자동 번역기, 음성 인식, 감정 분석 등에 사용

💬 챗봇, 추천 시스템

  • 지금 여러분이 보고 있는 챗GPT도 딥러닝 기반이에요!
  • 추천 시스템은 유튜브, 넷플릭스처럼 사용자 취향 분석 후 콘텐츠 추천
  • 이런 응용 모델들은 CNN, RNN 기술을 응용해 만든 고급 AI 시스템이랍니다.

🏷️ 태그:

#AI트렌드 #딥러닝쉽게배우기 #구글코랩입문 #케라스튜토리얼
#캐글시작하기 #스마트기술 #AI초보탈출 #딥러닝은재밌다

728x90
728x90

인공지능의 정의

인공지능(Artificial Intelligence, AI)이란 인간의 지적 능력을 컴퓨터에서 구현한 기술로, 다양한 소프트웨어와 시스템이 포함됩니다. 이 개념은 1956년 미국 다트머스 회의에서 존 매카시에 의해 공식화되었습니다. 그는 "기계를 인간처럼 행동하게 만드는 것"이라 정의했습니다.

인공지능의 역사

  • 앨런 튜링은 컴퓨터도 사고할 수 있다는 주장을 제시하며, '튜링 테스트'를 고안했습니다. 이 테스트는 지금도 AI 판별 기준으로 쓰입니다.

인공지능의 발전

  • 1956년 다트머스 회의: 존 매카시가 '인공지능(AI)'이라는 용어를 처음으로 사용하며, AI 연구의 시초가 되었습니다.
  • 앨런 튜링의 기여: ‘튜링 테스트’를 통해, 기계가 사람처럼 사고할 수 있는지 평가하는 기준을 제시하며 AI의 철학적 기반을 마련했습니다.

🚀 1990년대 ~ 2010년대의 발전

  • 빅데이터와 GPU의 등장: 1990년대 후반~2000년대, 저장 장치와 컴퓨팅 파워의 발전으로 데이터 기반 AI가 가능해졌습니다.
  • 딥러닝의 등장: 2012년, 이미지넷(ImageNet) 대회에서 딥러닝 기반 모델 'AlexNet'이 기존 모델을 압도하면서 딥러닝이 본격적으로 각광받기 시작했습니다.

📈 2020년대 이후의 인공지능

  • 초거대 AI 모델의 시대:
    • 구글의 BERT, OpenAI의 GPT 시리즈, 메타의 LLaMA 등 수십억~수천억 파라미터를 가진 언어모델이 탄생했습니다.
    • 이 모델들은 검색, 번역, 이미지 생성, 코딩, 교육 등 다양한 분야에서 활용되며 범용 인공지능(AGI)의 가능성까지 논의되고 있습니다.
  • 멀티모달 AI:
    • 텍스트, 이미지, 음성 등 다양한 데이터를 동시에 처리할 수 있는 AI 기술이 발전하고 있습니다. 대표적으로 GPT-4, Gemini, Claude 등은 텍스트와 이미지 이해를 동시에 수행할 수 있습니다.
  • 생성형 AI의 상용화:
    • ChatGPT, Midjourney, Runway ML, DALL·E, Sora 등 다양한 생성형 AI 도구들이 일상과 산업에 보급되고 있습니다.
    • 콘텐츠 제작, 마케팅, 게임 개발, 의료 등 다양한 산업에서 AI가 창의적 도구로 활용되고 있습니다.

🌍 사회적 변화와 윤리

  • AI 윤리와 규제: 기술의 발전과 함께 AI의 책임, 공정성, 투명성, 저작권 문제 등을 다루는 윤리적 논의가 활발히 진행되고 있으며, 유럽연합(EU) 등은 AI 법안을 제정 중입니다.
  • 일자리 변화: 반복적이고 단순한 작업은 자동화되고, 창의적/분석적인 업무에 AI가 협력자로 투입되며, 직업 구조에 변화가 생기고 있습니다.

자율제조 인공지능

  • 자율제조 AI는 제조현장에서 데이터를 바탕으로 설비 제어, 이상 감지, 품질 분석 등을 자동으로 수행하는 기술입니다.
  • 주요 기술: 비전 AI 기반 불량 검출, 센서 데이터 분석, CNN으로 이미지 인식, RNN으로 생산 예측
  • 스마트팩토리와 연계되어 실시간 공정 최적화와 인력 최소화를 실현합니다.

머신러닝의 종류

  • 지도학습: 정답 데이터를 기반으로 학습 (SVM, 결정트리 등)
  • 비지도학습: 정답 없이 패턴 탐지 (군집화 등)
  • 강화학습: 보상을 통해 행동 전략을 스스로 학습

강화학습의 개념

  • 보상을 통해 학습을 진행하며, 시계열 행동을 최적화합니다.
  • 게임, 로봇 제어, 물류 시스템 최적화 등에 활용됩니다.

딥러닝의 구조

  • 인간의 뇌를 모방한 인공신경망(ANN)을 기반으로 구성
  • 입력층 → 은닉층(hidden layer) → 출력층으로 이루어지며, 비선형 문제 해결에 탁월

DNN의 발전

  • 은닉층이 많은 딥 신경망(DNN)은 다양한 특성 학습에 강점을 가집니다.
  • 응용 모델: CNN(이미지), RNN(시계열), LSTM, GRU 등

CNN의 특징

  • 이미지 인식에 탁월한 신경망
  • Convolution + Pooling + FC layer로 구성
  • 얼굴 인식, 불량 검출, 자율주행 비전 등에 활용

RNN의 활용

  • 시간 흐름에 따른 데이터(텍스트, 음성 등)에 강력
  • 과거 입력을 현재 예측에 반영하는 구조

케라스(Keras) 소개

  • Python 기반 딥러닝 라이브러리
  • TensorFlow 백엔드를 사용하며, 간단한 코드로 강력한 모델 구현 가능
  • 대표 함수: compile(), fit(), evaluate(), predict()

딥러닝 모델 구성 순서

  1. 데이터셋 생성: 원본 데이터를 전처리해 훈련/검증/시험셋 생성
  2. 모델 구성: Sequential 또는 함수형 API로 모델 설계
  3. 학습 설정: 손실함수, 옵티마이저 정의
  4. 모델 학습: fit() 함수로 훈련 수행
  5. 성능 평가: evaluate() 함수 사용
  6. 결과 예측: predict() 함수로 출력 도출

📥 정리된 PPT 파일 다운로드

이번 포스팅에서 소개한 인공지능과 딥러닝에 대한 내용을 한눈에 보기 쉽게 PPT로 정리해두었습니다.
강의자료, 스터디, 발표 등에 활용하고 싶으신 분들은 댓글로 메일 주소 남겨주시면 등록하겠습니다.
등록후에 아래 링크를 통해 다운로드하실 수 있어요.
https://drive.google.com/drive/folders/1S8dv7zUDu6e5cpcIxICC_NHCg_hL3eqB?usp=sharing

728x90
728x90

3.1 버퍼 락의 필요성

오라클은 다수의 프로세스가 동시에 같은 데이터 블록을 읽고/쓰는 상황에서도 데이터 무결성과 동기화를 보장해야 한다. 만약 여러 프로세스가 동일한 버퍼를 변경한다면, 데이터 손상이나 충돌이 발생할 수 있다. 이를 방지하기 위해, 오라클은 Buffer Lock이라는 내부 락 메커니즘을 제공한다.

🔐 동시 접근 방지

  • 프로세스가 캐시된 버퍼 블록을 읽거나 변경하려면 먼저 해당 블록의 Buffer Lock을 획득해야 한다.
  • 버퍼 내용을 읽을 때는 Shared 모드, 변경할 때는 Exclusive 모드로 락이 설정된다.

🧠 이는 파일 시스템에서 읽기/쓰기 락을 거는 것과 유사하다.


3.2 버퍼 락 획득 과정

  1. 해시 체인 래치 획득: 버퍼를 찾기 위해 먼저 해시 버킷을 따라가는 체인 구조 접근 시 래치를 사용.
  2. 버퍼 블록 탐색: 요청 블록을 체인에서 탐색.
  3. 버퍼 락 확인:
    • 이미 다른 프로세스가 Buffer Lock을 Exclusive 모드로 점유 중이라면,
    • 현재 프로세스는 버퍼 락 대기자 목록에 등록되어 대기한다.
  4. 락 해제 감지 후 재시도: 기존 프로세스가 락을 해제하면, 대기 중이던 프로세스가 락을 획득한다.

3.3 블록 클린아웃(Block Cleanout)

오라클은 다중 트랜잭션 환경에서 **일관된 읽기(Read Consistency)**를 유지하기 위해 Undo를 사용한다. 하지만 한 번 트랜잭션이 커밋되면, 나중에 그 블록을 읽는 사용자가 해당 정보를 Undo에서 찾지 않도록, 해당 블록에 커밋 정보를 반영하는 작업을 수행한다. 이 작업을 블록 클린아웃이라 부른다.

  • 클린아웃은 SELECT 시점이나 백그라운드에서 수행될 수 있다.
  • 클린아웃 중에는 블록 수정이 발생하므로 Buffer Lock이 필요하다.

🔄 이 과정은 읽기 작업임에도 일시적으로 블록이 "쓰기 락" 상태로 바뀔 수 있다.


3.4 버퍼 핸들과 Pin 설정

📦 버퍼 핸들(Buffer Handle)이란?

  • 버퍼 헤더의 포인터를 통해 참조되는 구조체로, 특정 블록의 접근 제어 정보를 담고 있다.
  • 각 프로세스는 버퍼 핸들을 통해 블록을 Pin하여 사용.

🔗 Pinning의 과정:

  • 프로세스가 버퍼 핸들을 획득하면 헤더에 있는 소유자 리스트에 연결된다.
  • 이 리스트에 등록됨으로써, 해당 프로세스가 블록을 사용하는 동안 다른 프로세스가 블록을 교체하지 못하게 한다.

3.5 Buffer Pinning의 장점

Buffer Pinning은 논리적 블록 읽기(Logical Block Read) 시 발생하는 불필요한 작업을 제거하여 성능을 획기적으로 향상시킨다.

🌟 효과:

  • 해시 체인 래치 재획득 없이 블록을 연속해서 참조 가능
  • 재검색 없이 캐시에 유지된 블록을 직접 재사용 가능

🔁 CPU와 메모리 자원을 절약하며, 특히 반복적인 액세스가 많은 인덱스 스캔에서 효과적이다.


3.6 인덱스 리프 블록과 Range Scan

📌 인덱스 리프 블록이란?

  • B-Tree 인덱스 구조에서, 실제 인덱스 항목들이 저장되는 최하위 블록.
  • 데이터베이스에서 인덱스를 통해 WHERE 조건을 만족하는 값을 찾을 때 참조된다.

🔍 Index Range Scan의 I/O 증가 원인

  • 인덱스 리프 블록은 여러 개로 나뉘어 있어 여러 블록을 순차적으로 탐색해야 함.
  • 매번 새로운 블록을 읽어야 하므로 디스크 I/O가 늘어날 수 있다.

3.7 Buffer Pinning으로 I/O 감소하는 원리

Buffer Pinning은 인덱스 리프 블록 같이 빈번하게 반복 접근되는 블록을 메모리에 고정시켜, 불필요한 디스크 접근을 줄여준다.

🔧 원리 요약:

  1. 첫 번째 액세스 시 블록을 버퍼 캐시에 로드하고 핀 설정
  2. 이후 동일 세션에서 동일 블록 재접근 시
    • 해시 체인 탐색, 래치 획득 없이 직접 재사용 가능
    • 디스크 I/O 생략 가능

📈 인덱스 기반 검색이 많은 OLTP 환경에서는 Buffer Pinning이 성능 최적화의 핵심이 될 수 있다.


📎 관련 태그

#Oracle #BufferLock #BufferPinning #Latch #BlockCleanout #IndexLeafBlock #RangeScan #LogicalRead #DatabasePerformance #ConcurrencyControl #SGA

728x90
728x90

2.1 Database Buffer Cache 구조

Database Buffer Cache는 오라클의 핵심 메모리 영역으로, 디스크 I/O를 줄이고 SQL 실행 성능을 높이기 위한 캐시 역할을 한다. 디스크에서 데이터를 읽을 때는 블록 단위 I/O가 수행되며, 이 블록들은 버퍼 캐시에 로드된다.

🔍 블록 식별 구조: 해시 버킷과 체인

  • 오라클은 데이터 블록을 빠르게 찾기 위해 해시 테이블을 사용한다.
  • 해시 테이블의 각 엔트리는 **해시 버킷(Hash Bucket)**이며, 동일 해시값을 가진 블록들은 **연결 리스트(체인)**로 연결된다.
  • 각 체인은 **버퍼 헤더(Buffer Header)**를 통해 연결되며, 이 버퍼 헤더는 해당 블록의 위치, 상태, LRU 및 해시 체인 포인터 등을 포함한다.
  • 사용자가 특정 블록을 요청하면, 오라클은 해당 블록의 주소를 해시 함수로 계산하여 버킷을 찾고, 그 버킷에 연결된 체인을 따라가며 원하는 블록을 탐색한다.
-- 해시 버킷 개수 확인 SQL 예시
SELECT name, value FROM v$parameter WHERE name = 'db_block_hash_buckets';

🎯 체인 탐색 비용 최소화 전략: 하나의 체인에 여러 버퍼가 걸리면 탐색 비용이 증가하므로, 하나의 체인에 하나의 버퍼만 걸리는 것을 이상적인 상태로 본다. 이를 위해 해시 버킷 수를 충분히 확보하고, 해시 분포가 균등해야 한다.


2.2 Latch(래치) 메커니즘

Buffer Cache는 다수의 세션이 동시에 접근하는 공유 영역이기 때문에, **자료구조에 대한 직렬화(Serialization)**가 필수적이다. 이 역할을 수행하는 것이 바로 **래치(Latch)**이다.

✅ 래치의 특징

  • 래치는 데이터 보호가 아닌, SGA의 공유된 내부 자료구조 보호를 위한 경량 락이다.
  • 사용 시점:
    • 해시 체인을 스캔할 때
    • 버퍼 블록을 추가하거나 제거할 때
    • LRU 리스트를 갱신할 때
  • 래치는 매우 빠르게 작동하는 Spin Lock 형태로 구현되어, 짧은 시간 동안만 유지되며 빠른 자원 접근을 보장한다.

🔄 오라클에서 '읽기 전용 모드'란 단순히 SELECT 문을 실행하는 것이 아니라, 해시 체인을 따라가며 필요한 블록을 찾는 작업 전체를 의미한다. 이 모든 탐색 작업은 래치의 보호 하에 수행된다.


2.3 LRU 체인 구조

Buffer Cache는 재사용 정책을 위해 LRU (Least Recently Used) 리스트를 사용한다. 이 리스트는 크게 두 가지로 나뉜다:

  • Dirty List:
    • 수정된 블록으로, 아직 디스크에 쓰이지 않음.
    • DBWR 프로세스가 디스크에 플러시하기 전까지 유지됨.
  • LRU List:
    • 아직 변경되지 않았거나, 이미 디스크에 반영된 블록들.
    • 재사용 대상이며, 새로운 블록을 로드할 때 가장 오래된 것부터 제거됨.

📌 버퍼 헤더는 이 두 리스트 중 하나에 반드시 소속되어 있으며, 리스트 간 이동 또한 래치의 보호 하에 수행된다.


2.4 버퍼 상태의 3가지 유형

Buffer Cache의 각 블록은 다음 세 가지 상태 중 하나로 존재한다:

상태설명

Free Buffer 어떤 데이터도 없는 초기 상태의 블록. 재사용 가능.
Dirty Buffer 변경되었지만 아직 디스크에 반영되지 않은 블록. DBWR 대상.
Pinned Buffer 현재 세션이 사용 중인 블록. 다른 세션에서 접근 불가.

📘 이 상태들은 Buffer Management, Dirty List 처리, 세션 동기화에 모두 관여하며 성능에 직결되는 요소이다.


2.5 요약 및 실무 팁

  • Buffer Cache는 블록 단위 I/O를 캐싱하여 성능 향상을 꾀한다.
  • 해시 테이블 + 체인 구조를 통해 빠르게 원하는 블록에 접근 가능하다.
  • 버퍼 헤더는 블록 메타데이터와 해시 체인 및 LRU 포인터를 포함하여 탐색과 관리에 핵심적이다.
  • 래치는 SGA 자료구조 보호를 위한 경량 락으로, 모든 체인 탐색, 버퍼 이동 시점에 사용된다.
  • LRU는 Dirty와 Clean 리스트로 구성되어 버퍼 교체 정책을 제어한다.
  • 각 블록은 Free, Dirty, Pinned 상태를 가지며, 이를 통해 작업 흐름이 제어된다.

📎 관련 태그

#Oracle #SGA #BufferCache #Latch #HashChain #LRU #DirtyBuffer #PinnedBuffer #FreeBuffer #BlockIO #BufferHeader #DatabasePerformance #OracleMemoryArchitecture

728x90
728x90

1.1 오라클을 배우기 전에

오라클 데이터베이스는 기업에서 가장 널리 사용되는 RDBMS 중 하나로, 안정성과 성능, 확장성을 기반으로 다양한 산업군에서 활용되고 있다. 오라클을 제대로 배우기 위해서는 단순히 SQL을 실행하는 수준을 넘어, 내부 구조와 아키텍처를 이해하는 것이 중요하다. 이 장에서는 오라클의 핵심 구성 요소들과 이들이 어떤 원리로 작동하는지에 대해 직관적으로 설명한다.


1.2 오라클 아키텍처 개요

오라클 데이터베이스는 크게 두 가지 구성 요소로 이루어진다:

  • 오라클 인스턴스: 메모리 구조(SGA 등)와 백그라운드 프로세스
  • 오라클 데이터베이스: 실제 데이터가 저장되는 파일들의 집합

🔹 인스턴스 = SGA + 백그라운드 프로세스


1.3 SGA(System Global Area)

SGA는 오라클 인스턴스가 작동하기 위해 사용하는 공유 메모리 공간으로, 여러 세션이 동시에 접근하며 SQL 실행, 데이터 캐시, 트랜잭션 처리를 돕는다.

주요 구성 요소:

  • Database Buffer Cache: 디스크에서 읽어온 데이터 블록을 임시로 저장. 반복 조회 시 성능 향상.
  • Redo Log Buffer: 트랜잭션의 변경 내역을 일시 저장. 복구에 사용됨.
  • Shared Pool: SQL 실행 계획, PL/SQL 코드 등을 캐싱하여 파싱 부담 줄임.
  • Large/Java Pool: 병렬 처리, Java 실행을 위한 메모리.

💡 Dirty Buffer란? Buffer Cache 내에서 변경되었지만 아직 디스크에 반영되지 않은 블록을 의미. DBWR 프로세스가 디스크로 플러시할 때까지 메모리에 존재.


1.4 Lock 메커니즘

여러 사용자가 동시에 같은 데이터를 사용할 수 있기 때문에, 오라클은 Lock을 통해 데이터 일관성과 무결성을 보장한다.

주요 Lock 종류:

  • TX Lock: 행 단위 락. DML 트랜잭션 시 발생.
  • TM Lock: 테이블 락. DDL 또는 제약 조건 관련.
  • UL Lock: 사용자 정의 락 (DBMS_LOCK 사용).

💥 Deadlock: 서로 상대방의 락을 기다리는 교착 상태. 오라클은 이를 감지하고 하나의 세션을 종료함으로써 해결한다.


1.5 RAC(Real Application Clusters)

RAC는 여러 대의 서버가 하나의 데이터베이스를 동시에 접근할 수 있도록 구성된 클러스터 구조이다. 고가용성과 확장성이 필요한 엔터프라이즈 환경에서 자주 사용된다.

RAC의 장점:

  • 고가용성: 한 노드 장애 시 다른 노드로 자동 전환 가능
  • 수평 확장성: 서버를 추가하여 성능 향상 가능
  • 로드 밸런싱: 요청을 여러 인스턴스로 분산 처리

핵심 기술 - Cache Fusion:

  • 각 노드의 SGA를 네트워크로 연결해 메모리 블록을 공유. 데이터 일관성을 유지하면서도 빠른 처리 가능.

1.6 커넥션 풀의 필요성

애플리케이션이 DB와 통신할 때, 매번 새로 커넥션을 만드는 것은 성능적으로 비효율적이다. 커넥션 풀은 일정 수의 DB 커넥션을 미리 만들어 두고 재사용함으로써 다음과 같은 장점을 제공한다:

  • 커넥션 생성/소멸 오버헤드 제거
  • DB 자원 사용 제한 및 보호
  • 다수 사용자 처리 능력 향상

💡 실무에서는 HikariCP(Spring Boot), QueuePool(SQLAlchemy) 등을 통해 커넥션 풀을 관리한다.


1.7 요약

구성 요소설명

SGA SQL 실행, 캐시, 트랜잭션 관리를 위한 공유 메모리 공간
Dirty Buffer 수정된 상태이지만 디스크에 반영되지 않은 데이터 블록
Lock 데이터 일관성을 위한 동시성 제어 메커니즘
RAC 다중 서버가 하나의 DB를 공유해 고가용성과 확장성 제공
커넥션 풀 DB 커넥션을 미리 만들어 재사용함으로써 성능 최적화

이제 오라클의 기본 구조를 이해했으니, 다음 장에서는 SQL 실행 흐름과 옵티마이저에 대해 배워보자.

728x90

+ Recent posts