[프로그래머스] 노란불 신호 (Level 1), 파이썬
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/468371 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 요약도로에 있는 n개의 신호등이 각각 고유한 주기로 초록불 → 노란불 → 빨간불 순서로 반복됩니다.모든 신호등은 1초에 동시에 초록불 상태로 시작합니다. 이때, 모든 신호등이 동시에 노란불이 되는 가장 빠른 시각(초)을 구하는 문제입니다. 정답 코드import mathdef solution(signals): N = len(signals) max_time = 1 for signal in signals: time ..
[프로그래머스] 중요한 단어를 스포 방지 (Level 1), 파이썬
·
알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/468370 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 요약문자열로 구성된 메시지 안에서 특정 구간들이 '스포일러'로 지정됩니다.이 메시지를 단어 단위로 쪼개어서 어떤 단어가 스포일러인지 판별하고 최종적으로 특정 조건을 만족하는 단어의 개수를 세어야 합니다. 핵심 규칙단어의 정의: 공백( )으로 구분된 문자열 뭉치입니다.스포일러 단어의 정의: 단어가 차지하는 인덱스 범위중 단 한 칸이라도 주어진 spoiler_ranges의 구간과 겹친다면 그 단어는 스포일러가 됩니다.중복 제거 로직:동일한 단어가 메..
[백준] 2325 개코전쟁 (플래티넘 5), 파이썬
·
알고리즘
https://www.acmicpc.net/problem/2325import sysimport heapqinput = sys.stdin.readlineN, M = map(int, input().split())graph = [[] for _ in range(N+1)]dist = [float('inf')] * (N+1)prev = [0] * (N+1)for i in range(M): a, b, c = map(int, input().split()) graph[a].append((c, b)) graph[b].append((c, a))def dijkstra(start, end): dist = [float('inf')] * (N+1) heap = [(0, 1)] dist[1] = 0..
MCP : AI 모델과 외부 시스템을 연결하는 표준 프로토콜
·
TIL
AI 모델이 점점 “도구를 사용하는 존재”로 확장되고 있다.단순히 질문에 답하는 것을 넘어 파일을 읽고, 데이터베이스를 조회하고, GitHub 이슈를 생성하고, Slack에 메시지를 보내는 수준까지 발전했다. 문제는 여기서 시작된다.모델마다 연동 방식이 다르면, 도구를 하나 추가할 때마다 모델별로 코드를 다시 작성해야 한다.Claude용 구현, GPT용 구현, 또 다른 모델용 구현이 각각 필요하다면 유지보수 비용은 기하급수적으로 증가한다. 이 문제를 해결하기 위해 등장한 개념이 MCP(Model Context Protocol)다.MCP는 AI 모델과 외부 시스템 간 통신을 표준화하는 오픈 프로토콜이다.Anthropic이 주도하여 개발했으며, 다양한 AI 애플리케이션이 데이터 소스와 도구에 일관된 방식으로..
Self-RAG : 검색을 “무조건” 하지 않는 지능형 RAG 아키텍처
·
TIL
기존 RAG는 단순했다. 질문이 들어오면 무조건 검색부터 수행한다. 하지만 모든 질문에 검색이 필요한 것은 아니다.간단한 계산, 일반 상식, 모델 내부 지식으로 충분한 질문에도 임베딩 검색과 벡터 DB 조회를 수행한다면 비용과 지연이 발생한다. 이 문제를 해결하기 위해 등장한 개념이 Self-RAG(Self-Reflective RAG)다. Self-RAG는 단순 검색-생성 구조가 아니라,검색 필요성 판단 → 문서 품질 평가 → 답변 생성 → 자기 검증까지 포함하는 지능형 파이프라인이다.기존 RAG의 구조와 한계전통적인 RAG는 다음과 같은 흐름을 가진다.질문 입력무조건 벡터 검색문서 상위 k개 선택LLM에 전달답변 생성이 구조는 단순하지만 비효율적이다. 예를 들어 이런 질문을 생각해보자.“15 곱하기 1..
Graph RAG : 다중 홉 추론과 지식 그래프 기반 검색
·
TIL
RAG(Retrieval-Augmented Generation)는 LLM의 한계를 보완하기 위한 대표적인 아키텍처다.외부 문서를 검색해 컨텍스트로 제공하고, 그 위에서 LLM이 답변을 생성한다. 하지만 기존 RAG는 “문서 단위 검색”에 기반한다.문서 간 관계를 깊이 이해하지는 못한다. 이 한계를 보완하기 위해 등장한 개념이 Graph RAG다.Graph RAG는 전통적인 RAG에 지식 그래프(Knowledge Graph)를 결합한 구조다.핵심은 “문서 유사도”가 아니라 엔티티 간 관계를 따라가며 정보를 찾는 것이다.기존 RAG의 한계기존 RAG는 다음과 같이 동작한다.문서를 청킹한다.임베딩으로 벡터화한다.유사도 검색으로 관련 문서를 찾는다.LLM에 전달한다.이 방식은 단순 질문에는 강하다.예를 들어“마..
Spring WebFlux : 이벤트 루프와 논블로킹 서버 모델
·
TIL
Spring WebFlux는 “빠른 서버”를 만드는 기술이 아니다.정확히 말하면, 많은 요청을 효율적으로 처리하기 위한 서버 모델이다. 처음 접하면 Mono, Flux, 논블로킹, 이벤트 루프 같은 용어 때문에 어렵게 느껴지지만, 핵심 개념은 생각보다 단순하다.이 글에서는 WebFlux가 왜 등장했는지부터, 내부 동작 방식, Kafka와의 차이, 그리고 언제 사용해야 하는지까지 정리해본다.Reactive Programming이란 무엇인가Reactive Programming은 데이터 흐름(Stream) 중심의 비동기 프로그래밍 패러다임이다. 기존 동기 방식에서는 요청이 오면 스레드가 해당 작업이 끝날 때까지 기다린다.DB 조회나 외부 API 호출이 2~3초 걸리면, 그 시간 동안 스레드는 아무 일도 하지 ..
MSA 환경에서 Gateway와 WebSocket 제어 플레인 설계
·
TIL
MSA(Microservice Architecture) 환경으로 전환하면 서비스 단위는 분리되지만, 동시에 새로운 복잡성이 생긴다. 특히 클라이언트와 여러 서비스 사이의 연결 구조를 어떻게 설계하느냐에 따라 전체 시스템의 확장성과 운영 난이도가 크게 달라진다. 이 글에서는 API Gateway의 필요성과 함께, 실시간 시스템에서 중요한 WebSocket 기반 제어 플레인(Control Plane) 설계 방식까지 정리해본다.왜 Gateway가 필요한가MSA 환경에서 클라이언트가 각 마이크로서비스에 직접 접근하는 구조를 생각해보자. 서비스가 3~4개일 때는 문제가 없을 수 있다.하지만 서비스가 10개, 20개로 늘어나면 클라이언트는 다음을 모두 알아야 한다.각 서비스의 주소통신 프로토콜인증 방식장애 발생 시..