전체 글 14

실무에서 자주 사용하는 Redis 명령어 정리

Redis는 캐시용 인메모리 데이터베이스로 알려져 있지만,실무에서는 캐시를 넘어 세션 관리, 분산 락, 큐, 랭킹 시스템 등 다양한 용도로 활용된다.이번 글에서는 실제 프로젝트에서 자주 사용되는 주요 Redis 명령어와 그 활용 사례를 정리했다.1. SET / GET — 기본적인 Key-Value 저장Redis의 가장 기본적인 명령어는 SET과 GET이다. SET user:1 "Seongjun" GET user:1 Spring Boot에서는 StringRedisTemplate을 사용해 다음과 같이 구현할 수 있다. redisTemplate.opsForValue().set("user:1", "Seongjun"); String name = redisTemplate.opsForValue().get("user:..

database 2025.11.12

Kafka의 데이터 정합성과 Exactly-Once 보장: 중복 없이, 단 한 번만 처리하기

Kafka는 고성능 스트리밍 플랫폼이지만, 분산 환경에서 "메시지가 한 번만, 정확히 처리되는가?"는 매우 중요한 문제다.특히 중복 없이(exactly-once) 데이터를 전달하고 트랜잭션 단위로 정합성을 보장하는 것은 실무에서 반드시 고려해야 할 주제다.이번 글에서는 Kafka의 데이터 전달 보장, 트랜잭션, 그리고 정합성 보장 전략을 정리한다.1. Kafka의 데이터 전달 보장 수준Kafka는 기본적으로 3가지 수준의 메시지 전달 보장을 제공한다.보장 수준설명특징At most once메시지가 한 번 이하로 전달됨빠르지만, 유실 가능성 있음At least once최소 한 번은 전달됨중복 가능성 있음Exactly once정확히 한 번만 전달됨Kafka가 제공하는 가장 강력한 보장기본적으로 Kafka는 a..

분산시스템 2025.11.07

Outbox 패턴과 CDC(Change Data Capture)를 이용한 안정적인 이벤트 발행 구조

마이크로서비스 환경에서 가장 큰 난제 중 하나는 데이터 일관성이다.특히 서비스 간 통신을 위해 DB 트랜잭션과 메시지 브로커 발행을 함께 처리해야 할 때, 흔히 “이중 쓰기(Double Write)” 문제가 발생한다.예를 들어 주문이 생성되면 데이터베이스에 주문 데이터가 저장되고 동시에 Kafka로 이벤트를 발행해야 한다.하지만 이 두 과정은 각각 다른 시스템에 쓰기 작업을 하기 때문에, 하나는 성공하고 하나는 실패하는 상황이 발생할 수 있다.이런 문제를 해결하기 위한 대표적인 접근이 바로 Transactional Outbox + CDC(Change Data Capture) 패턴이다.1. 기본 아이디어Transactional Outbox는 트랜잭션 안에서 비즈니스 데이터와 함께 이벤트를 기록하는 패턴이다..

분산시스템 2025.11.07

트랜잭션과 격리 수준 비교 — MySQL vs PostgreSQL 완벽 정리

1️⃣ 트랜잭션(Transaction)이란?트랜잭션은 데이터베이스의 논리적 작업 단위로, 모든 작업이 전부 성공하거나 전부 실패해야 한다는 원자성을 보장합니다.ACID 원칙으로 정리할 수 있습니다:속성설명A (Atomicity)모두 수행되거나 모두 취소됨 (원자성)C (Consistency)트랜잭션 전후로 데이터의 일관성 유지I (Isolation)동시에 수행되어도 서로 간섭하지 않음D (Durability)커밋된 결과는 시스템 장애 후에도 보존2️⃣ 트랜잭션 격리 수준(Isolation Level)동시에 여러 트랜잭션이 실행될 때, 서로 간섭을 최소화하기 위한 규칙입니다.대표적인 4단계는 다음과 같습니다 격리 수준허용되는 현상설명READ UNCOMMITTEDDirty Read, Non-Repeatabl..

database 2025.11.06

Palo Alto Networks(PANW) 클라우드·AI 시대의 보안 패러다임을 이끄는 선두주자

1. 기업 개요Palo Alto Networks(팔로알토 네트웍스)는 미국 캘리포니아 산타클라라에 본사를 둔 글로벌 사이버보안 기업이다.2005년에 설립된 이후, 네트워크·클라우드·엔드포인트를 아우르는 통합 보안 솔루션으로 빠르게 성장해왔다.전통적인 방화벽을 넘어 클라우드 기반 SASE(Security Access Service Edge), AI 기반 위협 탐지 및 자동화 대응 등으로 사업 영역을 확장하며 보안 플랫폼화를 추진 중이다.대표적인 제품군은 다음과 같다:Strata: 차세대 네트워크 보안 플랫폼Prisma Cloud / Prisma SASE: 클라우드 및 원격근무 환경 보호Cortex XSIAM: 인공지능 기반 보안 운영 자동화 플랫폼2. 사업 구조와 전략Palo Alto는 세 가지 축을 중심..

tech company review 2025.11.01

JVM Garbage Collection 정리: 구조부터 G1GC까지

1. 왜 GC를 이해해야 하는가Java는 “메모리 자동 관리”를 제공하지만, 그게 “성능까지 자동”을 의미하진 않습니다.대부분의 경우에는 기본 설정으로도 충분하지만, 다음과 같은 상황에서는 GC 이해가 필수입니다.트래픽이 일정하지 않고 순간적으로 몰리는 서비스실시간성이 중요한 API 서버 (수백 ms 이상 멈추면 안 되는 경우)대용량 Batch / ETL / 메시지 처리 애플리케이션장시간 실행되는 Spring Boot 애플리케이션컨테이너 환경에서 Heap을 작게 잡을 수밖에 없는 경우이럴 때는 “GC가 언제, 왜, 얼마나 오래 멈추는지”를 이해해야 합니다. GC를 모르면 장애가 나도 원인을 ‘DB’, ‘네트워크’, ‘스레드풀’로만 의심하다가 시간을 날립니다.2. JVM 메모리 구조 개요JVM 메모리는 대..

java 2025.11.01

카프카의 특징

1. 카프카 디자인 특징링크드인에서 ActiveMQ를 사용하다가 사용자 증가로 한계점을 느끼고 카프카를 설계하게 됨분산된 데이터 파이프라인을 통합, 처리량에 중점을 둠높은 처리량과 빠른 메세지 전송, 운영 효율화 등을 위해 분산 시스템, 페이지 캐시, 배치 전송 처리 등의 기능을 구현1) 분산 시스템분산 시스템은 다음과 같은 장점이 있음단일 시스템보다 더 높은 성능분산 시스템 중 하나의 서버 또는 노드 등이 장애가 발생하면 다른 서버 또는 노드가 대신 처리함시스템 확장이 용이함2015년 기준 링크드인은 가장 사용량이 높은 클러스터의 경우 60대의 브로커로 분산 처리를 하고 있었음2) 페이지 캐시OS는 물리적 메모리에 애플리케이션이 사용하는 부분을 할당하고 남은 잔여 메모리 일부를 페이지 캐시로 유지해 O..

