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를 데이터 저장소로 사용함.
ReadLifelog 웹 앱은 Google Drive를 이미지 저장소로 사용하며, 느린 속도 문제를 해결하기 위해 Cache를 적용했다. Metadata API 호출 제거와 Nginx의 proxy_cache를 활용하여 이미지 캐싱을 개선했고, Cloudflare Cache Rule도 적용했다. 이로 인해 이미지 로딩 속도가 향상되었다.
ReadKafka로 게시글을 발행하고, WebSocket을 통해 실시간 알림을 구현했는데, HTTPS 운영서버에서는 WebSocket이 동작하지 않아 Nginx 설정을 추가하여 문제 해결함. Nginx가 WebSocket 업그레이드 요청에 필요한 HTTP 헤더를 백엔드로 전달하지 않아 발생한 문제로, Upgrade와 Connection 헤더를 설정해야 함. Nginx에 `/ws/` 전용 location 블록을 추가하여 `proxy_http_version`, `proxy_set_header` 등의 설정을 적용하고 서비스를 재시작해야 함.
ReadHTTPS만으로는 개발자 도구·프록시 등에서 비밀번호 평문 노출 위험이 존재하므로, 클라이언트에서 RSA로 한 번 더 암호화하는 방식을 적용한다. 브라우저는 공개키로 암호화하고 서버는 개인키로 복호화하여 기존 인증 로직은 유지하면서 전송 보안을 강화할 수 있다. 다만 이는 HTTPS를 대체하지 않으며, 리플레이 공격·키 관리 등 추가적인 보안 고려가 필요하다.
ReadSpring AI를 활용하면 OpenAI 등 다양한 LLM을 ChatClient 추상화로 간단하게 Spring Boot 애플리케이션에 연동할 수 있다. 의존성 추가, API 키 설정, ChatClient 빈 등록, 서비스 호출의 4단계만으로 LLM 기반 API를 빠르게 구축 가능하다. 추상화 구조 덕분에 모델 교체(OpenAI → Anthropic 등)도 코드 변경 없이 설정만으로 유연하게 대응 가능하다.
Read애플리케이션 아키텍처는 비즈니스 요구사항과 기술적 제약을 고려하여 최적의 구조를 찾는 작업이며, 이를 통해 도메인 정의와 데이터 모델링을 포함한 프로젝트 진행됨. 데이터베이스 설계에는 도메인 간 관계, 정규화, 확장성을 고려하여 논리 모델링을 진행하고, 기술 스택 선택에서는 Java 21, Spring Boot, Kotlin 등을 결정함.멀티 모듈 구조, 애노테이션 기반의 인증, Virtual Thread를 활용한 FeignClient 등의 기술 채택과 코딩 컨벤션 정의 등이 이뤄짐.마지막으로 AWS SQS를 메시징 솔루션으로 선택하고, 기술 워크샵을 통해 최종 아키텍처를 확정함.
ReadJava 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로 래핑하는 패턴을 팀 표준으로 정의한 실전 설계 가이드이다.
ReadSpring 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