프로그래밍 46

Redis 자료구조 설명

1. String가장 기본적인 자료구조입니다.하나의 key에 하나의 문자열 값을 저장합니다.숫자, JSON, base64 등 다양한 형식의 데이터를 담을 수 있습니다.🟢 사용 예:사용자 이름, 토큰, 설정 값 저장카운터, TTL을 가진 데이터 등2. List양방향 연결 리스트 구조입니다.순서가 유지되며, 양 끝에서 push/pop 할 수 있습니다.🟢 특징:FIFO (큐) 또는 LIFO (스택) 구조로 사용할 수 있음🟢 사용 예:작업 큐채팅 메시지 목록로그 수집 (X개의 최근 메시지만 유지)3. Set중복을 허용하지 않는 무작위 순서의 집합입니다.삽입 순서를 기억하지 않습니다.🟢 특징:값의 존재 여부 확인이 빠름 (SISMEMBER)집합 연산 가능 (합집합, 교집합, 차집합)🟢 사용 예:태그 목록..

프로그래밍 2025.04.17

Redis 명령어 정리

1. String기본 명령어SET name "Jinwook"GET nameINCR count실행 결과OK"Jinwook"(integer) 1설명SET은 문자열 값을 저장합니다.GET은 저장된 값을 조회합니다.INCR은 정수 값을 1 증가시키며, 존재하지 않으면 0으로 간주합니다.2. List (연결 리스트)기본 명령어LPUSH fruits "apple"RPUSH fruits "banana"LPUSH fruits "orange"LRANGE fruits 0 -1LPOP fruits실행 결과(integer) 1(integer) 2(integer) 31) "orange"2) "apple"3) "banana""orange"설명LPUSH/RPUSH는 왼쪽/오른쪽에 요소를 추가합니다.LRANGE key 0 -1은 리..

프로그래밍 2025.04.17

사가(Saga) 패턴이란?

