전체 글 357

[SW 개발] SDD(Spec-Driven Development) 개념과 흐름 정리 (with. spec-kit 커스텀하기)

1. SDD(Spec-Driven Development)란?코드보다 명세(spec)를 먼저 쓰고, 명세 → 계획 → 작업 → 코드 순서로 내려가는 개발 방식.프롬프트 바이브 코딩은 한 줄로 코드를 응답 받아 빠르지만,요구사항이 대화 속에만 남아 이후 기능이 커질수록 AI 에이전트가 빈틈을 추측으로 채우게 됨. 그래서 SDD는 '무엇을, 왜 만드는가'를 문서로 고정해 기준(source of truth, 단일 지식 원천)으로 두고, 요구사항이 바뀌면 코드가 아니라 spec부터 고쳐 진행함. 2. SDD 흐름과 산출물 (by. spec-kit)GitHub의 spec-kit 은 프로젝트당 헌법의 역할을 하는 constitution을 정하고,기능마다 specify → plan → tasks → implement..

[AI] MCP 서버 직접 만들어 보기 (with. FastMCP, Claude Code)

개요이번 글은 Python으로 MCP 서버를 직접 만들어 Claude Code에 연결해 본 실습 기록입니다.로컬 서버 (stdio) : 에이전트가 내 PC에서 서버 프로세스를 직접 띄우고 표준 입출력으로 통신 (예: claude mcp add memo -- uv run server.py)원격 서버 (Streamable HTTP) : 서비스 회사가 운영하는 URL에 붙고 OAuth로 인증 (예: claude mcp add --transport http notion https://mcp.notion.com/mcp) MCP 서버 장점 : 한 번 만든 서버를 Claude Code, Cursor, Claude Desktop 등 MCP를 지원하는 모든 에이전트에서 그대로 씀 목차1) Claude Code MCP 관..

[AI] AI 에이전트 엔지니어링 패러다임 (1) 흐름과 타임라인

AI 에이전트 분야는 프롬프트, 컨텍스트, 하네스, 루프, 그래프처럼 몇 달마다 새 패러다임 이름이 빠르게 나오고 있는 중 으로 따라가기만 해도 쉽지 않은 그런 느낌이 있습니다. 이번 글에서는 이 흐름을 패러다임 8단계와 3개 계층으로 묶고, 2022년부터 2026년까지 연도별 변화를 정리해 보았습니다. 1. AI 에이전트 패러다임 이란패러다임 : 한 시대에 문제를 바라보고 푸는 공통의 틀 - 예: 절차지향 → 객체지향, 모놀리식 → MSAAI 에이전트 패러다임 : 에이전트가 일을 잘하게 하려면 '무엇을 설계해야 하는가'에 대한 시기별 답변화 방식 : 이전 패러다임으로 못 막는 실패가 생기면 새 패러다임이 등장하여 바깥 계층으로 쌓임- 예: 프롬프트로 DB 삭제를 못 막음 → 하네스 패러다임의 등장 2..

[MSA] MSA 서비스 간 통신 비교 (REST, gRPC, Message Queue)

MSA에서 쓰는 통신 방식은 크게 REST, gRPC, Message Queue로 나뉨.각 방식의 개념과 차이, 상황별 선택 기준을 정리 1. 개요MSA에선 서비스끼리 주고받는 통신이 곧 시스템의 뼈대라, 통신 방식 선택이 성능과 장애 대응을 좌우함. 1) MSA와 서비스 간 통신MSA(Microservice Architecture) : 하나의 큰 애플리케이션을 기능별 작은 서비스로 나눠 따로 개발·배포하는 구조 (예: 주문, 재고, 결제 서비스 다 따로 개발·배포)모놀리식과의 차이 : 모놀리식은 함수 호출 한 번이면 되던 일이, MSA에선 네트워크를 거친 서비스 간 통신이 됨고민 필요 : 상대 서비스가 느리거나 죽었을 때 어떻게 할지, 데이터 형식을 어떻게 맞출지 등 고민 필요 통신 방식은 동기/비동기..

[Redis] Redis 정리 (2) 백엔드 실무 활용 9선

백엔드 실무 활용 패턴백엔드에서 자주 쓰는 8가지 패턴과 사용하는 자료형 정리. (Redis 8.x, Python redis-py 기준)No패턴해결하는 문제자료형1Cache-AsideWrite-Through반복 조회로 인한 DB 부하String2인증번호 관리만료된 코드 정리String3분산 락여러 서버의 동시 수정String4API Rate Limit과도한 요청으로 인한 과부하String5최근 본 상품최신 N개 이력 유지List6분산 세션서버 간 로그인 상태 공유Hash7정합성 처리조회수/좋아요 중복String, Set8실시간 랭킹ORDER BY 반복 계산Sorted Set9실시간 메시지 (Pub/Sub)서버 간 이벤트 즉시 전파Pub/Sub (Channel) 공통 설정import json, time, ..

