당신의 메모리는 안녕하십니까?
·
Spring/Spring Boot
당신의 애플리케이션은 안전한가요?"혹시 서비스 운영 중 아무런 이상이 없어 보이던 시스템이 갑자기 느려지고, 응답 시간이 증가하며, 결국 장애로 이어진 경험이 있지는 않나요? 우리가 흔히 간과하는 작은 코드 한 줄이 애플리케이션 성능 저하와 서버 장애를 초래할 수 있다는 사실, 알고 계셨나요?" 이런 문제는 대부분 메모리 관리의 작은 실수에서 시작된다. 애플리케이션이 실행되는 동안 메모리는 끊임없이 할당되고 해제된다. 특히 Java의 JVM 메모리 관리 방식을 제대로 이해하지 못하면, 시스템 성능 저하와 장애를 초래하는 메모리 누수(memory leak)가 발생하여 시스템 성능이 점점 저하될 수 있다.위 그래프는 JVM 메모리 사용량을 보여준다. 시간이 지남에 따라 메모리 사용량이 꾸준히 증가하고 있으며..
HikariCP를 이해하면 풀 사이즈 설정이 보인다
·
Spring/Spring
애플리케이션의 데이터베이스 성능은 커넥션 풀의 효율성과 직결된다. 커넥션 풀은 데이터베이스 연결을 효율적으로 관리하는 핵심 요소다. 하지만 이를 제대로 이해하지 못한 채 기본 설정에 의존하는 경우도 있을 것이다.Spring은 HikariCP라는 뛰어난 성능과 신뢰성을 가진 커넥션 풀을 기본적으로 제공한다. 그러나 기본 설정만으로는 모든 상황에서 최적화된 성능과 안정성을 보장하기 어렵다.이 글에서는 HikariCP의 주요 개념과 작동 원리를 살펴보고, 적절한 풀 사이즈를 설정하는 방법에 대해 논의한다. 또한, 커넥션 풀과 관련된 대표적인 문제와 이를 방지하는 설정 전략도 함께 다룬다. HikariCP를 최적화하여 애플리케이션의 성능과 안정성을 극대화하는 방법을 알아보도록 하자. 1. DB Connectio..
나만의 Swagger UI 서버, 쿠버네티스에서 운영하기
·
Infra
Swagger UI에서 여러 서비스에 대한 문서를 효율적으로 관리하려면, 문서 파일의 저장소와 접근 방식에 대한 고민이 필요하다. 이 글에서는 Swagger UI를 쿠버네티스 환경에서 구성하는 방법과, Object Storage를 활용해 Swagger 문서를 제공하는 방법을 다룬다. 이를 통해 자동화된 문서 관리, 안정적인 시스템 구축을 목표로 한다. 또한, Swagger UI를 조직의 필요에 맞게 커스터마이징하여 제공하는 방법도 함께 살펴볼 것이다. 1. Swagger UI1-1. Swagger UI란?Swagger UI는 swagger-api Organization의 핵심 프로젝트이다. 사용자에게 직관적인 UI를 제공하여 API 제공자와 사용자 간의 협업에 큰 도움을 주는 툴이다. Organizati..
REST API 문서 자동화로 업무 효율 극대화하는 방법
·
Spring
이 글은 Spring REST Docs를 통해 Swagger 문서화를 자동화하는 방법과 이를 통해 업무 효율을 극대화할 수 있는 여러 가지 도구들에 대해 소개한다. Swagger는 가장 유명한 API 문서화 툴 중 하나이다. HTTP 통신을 통해 정보를 교환하는 REST API를 사용한다면 협업을 진행하기 위해 Swagger를 사용하고 있는 팀이 많을 것이다. 테스트 코드로 자동화했을 수도 있고, 주석을 다는 방법과 기타 방법을 사용해 자동화한 팀도 존재할 것이며, openapi 문서를 한땀한땀 직접 작성하는 분들도 있을 것이다. 몇몇 분들은 굳이 "Swagger가 굳이 필요하냐?", "테스트 코드를 통해 Swagger 문서를 자동화할 필요가 있냐?"고 의문을 가질 수도 있다. 하지만 내 대답은 "테스트..
[Spring Batch] Tasklet에서 왜 @BeforeStep과 @AfterStep이 동작하지 않을까?
·
Spring/Spring
1. Tasklet만으로는 beforeStep이나 afterStep을 트리거하지 못한다.Tasklet을 구현하고 StepBuilder에서 tasklet() 메소드를 등록해주는 것만으로는 @BeforeStep이나 @AfterStep을 사용할 수 없다.Tasklet에서 Step의 생명주기에 관여하고 싶다면 추가적인 작업이 필요하다는 말이다.@Configurationpublic class MemberJobConfig { @Bean("memberJob") public Job memberJob( JobRepository jobRepository, PlatformTransactionManager transactionManager) { return new JobBuilder("memberJob", ..
[Spring] RestClient URI Encoding 문제 (feat. 퍼센트 인코딩)
·
Spring/Spring
RestClient의 URI 인코딩DefaultUriBuilderFactoryRestClient를 생성할 때 보통 Builder를 사용해 만들게 됩니다.public interface RestClient { ... static RestClient.Builder builder() { return new DefaultRestClientBuilder(); } .... }RestClient.Bulider가 build() 하는 시점에 아래와 같이 DefaultUriBuilderFactory를 기본으로 생성해 가지고 있습니다.public class DefaultRestClientBuilder { ... @Override public RestClient b..