분류 전체보기 153

LangGraph 란

LangGraph는 LangChain의 확장 기능으로, 그래프(Graph) 구조를 활용하여 복잡한 AI 애플리케이션을 설계하는 프레임워크입니다. 기존 LangChain은 직선적인(순차적) 체인 방식으로 AI 에이전트를 구성하는 반면, LangGraph는 멀티에이전트 협업, 비선형 흐름, 동적 의사 결정을 가능하게 합니다. LangGraph란?LangGraph는 노드(Node)와 엣지(Edge)를 이용한 그래프 기반 워크플로우를 통해 대화형 AI 및 멀티에이전트 시스템을 구축할 수 있도록 지원하는 LangChain의 확장 도구입니다. 이를 통해 기존 LangChain보다 훨씬 더 복잡하고 유연한 AI 애플리케이션을 개발할 수 있습니다. LangGraph의 핵심 개념노드(Node): LLM 호출, API 요..

개발이론/AI 2025.02.18

[리뷰] 관계를 정리하는 중입니다 - 이평

우리는 살면서 수많은 관계를 맺고 살아간다. 가족, 친구, 연인, 직장 동료까지 다양한 사람들과 얽히며 때로는 기쁨을 때로는 상처를 받기도 한다. 최근 들어 유난히 이 관계라는 것을 유지하는데 너무 많은 힘과 에너지가 들어간다는 생각을 한다. 그래서 이 책의 제목이 더 눈에 띄었던 것 같았고 읽어보니 꼭 필요한 책이었다는 생각도 들었다. 읽으면서 인상적이었던 부분과 들었던 생각 몇 가지 정리해 본다. 인간관계만큼 변화무쌍한 건 없다. 더구나 내 마음이 전쟁터 같은데 무기력에 시달리는 중이라면, 당분간 모든 관계를 멈추는 것이 이로울지 모르겠다. 우선 마음의 평정을 찾는 일이 급선무 아닌가. 괜찮은 척연기를 하기엔 표정이 굳어 있다. 내 삶 하나 건사 못하는 것만으로 이미 짜증이 나 있다. 그런 상황에서 ..

2025.02.02

클린 아키텍처(Clean Architecture)

클린 아키텍처(Clean Architecture)는 로버트 C. 마틴이 제안한 소프트웨어 아키텍처 패턴으로 소프트웨어의 유지보수성과 확장성을 높이기 위해 관심사를 분리하는 구조를 의미한다.이 아키텍처는 의존성 규칙(Dependency Rule) 을 기반으로 계층을 나누고 핵심 비즈니스 로직이 외부 요소(데이터베이스, UI, 프레임워크 등)에 의존하지 않도록 설계된다. 1. 클린 아키텍처의 핵심 원칙클린 아키텍처는 아래 4가지 원칙을 따른다.① 독립성(Independence)프레임워크로부터 독립 🏗️ → 특정 프레임워크에 종속되지 않음 (예: 스프링, 장고 등)UI로부터 독립 🖥️ → 웹, 모바일, CLI 등 다양한 UI에서 사용 가능데이터베이스로부터 독립 🛢️ → MySQL, PostgreSQL 등..

헥사고날 아키텍처(Hexagonal Architecture)

