프로젝트 회고2025.07 - 2026.02Blynx 회사 프로젝트

BlynxLabLLM 챗봇 서비스 운영

BlynxLab으로 운영했던 AI 서비스. LLM 스트리밍 백엔드, 문의 폼, 문서 검색, 배포 스크립트, 서비스 종료 전환까지 다뤘습니다.

프로젝트 소개

BlynxLab은 blynxlab.com으로 운영했던 회사 AI 서비스였고, 2026년 1월 2일 서비스 종료 후 현재는 회사 페이지 대용의 홈페이지로 남아 있습니다. 내부 코드명 Moonshot으로 개발된 NestJS 백엔드, 챗봇 서버, 프론트엔드 일부, 배포 파이프라인을 맡았고, OpenAI/Gemini/Bedrock 모델 스트리밍, 익명 사용자 처리, 문서 chunk 메타데이터, 웰컴 메시지, 공개 문의 폼, 서비스 종료 안내와 배포 스크립트까지 운영 단계의 기능을 구현했습니다.

역할
LLM 챗봇 백엔드, 모델 스트리밍 처리, 문의 폼, 배포 스크립트, 프론트 운영 화면 일부
형태
Blynx 회사 프로젝트
상태
종료/보관

Company Work

회사 프로젝트 범위

실제 담당했던 백엔드, 프론트엔드, 배치, 결제, 인프라 영역을 중심으로 묶었습니다.

BlynxLab work scope preview

구현한 기능

  • OpenAI/Gemini 모델의 스트리밍 응답과 delta 데이터 추출, 토큰 사용량 처리 로직 개선
  • GPT-5 계열 모델명 정규화와 Gemini Flash Lite 등 모델 옵션 확장
  • 익명 사용자를 위한 UUID 헤더 처리와 문서 chunk 파일 ID/파일명 메타데이터 처리
  • 공개 문의 폼, 웰컴 메시지, 답변 placeholder 필드 등 서비스 운영 API 추가
  • OpenSearch 크롤링 메타데이터와 single 타입 중복 검증 로직 보정
  • Docker 이미지 빌드와 ECS 업데이트를 통합한 BullMQ 배포 스크립트 개선

사용 기술

서비스 요구사항에 맞춰 사용한 기술과 선택 이유입니다.

프론트엔드

언어

TypeScript

프론트엔드와 Node.js 백엔드에서 타입 안정성을 확보하고 API 계약 변경을 추적하기 위해 사용했습니다.

프레임워크/라이브러리

Next.js

서비스 소개, 로그인, 종료 안내, 메시지 입력 화면을 웹에서 운영하기 위해 사용했습니다.

백엔드

언어

TypeScript

프론트엔드와 Node.js 백엔드에서 타입 안정성을 확보하고 API 계약 변경을 추적하기 위해 사용했습니다.

프레임워크/런타임

NestJS

LLM API, 문의 폼, 크롤링 요청, 챗봇 서버를 모듈 단위로 나누기 위해 사용했습니다.

BullMQ

크롤링과 챗봇 처리처럼 오래 걸리는 작업을 큐 기반으로 분리하기 위해 사용했습니다.

DB/검색

저장소

MongoDB

문서, 대화, 서비스 설정처럼 구조가 바뀔 수 있는 데이터를 저장하기 위해 사용했습니다.

Redis

BullMQ 큐와 캐시성 상태 관리를 위해 사용했습니다.

OpenSearch

크롤링 문서 검색과 메타데이터 기반 조회를 위해 사용했습니다.

AI/API

모델 연동

OpenAI API

챗봇 응답 스트리밍과 모델별 토큰 사용량 처리를 위해 사용했습니다.

Gemini API

OpenAI 외 모델 옵션을 함께 지원하고 출력 설정을 비교하기 위해 사용했습니다.

AWS Bedrock

AWS 환경에서 관리되는 LLM 모델 사용 가능성을 열기 위해 사용했습니다.

인프라

클라우드/설정

AWS ECS

NestJS/BullMQ 서비스를 컨테이너 단위로 배포하기 위해 사용했습니다.

Secrets Manager

dev/prod 환경의 민감 설정을 코드 밖에서 관리하기 위해 사용했습니다.

Docker

챗봇 서버와 워커 배포 이미지를 일관되게 만들기 위해 사용했습니다.

CI/CD

배포 흐름

Docker Build

서비스별 실행 환경을 이미지로 고정하고 배포 과정에서 빌드 결과를 일관되게 유지하기 위해 사용했습니다.

ECS Deploy

컨테이너 서비스를 AWS ECS에 배포하고 운영 환경 업데이트를 자동화하기 위해 사용했습니다.

구조와 개선

BlynxLab API: 문의 폼, 웰컴 메시지, 답변 DTO, 크롤링 요청 검증 API Chatbot API: OpenAI/Gemini/Bedrock 모델 스트리밍과 토큰 사용량 처리 Pipeline: BullMQ 작업과 ECS 배포 스크립트 기반 비동기 처리 Frontend: Next.js 기반 로그인/종료 안내/튜토리얼/메시지 입력 화면 일부 운영 Infra: Docker, ECS, AWS Secrets Manager로 환경별 설정과 배포 관리

  • BlynxLab API: 문의 폼, 웰컴 메시지, 답변 DTO, 크롤링 요청 검증 API
  • Chatbot API: OpenAI/Gemini/Bedrock 모델 스트리밍과 토큰 사용량 처리
  • Pipeline: BullMQ 작업과 ECS 배포 스크립트 기반 비동기 처리
  • Frontend: Next.js 기반 로그인/종료 안내/튜토리얼/메시지 입력 화면 일부 운영
  • Infra: Docker, ECS, AWS Secrets Manager로 환경별 설정과 배포 관리

성과와 회고

  • OpenSearch는 고객/페이지별 데이터가 늘어날수록 인덱스 관리가 병목이 될 수 있어, 인덱스 존재 여부 확인과 자동 생성 흐름을 추가했습니다. 이후 인덱스 풀 메타데이터와 shard 수 속성까지 붙여 데이터 분산과 운영 추적이 가능하도록 확장했습니다.
  • 챗봇 응답은 OpenAI, Gemini, Bedrock마다 스트리밍 이벤트와 토큰 사용량 형식이 달라 공통 처리 계층이 필요했습니다. delta 추출과 출력 토큰 설정을 모델별로 정리해, 모델을 바꿔도 응답 흐름이 흔들리지 않게 만들었습니다.
  • BullMQ 워커는 Redis 연결 옵션과 기본 작업 옵션을 정리해 장시간 작업 안정성을 높였습니다. 크롤링/전처리처럼 오래 걸리는 작업을 API 요청 흐름에서 떼어내고, ECS 배포 스크립트로 워커 업데이트까지 묶었습니다.
  • 응답 캐시와 작업 상태 조회를 개선해 같은 결과를 반복 생성하지 않도록 했습니다. TTS 음성 URL이나 task status처럼 늦게 채워지는 값을 선택 필드로 다루면서, 캐시된 응답을 재사용할 수 있게 정리했습니다.
  • 2026년 1월 2일 서비스 종료 단계에서는 단순히 기능을 막는 데서 끝내지 않고, CTA 제거, 접근 경로 리다이렉트, 회사 페이지 대용 홈페이지 역할까지 정리했습니다.