반응형

Java 5

gRPC Spring Boot 서비스 간 통신 구현하기

gRPC(Google Remote Procedure Call)는 HTTP/2 기반의 고성능 RPC 프레임워크로, 마이크로서비스 간 통신에서 REST API 대비 낮은 지연 시간과 강한 타입 안전성을 제공합니다. Spring Boot 환경에서 gRPC를 적용하면 Protobuf 직렬화를 통해 페이로드 크기를 줄이고, 양방향 스트리밍 같은 고급 통신 패턴도 손쉽게 구현할 수 있습니다. 이 글에서는 Spring Boot 프로젝트 두 개(서버/클라이언트)를 직접 구성하며 gRPC 서비스 간 통신을 단계별로 구현합니다.프로젝트 의존성 및 Protobuf 정의Gradle 의존성 설정grpc-spring-boot-starter는 Spring Boot 자동 구성과 gRPC 서버 라이프사이클을 통합해 주는 핵심 라이브러..

[JAVA/SPRING] GraalVM Native Image로 Spring Boot 시작 시간 줄이기

Spring Boot 애플리케이션의 긴 시작 시간은 서버리스 환경이나 컨테이너 오케스트레이션 환경에서 치명적인 병목이 됩니다. GraalVM Native Image는 JVM 기반 애플리케이션을 AOT(Ahead-of-Time) 컴파일로 네이티브 실행 파일로 변환해, 시작 시간을 수백 밀리초 단위로 단축하고 메모리 사용량도 대폭 낮춥니다. Spring Boot 3.x부터는 공식적으로 GraalVM Native Image를 지원하므로, 실제 프로젝트에 바로 적용할 수 있는 수준으로 성숙했습니다.GraalVM Native Image란GraalVM은 Oracle이 개발한 고성능 JDK 배포판으로, 그 핵심 기능 중 하나인 Native Image는 Java 바이트코드를 분석해 실행에 필요한 코드만 추려 플랫폼 네..

CQRS 패턴 적용법: 명령과 조회 분리하기

대규모 서비스를 운영하다 보면 조회 트래픽이 명령(쓰기) 트래픽보다 수십 배 이상 높은 상황을 자주 마주칩니다. 하나의 도메인 모델로 읽기와 쓰기 요청을 동시에 처리하면 복잡도가 높아지고, 성능 최적화가 어려워집니다. CQRS(Command Query Responsibility Segregation)는 이 문제를 해결하기 위해 명령(Command)과 조회(Query)의 책임을 명확히 분리하는 아키텍처 패턴입니다.Greg Young이 제안하고 Martin Fowler가 정리한 이 패턴은, 복잡한 도메인 로직을 가진 시스템에서 읽기 모델과 쓰기 모델을 독립적으로 확장하고 최적화할 수 있게 해줍니다. 이번 글에서는 CQRS의 핵심 구조를 이해하고, Spring Boot 환경에서 실제 프로젝트에 적용하는 방법을..

[JAVA] JVM GC 튜닝으로 자연시간 줄이기

JVM GC(Garbage Collection) 튜닝은 Java 애플리케이션의 응답 지연(latency)과 처리량(throughput)을 결정짓는 핵심 요소입니다. GC 로그 분석부터 적절한 컬렉터 선택, 힙 크기 조정까지 단계별로 접근하면 운영 환경에서 발생하는 Stop-The-World(STW) 시간을 효과적으로 줄일 수 있습니다.GC 로그 수집과 기본 진단튜닝을 시작하기 전에 현재 GC 동작 상태를 정확히 파악해야 합니다. JVM 옵션으로 GC 로그를 활성화하면 STW 발생 빈도, 각 GC 단계 소요 시간, 힙 사용 패턴 등을 확인할 수 있습니다.JDK 17 이상 환경에서 권장하는 GC 로그 설정입니다.# 변경전: 로그 없이 기본 실행java -jar app.jar# 변경후: GC 로그 + 타임스탬..

[JAVA/SPRING] Git에 비밀번호 올리지 마세요: 스프링 부트 민감 정보 관리 전략 (Jasypt, Vault)

"잠깐, 방금 커밋한 application.yml에 DB 비밀번호 들어있지 않았어?"오픈소스 프로젝트나 실무 초기에 흔히 겪는 식은땀 나는 상황입니다. 실수로 깃허브(GitHub)에 AWS 키나 DB 패스워드를 올렸다가, 몇 분 만에 클라우드 비용이 수백만 원 청구되거나 보안 사고로 이어지는 사례는 꽤 흔합니다.이번 글에서는 환경 변수부터 Jasypt 암호화, 그리고 HashiCorp Vault까지, 민감 정보를 안전하게 관리하는 단계별 전략을 소개합니다.1. 최악의 패턴: 하드코딩 (Hardcoding)spring: datasource: url: jdbc:mysql://db-prod.company.com:3306/mydb username: admin password: "Password..

반응형