본문 바로가기

반응형

전체 글

(45)
AI 기반 코드 리뷰 서비스 개발 2 - 다양한 LLM 지원, 비용 관리, 결과 시각화 1편에서 Git diff 분석부터 프롬프트 생성까지의 핵심 워크플로우를 다뤘다면,2편에서는 Selvage가 어떻게 다양한 LLM을 지원하고, 비용을 산출하며, 결과를 체계적으로 기록하는지 살펴보겠습니다. 프로덕션 환경에서 운영할 수 있는 확장 가능한 아키텍처 패턴과 실무에서 직면하는 구체적인 문제들의 해결책을 중심으로 설명합니다. 이 글은 AI 기반 코드 리뷰 툴 selvage를 개발하면서 얻은 경험을 기반으로 작성되었습니다.모든 코드는 selvage 공식 레포지토리에 기반해 작성되었습니다.4단계: SSOT 기반 모델 정보 관리 및 게이트웨이 패턴 구현models.yml을 통한 중앙 집중식 모델 정보 관리Selvage는 모든 지원 모델의 정보를 단일 YAML 파일에서 관리하는 SSOT(Single Sou..
AI 기반 코드 리뷰 서비스 개발 (부록)- 데이터 변환 흐름 예시 'AI 기반 코드 리뷰 서비스 개발 1 - git diff를 가공해서 프롬프트로 구성하기'에서 git diff 정보를 LLM용 프롬프트로 만드는 상세한 방법을 살펴보았습니다.내용이 구체적이었던 만큼, 이번에는 부록을 통해 전체 데이터 변환 흐름을 간결하게 요약하여 보여드리려고 합니다.우선 전체적인 데이터 흐름을 이미지로 한눈에 파악하고, 실제 예시를 통해 각 단계가 어떻게 진행되는지 살펴보겠습니다.데이터 변환 흐름 예시: git diff에서 LLM 프롬프트까지아래는 git diff 출력이 ReviewRequest 객체로 변환되고, 최종적으로 LLM에게 전달될 프롬프트 형식으로 가공되는 과정을 보여주는 예시입니다.1. git diff 입력diff --git a/file.py b/file.pyindex ab..
AI 기반 코드 리뷰 서비스 개발 1 - git diff를 가공해서 프롬프트로 구성하기 코드 리뷰, LLM으로 혁신하다: 효율성과 즉시성을 더하여 개발 생산성 향상코드 리뷰는 개발의 필수 과정이지만, 종종 시간 소모가 크고 병목 지점이 되기도 합니다.동료의 리뷰를 기다리며 작업이 늦어지거나, 퇴근 무렵 쌓인 리뷰 요청에 발목 잡힌 경험, 다들 있으실 겁니다.LLM(Large Language Model)은 이 코드 리뷰 프로세스에 혁신적인 변화를 가져올 잠재력이 있습니다.뛰어난 코드 분석 능력으로 개발자가 코드를 작성하는 즉시 피드백을 제공합니다.단순 코딩 스타일 검사부터 시작해 잠재적인 버그 탐지, 심지어는 복잡한 설계 제안까지 수행하는 코드 품질 향상을 위한 강력한 도구로 자리매김하고 있습니다.하지만 LLM을 효과적인 코드 리뷰어로 활용하기 위해서는 LLM에게 리뷰 대상(변경된 코드 내용..
[리액티브 코프링] R2DBC 사용법 (연관 관계 구현하기) 이전글 : [리액티브 코프링] R2DBC 사용법 (데이터 저장 & 수정) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 4. 연관 관계 구현하기 R2DBC는 JPA같은 ORM이 아니므로 연관 관계 매핑을 지원하지 않는다. R2DBC에서 연관 관계 매핑과 같은 기능을 사용하기 위해서는 개발자가 추가적으로 코드를 작성해줘야한다. 도메인 & 요구사항 본 예제에서는 스프링 부트 실전 활용 마스터 의 장바구니 예제를 차용하고 있다. Cart, CartItem, Item 엔티티를 사용하고 있으며 연관 관계는 아래와 같다. Cart와 CartItem은 1대 N 연관관계이고, CartItem과 Item은 일대일 연관관계이다. 엔티티 설정 (Transient) 데이터 조회편에서 엔티티를 선언했지..
[리액티브 코프링] R2DBC 사용법 (데이터 저장 & 수정) 이전글 : [리액티브 코프링] R2DBC 사용법 (데이터 조회) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 데이터 저장하기 이번 글에서 다루는 데이터를 저장하는 방법은 아래와 같다. 레포지토리의 save() 함수 사용 Fluent API 사용 Native Query 사용 Batch Insert 먼저, 1, 2, 3번에 해당하는 코드를 보도록 하자. 각각의 테스트 코드 위에 주석으로 데이터를 저장하는 방법을 명시했다. @SpringBootTest class ItemSaveTest { @Autowired private lateinit var itemRepository: ItemRepository @Autowired private lateinit var connectionFacto..
[리액티브 코프링] R2DBC 사용법 (데이터 조회) 이전글 : [리액티브 코프링] R2DBC 사용법 (들어가며) 모든 예제 코드는 필자의 github 레포지토리 에서 확인할 수 있다. 2. 엔티티 선언하기 이번 예제에서 사용할 엔티티들을 선언하자. Spring Data R2DBC에서는 연관관계를 지원하지 않는다. 객체간 연관관계를 구성하는 멤버에는 @Transient 어노테이션을 사용해줘야 스프링 실행 시 오류가 나지 않는다. data class Cart( @Id val id: Long? = null, @Transient var cartItems: List = listOf() ) data class CartItem( @Id val id: Long? = null, var quantity: Int = 1, @Column("cart_id") var cartId..
[리액티브 코프링] R2DBC 사용법 (들어가며) [리액티브 코프링] R2DBC 사용법 0. 들어가며 최근 스프링 부트 실전 활용 마스터 라는 책으로 스프링 리액티브 프로그래밍을 학습했다. 리액티브로 동작하는 코드에 블로킹으로 동작하는 코드가 존재한다면 병목이 발생해서 리액티브 프로그래밍의 이점이 없어지기 때문에 책에서는 데이터 스토어로 RDBMS(관계형 데이터베이스)가 아닌 리액티브 패러다임을 지원하는 MongoDB를 사용하고 있다. 여태까지 RDBMS(관계형 데이터베이스)를 비동기로 연결해주는 R2DBC 가 1.0 버전에 도달하지 못한 상태였기 때문이다. 하지만 최근 R2DBC가 1.0 버전을 릴리즈했고 R2DBC 사양을 따르는 개별 데이터베이스 드라이버들도 오래되지 않아 1.0 버전에 도달할 것으로 보인다. 그래서 R2DBC를 이용해 리액티브 코프..
[하이버네이트 유저 가이드 파헤치기] @Where - 5.9 최근 이 연재글에서 @Formula와 @ColumnTransformer에 대해서 다루었다. @Formula 어노테이션을 사용하면 가상 칼럼을 선언해서 애플리케이션단에서 수행할 계산식을 데이터베이스에 위임하거나 카운트 성능을 최적화할 수 있다. @ColumnTransformer는 엔티티를 영속화하거나 불러올 때 특정 칼럼에 대해서 계산식을 적용할 수 있다. 둘 다 JPA를 이용해 개발자가 애플리케이션단에서 수행할 작업을 데이터베이스에 위임할 수 있다는 공통점이 있다. 이번 글에서는 엔티티를 조회할 때 특정 조건을 적용할 수 있는 @Where 어노테이션을 다루겠다. 5.9.1. @Where 당신은 엔티티나 연관 관게에 있는 엔티티 컬렉션을 사용자 정의 SQL 기준을 이용해 걸러내고 싶을 때가 간혹 있을 수 ..

반응형