사가(Saga) 패턴은 분산 시스템에서 데이터 일관성을 유지하기 위해 사용되는 트랜잭션 관리 패턴입니다. 일반적인 트랜잭션(ACID 트랜잭션)과 달리, 사가는 여러 개의 서비스 또는 데이터베이스에 걸쳐 있는 긴 작업을 **작은 단위의 트랜잭션(로컬 트랜잭션)**으로 나누어 실행합니다.사가 패턴은 마이크로서비스 아키텍처에서 많이 사용되며, 분산 트랜잭션을 대신하는 대안으로 활용됩니다.사가 패턴의 동작 방식사가 패턴은 여러 개의 서비스가 참여하는 트랜잭션을 작은 로컬 트랜잭션의 연속적인 흐름으로 처리하는 방식입니다.각 로컬 트랜잭션이 성공하면 다음 단계로 진행, 실패하면 보상(rollback) 작업 수행이 이루어집니다.사가 패턴에는 크게 두 가지 방식이 있습니다.1. 조정 중심(Choreography-bas..

프로그래밍 2025.03.15

빈혈 모델은 DDD인가요?

"빈혈 모델(Anemic Domain Model)"은 DDD(Domain-Driven Design)의 개념과 대조되는 설계 방식입니다. 즉, 빈혈 모델은 DDD의 원칙을 따르지 않는 모델로 볼 수 있습니다.빈혈 모델(Anemic Domain Model)이란?빈혈 모델은 객체가 비즈니스 로직 없이 데이터만을 보유하고, 모든 로직이 서비스 계층에 집중되는 구조를 의미합니다. 주로 다음과 같은 특징이 있습니다:엔티티(Entity): Getter/Setter만 존재하고, 비즈니스 로직이 없음.서비스(Service): 모든 도메인 로직이 서비스 계층에서 수행됨.DTO(Data Transfer Object)와 유사: 객체는 데이터를 전달하는 역할만 함.이런 구조는 객체지향적이라기보다는 절차지향적인 설계에 가까우며,..

프로그래밍 2025.03.15

아웃박스 패턴 (Outbox Pattern)이란?

**아웃박스 패턴(Outbox Pattern)**은 데이터베이스 트랜잭션과 메시지 브로커(예: Kafka, RabbitMQ)의 일관성을 유지하기 위해 사용되는 패턴입니다.특히 이벤트 기반 아키텍처에서 메시지 유실을 방지하고, 데이터 정합성을 보장하는 데 활용됩니다.1. 문제 상황✅ 트랜잭션과 이벤트 발행의 불일치서비스에서 데이터베이스에 변경 사항을 저장하고 동시에 메시지 브로커에 이벤트를 발행해야 할 때, 이 두 작업이 원자적으로(Atomic) 수행되지 않으면 데이터 정합성이 깨질 수 있습니다.예를 들어:사용자가 주문을 생성 (orders 테이블에 INSERT)이벤트 브로커(Kafka)에 "주문 생성됨" 이벤트 발행만약 2번 단계에서 장애가 발생하면?주문 데이터는 DB에 저장되었지만, 이벤트 브로커에는 ..

프로그래밍 2025.03.14

Anemic Model (빈혈 모델)란?

**Anemic Domain Model(빈혈 도메인 모델)**은 객체지향 프로그래밍(OOP)의 핵심 개념을 충분히 활용하지 못한 도메인 모델을 의미합니다. 이는 도메인 객체가 데이터(필드)만 포함하고, 비즈니스 로직은 별도의 서비스 계층에서 처리하는 구조를 가질 때 발생합니다.1. 특징Anemic Model은 다음과 같은 특징을 가집니다.도메인 객체(엔티티, 밸류 객체)에는 데이터만 존재하고, 의미 있는 비즈니스 로직이 없음비즈니스 로직이 서비스 계층(Application Service)에 집중됨Getter/Setter 메서드만 제공하는 단순한 데이터 구조 (DTO와 유사)객체지향보다는 절차지향적인 방식으로 개발됨예제 코드 (Anemic Model)public class Order { private..

프로그래밍 2025.03.14

Keep-Alive란?

Keep-Alive는 클라이언트와 서버 간의 연결을 유지하여 여러 개의 요청을 한 번의 연결에서 처리할 수 있도록 하는 기술입니다. 주로 HTTP, TCP, WebSocket 등 네트워크 프로토콜에서 사용됩니다.1. HTTP Keep-Alive1.1 개념HTTP/1.0에서는 기본적으로 요청마다 새로운 TCP 연결을 맺고 응답을 받으면 연결을 종료했습니다. 이 방식은 성능이 좋지 않습니다.HTTP/1.1에서는 Keep-Alive(Connection: keep-alive) 기능이 기본적으로 활성화되어 있어, 하나의 TCP 연결을 유지한 채 여러 개의 요청을 처리할 수 있습니다.1.2 동작 방식클라이언트가 서버에 HTTP 요청을 보낼 때, Connection: keep-alive 헤더를 추가함.서버가 응답을 ..

프로그래밍 2025.03.02

자바와 닷넷 비교 - 접근제어자

C#과 Java의 접근 제어자(Access Modifiers)는 비슷한 개념을 가지지만, 일부 차이점이 있습니다. 아래에서 비교해 보겠습니다.🔹 C#과 Java의 접근 제어자 비교 접근 제어자  C# Java  설명 public✅✅어디서든 접근 가능private✅✅같은 클래스 내에서만 접근 가능protected✅✅같은 클래스 + 하위 클래스에서 접근 가능 (Java는 같은 패키지에서도 가능)internal✅❌같은 어셈블리(프로젝트) 내에서만 접근 가능package-private (default)❌✅같은 패키지 내에서만 접근 가능 (default 접근 제어자)protected internal✅❌같은 어셈블리 또는 하위 클래스에서 접근 가능private protected✅❌같은 어셈블리 내의 하위 클..

프로그래밍 2025.03.02

자바와 닷넷 비교 - 생성자

C#과 Java에서 생성자(Constructor)는 객체를 초기화하는 역할을 합니다. 기본적인 개념은 비슷하지만, 문법과 일부 기능에서 차이가 있습니다. 주요 차이점을 비교해 보겠습니다.1. 기본 생성자 (Default Constructor)C#과 Java 모두 기본 생성자를 명시적으로 선언하지 않으면, 매개변수가 없는 기본 생성자가 자동으로 제공됩니다.C#public class Person{ public string Name { get; set; } // 기본 생성자 public Person() { Name = "Unknown"; }}Javapublic class Person { private String name; // 기본 생성자 public ..

프로그래밍 2025.03.02