AWS Bedrock과 Knowledge Base를 활용한 Spring Boot 기반 AI 챗봇 백엔드 서비스입니다.
- 스트리밍 AI 채팅: Server-Sent Events(SSE)를 통한 실시간 스트리밍 응답
- AWS Bedrock Knowledge Base: RAG(Retrieval-Augmented Generation) 기반 지식 검색
- FastAPI 게이트웨이: FastAPI 서버를 통한 AWS Bedrock 연동
- 멀티바이트 문자 지원: 한글 등 멀티바이트 문자의 안전한 스트리밍 처리
- Framework: Spring Boot 3.4.12
- Language: Java 17
- Database: PostgreSQL
- AWS SDK: Bedrock Runtime 2.39.5, Bedrock Agent Runtime 2.39.5
- Reactive: Spring WebFlux (Reactor)
- Build Tool: Gradle
src/main/java/com/lgcns/haibackend/
├── HaibackendApplication.java # Spring Boot 메인 애플리케이션
└── bedrock/
├── client/ # FastAPI 클라이언트 (DTO, API 호출)
│ ├── ChatRequest.java
│ ├── ChatResponse.java
│ ├── FastApiClient.java
│ ├── KnowledgeBaseRequest.java
│ ├── Message.java
│ ├── Model.java
│ ├── ModelsResponse.java
│ └── SimpleChatRequest.java
├── config/ # 설정 클래스
│ └── FastApiClientConfig.java
├── controller/ # REST API 컨트롤러
│ └── BedrockController.java
└── service/ # 비즈니스 로직
└── BedrockService.java
.env 파일을 생성하고 다음 환경 변수를 설정하세요:
# Database Configuration
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/your_database
SPRING_DATASOURCE_USERNAME=your_username
SPRING_DATASOURCE_PASSWORD=your_password
# AWS Bedrock Configuration
AWS_BEDROCK_CHAT_MODEL=anthropic.claude-3-haiku-20240307-v1:0
AWS_BEDROCK_KB_ID=your_knowledge_base_id
AWS_BEDROCK_KB_MODEL_ARN=arn:aws:bedrock:your-region::foundation-model/your-model
# AWS Credentials (선택사항 - AWS CLI 설정으로 대체 가능)
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_REGION=ap-northeast-2프로젝트에는 application.yaml 파일이 포함되어 있으며, 위 환경 변수를 참조합니다.
./gradlew build -x test./gradlew bootRun또는
java -jar build/libs/haibackend-0.0.1-SNAPSHOT.jar기본 포트: `http://localhost:8081'
PostgreSQL과 Spring Boot 애플리케이션을 함께 실행:
# .env 파일이 준비되어 있는지 확인 후 실행
docker-compose up -d서비스 중지:
docker-compose down로그 확인:
docker-compose logs -f appAWS RDS PostgreSQL을 사용하는 경우 앱만 실행:
# .env 파일에 AWS RDS 연결 정보가 설정되어 있어야 함
docker-compose -f docker-compose.prod.yml up -d필요한 환경 변수 (.env 파일):
SPRING_DATASOURCE_URL=jdbc:postgresql://your-rds-endpoint:5432/dbname
SPRING_DATASOURCE_USERNAME=your_username
SPRING_DATASOURCE_PASSWORD=your_password# 이미지 빌드
docker build -t haibackend:latest .
# 컨테이너 실행
docker run -d \
--name haibackend \
-p 8081:8081 \
--env-file .env \
haibackend:latestKnowledge Base를 활용한 스트리밍 AI 채팅
POST /api/ai/chat
Content-Type: application/json
{
"message": "질문을 입력하세요"
}응답: text/event-stream (Server-Sent Events)
data: {"type": "content", "text": "응답 내용..."}
data: {"type": "content", "text": "계속..."}GET /api/ai/models응답:
[
{
"id": "anthropic.claude-3-haiku-20240307-v1:0",
"name": "Claude 3 Haiku"
}
]GET /api/ai/health응답:
{
"status": "healthy",
"fastapi_gateway": "connected"
}./gradlew test./gradlew test --tests "com.lgcns.haibackend.bedrock.client.*"graph LR
A[Frontend] -->|HTTP/SSE| B[Spring Boot Backend]
B -->|WebFlux| C[FastAPI Gateway]
C -->|AWS SDK| D[AWS Bedrock]
D -->|RAG| E[Knowledge Base]
dependencies {
// Spring Boot
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// Database
runtimeOnly 'org.postgresql:postgresql'
// AWS Bedrock
implementation 'software.amazon.awssdk:bedrockruntime:2.39.5'
implementation 'software.amazon.awssdk:bedrockagentruntime:2.39.5'
// Utilities
implementation 'io.github.cdimascio:dotenv-java:3.0.0'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
}- Java: 17 이상
- Gradle: 8.x
- IDE: IntelliJ IDEA 권장
- Database: PostgreSQL 13 이상
- Docker: (선택) Docker 20.10 이상, Docker Compose V2
LG CNS AM INSPIRE 교육팀
Note: AWS 자격 증명과 Bedrock Knowledge Base 설정이 올바르게 구성되어 있어야 정상 작동합니다.