분류 전체보기 610

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 2. 아키텍처 개요

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 네 개의 영역표현 영역, 애플리케이션 영역, 도메인 영역, 인프라스트럭처 영역 2. 계층 구조 아키텍처단방향 의존성상위가 하위 의존 (하위는 상위 의존 안함)➡️ 도메인, 비즈니스 영역이 인프라스트럭처에 의존함 문제점❌ 테스트 어려움❌ 기능 확장 어려움 3. DIP (Dependency Inversion Principle)저수준 모듈이 고수준 모듈에 의존하도록 바꿈컴파일 시점에 해당 고수준 모듈 타입(인터페이스)에 의존함 DIP와 아키텍처애플리케이션 영역과 도메인 영역에 영향을 최소화하면서 구현체를 변경하거나 추가할 수 있음항목도메인 서비스애플리케이션 서비스책임여러 도메인에 걸친 순수한 도메..

Code 2025.06.18

[도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지] 1. 도메인 모델 시작하기

최범균 님의 "도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지" 책을 정리한 포스팅 입니다. 1. 도메인이란?소프트웨어로 해결하고자 하는 문제의 영역✅ 여러 하위 도메인으로 구성될 수 있음✅ 외부 서비스로 대체될 수 있음 (ex. 배송 - 택배사 시스템) 예) 온라인 서점더보기주문: 정산, 배송, 결제, 회원, 혜택(->할인,쿠폰), 카탈로그(-> 리뷰)조회 2. 도메인 전문가와 개발자 간 지식 공유도메인 별 전문가들은 각 도메인 시스템에게 원하는 요구사항이 있음✅ 요구사항을 올바르게 이해하는것이 첫번째 단계✅ 개발자는 이런 요구사항을 분석하고 설계하여 개발함➡️ 직접 전문가와 개발자가 대화하는것이 가장 효과적 예시) 온라인 쇼핑몰더보기주문상품 선택배송지 입력결제 (결제 수단 선택)opt..

Code 2025.06.16

[Real MySQL] 4-2. 아키텍쳐: InnoDB 스토리지 엔진 아키텍쳐 (2)

백은빈, 이성욱 님의 "Real MySQL" 책을 정리한 포스팅 입니다. 6. InnoDB Buffer Pool디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간 버퍼링쓰기 작업을 메모리에 먼저 저장 후, 일괄 처리로 디스크에 기록 시스템 변수변수명설명innodb_buffer_pool_size버퍼 풀 전체 사이즈를 설정함. (동적으로 조정 가능)innodb_buffer_pool_instances버퍼 풀을 여러 인스턴스로 나누어 병렬 처리- 기본 8개 (버퍼 크기가 1GB 이하면 1개만 사용) 구성 요소페이지InnoDB가 디스크에서 데이터를 읽거나 메모리에 저장할 때 사용하는 기본 단위(블록)하나의 페이지 안에는 여러 개의 레코드(행) 또는 인덱스 정보가 들어갈 수 있음기본값은 16KB..

Database/Mysql 2025.06.08

[Redis] 3-4. Introduction to Redis: Pub/Sub

1. Pub/Sub메시지를 채널을 통해 발행자와 구독자가 느슨하게 연결하는 구조발행자는 단순히 메시지를 채널에 발행구독자는 관심 있는 채널을 구독하여 해당 메시지를 수신서로 존재를 몰라도 메시지 통신이 가능하여 확장성과 유연성이 높음 2. 메시지형식message: [message, 채널명, 메시지 내용]pmessage: [pmessage, 패턴, 채널명, 메시지 내용] 특징메시지는 최대 한번만 전송됨일반적인 key-value 공간과는 무관함 (db 상관 없음)수신 실패 시 재전송 없음 (내구성이 필요한 경우 Redis Streams를 고려할 것) 3. 명령어더보기SUBSCRIBE ch1 ch2PSUBSCRIBE patternUNSUBSCRIBE chPUNSUBSCRIBE patternPUBLISH ch ..

Database/Redis 2025.06.04

[Prometheus] 2. Concepts

1. Data modelPrometheus는 모든 데이터를 time series 형태로 저장함메트릭 이름 + 라벨로 고유한 시계열 데이터를 만들어냄항목설명예시Metric Name측정 대상의 기능/특징을 설명하는 이름http_requests_total (총 HTTP 요청 수)Label같은 메트릭의 상태를 구분하기 위한 key-valuemethod="POST", handler="/api/tracks"Notation메트릭 이름과 라벨을 함께 사용하는 표기 형식http_requests_total{method="POST", handler="/api/tracks"}Sample하나의 값(value) + 시간(timestamp)0.56 at 2024-05-31T12:00:00Z 2. Metric TypePromethe..