헥사고날 아키텍처(Hexagonal Architecture)는 2005년 앨리스테어 콕번(Alistair Cockburn)이 제안한 소프트웨어 설계 패턴으로 애플리케이션의 비즈니스 로직을 외부 인터페이스(예: UI, 데이터베이스, 메시지 큐 등)로부터 분리하는 것을 목표로 한다. "포트와 어댑터 아키텍처(Ports and Adapters Architecture)"라고도 한다. 🎯 헥사고날 아키텍처의 핵심 개념헥사고날 아키텍처는 크게 세 가지 주요 구성 요소로 나뉜다.1. 도메인(Domain) / 애플리케이션 코어비즈니스 로직을 포함하는 핵심 부분데이터베이스, UI, 프레임워크 등의 외부 요소에 의존하지 않음독립적으로 테스트가 가능해야 함도메인 객체, 애그리게이트, 서비스 등이 포함됨2. 포트(Ports..

POJO (Plain Old Java Object)

POJO는 "Plain Old Java Object"의 약자로 특별한 제한이나 규약 없이 순수하게 작성된 Java 객체를 의미한다. 이는 특정 라이브러리, 프레임워크,또는 기술에 종속되지 않고 간단한 구조로 설계된 객체이다. POJO의 특징프레임워크 독립성특정 프레임워크나 라이브러리(예: Spring, Hibernate 등)에 종속되지 않는다.POJO는 외부 종속성을 가지지 않으며 표준 Java 문법으로만 작성된다.심플한 설계간단한 필드(속성)와 getter/setter 메서드, 필요에 따라 생성자 및 기타 유틸리티 메서드로 구성된다.복잡한 기능을 포함하지 않으며 직관적이다.명시적인 동작 없음POJO는 일반적으로 동작(메서드)을 최소화하고 데이터 저장과 전달을 위한 객체로 사용된다.객체 지향 원칙 준수캡..

관심사의 분리 (Separation of Concerns, SoC)

관심사의 분리는 소프트웨어 설계 원칙 중 하나로 시스템을 서로 다른 "관심사(Concern)"로 나누어 설계하는 것을 말한다. 관심사는 소프트웨어에서 처리해야 하는 특정한 문제나 기능의 집합으로 이를 분리하면 코드의 가독성, 유지보수성, 재사용성이 향상된다. 1. 관심사(Concern)란 무엇인가?관심사는 소프트웨어 시스템에서 처리해야 할 특정 기능이나 책임을 말한다.예를 들어, 웹 애플리케이션에서 다음과 같은 관심사를 식별할 수 있다UI 처리 : 사용자와 상호작용을 처리하는 역할비즈니스 로직 : 시스템의 핵심 규칙과 동작데이터베이스 접근 : 데이터를 저장하거나 조회하는 역할로그 관리 : 애플리케이션의 동작을 기록에러 처리 : 예외 상황을 처리 2. 관심사의 분리 원칙관심사의 분리는 서로 다른 관심사를 ..

레이어드 아키텍처(Layered Architecture)

레이어드 아키텍처(Layered Architecture)는 소프트웨어 시스템을 계층(Layer)으로 나누어 설계하고 구현하는 소프트웨어 설계 패턴 중 하나이다. 이 아키텍처는 시스템을 여러 수준으로 나누고 각 계층이 특정한 역할과 책임을 맡도록 구성하여 코드의 유지보수성과 재사용성을 높이고 개발 프로세스를 단순화한다. 레이어드 아키텍처의 주요 계층프레젠테이션 계층(Presentation Layer)사용자와의 상호작용을 담당하는 계층UI(User Interface)를 포함하며 사용자가 데이터를 입력하거나 결과를 확인할 수 있도록 도와준다.일반적으로 HTML, CSS, JavaScript 또는 모바일 애플리케이션의 프론트엔드 부분이 포함된다.예: 웹 브라우저에서 렌더링되는 화면, 앱의 UI 구성 요소애플리케..

아파치 카프카(Apache Kafka) - Amazon MSK

Amazon MSK (Managed Streaming for Apache Kafka)는 Amazon Web Services(AWS)가 제공하는 완전 관리형 Apache Kafka 서비스이다. Kafka 클러스터의 설정, 운영, 확장 및 유지 관리를 간소화하여 사용자에게 Kafka의 강력한 기능을 제공하면서 운영 부담을 줄이는 데 초점을 둔 서비스이다. Amazon MSK의 주요 특징완전 관리형 KafkaKafka 클러스터의 프로비저닝, 패치 관리, 모니터링, 백업 등 운영 작업을 자동화사용자는 데이터 스트리밍과 애플리케이션 개발에만 집중할 수 있음100% Apache Kafka 호환MSK는 오픈 소스 Apache Kafka와 완벽히 호환되므로 기존 Kafka 애플리케이션을 변경 없이 사용할 수 있음고가용..

아파치 카프카(Apache Kafka) - 카프카 커넥트

Kafka Connect는 Apache Kafka의 데이터 통합 프레임워크로 Kafka 클러스터와 외부 시스템(예: 데이터베이스, 파일 시스템, 클라우드 스토리지 등) 간 데이터를 손쉽게 이동할 수 있도록 설계된 도구이다. Kafka Connect를 사용하면 데이터를 Kafka로 가져오거나(Kafka 소스 커넥터), Kafka에서 외부 시스템으로 내보내는(Kafka 싱크 커넥터) 작업을 쉽게 구현할 수 있다. Kafka Connect의 주요 특징데이터 이동 자동화외부 시스템과 Kafka 간 데이터 통합을 간소화ETL(Extract, Transform, Load) 파이프라인의 일부로 사용분산 또는 독립형 실행분산 모드(Distributed Mode) : 클러스터 환경에서 실행, 확장성 제공독립 모드(Sta..

아파치 카프카(Apache Kafka) - 카프카 스트림즈

Kafka Streams는 Apache Kafka의 스트리밍 데이터를 실시간으로 처리하기 위한 Java 라이브러리이다. Kafka Streams는 데이터를 Kafka 토픽에서 읽어와 실시간으로 변환, 집계, 분석한 뒤 결과를 다시 Kafka 토픽으로 쓰는 데 사용된다. 이를 통해 분산 스트리밍 애플리케이션을 쉽게 구현할 수 있다. Kafka Streams의 주요 개념스트림(Stream)Kafka 토픽에서 지속적으로 흐르는 데이터Kafka Streams에서는 스트림이 무한히 이어지는 레코드들의 순차적 흐름으로 간주된다.토폴로지(Topology)스트림 처리 작업의 논리적 흐름데이터 변환, 필터링, 집계 등의 작업이 단계별로 정의된다.키값 쌍(Key-Value Pair)Kafka Streams에서 처리되는 데..

아파치 카프카(Apache Kafka) - 프로듀서, 컨슈머

Apache Kafka의 프로듀서(Producer)와 컨슈머(Consumer)는 Kafka의 핵심 구성 요소로 데이터를 송수신하는 데 사용된다. 이 두 역할은 Kafka 클러스터를 통해 데이터를 효율적으로 주고받을 수 있도록 설계되어있다. 1. 프로듀서(Producer)역할데이터 생성 및 전송프로듀서는 데이터를 Kafka 클러스터로 보내는 애플리케이션이다.데이터를 특정 토픽(Topic)에 게시(Produce)한다.주요 특징파티션 선택프로듀서는 토픽의 데이터를 파티션(Partition)으로 분배한다.기본적으로 파티셔너(Partitioner)를 통해 데이터를 특정 파티션에 저장한다.파티션 키(key)가 제공되면 해당 키의 해시 값을 기준으로 파티션이 결정된다.파티션 키가 없으면 라운드 로빈 방식으로 파티션이..

이벤트소싱 패턴

이벤트 소싱(Event Sourcing) 패턴은 마이크로서비스 아키텍처에서 데이터를 저장하고 처리하는 방법 중 하나로 시스템의 상태를 단순히 저장하는 것이 아니라 발생한 이벤트(event)를 순서대로 기록하고 이를 통해 상태를 재구성하는 방식이다. 핵심 개념이벤트 중심 저장데이터의 상태 변화는 이벤트로 기록된다.예를 들어, 은행 계좌의 잔액을 저장하는 대신 "입금", "출금"과 같은 이벤트를 기록한다.상태의 재구성현재 상태는 이벤트 로그를 순차적으로 재생(replay) 하여 재구성한다.이벤트 로그는 시스템의 단일 진실 소스(single source of truth)가 된다.불변성이벤트는 변경되거나 삭제되지 않고 불변(immutable) 성질을 가진다.모든 이벤트는 시간 순서대로 저장된다. 장점감사 및 추..

아파치 카프카(Apache Kafka) - RabbitMQ, Redis Queue 와 차이

Apache Kafka, RabbitMQ, Redis Queue는 메시징 시스템 및 데이터 스트리밍 용도로 많이 사용되지만 각각의 아키텍처, 사용 사례, 강점, 약점이 다르다.  1. 카프카(Apache Kafka)특징데이터 스트리밍 플랫폼 : 실시간 데이터 스트리밍 및 이벤트 기반 아키텍처에 최적화분산 시스템 : 높은 처리량과 내결함성을 제공로그 저장 : 데이터를 디스크에 저장하며 저장된 데이터를 여러 컨슈머가 독립적으로 처리 가능데이터 보존 : 메시지는 소비 후에도 저장되며 데이터 보존 기간을 설정할 수 있음장점고성능 : 대량의 데이터를 처리하며 높은 처리량을 제공내결함성 : 데이터를 복제하여 장애 발생 시에도 데이터 손실 최소화순서 보장 : 파티션 내에서는 메시지 순서가 보장됨실시간 데이터 스트리밍..

아파치 카프카(Apache Kafka) - 컨슈머 랙(Consumer Lag)

1. 컨슈머 랙(Consumer Lag)컨슈머 랙(Consumer Lag)은 카프카의 컨슈머 그룹이 데이터를 읽어오는 속도와 브로커에 데이터가 기록되는 속도 간의 차이를 나타낸다. 간단히 말해, 컨슈머가 아직 읽지 못한 메시지의 수를 의미합니다. 컨슈머 랙의 계산컨슈머 랙은 특정 파티션에서 다음 식으로 계산된다Consumer Lag = Latest Offset (Log End Offset) - Committed OffsetLatest Offset (Log End Offset) : 현재 브로커에서 해당 파티션에 기록된 최신 메시지의 오프셋Committed Offset : 컨슈머 그룹이 해당 파티션에서 마지막으로 읽고 커밋한 메시지의 오프셋 컨슈머 랙의 중요성실시간성 지표랙이 작을수록 컨슈머가 데이터를 실시..

아파치 카프카(Apache Kafka) - 파티셔너

파티셔너(Partitioner)는 Apache Kafka에서 데이터를 특정 파티션에 어떻게 분배할지 결정하는 로직을 담당한다. 프로듀서가 데이터를 토픽에 보낼 때 데이터를 어떤 파티션에 저장할지를 결정하는 역할을 한다. 1. 파티셔너의 역할카프카의 토픽(Topic)은 여러 파티션(Partition)으로 나뉘며 각 파티션은 독립적으로 데이터를 저장한다.파티셔너는 데이터가 특정 파티션에 저장되도록 결정하여 데이터의 분배와 병렬 처리를 최적화한다.데이터 분배의 필요성데이터는 파티션에 분산되어야 병렬 처리, 읽기/쓰기 성능 향상, 확장성을 제공할 수 있다.파티셔너는 데이터를 특정 키를 기준으로 그룹화하거나 균등하게 분산한다. 2. 기본 파티셔닝 전략Kafka는 기본적으로 DefaultPartitioner를 사용..

반응형