MSA와 EDA 이해하기: 분산 아키텍처 기본 개념 정리
·
WIL
TL;DR최근 MSA와 EDA에 대해 공부하면서 정리한 내용입니다. MSA는 큰 애플리케이션을 작은 서비스들로 나누는 방식이고, EDA는 이벤트를 중심으로 시스템을 설계하는 패턴이라는 것을 배웠습니다. 두 개념이 함께 사용되면 더 유연한 시스템을 만들 수 있다고 합니다.MSA(Microservices Architecture)란?모놀리식에서 마이크로서비스로모놀리식 아키텍처┌─────────────────────────────────┐│ 단일 애플리케이션 │├─────────────────────────────────┤│ - User Management ││ - Order Processing ││ - Payment ..
Spring Batch로 대용량 데이터 처리하기: 학습 정리
·
Spring
목차TL;DR문제 상황: 대용량 데이터 처리의 필요성Spring Batch 핵심 개념Job, Step, Chunk 이해하기실제 배치 프로세스 설계실패 처리와 재시작 전략성능 최적화 방안실무 적용 시 고려사항마무리: 학습 후 느낀 점TL;DRSpring Batch를 학습하며 정리한 내용입니다. Spring Batch는 대용량 데이터를 안정적으로 처리하기 위한 프레임워크로, Job-Step-Chunk 구조를 통해 데이터를 읽고, 가공하고, 쓰는 과정을 체계적으로 관리합니다. 실패 시 재시작, 트랜잭션 관리, 병렬 처리 등의 기능을 제공하여 엔터프라이즈 환경에서 배치 처리를 효율적으로 구현할 수 있습니다.문제 상황: 대용량 데이터 처리의 필요성일반적인 처리 방식의 한계// 문제가 되는 접근List allOrd..
DDD 강의 회고: 도메인 주도 설계의 사실과 오해
·
WIL
이번에 처음으로 DDD(Domain-Driven Design) 오프라인 강의를 듣게 되었다. 평소 객체지향 설계에 관심이 많았지만, DDD는 늘 어렵고 추상적으로 느껴졌던 주제였다. '애그리게이트', '바운디드 컨텍스트' 같은 용어들은 들어본 적은 있지만 정확히 무엇을 의미하는지, 왜 필요한지 제대로 이해하지 못했었다. 이번 강의를 통해 DDD가 단순히 기술적인 패턴이 아니라, 복잡한 문제를 해결하기 위한 사고방식이자 철학이라는 것을 깨달았다. 강의 내용을 정리하면서 DDD의 핵심 개념들이 어떻게 연결되는지 이해할 수 있었고, 이를 기록으로 남기고자 한다.DDD의 본질: 소프트웨어는 도메인 문제를 해결하기 위해 존재한다강의는 에릭 에반스의 책 "도메인 주도 설계"의 핵심 메시지로 시작했다."소프트웨어의 ..
루프팩 L2 백엔드 코스 완주 후기: 10주간의 성장 여정
·
카테고리 없음
TL;DR4주차에 회사를 퇴사하는 어려운 상황에서도 끝까지 완주한 루프팩 L2 백엔드 코스. "무엇을 개발할 것인가"에서 "왜 이렇게 설계해야 하는가"로 사고의 전환을 이뤄낸 10주간의 값진 경험을 공유합니다.예상치 못한 시련, 그리고 완주에 대한 의지솔직히 처음 코스를 시작할 때는 이렇게 험난한 여정이 될 줄 몰랐습니다. 4주차, 그러니까 코스의 절반도 안 된 시점에서 집안 사정으로 인해 회사까지 퇴사하게 되었거든요.그 순간 정말 많은 고민이 들었습니다. '이 상황에서 코스를 계속 들을 수 있을까?' '취업 준비와 병행하면서 과제까지 소화할 수 있을까?'하지만 루프팩 코스만큼은 꼭 완주하고 싶었습니다. 이미 3주 동안 느낀 게 너무 많았거든요. 단순히 기능을 구현하는 것이 아니라, 왜 이런 설계를 해야..
10주간의 백엔드 부트캠프 회고: 설계부터 운영까지, 실전적 고민의 기록
·
WIL
TL;DRLoopers 백엔드 부트캠프 10주차를 마치며, TDD 루틴 구축부터 Kafka 이벤트 파이프라인, Redis 랭킹 시스템까지 겪었던 고민들을 정리했습니다. 아직 주니어로서 부족한 점이 많지만, "왜 이런 선택을 했는지"에 대한 나름의 근거를 갖게 된 것이 가장 큰 성장이라고 생각합니다.전체 여정 요약: 흐름이 연결되며 쌓인 경험들10주 동안의 여정을 돌아보면, 각 주차의 학습이 단순히 독립적인 기술 습득이 아니라 하나의 연결된 흐름이었음을 깨닫습니다. 1-3주차: 기초 다지기와 TDD 루틴 확립E2E → 통합 → 단위 테스트 순으로 점진적 리팩토링 진행"테스트를 작성하는 능력"보다 "설계하는 감각"이 더 중요함을 깨달음실무에서는 테스트 책임을 스스로 정해야 한다는 현실적 문제 직면4-5주차:..
Redis ZSET으로 실시간 랭킹 시스템 구축하기
·
Spring
TL;DRKafka 기반 이벤트 파이프라인 위에 Redis ZSET을 활용한 실시간 랭킹 시스템을 구축했습니다. 단순한 집계 테이블에서 벗어나 실시간 가중치 조절, 콜드 스타트 문제 해결, 그리고 배치 처리를 통한 성능 최적화까지 - 운영 환경에서 실제로 마주할 수 있는 문제들을 어떻게 해결했는지 공유합니다.문제 정의: 단순한 집계에서 실시간 랭킹으로지난 주차에서 Kafka 기반 이벤트 파이프라인을 구축하면서 product_metrics 테이블에 상품별 집계 데이터를 쌓고 있었습니다:-- 기존: 단순한 집계 테이블SELECT product_id, view_count, like_count, sales_countFROM product_metrics WHERE metric_date = CURRENT_DATEO..
Kafka와 아웃박스 패턴으로 이벤트 파이프라인 구축하기
·
Spring
TL;DRKafka 기반 이벤트 파이프라인을 구축하면서 겪었던 현실적인 고민들을 공유합니다. "At Least Once" 보장을 위한 아웃박스 패턴, 컨슈머에서의 멱등성 처리, 그리고 동시성 제어까지 - 완벽한 설계는 아니지만, 마주한 문제들을 어떻게 해결했는지 솔직하게 담았습니다.문제 정의: 왜 Kafka가 필요했을까?기존에 Spring ApplicationEvent를 활용한 이벤트 기반 아키텍처를 구축했지만, 새로운 요구사항이 생겼습니다:상품별 유저 이벤트 집계: 일별 좋아요 수, 조회 수, 주문 수 추적감사 로그: 모든 비즈니스 이벤트의 완전한 기록캐시 관리: 상품 상세에 대한 캐시관리기존 방식의 한계가 명확했습니다:// 기존: 애플리케이션 내부 이벤트만 처리 가능@EventListenerpubli..
ApplicationEvent로 비즈니스 경계 나누기: 고민과 선택
·
Spring
오늘은 Spring ApplicationEvent를 활용해 비즈니스 로직을 분리하면서 겪었던 고민과 선택 과정을 공유해보려고 합니다."무조건 이벤트로 분리하는 게 좋은 걸까?"라는 질문에서 시작해서, 트랜잭션 경계와 비즈니스 요구사항에 따른 판단을 어떻게 내렸는지 담아보았습니다.정답이 있는 것은 아니지만, 고민했던 과정들을 기록해보려고 합니다.1. 문제 정의 커머스 시스템을 개발하면서 자연스럽게 다음과 같은 고민에 직면했습니다."주문-결제가 성공하면 데이터 플랫폼에도 전송해야 하고, 좋아요를 누르면 집계도 업데이트해야 하는데... 이걸 어떻게 처리하지?"처음에는 모든 로직을 하나의 메서드에서 순차적으로 처리했습니다:// 처음 구현 - 모든 로직이 한 곳에public PaymentInfo processPa..