[Redis] Redis 정리 (1) 핵심 개념과 자료형

1. Redis 란RAM에 데이터를 저장하는 인메모리 Key-Value 저장소. (Redis 8.x 기준) 왜 Redis 인가RDB 한계 : 유저 증가 시 디스크 I/O 병목, Scale-up은 비용 효율이 낮음 (Scale-up 하는 것 보단 Redis 도입으로 비용 줄이기)로컬 캐시 한계 : HashMap 등은 빠르지만 Scale-out 시 서버마다 데이터가 달라짐Redis : 모든 서버가 공유하는 글로벌(외부) 캐시(Global Cache)로 둘 다 해결 2) 핵심 특징특징내용기대 효과In-Memory모든 데이터를 RAM에 저장0.1ms 미만 응답 속도Single-Thread명령을 순차 처리동시성 제어 단순화, 고성능PersistenceRDB + AOF 디스크 백업장애 시 데이터 복구 가능 3) ..

[Pydantic] Annotated로 커스텀 타입 만들어서 중복 줄이기

개요파이썬 표준 문법인 Annotated로 [기본 타입, Pydantic 검증 규칙]을 하나의 세트로 묶어 선언하는 방법을 정리함 (Pydantic v2 기준)형식 : Annotated[타입, 메타데이터1, 메타데이터2, ...]동작 : 타입 검사기는 앞의 타입만 보고, Pydantic은 뒤의 메타데이터(Field, Validator)를 읽어 검증함 1. Annotated 기본 사용필드 타입 옆에 검증 규칙(Field)을 함께 적는 방식from typing import Annotatedfrom pydantic import BaseModel, Fieldclass User(BaseModel): # 최솟값 18, 최댓값 100 조건 추가 age: Annotated[int, Field(ge=18, l..

[Python] Callable로 if-else 없는 팩토리 만들기

개요함수를 값처럼 다룰 때 쓰는 Callable 타입 힌트와, 이를 활용해 if-else 없이 만드는 팩토리 패턴을 정리Callable : "이런 인자를 받고 이런 값을 반환하는 함수"라는 규격(타입 힌트)팩토리 패턴 : 입력 값(타입)에 맞는 함수를 골라 실행해주는 구조 1. Callable 문법형식은 Callable[[인자 타입들], 반환 타입]이며, 규격에 맞는 함수를 변수에 담아 그대로 호출할 수 있음[str, int] : 첫 번째 인자는 문자열, 두 번째 인자는 숫자str : 최종 반환 타입도 문자열from typing import Callable# 1. 인자가 2개(str, int)인 실제 함수 정의def repeat_msg(message: str, count: int) -> str: r..

[Python] set vs frozenset vs Enum

개요값 묶음을 상수로 둘 때 set, frozenset, Enum 중 무엇을 쓸지 헷갈려서 차이를 정리함set : 중복 없는 묶음, 수정 가능(Mutable)frozenset : 중복 없는 묶음, 수정 불가(Immutable)Enum : 이름 하나에 값 하나를 정한 상수 목록 1. set vs frozenset둘 다 중복을 허용하지 않는 주머니지만, set은 내용물을 바꿀 수 있고 frozenset은 바꿀 수 없음구분setfrozenset변경가능 (add, remove 등)불가 (AttributeError)해시불가가능 (dict 키, set 원소로 사용 가능)집합 연산가능가능 (결과도 frozenset)용도계속 바뀌는 값 모음고정된 값 모음, 상수 # set: 언제든 추가/삭제 가능my_set = {"D..

[k8s client] k8s client for python 예제

설명k8s(Kubernetes)자원을 생성하거나 관리할 때. 다음 선언형, 명령형 방법 외에도 API Client를 이용해 어플리케이션 레벨에서 제어하는 방법이 있다.선언형 방식 (Declarative): YAML/JSON 파일에 원하는 리소스의 상태를 정의하여 적용하는 방식- 예: kubectl apply -f 명령형 방식 (Imperative): 터미널에서 직접 명령어를 입력하여 즉시 리소스를 생성 및 조작하는 방식- 예: kubectl create podAPI Client 방식 (Application-level): Python, Java 등의 고수준 API를 통해 코드 레벨에서 제어하는 방식- import kubernetes; client.get_namespaced_pod_list() API Cli..