본문 바로가기

전체 글174

[Linkerd] Linkerd와 Service Mesh 고객사에서는 완전한 마이크로 서비스는 아니지만 각 애플리케이션 간 데이터 통신이 필수적 입니다. 이 때 애플리케이션 간 네트워크 통신이나 이슈가 어디서 발생할 지에 대한 부분을 모니터링 할 필요성이 있었습니다.저는 Service Mesh를 사용하려고 했으나 대표적인 제품인 istio 와 linkerd 중 어떤 걸 사용할 지 고민하였고 그 결과 linkerd를 사용하기로 했습니다. 본문에서는 Linkerd가 무엇인지와 Linkerd를 사용한 이유, 각 애플리케이션 네트워크 모니터링을 구축하기 위해 Linkerd를 어떻게 사용했는지 설명드리도록 하겠습니다. 📌 고객사 요구 사항고객사에서는 애플리케이션 간 HTTP 통신을 진행하며, 단순히 애플리케이션 간 네트워크 통신이 실시간으로 정상적으로 이루어지고 .. 2025. 10. 31.
[App Service] 504 Gateway Timeout 발생시 해결 방법 ⁉️ 문제 원인고객사 운영환경에서 트래픽이 몰릴 경우 App Service에서 다량의 HTTP Server Error가 발생됨을 확인했습니다.(대략 139건 발생) App Service 메트릭 정보를 통해 CPU, Memory 부하도 높지만 Data Out이 최대 1.5GB가 발생했음을 확인했습니다. 해당 메트릭 정보를 토대로 App Service에서 Output 되는 다량의 데이터들이 어디로 가는지 파악해야 할 필요가 있었습니다. Application Insight 맵을 통해 서비스 부하 기간 동안 App Service에서 DB로 48,000건 호출됨을 확인할 수 있었습니다. 즉, 대부분의 통신이 DB와 이루어진 것 입니다. MariaDB 메트릭 정보를 확인해보니 서비스 부하 기간 동안 IO Perc.. 2025. 10. 30.
[Spring] 동시성 처리 방법 Spring 커머스 토이 프로젝트 개발 시 재고 감소에 대한 동시성 테스트를 진행하였습니다. 처음 재고가 30만개 였고 동시에 5명의 사용자가 각 5개씩 상품을 주문했을 때 25개의 상품이 감소하여 결과적으로는 299,975 재고가 남아있어야 합니다. 하지만 결과적으로는 5개의 재고만 감소되어 데이터 정합성이 깨진 것을 확인할 수 있었습니다. 자세한 내용은 다음 링크에서 확인 가능합니다. 그렇다면 데이터 정합성이 깨지지 않도록 동시성 처리를 할 수 있는 방법은 무엇인지 알아보도록 하겠습니다. 동시성 문제동시성 문제란 하나의 자원에 여러 스레드가 동시에 접근하여 데이터 정합성이 깨지는 것을 말합니다. 동시성 문제는 다양한 원인으로 발생하는데 여기서는 Race Condtion 으로 발생한 문제 입니다.동시.. 2025. 10. 7.
[Spring] Spring Profile 이란 무엇인가? Spring Profile개발을 하다보면 실제 운영 환경에 올리는 애플리케이션 설정과 개발 환경에 올리는 설정이 다를 때가 있습니다. 예를 들어, 개발 환경에서는 Docker Container를 사용해서 개발을 진행하고 실제 운영 환경은 클라우드 또는 온-프레미스를 이용하기도 합니다. 바로 이 때 이용하는 것이 Spring Profile 입니다. Spring Profile은 스프링 프레임워크에서 애플리케이션의 환경 설정을 구분하기 위한 기능입니다. Profile은 애플리케이션을 실행할 때 선택할 수 있습니다. 예를 들어, 개발 환경에서는 'dev' 프로파일을 선택하고 운영환경에서는 'prod' 프로파일을 선택할 수 있습니다. Spring Profile로 애플리케이션 환경 분리하기스프링 프레임워크 애플.. 2025. 9. 28.
build.gradle 이해하기 🐘 Gradle 이란?애플리케이션 빌드 자동화 도구로 Java, Kotlin, Groovy 등 다양한 언어와 플랫폼을 지원하며 JVM 기반 프로젝트(Spring, Android)에서 주로 사용합니다. Gradle을 통해 컴파일, 테스트, 패키징(Jar, War), 의존성 관리, 배포 자동화 작업을 할 수 있습니다. build.gradle 파일build.gradle 파일은 프로젝트 빌드에 필요한 설정들을 선언하고, 플러그인과 의존성을 정의할 수 있습니다. build.gradle은 Groovy 또는 Kotlin 문법으로 작성할 수 있습니다. 본문에서는 Groovy 문법으로 build.gradle을 살펴보려고 합니다. Project ObjectSpringboot Application을 처음 생성하면 아래.. 2025. 9. 23.
[Springboot] @RestControllerAdvice 와 Swagger 충돌 문제 🚨 에러 발생 원인커스텀 예외 클래스를 만들기 위해 도메인 레벨 표현을 위한 enum 클래스, 커스텀 예외 클래스, 커스텀 예외를 처리하는 ExceptionHandler 클래스를 생성하였습니다.// 도메인 레벨 표현을 위한 열거형 클래스 생성public class Constants { public enum ExceptionClass { PRODUCT("Product"); ORDER("Order"); private String exceptionClass; ExceptionClass(String exceptionClass) { this.exceptionClass = exceptionClass; } publi.. 2025. 8. 27.