전체 글 65

TimescaleDB는 무엇인가?

이 글에서는 PostgreSQL 기반의 오픈 소스 시계열 데이터베이스인 TimescaleDB와 그 핵심 기능인 하이퍼테이블에 대해 알아보겠습니다. TimescaleDB TimescaleDB는 관계형 데이터베이스의 강력한 기능과 시계열 데이터를 효율적으로 처리하는 능력을 결합한 데이터베이스입니다. PostgreSQL의 확장으로, 기존 SQL 지식을 활용하여 시계열 데이터를 쉽게 처리할 수 있습니다. 높은 쓰기 성능, 효율적인 데이터 압축, 강력한 쿼리 기능이 특징입니다. 하이퍼테이블 하이퍼테이블은 TimescaleDB의 핵심 개념으로, 일반적인 PostgreSQL 테이블처럼 보이지만 내부적으로 여러 개의 데이터 파티션(청크라고 함)으로 나뉩니다. 이 구조는 시계열 데이터의 대량 삽입과 복잡한 쿼리를 효율적..

Database. 2023.12.29

TimescaleDB vs InfluxDB 비교하기

시계열 데이터베이스는 시간에 따라 변하는 데이터를 저장하기 위해 설계되었습니다. 이것은 시간이 지남에 따라 수집된 모든 종류의 데이터일 수 있습니다. 예를 들어, 어떤 시스템에서 수집한 메트릭들이 이에 해당합니다. 우리는 다양한 종류의 시계열 데이터베이스를 가지고 있는데, 어떤 것을 사용해야 할까요? 이 글에서는 TimescaleDB와 InfluxDB, 두 주요 옵션 사이의 주요 차이점을 살펴볼 것입니다. InfluxDB InfluxDB는 InfluxData에 의해 만들어졌습니다. 이것은 Go 언어로 작성된 맞춤형, 오픈 소스, NoSQL 시계열 데이터베이스입니다. 이 데이터 저장소는 InfluxQL이라고 하는 SQL과 유사한 언어를 제공하여 개발자들이 자신들의 애플리케이션에 쉽게 통합할 수 있습니다. ..

Database. 2023.12.29

Kafka Consumer DLT(Dead Letter Topic) 전략

분산 시스템과 메시지 큐를 다루는 과정에서 메시지 처리 실패는 흔한 일입니다. 이러한 실패를 효과적으로 관리하기 위해 Dead Letter Topic(DLT)과 재시도 전략이 필수적입니다. 해당 포스팅에서는 DLT의 개념을 설명하고, Kafka를 사용하는 구체적인 예시를 통해 재시도 전략을 설계 및 구현하는 방법을 알아보겠습니다. Dead Letter Topic(DLT)이란? DLT는 메시지 처리에 실패했을 때 해당 메시지를 저장하는 Kafka 토픽입니다. 재시도 과정에서 여전히 실패하는 메시지를 위한 '마지막 피난처'로 사용됩니다. DLT의 주요 목적은 다음과 같습니다. 처리 실패 메시지의 안전한 저장 실패 원인 분석 및 디버깅 용이성 향상 재시도 전략의 필요성 메시지 처리 중 잠깐의 네트워크 지연이나..

Kafka 2023.12.11

하루 n억 건 모니터링 데이터를 적재하는 Telemetry 서비스 만들기

문제 인식 회사에서 운영하고 있는 Telemetry 서비스는 1분 마다 각 장비의 모니터링 메시지를 받아서 파싱 및 저장하는 역할을 수행하고 있습니다. 해당 서비스는 원래 각 메시지를 개별적으로 처리하고, 이를 데이터베이스에 건별로 삽입하는 방식을 사용했습니다. 이 접근법은 단순하고 직관적이지만, 데이터 양이 급격하게 증가하면서 서비스 구조 변경이 필요했습니다. 그래서 대용량 데이터를 처리하기 위해 다음과 같이 3가지 개선 전략을 적용했습니다. 개선 전략 1: Kafka Batch Listener 도입 처리 효율성을 높이기 위해 Kafka Batch Listener를 도입했습니다. 전통적인 Kafka Listener가 메시지를 개별적으로 처리하는 것과 달리, Batch Listener는 여러 메시지를 한..

Kafka Batch Listener를 활용하여 성능 개선하기

