Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- langchain
- 리액트 네이티브 오류
- AI
- langchain tools
- 크로마DB
- expo 버전 오류
- 랭체인 툴
- 상태관리
- expo 아이폰 오류
- 자바공부
- 리액트 네이티브
- expo 51 버전
- langgraph
- 스프링 공부
- nestjs시큐리티
- jotai
- expo go 오류
- 타입스크립트상태관리
- expo 51 오류
- vllmmcp
- rnn gnsfus
- langgraph mcp
- langchain react agent
- expo 안드로이드
- react
- expo 아이폰
- 이미지처리
- comfyui
- 네스트시큐리티
- VectorDB
Archives
- Today
- Total
영리의 테크블로그
Langgraph 클래스 기반 코드 리팩토링 본문
최근 langgraph를 사용할 때는 단순히 def 함수로 로직을 구현했던 경험이 있었다.
그런데 이번에 투자 AI 모임 코드를 보면서 각 모듈이 클래스를 기반으로 설계되어 있다는 점이 눈에 띄었다.
기존 함수 기반 구현 vs 클래스 기반 구현
함수 기반 코드는 짧고 간단한 작업을 수행할 때 빠르게 작성할 수 있지만 다음과 같은 한계가 있다.
- 상태 관리의 어려움: 여러 함수에 걸쳐 데이터를 주고받으며 상태를 관리해야 하는 경우 복잡성이 증가함.
- 코드 중복: 반복되는 로직을 분리하여 관리하기 어렵고, 동일한 코드가 여러 곳에 등장할 수 있음.
- 유지보수 난이도: 프로젝트 규모가 커질수록 어떤 함수가 어느 역할을 수행하는지 파악하기 어려워짐.
반면 클래스 기반 구현은 관련 변수와 함수를 하나의 객체로 묶어 캡슐화함으로써 다음과 같은 장점을 제공한다.
- 모듈화: 클래스 내부에 상태와 메서드를 묶어 관리하여 코드 구조를 명확하게 함.
- 재사용성: 상속과 다형성을 통해 반복되는 로직을 최소화할 수 있음.
- 테스트 용이성: 객체 단위의 테스트가 가능해지고 Mocking이나 스텁을 활용해 세밀한 단위 테스트 작성이 쉬워짐.
최근 후임자에게 인수인계를 할때 상태관리에 대해 설명하기 복잡한 경우가 있었는데
class 기반 구축이 되어있었다면 어땠을까를 다시한번 생각하게 되었다.
코드 예시
class RewrittenFactorAgent:
def __init__(self, llm):
self.llm = llm
def make_ast(self, state: FactorAgentState):
print(f"{state['hypothesis']}")
prompt = ChatPromptTemplate.from_messages(
[
("system", Prompt["system"]),
("human", Prompt["human"]),
]
)
chain = prompt | self.llm
# ...생략...
state["market"] = market_result
return state
def get_market_prices(self, tickers):
# ...생략...
return {}
'dev' 카테고리의 다른 글
앱개발 백엔드 프레임워크 선택하기 (2) | 2025.05.25 |
---|---|
이미지 firebase 저장 (0) | 2024.09.19 |
배포시 react 소스 코드 노출 막기 (0) | 2024.09.19 |