DEV ℧ Developer Diary

주문 서버 Heap Memory Leak 분석 및 조치 정리

시기가 좀 지났던 Trouble shooting 이지만, 기존에 단순히 끄적여놨던 원인 분석을 정리해서 올려보고자 한다.

1. 사건 개요

2024년 5월경, 주문 서버의 Heap 메모리 부족으로 인해 health-check API (SELECT 1)에 지연 알림이 발생했습니다.

발생 상황

name: 주문 API address: http:///actuator/health status:...

[DesignPattern] 책임 연쇄 패턴 (Chain Of Responsibility)

책임 연쇄 패턴 (Chain Of Responsibility)

메시지를 보내는 객체와 이를 받아 처리하는 객체들 간의 결합도를 없애기 위한 패턴입니다. 하나의 요청에 대한 처리가 반드시 한 객체에서만 되지 않고, 여러 객체에게 그 처리 기회를 주려는 것입니다.

동기

이 패턴은 메시지 송신 측과 수신측을 분리한는 것이다....

[DesignPattern] 프록시 (Proxy)

프록시 (Proxy)

다른 객체에 대한 접근을 제어하기 위한 대리자 또는 자리채움자 역할을 하는 객체를 둡니다.

동기

어떤 객체에 대한 접근을 제어하는 한 가지 이유는 실제로 그 객체를 사용할 수 있을 때까지 객체 생성과 초기화에 들어가는 비용 및 시간을 물지 않겠다는 것이다.

이미지와 같은...

[DesignPattern] 플라이웨이트 (Flyweight)

플라이웨이트 (Flyweight)

공유(sharing)를 통해 많은 수의 소립(fine-grained) 객체들을 효과적으로 지원합니다.

동기

플라이웨이트 객체는 공유 가능한 객체로, 여러 비슷한 상황에서 사용될 수 있습니다. 그러나 각각의 상황에서는 독립적인 객체로 동작합니다. 이것은 공유될 수 없는 객체의 인스턴스와 구분이 안 된다는 의미입니다. 그러므로 플라이웨이트 객체가 적용될 상황을...

[DesignPattern] 퍼사드 (Facade)

퍼사드 (Facade)

한 서브시스템 내의 인터페이스 집합에 대한 획일화된 하나의 인터페이스를 제공하는 패턴으로, 서브세스템을 사용하기 쉽도록 상위수준의 인터페이스를 정의합니다.

동기

시스템을 서브시스템으로구조화하면 복잡성을 줄이는데에 큰 도움이 된다. 공통적인 설계 목표는 서브시스템들 사이의 의사소통 및 종속성을 최소화하려는 것이다.

이런 목표를 달성하도록 도와주는 패턴이 퍼사드...