분산시스템 2025.05.06

데이터 정합성을 위한 동시성 제어 기법

안녕하세요, 오늘은 분산 시스템과 데이터베이스에서 데이터 정합성을 보장하기 위한 여러 가지 동시성 제어 기법에 대해 이야기해보려고 합니다. 현대의 서비스들은 대부분 여러 사용자가 동시에 접근하고, 때로는 여러 서버에 분산되어 있는 데이터에 접근합니다. 이런 환경에서 데이터 정합성을 유지하는 것은 상당히 까다로운 문제인데요, 오늘은 그 해결책으로 사용되는 분산락, 뮤텍스, 트랜잭션 고립성, 그리고 낙관적/비관적 락에 대해 알아보겠습니다.데이터 정합성이란?먼저 데이터 정합성이 무엇인지 짚고 넘어가겠습니다. 데이터 정합성(Data Consistency)은 데이터가 모든 시점에서 정의된 규칙을 준수하고 일관된 상태를 유지하는 것을 의미합니다. 예를 들어, 은행 계좌의 잔액이 음수가 되지 않아야 한다거나, 재고 ..

database 2025.04.25

Node.js: 싱글 스레드와 멀티코어 환경의 이벤트 루프 이해하기

요즘 대부분의 서버가 멀티코어 환경인데, Node.js는 이를 어떻게 활용하는 걸까요? Node.js와 싱글 스레드의 미스터리"Node.js는 싱글 스레드다"라는 말은 반은 맞고 반은 틀립니다. 정확히 말하면, JavaScript 코드를 실행하는 메인 스레드는 하나지만, Node.js 런타임 자체는 내부적으로 여러 스레드를 사용합니다.예전에 PHP로 웹 서버를 개발할 때를 생각해보면, 각 요청마다 새로운 프로세스가 생성되어 처리했습니다. 10개의 동시 요청이 있으면 10개의 프로세스가 필요했죠. 반면 Node.js는 하나의 프로세스로 수천 개의 동시 연결을 처리할 수 있습니다. 어떻게 이게 가능할까요?이벤트 루프: 마법은 없다Node.js의 핵심에는 '이벤트 루프'라는 메커니즘이 있습니다. 이름 그대로 ..

javascript 2025.04.20

트랜잭션의 이해: 고립성과 Spring의 @Transactional 어노테이션

개발자로 일하다 보면 트랜잭션 관련 이슈가 참 많이 발생합니다. 특히 동시성 처리가 필요한 서비스에서는 더욱 그렇죠. 오늘은 제가 최근 프로젝트에서 맞닥뜨렸던 트랜잭션 관련 문제와 해결 과정을 공유하려고 합니다.트랜잭션 고립성(Isolation)이란?트랜잭션의 ACID 속성 중 하나인 고립성은 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 보장하는 성질입니다. 간단히 말해, 여러 사용자가 동시에 데이터를 조작해도 각자의 작업이 독립적으로 수행되는 것처럼 보이게 하는 거죠.근데 이게 생각보다 까다롭습니다. 완벽한 고립성을 제공하면 동시성이 떨어지고, 동시성을 높이면 데이터 일관성에 문제가 생길 수 있어요. 그래서 데이터베이스는 여러 고립성 수준을 제공합니다.고립성 수준(Isolation Level..

java 2025.04.19