Latest Posts · Page 1 of 1
Spring AI Ops 개발기 — Grafana Alerting과 GitHub Repository에 Push된 Code를 AI로 분석하는 실시간 대시보드

AI 기반 운영 자동화 도구인 Spring AI Ops 개발과정 소개. 주요 기능은 Grafana Alerting과 Loki 로그 조회로 AI 장애 분석, GitHub git push로 코드 리뷰를 AI가 수행하는 것. Spring Boot, Kotlin, Spring AI, Redis, Java 21 Virtual Thread 등 기술 스택 사용. 중요 설계 포인트와 트러블슈팅 사례 포함. AI AutoConfiguration을 비활성화하고 Redis를 데이터 저장소로 사용함.

Read
Nginx 프록시 환경에서의 WebSocket (WSS) 동작 이상 트러블슈팅

Kafka로 게시글을 발행하고, WebSocket을 통해 실시간 알림을 구현했는데, HTTPS 운영서버에서는 WebSocket이 동작하지 않아 Nginx 설정을 추가하여 문제 해결함. Nginx가 WebSocket 업그레이드 요청에 필요한 HTTP 헤더를 백엔드로 전달하지 않아 발생한 문제로, Upgrade와 Connection 헤더를 설정해야 함. Nginx에 `/ws/` 전용 location 블록을 추가하여 `proxy_http_version`, `proxy_set_header` 등의 설정을 적용하고 서비스를 재시작해야 함.

Read
RSA 클라이언트 암호화 적용

HTTPS만으로는 개발자 도구·프록시 등에서 비밀번호 평문 노출 위험이 존재하므로, 클라이언트에서 RSA로 한 번 더 암호화하는 방식을 적용한다. 브라우저는 공개키로 암호화하고 서버는 개인키로 복호화하여 기존 인증 로직은 유지하면서 전송 보안을 강화할 수 있다. 다만 이는 HTTPS를 대체하지 않으며, 리플레이 공격·키 관리 등 추가적인 보안 고려가 필요하다.

Read
Spring AI로 OpenAI 연동하기 : Kotlin + Spring Boot

Spring AI를 활용하면 OpenAI 등 다양한 LLM을 ChatClient 추상화로 간단하게 Spring Boot 애플리케이션에 연동할 수 있다. 의존성 추가, API 키 설정, ChatClient 빈 등록, 서비스 호출의 4단계만으로 LLM 기반 API를 빠르게 구축 가능하다. 추상화 구조 덕분에 모델 교체(OpenAI → Anthropic 등)도 코드 변경 없이 설정만으로 유연하게 대응 가능하다.

Read
아키텍처는 어떻게 만들어지는가: 이벤트에서 시스템으로

애플리케이션 아키텍처는 비즈니스 요구사항과 기술적 제약을 고려하여 최적의 구조를 찾는 작업이며, 이를 통해 도메인 정의와 데이터 모델링을 포함한 프로젝트 진행됨. 데이터베이스 설계에는 도메인 간 관계, 정규화, 확장성을 고려하여 논리 모델링을 진행하고, 기술 스택 선택에서는 Java 21, Spring Boot, Kotlin 등을 결정함.멀티 모듈 구조, 애노테이션 기반의 인증, Virtual Thread를 활용한 FeignClient 등의 기술 채택과 코딩 컨벤션 정의 등이 이뤄짐.마지막으로 AWS SQS를 메시징 솔루션으로 선택하고, 기술 워크샵을 통해 최종 아키텍처를 확정함.

Read
플랫폼 백엔드 개발 가이드

Java 21 Virtual Thread + Spring Boot 3.5 + Spring Cloud 기반의 마이크로서비스 아키텍처로, 4개 독립 서비스 모듈과 공통 라이브러리로 구성된 백엔드 개발 가이드이다. @ParsedAuthToken + @ValidateUser 커스텀 애노테이션과 AOP를 조합해 JWT 파싱 및 사용자 검증 로직을 컨트롤러에서 완전히 분리한 것이 인증 설계의 핵심이다. 레이어별 메서드 명명 규칙(Controller → get*/save*, Service → find*/save*, Repository → find*/insert* 등)과 FeignClient를 Virtual Thread로 래핑하는 패턴을 팀 표준으로 정의한 실전 설계 가이드이다.

Read
Kotlin, SpringBoot 3, GraalVM 환경에서 Native Image로 컴파일하여 애플리케이션 실행

Spring Boot 3 + GraalVM Native Image를 사용하면 JVM 없이 실행되는 바이너리를 생성할 수 있으며, 기동 속도가 약 93.5% 향상된다 (4.7초 → 0.3초). 설정은 build.gradle.kts에 native 플러그인 추가, application.yaml에 AOT 활성화, GRAALVM_HOME 환경변수 설정 후 ./gradlew nativeCompile로 빌드. 다만 컴파일 시간 12~13분, 환경 의존성, 미지원 라이브러리 존재, 운영 레퍼런스 부족 등의 이유로 실제 운영 도입에는 추가 검토가 필요하다.

Read
블로그에 새로운 글이 발행되었습니다.