DevOps 2025.05.31

[Prometheus] 1. Introduction

1. OverviewPrometheus란?시스템 모니터링 및 알림 도구: 애플리케이션의 time series 메트릭 데이터 수집 및 저장오픈 소스 (CNCF 공식 프로젝트) 기능기능설명예 / 특징다차원 데이터 모델Label로 시계열 데이터 구분metrics + key-valuePromQL시계열 데이터 전용 쿼리 언어강력하고 유연함자율 동작단일 서버만으로 동작분산 스토리지 불필요Pull 기반 수집스크래핑HTTP로 타겟에 접근해 메트릭을 수집Push 지원짧은 작업의 메트릭도 수집 가능Push Gateway 활용서비스 디스커버리 / 정적 설정자동화 or 수동 설정 지원ex. Consul시각화 도구 연동대시보드 생성 및 시각화 지원Grafana 등과 연동 Metrics숫자 기반 지표숫자 데이터를 시간별로 기록해..

DevOps 2025.05.31

[Spring Data Redis] 1. Redis

1. RedisTemplateSpring에서 Redis와 상호작용할 수 있게 해주는 중심 클래스.항목설명동작 방식자동으로 직렬화 및 연결 관리 처리 (고수준 API)구성RedisOperations 인터페이스 구현스레드 안전성설정 완료 후 스레드 안전함뷰(Views)opsForValue(), opsForList()→ 특정 자료구조 전용 API처럼 사용 가능 예제) ListOperations더보기@Autowiredprivate ListOperations listOps;public void addLink(String userId, URL url) { listOps.leftPush(userId, url.toExternalForm());}특정 자료형용 opsForXxx() 뷰를 DI로 주입 가능vs Stri..

Database/Redis 2025.05.14

[Kafka] 9. Kafka Streams

3. Developer Guide항목명간단 설명Writing a Streams Application스트림 처리 로직을 작성하고 실행하는 기본 구조 제공 (토폴로지 정의)Configuring a Streams Application설정 지정 (브로커 주소, 앱 ID, 직렬화 방식 등)Streams DSL고수준 연산을 위한 간편 API (map, filter 등)Processor API사용자 정의 처리 로직을 위한 저수준 APINaming OperatorsDSL 연산자에 이름 붙이기 (디버깅/모니터링 용이)Data Types & Serialization메시지 직렬화/역직렬화 방식 정의TestingTopologyTestDriver로 로컬 테스트 가능Interactive Queries상태 저장소 데이터를 외부에서..

DevOps/Kafka 2025.05.12

[Spring for Apache kafka] Apache Kafka Streams Support

1. Basics주요 구성 요소구성 요소설명예시StreamsBuilder스트림 처리 로직을 정의하는 객체 생성KStream, KTable 등KafkaStreams스트림들을 실제로 실행하는 객체- kafka 클러스터와 연결- 스트림 처리 시작 (토폴로지 실행)- 스트림 처리 종료- KStream연속된 이벤트 스트림 - insert (append-only 로그 형식)카드 결제 기록, 서버 로그 등- KTable상태 변경 기록- update집계 테이블 등 동작 흐름StreamsBuilder: Stream 처리 로직 정의StreamsConfig: 설정 (Kafka 클러스터 정보, 기본 직렬화/역직렬화 설정, 보안 설정 등)KafkaStreams: 스트림 처리 시작KafkaStreams: 스트림 처리 종료 2. ..

[Spring for Apache Kafka] Exactly Once Semantics

1. Exactly Once Semantics읽기 → 처리 → 쓰기 과정이 정확히 한 번만 실행되는 것을 보장 2. 처리 흐름컨슈머KafkaAwareTransactionManager를 리스너 컨테이너에 설정하면, 리스너 호출 전에 트랜잭션을 시작합니다.리스너 내부에서 수행하는 KafkaTemplate 작업들은 트랜잭션에 참여합니다.리스너가 정상적으로 처리하면,producer.sendOffsetsToTransaction()를 호출해서 컨슈머 오프셋을 트랜잭션에 포함시킵니다.이후 트랜잭션을 커밋합니다.리스너에서 예외가 발생하면,트랜잭션을 롤백하고,컨슈머는 오프셋을 다시 설정해서, 실패한 레코드를 다음 poll() 때 다시 읽어 재처리합니다 3. 셋팅spring: kafka: producer: ..