전체 글 95

[LLM] 모델 실제 입력 및 출력 데이터 모습

일반적인 대화 관련 메시지개발시 흔히 보는 LLM 의 입력 및 출력의 형태는 아래와 같습니다.[ SystemMessage( content="You are a helpful assistant.", additional_kwargs={}, response_metadata={}, ), HumanMessage( content="너 이름이 뭐야?", additional_kwargs={}, response_metadata={}, ),] 하지만 위 데이터는 LLM 의 입력 혹은 출력 그 자체가 아니라 LangChain 과 같은 프레임워크가 사용하는 자료 구조일 뿐입니다. LangChain 과 같은 프레임워크가 LLM 서버 ..

AI/LLM 2026.03.14

[LLM] MCP 구현

MCP ServerMCP 서버는 Tools, Prompts, Resources 를 제공합니다Tools실행 가능한 툴 제공서버에 미리 정의되어 있는 tools 를 클라이언트에 제공LLM 은 서버에 어떤 tools 가 정의되어있는지 알고 있음LLM 은 현재 사용자 질의가 tool 사용이 필요한 질의라고 판단되면 서버에 해당 tool 실행 요청tool 실행은 서버에서 이루어지며 결과를 클라이언트로 반환Prompts재사용 가능한 프롬프트 제공서버에 미리 정의되어 있는 prompts 를 클라이언트에 제공LLM 과 사용자 (e.g. 앱 사용자, 웹 서비스 사용자와 같은 엔드 유저) 는 서버에 어떤 prompts 가 정의되어있는지 알 수 없음개발자는 서버에 어떤 prompts 가 정의되어있는지 (코드 / API 문서..

AI/LLM 2026.03.06

[Python] asyncio 기반 비동기 프로그래밍

async def main():코루틴 함수 정의 키워드await coro():현재 Task 를 일시 중단하고 대상이 끝날 때 재개await 한다고 해서 Task 로 감싸지지 않음코루틴 내부에서 await 할때 create_task() 등을 해주지 않았다면 대상은 Task 가 아니며 독립 실행 흐름이 아닌 코루틴 스택 확장coro 가 단순 코루틴 스택 확장coro 를 진행하다가 내부에서 asynchronous operation 을 만나면 suspend 되며 asynchronous operation 이 완료되면 coro 를 호출한 코루틴이 다시 ready 상태가 됨coro 가 개별 Taskawait coro 를 만났다고 해서 반드시 coro 를 실행시켜야 하는건 아님await coro 의 의미는 그저 cor..

Dev/Python 2026.02.26

[OS] 동기, 비동기

동기 vs 비동기동기와 비동기를 말할때 제어권을 넘긴다는 표현이 자주 등장합니다.동기 (Synchronous): 호출한 쪽의 작업이 끝날 때까지 제어권을 돌려받지 못하는 방식비동기 (Asynchronous): 작업을 요청하고 끝나기 전에 제어권을 바로 돌려받는 방식이는 OS 에게 CPU 를 반납하는걸 말하는게 아니라 (엄밀히 말하면 CPU 는 원래 OS 가 소유하고 있고 CPU 에 할당 되었던 스레드가 Running → Blocked 상태로 전환되는 것) CPU 는 계속 해당 스레드의 작업을 수행하고 있지만 스레드 내부에서 다른 실행 흐름으로 바꾸는 것을 말합니다. (쉽게 설명하면 그냥 다음에 어떤 코드 위치에서 실행을 이어갈지 결정하는 것입니다. CPU 반환이 아닙니다.) 제어권을 넘기는 이유는 예를들..

CS/OS 2026.02.23

[OS] 동시성, 병렬성

동시성 vs 병렬성여기서 말하는 병렬성은 OS / Thread-level 에서의 병렬성을 말합니다.동시성 (Concurrency): 여러 독립적인 실행 흐름이 겹쳐 진행되는 것반드시 같은 시점일 필요 없음시간축에서 겹치기만 하면 됨병렬성 (Parallelism): 여러 독립적인 실행 흐름이 물리적으로 같은 시점에 실행되는 것즉 병렬성은 동시성보다 더 강한 조건병렬성은 동시성의 특수한 경우병렬성 ⊂ 동시성 즉, 해당 작업이 병렬성이면 무조건 동시성입니다.SMT 와 동시성 및 병렬성SMT 는 동시성과 병렬성을 동시에 포함할 수 있는 구조입니다.여러 독립 실행 흐름 존재 → 동시성 성립일부 사이클에서는 진짜 병렬 실행 → 병렬성 성립즉, 실행 유닛 활용에 따라 순간적 병렬성도 발생 가능합니다. 멀티 스레드 상..

CS/OS 2026.02.05

[OS] 프로세서, CPU, 코어

프로세서 (Processor)사실상 CPU 와 거의 같은 의미로 사용되는 경우가 많지만 약간 더 넓은 개념입니다.어떤 처리를 수행하는 장치e.g. CPU, GPU, NPU, etc.CPU 는 그 중 하나CPU (Central Processing Unit)컴퓨터에서 연산을 실제로 수행하는 장치명령어를 해석하고 계산 및 제어코어 (Core)CPU 안에 들어있는 실제 실행 유닛 (엄밀히는 실행 유닛과 논리 프로세서 상태를 포함한 execution engine)물리 코어라고도 부름 (논리 프로세서와의 구분을 위해)논리 프로세서 (Logical Processor)레지스터 세트, 프로그램 카운터 (PC), 플래그 레지스터, 일부 제어 상태와 같은 실행 상태를 저장하는 하드웨어 구조들의 집합이며 실행 유닛을 공유하며..

CS/OS 2026.02.04

[LLM] MCP (Model Context Protocol) 개념 정리

MCP 등장 배경MCP 는 LLM 기반 Agent (LLM 활용 시스템의 런타임) 와 외부 시스템을 연결하기 위한 프로토콜입니다.Agent 프로그래밍을 할 때 Tool 을 사용하는 경우가 많으며 Google, YouTube, Naver 등 다양한 공급 업체에서 Tool 을 만들어 제공합니다. 하지만 Agent 와 Tool 간의 연결에 대한 표준이 없었기 때문에 공급자와 사용자 모두에게 불편함이 있었습니다.공급자: 프로그래밍 언어 별, 플랫폼 별 Tool adapter 를 만들어 제공할 필요 있음 (하나의 형태로 제공할 경우 사용자 비친화적)사용자: 공급자 마다의 adapter 를 설계하여 사용해야 함결과적으로 (공급자 × 언어 및 플랫폼 수) 개 만큼의 adapter 가 발생하게 됩니다. 이러한 불편함을..

AI/LLM 2026.01.23

[LLM] 모델 입력 및 출력 관련 데이터 형식

입력list[BaseMessage]llm.invoke('안녕') → 내부적으로 llm.invoke([HumanMessage(content="안녕")]) 와 같이 자동 변환별개의 이야기지만 LangGraph 에서 MessagesState 로 구성된 State 의 messages 필드에 대해 graph.invoke(input={'messages': '안녕'}) → 내부적으로 graph.invoke(input={'messages': [HumanMessage(content="안녕")]}) 와 같이 자동 변환됩니다.출력BaseMessageSyntactic Sugar('human', 'hi')llm.invoke([('human', 'hi')]) → 내부적으로 llm.invoke([HumanMessage(conten..

AI/LLM 2026.01.14