전체 글
-
Line | 문의 대응을 효율화하기 위한 RAG 기반 봇 도입하기📖 개발 공부 2025. 11. 30. 17:29
https://techblog.lycorp.co.jp/ko/rag-based-bot-for-streamlining-inquiry-responses 문의 대응을 효율화하기 위한 RAG 기반 봇 도입하기시작하며안녕하세요. SR(Service Reliability) 팀에서 SRE(site reliability engineer, 사이트 안정성 엔지니어링) 업무를 맡고 있는 이채승(a...techblog.lycorp.co.jp AWX 지원 봇 개발 동기 가이드 문서를 읽어본다면 충분히 알 수 있는 문의에 대해서는 1차적으로 자동 답변을 제공할 수 있는 시스템이 필요, 검색과 생성을 결합한 RAG 기법을 활용해 AWX 지원 봇을 개발하게 됨. 사용한 프레임워크, 툴 소개AWX 봇은 많은 기능이 필요하지 않아 La..
-
Line | Kafka와 ETL을 활용해 대용량 데이터 마이그레이션하기📖 개발 공부 2025. 11. 22. 18:22
마이그레이션 배경새로 추가되는 이미지의 개수가 한달에 적게는 4,000만건에서 많게는 2억건이 넘는 이미지가 새로 추가되고 있음.MySQL 디스크가 가득찰 것으로 예상DB에서 이미지 관련 테이블 뿐만 아니라 통합 커머스 서비스 운영에 필요한 다른 여러 테이블도 함께 존재함. 그중 이미지 테이블 비율이 70%를 초과함. 타 테이블은 서로 연관성이 깊고, 안정성을 확보하기 위한 트랜잭션 작업과 스키마 정의가 필수라서 마이그레이션하기가 어려웠다.데이터가 너무 많아 스키마 변경 어려움서비스를 운영하다 보면 필드를 변경하거나 새로 추가해야하는 일이 발생하는데, 이미지 테이블은 스키라를 변경하면 시스템이 느려지거나 멈추는 현상(hang up)이 발생해 쉽게 변경할 수 없음.MongoDB를 선택한 이유샤딩을 이용한 ..
-
Spring Boot에서 Google Vertex AI Gemini 연동하기📖 개발 공부 2025. 3. 16. 21:46
최근 프로젝트에서 Gemini 모델을 Spring Boot에 연동하는 작업을 진행했다.이 과정에서 Google Cloud Vertex AI에서 제공하는 java-vertexai 라이브러리를 활용했다. 연동을 진행하면서 Gemini API 요청 시 다양한 옵션을 활용하여 원하는 방식으로 LLM을 제어할 수 있다는 점을 알게 되었다. 이 글에서는 Gemini 모델을 연동하는 과정과 함께 주요 설정값들을 정리해보려고 한다.Google Cloud Vertex AI란Google Cloud Vertex AI는 머신러닝(ML) 모델의 개발, 학습, 배포를 손쉽게 수행할 수 있도록 지원하는 통합 AI 플랫폼이다.Vertex AI를 사용하면 다음과 같은 작업을 수행할 수 있다.AutoML 모델 학습 및 배포사전 학습된 ..
-
[데이터 중심 애플리케이션 설계] 분산시스템의 골칫거리📚 개발 도서/데이터 중심 애플리케이션 설계 2025. 3. 2. 22:12
결함과 부분 장애단일 시스템은 결정적이다. (하드웨어가 올바르게 동작하면, 같은 연산은 항상 같은 결과를 낸다.)↔ 분산 시스템은 비결정적이다. (부분장애 → 어떨 때는 동작, 어떨 때는 실패)컴퓨터는 구현 기반이 되는 불분명한 물리적 현실을 감추고 수학적 완벽함을 갖고 동작하는 이상화된 시스템 모델을 보여준다.하지만, 네트워크로 연결된 여러 컴퓨터에서 실행되는 소프트웨어를 작성할 때는 근본적으로 상황이 다르다. 분산 시스템에서는 더이상 이상화된 시스템 모델에서 동작하지 않는다. 분산 시스템에서는 시스템의 어떤 부분은 잘 동작하지만 다른 부분은 예측할 수 없는 방식으로 고장날 수 있다.이를 부분 장애(partial failure)라고 한다. 부분 장애는 비결정적이라서 예측하기 어려운 문제를 일으킨다.클라..
-
메시지 큐 비교하기 (RabbitMQ, Kafka, SQS, Redis Pub/Sub)📖 개발 공부 2025. 2. 2. 23:03
회사에서 메시지 큐(Message Queue)를 도입해야 할 기회가 생겨 팀원과 함께 고민했다. 처음에는 가볍게 RabbitMQ, AWS SQS, Kafka, Redis Pub/Sub을 비교하며 선택했지만,각 메시지 큐의 특징과 차이점을 좀 더 깊이 이해하고 정리하고 싶었다. (개발 방향이 바뀌어 도입을 하진 않았다 😅) 이 글에서는 메시지 큐의 주요 기능과 차이점을 정리해보겠다. 메시지 큐 선택 기준한 메시지는 하나의 작업 서버에서만 처리해야 한다.중복 처리를 방지해야 함여러 작업 서버가 동시에 병렬적으로 처리할 수 있어야 한다.다수의 Consumer가 동시에 작업을 수행 가능해야 함빠른 성능이 중요하다.낮은 지연 시간 (Low Latency)높은 처리량 (High Throughput)이제 이 조건에..
-
코루틴 예외 처리: supervisorScope를 활용한 문제 해결📖 개발 공부/kotlin 2025. 1. 19. 15:16
후기 작성 이벤트 코드를 개발하던 중, 코루틴의 예외 처리로 인해 테스트 코드가 실패하는 문제가 발생했다.특정 유저가 이벤트 대상자인지 확인하는 로직에 코루틴이 적용되어 있었고, 다음과 같은 조건들을 비동기로 검증하고 있었다.이미 해당 업체에 후기를 작성했는지유효한 사용자인지이벤트 예산을 초과했는지문제 상황유효한 사용자인지 확인하는 조건은 다음과 같은 코드를 통해 검증하고 있었다.return runBlocking { val validUserDeferred = async(Dispatchers.IO) { checkValidUser(userId) } try { validUserDeferred.await() } catch (e: UserRestException) { return Respo..
-
2024 회고카테고리 없음 2025. 1. 5. 20:04
월별 회고1월, 2월, 3월#Study 기술 문서 읽고 정리하는 시간 갖기 시작 올해 초부터 일주일에 한번씩 기술 문서를 읽고 정리하는 시간을 가졌다. 관련 블로그 링크 >>Toss | null return은 코드 복잡성을 만든다.Line | 오픈채팅 시스템 설계Spring AOP를 Kotlin으로 개선해보기! (feat. 카카오페이 테크블로그)Toss | 서버 증설 없이 처리하는 대규모 트래픽Kotlin의 Value Class로 성능 최적화하기 (Codes like a class, works like an int.)Netflix | BFF에서 GraphQL Federation으로 전환기 이렇게 유익한 정보들도 얻고, 실제로 프로젝트에 적용해볼 수 있었다.(하지만 하반기 들어가서부터 점점 안하게 되었다는..
-
Spring Batch Partitioning로 대용량 데이터 마이그레이션 최적화 및 롱 트랜잭션 해결📖 개발 공부 2024. 12. 22. 21:58
Spring Batch Partitioning 도입이번 프로젝트에서 400만개 데이터 대상으로 마이그레이션 작업을 수행해야 했다. 기존에는 하나의 스레드에서 Reader, Processor, Writer를 순차적으로 처리했기 때문에, 대용량 데이터를 다루기에는 시간이 너무 오래 걸리는 문제가 있었다. (거의 5시간 이상이 걸렸다)그래서 이번에 id 기반으로 데이터를 파티션으로 분할하고, 각 파티션에서 병렬로 Reader/Processor/Writer를 동작하도록 파티셔닝 방식을 적용했다. 파티셔닝 방식은 다음과 같은 장점이 있다.독립적인 실행: 각 파티션은 독립적으로 실행되므로, 특정 파티션에서 오류가 발생해도 다른 파티션 작업에는 영향을 주지 않는다.효율적인 에러 관리: 각 파티션의 상태와 데이터 범위..