DB 엔진 업그레이드시 유의사항

최근 회사에서 오라클 버전 업그레이드 작업이 진행되었다. 기존 11g의 지원기간(EOS)가 2022년 7월까지였고, 정말 하기 싫었지만 업그레이드 작업은 필수가 되었다. 현재 지원되는 오라클 버전중 19c가 가장 EOS기간이 긴 버전이었고 해당 버전으로 업그레이드가 진행되었다.

업그레이드를 진행하면서 난감한 상황과 아찔한 상황들을 많이 겪었는데, 업그레이드를 앞둔 다른 개발자들에게 조금이라도 도움이 되었으면 하는 바램으로 해당 내용들을 공유하고자 한다.

Read more

모니터링 시스템 장애(1) - AWS Lambda 런타임 지원기한

모니터링 시스템 요약

현재 우리 시스템은 Prometheus와 Grafana를 통하여 모니터링 시스템이 구축되어 있다. Prometheus는 다양한 데이터를 직접 pooling하여 데이터를 저장하고, Grafana는 이 데이터를 시각화한다. 이 Prometheus가 pooling을 하는 방식으로 rest api를 사용하였고, 이 api를 제공하는 프로그램을 Exporter라고 한다. Promethues에서 제공하는 다양한 Exporter가 있지만 우리 시스템에서는 AWS Lambda를 Serverless Framework를 이용하여 이 Exporter를 커스텀하게 구축하였다.

Read more

Spring Batch

Batch Program이란?

일반적으로 배치(Batch) 프로그램이라 하면, 일련의 작업들을 하나의 작업단위로 묶어 연속적으로 일괄처리 하는 것을 말한다.
예를 들어 하루전날의 집계된 요금데이터를 집계해야한다고 가정해보자. 이 업무는 하루에 1번만 수행하면 된다. 이를 위해 api를 구성하는것은 낭비가 된다. 또한 대량의 데이터를 처리하는 도중 실패가 된다면?? 이에 대한 처리를 어떻게 할 것인가?

이러한 단발성 대용량 데이터를 처리하는 프로그램을 배치프로그램이라 한다. 위에서 한 고민들을 살펴보면 단순히 집계하는 비즈니스 로직 이외에 고려해야할 부분이 많다는 것을 알 수 있다. 개발자가 비즈니스 로직 이외의 다른 부분들에 대한 고민을 덜어주도록 지원하는것을 프레임워크라 한다. 대표적인 프레임워크는 Spring이 있다.

Read more

JDBC 타임아웃

시스템을 운영하는 입장에서 개발을 진행한다면 다양한 상황들을 가정하게 된다. 프로그램이 갑작스럽게 죽었을 경우, 서버가 다운됐을 경우, DDos 공격을 당하게 되었을 경우등이 가정되는 상황들이다. 이러한 이벤트에서도 시스템은 피해를 최소화할 수 있어야 한다. 이와 관련하여 과거 진행되었던 개발건 중 JDBC 타임아웃 설정에 관한 좋은 경험이 있어 공유하고 설명하고자 한다.

DB서버의 먹통

2020년 실시간으로 들어오는 다량의 데이터들을 DB에 적재하는 프로그램 개발을 맡게 되었다. Kinesis로부터 읽어들인 데이터를 DB에 적재하면 되는 단순할 수 있는 개발건이었지만, 기존에 운영중인 시스템의 구조를 바꾸는 일이라 영향도가 꽤나 큰 건이었다. 기능 개발은 단기간에 끝났지만 성능테스트와 발생할 수 있는 다양한 상황에 대응하는 기능들을 추가하는데 공수가 더 들어가게 되었다.

Read more

모니터링 시스템(Prometheus, Grafana)(3)

앞서 말했듯이 Grafana는 시계열 데이터를 시각화하는데 가장 최적화된 대시보드를 제공해주는 오픈소스 툴킷이다. 주로 InfluxDB, Prometheus, Graphite등의 시계열 데이터베이스와 함께 사용되며 실시간 데이터분석, 모니터링등에서 많이 사용되고 있다. 특히 자체적인 Alert기능 제공은 해당 툴을 선택하는데 가장 큰 이유가 되었다.

Grafana 설치

Grafana를 설치과정은 공식사이트를 통해 자세하게 나와있다.(https://grafana.com/grafana/download)

Grafana 설치

Read more

모니터링 시스템(Prometheus, Grafana)(2)

프로메테우스와 그라파나의 전체적인 아키텍처 및 설치과정을 알아보도록 하자

프로메테우스/그라파나 아키텍쳐

지난 게시물에서도 말했듯이 프로메테우스는 데이터소스, 그라파나는 시각화 툴의 역할을 각각 맡고 있다. 또한 프로메테우스는 서버 뿐만 아니라 다양한 노드(컴포넌트)가 수집한 데이터를 pull방식으로 가져오는 구조이다. 여기서 node는 프로메테우스에서 제공하는 서비스일 수도 있고 사용자가 직접 커스텀한 Exporter일수도 있다.
그 구조는 아래와 같다.

프로메테우스 아키텍처

Read more

모니터링 시스템(Prometheus, Grafana)(1)

2018년 유지보수중이던 시스템이 기존 NT 서버에서 AWS로 모든 인프라를 옮기는 대공사를 진행하게 되었다.
인프라 전면전환 작업은 2년 가까운 시간이 되어서야 반영이 되었고, 2020년경부터 새로운 AWS인프라 위의 시스템을 유지보수하기 시작했다. 각종 문제들이 많이 생기기 시작했지만 가장 시급한 문제는 모니터링 시스템의 부재였다.

현재 내가 운영하고 있는 시스템은 실시간 대용량 트랜잭션을 처리하는 시스템으로, 장애발생시 5분 이내에 복구조치가 되도록 계약되어 있었고, 이를 위해서 모니터링 체계 구축은 필수적인 작업이었다.

많은 조사가 있었고 결국 우리는 프로메테우스와 그라파나라는 오픈소스를 사용하여 모니터링 체계를 구축하기 시작했다.

Read more