Kafka Consumer를 운영하는 서비스에서 메시지를 개별적으로 처리하면, 각 메시지를 가져오고 처리하는데 필요한 네트워크 오버헤드와 CPU 사용량이 늘어난다. 특히, 각 메시지에 대해 별도의 트랜잭션을 시작하고 커밋하는 것은 비용이 많이 든다. DB와의 네트워크 통신, 트랜잭션 로그의 쓰기, 디스크 I/O 등에 의한 오버헤드가 각 메시지마다 발생하므로 메시지 처리 성능이 저하될 수 있다. 뿐 만 아니라 각 메시지 처리에 대해 별도 DB Connection Pool이 고갈되어, 새로운 트랜잭션을 생성할 수 없게된다. 이러한 경우 배치 처리를 사용하면 여러 메시지를 하나의 트랜잭션으로 쉽게 묶어 처리할 수 있다. 그럼 Batch Listener를 구현하는 방법에 대해 알아보자. 1. Kafka List..

Kafka 2023.06.18

[우아한테크캠프 Pro] 8주차 미션 후기 (안정적인 서비스 만들기)

우아한테크캠프 Pro 8주차 안정적인 서비스 만들기 미션을 진행한 내용과 후기를 정리해보았습니다. 미션 저장소 https://github.com/Gyeom/infra-subway-performance GitHub - Gyeom/infra-subway-performance Contribute to Gyeom/infra-subway-performance development by creating an account on GitHub. github.com 학습 내용 HTTP 개선에 따른 차이를 이해하고 Reverse Proxy 성능 개선을 해봅니다. HTTP Cache 전략을 이해하여 적절한 정책을 설정해봅니다. 쿼리를 최적화하여 조회 성능을 개선해봅니다. 인덱스를 설정하여 조회 성능을 개선해봅니다. 단계별 ..

[우아한테크캠프 Pro] 7주차 미션 후기 (레거시 코드 리팩터링)

우아한테크캠프 Pro 7주차 레거시 코드 리팩터링을 진행한 내용과 후기를 정리해보았습니다. 미션 저장소 https://github.com/Gyeom/jwp-refactoring GitHub - Gyeom/jwp-refactoring Contribute to Gyeom/jwp-refactoring development by creating an account on GitHub. github.com 학습 내용 많은 기업들이 "서비스를 안정적으로 운영하면서 레거시 코드를 리팩터링할 수 있는 역량을 갖춘 개발자"를 요구한다. 레거시 프로젝트를 리팩터링하는 경험을 통해 서비스를 안정적으로 운영하면서 레거시 코드를 리팩터링할 수 있는 역량을 키운다. 프로젝트를 만드는 단계에서 끝나는 것이 아니라 프로젝트를 완료한 ..

[우아한테크캠프 Pro] 6주차 미션 후기 (서비스 진단하기)

우아한테크캠프 Pro 6주차 서비스 진단하기 미션을 진행한 내용과 후기를 정리해보았습니다. 미션 저장소 https://github.com/Gyeom/infra-subway-monitoring GitHub - Gyeom/infra-subway-monitoring Contribute to Gyeom/infra-subway-monitoring development by creating an account on GitHub. github.com 학습 내용 USE 방법론을 활용하여 서버를 진단할 수 있고 쓰레드 덤프를 확인해봅니다. webpageteat, pagespeed를 활용하여 웹 성능 예산을 고민해봅니다. 목표치를 정하고 부하테스트를 직접 수행해봅니다. 단계별 요구사항 및 PR 리뷰 🚀 1단계 - 웹 성능..

[우아한테크캠프 Pro] 5주차 미션 후기 (Subway - ATDD & 단위테스트)

우아한테크캠프 Pro 5주차 ATDD & 단위테스트 미션을 진행한 내용과 후기를 정리해보았습니다. 미션 저장소 https://github.com/Gyeom/atdd-subway-service GitHub - Gyeom/atdd-subway-service: 우아한테크캠프 pro ATDD 과정 저장소 우아한테크캠프 pro ATDD 과정 저장소. Contribute to Gyeom/atdd-subway-service development by creating an account on GitHub. github.com 학습 내용 ATDD를 기반으로 지하철 노선도 서비스를 단계별 구현한다. 단계별 요구사항 및 PR 리뷰 🚀 1단계 - 인수 테스트 기반 리팩터링 LineService의 비즈니스 로직을 도메인으로 옮..

[우아한테크캠프 Pro] 3주차 미션 후기 (Subway - ATDD)

우아한테크캠프 Pro 3주차 ATDD 미션을 진행한 내용과 후기를 정리해보았습니다. 미션 저장소 https://github.com/Gyeom/atdd-subway-admin GitHub - Gyeom/atdd-subway-admin: 우아한테크캠프 pro ATDD 과정 저장소 우아한테크캠프 pro ATDD 과정 저장소. Contribute to Gyeom/atdd-subway-admin development by creating an account on GitHub. github.com 학습 내용 미션 수행 방법 문서를 참고하여 실습 환경을 구축한다. 지하철 노선도를 관리할 수 있는 어드민 서비스를 단계별로 구현하세요. 인수 테스트 주도 개발 프로세스를 단계별로 경험하세요. 단계별 요구사항 및 PR 리..