본문 바로가기

허브 살리기 프로젝트24

Connection Timeout Monitoring in Connection Pool 운영을 하다보면 예기치 못한 일들이 많이 일어난다. 해당 상황들이 실제 서비스의 가용성에 부정적인 영향을 미치는 상황을 방지하기 모니터링 툴을 사용한다. DataDog이나 Prometheus + Grafana와 같은 모니터링 어플리케이션들을 통해 메트릭을 수집하고 주기적으로 확인하여 이상현상을 체크하고 확인 할 수 없는 시간대나 갑작스러운 상황에 대비하여 Alert을 걸어서 슬렉으로 확인하거나 메일 혹은 전화를 받는 식으로 빠른 대응 및 원인 파악에 드는 시간을 줄일 수 있게 한다. 서비스의 가용성에 부정적인 영향을 미치는 지표는 여러가지가 있어서 당장 장애 상황에 직면하면 당황하기도 하고 뭐가 문제인지 파악이 어렵다. 그리고 설정상으로 수집이 안 되고 있는 메트릭이 장애 유발 포인트라면 확인 및 해결까.. 2024. 2. 11.
Idle in ALB, Connection Pool 같은 용어이고 비슷한 개념이지만 실제 동작은 다르기 때문에 가끔 혼란스러운 경우가 있다. 그중에 'Idle Timeout'이 있다. ALB Idle Timeout 보통 서비스는 앞에 부하 분산의 목적이나 무중단 배포를 위해 앞에 로드 벨런서를 둔다. ALB는 HTTP/HTTPS 기반 즉 7계층으로 사용하는 로드벨런서기 때문에 헤더 추가라던지 헤더 내부에서 정의하는 호스트 기반 라우팅이라던지 편리한 기능이 많다. 보통 앞에 ALB를 붙이면 이런 식으로 구성되게 되는데 Idle Timeout은 Client에서 ALB로 요청을 할 때 저 연결 흐름에서 해당 시간 동안 주고 받는 데이터가 없으면 커넥션이 제거된다. 즉 클라이언트 요청 시점에서 요청 처리에 idle timeout 시간이 초과 되면 해당 커넥션은 .. 2024. 2. 7.
TCP, HTTP/HTTPS keep-alive Persistent Connection 클라이언트에서 서버로 데이터를 전송하기 위해 TCP 요청은 client와 서버간 3-way handshake 과정을 통해서 연결을 맺고 데이터를 전송하고 전송이 완료되었으면 4-way handshake 과정을 통해서 해당 연결을 종료한다. 커넥션을 맺기 위해서는 클라이언트와 서버 관점에서 보면 다음과 같은 작업으로 진행된다. 클라이언트 운영체제로부터 소켓 할당 (사용 할 포트, 파일 디스크립터 등등) 요청 보낼 곳 DNS Query (캐시에 존재하면 캐시를 조회) 소켓 생성 3-way handshake 시작 요청 전송 다 보낸 이후 4-way handshake 시작 커넥션 종료 서버 운영체제로부터 소켓 할당(사용 포트, 파일 디스크립터 등등) 소켓 생성 클라이언트 .. 2024. 2. 5.
Gradle Java plugin API and Implementation 멀티모듈을 사용하다보면 종종 build.gradle에서 의존성을 추가할 때 API, Implementation을 확인 할 수 있고 여러 자료들을 찾아보다보면 헷갈려서 둘의 차이를 공식 문서를 보고 정리했다. 우선 헷갈리지 않게 둘의 의존성 관리 주체는 gradle이다. 즉, gradle에서 제공하는 의존성 관리 기능을 사용하는데 API, Implementation이 있고 이 차이를 확인하는 것이다. API This is where you declare dependencies which are transitively exported to consumers, for compile time and runtime. api는 사용하는 측에 컴파일 시점과 런타임 시점에 전이 된다고 한다. 예를 들어서 A 라는 모듈.. 2024. 1. 31.