본문으로 바로가기
📚

백엔드 심화 학습

백엔드 개발자가 알아야 할 핵심 개념을 운영 시나리오와 학습 경로 중심으로 깊이 있게 정리합니다

지속 업데이트 스프링 · JPA · DB 운영 · 모니터링
모듈 13개

기초부터 실전 Q&A까지 순서형 로드맵

학습 노트 358개

모듈 소개를 제외한 실제 노트만 집계

주제 86개

Spring, Database, Kafka, DevOps 등으로 정리

최근 업데이트 2026.08.21

백엔드 커리큘럼 심화: 식별자 정규화와 비교 정책, Unicode 입력이 권 …

🚀 백엔드 커리큘럼

STEP 7

7단계: 복습(Q&A)

학습하며 남긴 Q&A를 한 번에 모아 복습하는 단계

Backend Roadmap 12/16
STEP 8

8단계: 보안 (Security Specialist)

기능 구현을 넘어, 안전한 서비스를 만들기 위한 웹 보안, 인증·인가, 권한 운영, 비밀 관리, 감사 로그 기준을 다룹니다.

Backend Roadmap 12/28
STEP 9

9단계: 컴퓨터 공학 심화 (Deep CS)

분산 시스템의 정합성 모델, DB 스토리지 엔진의 원리 등 시니어 레벨로 가기 위한 이론적 깊이를 다룹니다.

Backend Roadmap 12/28
STEP 11

11단계: 아키텍처 마스터리 (Architecture Mastery)

대규모 분산 시스템에서 발생하는 데이터 정합성 문제와 무한 확장을 위한 샤딩, 그리고 복잡한 도메인을 다루는 DDD까지 아키텍트 레벨의 난제를 다룹니다.

Backend Roadmap 12/28

🗺️ 학습 가이드

백엔드 개발의 핵심 개념을 심도 있게 다룹니다. JVM 내부 구조, GC 알고리즘, Spring AOP/Transaction/Security, JPA N+1 문제, Database 인덱싱, Redis 캐싱 전략처럼 기반 지식이 되는 주제부터, 배포 안정성·관측성·트래픽 전환·장애 대응처럼 운영에서 바로 쓰이는 주제까지 함께 정리합니다.

이 페이지는 단순 목록이 아니라 지금 어떤 문제를 풀고 있는지에 따라 바로 들어갈 수 있는 학습 허브로 쓰는 것을 목표로 합니다. 개념을 처음 잡을 때는 기초 설명을 먼저 보고, 이미 운영 이슈를 겪고 있다면 아래 추천 경로처럼 관련 글을 묶어서 읽어보세요.

상황별 빠른 선택

처음부터 모든 글을 순서대로 읽기보다, 지금 겪는 문제를 먼저 고르는 편이 훨씬 효율적입니다. 아래 표는 각 경로를 “어떤 운영 질문을 해결하는가” 기준으로 다시 묶은 것입니다.

지금 필요한 판단먼저 볼 경로바로 확인할 산출물
고객사 단위 정지, 삭제, export, 보존 정책을 정리해야 한다멀티테넌트 운영 경로tenant 상태 전이표, offboarding manifest, purge 검증 체크리스트
검색 조건이 커지고 전체 다운로드가 timeout이나 비용 문제를 만든다복잡한 조회와 Export 운영 경로GET/QUERY/export 분기 기준, export artifact metadata, signed URL TTL
업로드 파일, 비공개 첨부, presigned URL 접근을 설명해야 한다파일 접근 제어 운영 경로파일 metadata schema, quarantine 상태 전이, 다운로드 감사 로그
권한 정책 변경이 실제 고객 접근 결과를 바꿀 수 있다인가 정책 운영 경로shadow decision log, rollout gate, rollback flag
관리자·지원 도구, export, 응답 계약처럼 되돌리기 어려운 변경을 리뷰해야 한다고위험 접근과 API 계약 운영 경로risk matrix, contract diff, audit evidence, rollback gate
개인정보, 토큰, 고위험 식별자가 DB·로그·백업에 퍼질 수 있다민감 데이터 암호화 운영 경로field inventory, key_version, blind index, rotation backlog
이벤트, CDC, read model, 검색 인덱스가 누락·중복·지연을 만든다데이터 파이프라인 운영 경로event id, lag SLO, replay/backfill 기준
알림, webhook, 외부 부작용이 중복되거나 유실된다사용자 접점·외부 통합 운영 경로notification id, delivery evidence, inbound inbox schema
결제 승인·매입·환불 상태가 꼬이거나 정산 차이가 난다결제 상태 머신 운영 경로payment attempt, ledger, reconciliation, manual correction gate
새 기능을 안전하게 노출하고 문제가 나면 되돌려야 한다안전한 릴리스와 운영 검증 경로feature flag owner, canary 지표, rollback window
p99 지연, DB pool wait, retry storm, 과금 비용을 줄여야 한다성능·비용 보호 학습 경로API cost unit, admission control 기준, 429/503 분리 규칙
코드 구조가 도메인 규칙을 보호하지 못하고 자주 흔들린다DDD와 헥사고날 아키텍처 경로aggregate 경계, port/adapter 목록, 트랜잭션 경계
장애가 끝났는지 숫자와 역할로 닫기 어렵다장애 대응 학습 경로severity 기준, IC/Comms 역할, reconciliation 종료 조건

실무 적용은 “글 1개 읽기"보다 “작은 산출물 1개 남기기"가 더 중요합니다. 예를 들어 rate limit 글을 읽었다면 endpoint별 QPS만 적는 데서 멈추지 말고, request class, tenant budget, 429/503 분리 기준까지 같이 남겨야 다음 장애 때 바로 쓸 수 있습니다. 반대로 구조 설계 글을 읽었다면 패턴 이름을 메모하는 대신 aggregate가 지켜야 할 invariant와 외부 어댑터가 실패했을 때의 보상 경로를 적는 편이 효과가 큽니다.

이미 운영 중인 서비스라면 다음 순서로 접근해 보세요.

  1. 최근 2주 동안 실제로 발생한 장애, 지연, 수동 복구, CS 문의를 하나 고릅니다.
  2. 위 표에서 가장 가까운 경로를 선택하고, 해당 경로의 첫 글보다 “읽으면서 남길 운영 산출물"을 먼저 봅니다.
  3. 글을 읽는 동안 현재 시스템에 없는 필드, 지표, 상태, 런북 항목을 체크합니다.
  4. 한 번에 전부 고치려 하지 말고 대시보드 필드 1개, 정책 표 1개, 재처리 기준 1개처럼 작은 변경으로 끝냅니다.
  5. 다음 장애 리뷰나 설계 리뷰에서 그 산출물이 실제 의사결정에 쓰였는지 확인합니다.

멀티테넌트 운영 경로: 생성보다 어려운 정지와 종료 설계

멀티테넌트 서비스는 처음에는 tenant_id를 붙이고 권한을 나누는 문제처럼 보입니다. 하지만 운영이 길어질수록 더 어려운 질문은 “이 고객사가 지금 어떤 상태인가”, “누가 어떤 이유로 정지했는가”, “데이터를 언제까지 복구할 수 있는가”, “삭제가 정말 끝났는가"로 바뀝니다. 특히 B2B SaaS에서는 계약 종료, 보안 사고 정지, 데이터 export, 법무 hold, 외부 SaaS 연동 정리가 모두 테넌트 생명주기에 묶입니다.

아래 순서로 읽으면 격리 모델에서 시작해 tenant context 전달, 상태 전이, 삭제·보존, 감사 증거까지 한 흐름으로 이어집니다.

  1. 멀티테넌시 전략
  2. Tenant Context Propagation 가드레일
  3. Operational State Machine 설계
  4. Tenant Lifecycle와 Offboarding 운영 설계
  5. 데이터 보존과 삭제 아키텍처
  6. 변조 방지 감사 로그 설계

이런 상황이면 이 경로부터 보세요

  • 고객사 단위로 정지, 복구, 계약 종료, 데이터 export 요청을 처리해야 하는 경우
  • 결제 연체, 보안 사고, abuse, 계약 종료 예정이 모두 같은 disabled 값으로 섞여 있는 경우
  • 테넌트 삭제 후 RDB는 정리했지만 검색 인덱스, 오브젝트 스토리지, 캐시, 외부 SaaS 잔여 데이터를 설명하기 어려운 경우
  • 고객이 삭제 증명이나 export 이력을 요구했을 때 manifest와 감사 로그로 답하기 어려운 경우
  • tenant context가 API 요청에는 있지만 비동기 작업, 로그, 검색 색인, webhook 처리에서 빠지는 경우

읽으면서 남길 운영 산출물

  • 테넌트 상태 전이표: provisioning, active, suspended, delete_requested, retained, purging, purged
  • 정지 reason code별 읽기, 쓰기, 관리자 접근, export 허용 정책
  • 오프보딩 manifest: 요청자, 승인자, 사유, 법무 hold, export 만료, 보존 종료, purge 대상 리소스 수
  • purge dry-run count와 실제 삭제 count 차이 허용 기준
  • RDB, 검색 인덱스, 오브젝트 스토리지, 캐시, 외부 SaaS 잔여 검증 체크리스트

이 경로의 목표는 멀티테넌시를 데이터 격리 문제로만 보지 않는 것입니다. 생성은 빠르고, 정지는 일관적이며, 종료는 증명 가능해야 운영팀과 고객 모두가 예측 가능한 시스템이 됩니다.

복잡한 조회와 Export 운영 경로: QUERY에서 산출물 관리까지

검색 조건이 커지고 결과가 많아지면 “조회 API 하나"가 금방 운영 문제가 됩니다. URL에 담기 어려운 필터는 POST 검색 API로 밀려나고, 전체 다운로드는 긴 DB 쿼리와 대용량 파일 생성으로 번집니다. 이때 핵심은 GET, QUERY, export job을 유행처럼 고르는 것이 아니라 응답 시간, 결과 크기, 공유 필요성, 감사 필요성에 따라 경계를 나누는 것입니다.

아래 순서로 읽으면 복잡한 읽기 요청부터 대용량 파일 산출물까지 한 흐름으로 이어집니다.

  1. REST API 설계 원칙
  2. HTTP QUERY, 복잡한 읽기 API가 GET과 POST 사이의 빈칸을 메운다
  3. Cursor Pagination Consistency
  4. HTTP Caching과 ETag Revalidation
  5. 대용량 데이터 Export 파이프라인
  6. Object Storage와 파일 관리

이런 상황이면 이 경로부터 보세요

  • POST /search, POST /query가 많아졌지만 읽기 요청과 상태 변경 요청이 섞여 있는 경우
  • 관리자 검색 조건이 URL에 담기 어렵고, GET query string에 민감 값이 남는 것이 부담인 경우
  • cursor pagination에서 중복/누락, 정렬 흔들림, snapshot 기준이 계속 문제 되는 경우
  • 전체 다운로드가 타임아웃, replica lag, 반복 클릭, 중복 파일 생성으로 운영 부하가 되는 경우
  • 생성된 파일의 row count, checksum, 만료, 다운로드 권한, 감사 로그가 따로 관리되지 않는 경우

읽으면서 남길 운영 산출물

  • read-only POST inventory와 QUERY 후보 API 목록
  • GET, QUERY, POST /exports를 나누는 행 수, 응답 시간, 결과 크기 기준
  • query body canonicalization, cache key, 민감 필터 redaction 정책
  • export artifact metadata: filter_hash, snapshot_at, schema_version, row_count, checksum, expires_at
  • 다운로드 시점 권한 재검증, signed URL TTL, 파일 보관 기간, 민감 컬럼 마스킹 기준

이 경로의 목표는 “새 HTTP 메서드를 안다"가 아닙니다. 복잡한 읽기 요청을 안전하게 표현하고, 즉시 응답하기 어려운 조회는 운영 가능한 산출물 파이프라인으로 넘기는 판단 기준을 만드는 것입니다.

파일 접근 제어 운영 경로: 업로드부터 다운로드 URL까지

파일 기능은 처음에는 “업로드하고 내려받기"처럼 단순해 보입니다. 하지만 실제 서비스에서는 object key 추측, 업로드 직후 악성 파일 노출, 민감 파일의 CDN cache, 권한 변경 뒤 남아 있는 다운로드 URL, 감사 로그 누락처럼 작은 빈틈이 보안 사고로 이어질 수 있습니다. 그래서 파일 서빙은 저장소 선택보다 파일 메타데이터, 상태 전이, 권한 재검증, 임시 접근 권한, 감사 증거를 함께 설계하는 문제로 봐야 합니다.

아래 순서로 읽으면 파일 저장 구조에서 시작해 업로드 검역, 권한 모델, Presigned URL 발급 정책까지 한 흐름으로 이어집니다.

  1. Object Storage와 파일 관리
  2. 파일 업로드와 서빙 시스템 설계
  3. Object Upload Quarantine과 비동기 스캔
  4. Authorization 모델: RBAC, ABAC, ReBAC
  5. Presigned URL 접근 제어 운영 플레이북
  6. API Key Lifecycle과 권한 회전

이런 상황이면 이 경로부터 보세요

  • 사용자가 넘긴 bucketobject_key를 서버가 그대로 서명하거나 다운로드시키는 경우
  • 업로드 완료, 바이러스 스캔 완료, 공개 가능 상태가 하나의 boolean으로 섞여 있는 경우
  • 권한이 삭제된 사용자가 이미 발급받은 URL로 몇 분 동안 더 접근할 수 있는지 설명하기 어려운 경우
  • 비공개 파일과 공개 정적 파일이 같은 CDN/cache 정책을 공유하는 경우
  • 다운로드 감사 로그가 “실제 object access"만 있고 “누가 어떤 권한 판단으로 URL을 발급받았는지"는 남지 않는 경우

읽으면서 남길 운영 산출물

  • 파일 유형표: public asset, private attachment, sensitive report, settlement export
  • file_id, object_key, object_version, status, sensitivity, retention_until을 포함한 metadata schema
  • 업로드 상태 전이표: uploaded, quarantined, scanning, clean, rejected, published, deleted
  • 파일 민감도별 URL TTL, CDN cache 허용 여부, audit 강도, rate limit 기준
  • 다운로드 URL 발급 로그 필드: requester, tenant, file version, purpose, policy version, expires_at

이 경로의 목표는 Presigned URL을 막연히 위험하게 보자는 것이 아닙니다. 서버가 직접 파일을 흘리지 않더라도, 누가 어떤 파일에 언제까지 접근할 수 있는지를 데이터와 정책으로 설명할 수 있게 만드는 것입니다. 특히 계약서, 정산 파일, 개인정보 export처럼 되돌리기 어려운 파일은 짧은 TTL보다 먼저 metadata 기반 권한 재검증과 감사 증거를 고정하는 편이 안전합니다.

인가 정책 운영 경로: 권한 모델에서 Shadow Rollout까지

인가 기능은 처음에는 if user.role == admin 같은 조건문으로 시작하기 쉽지만, 서비스가 커질수록 정책 변경 자체가 운영 리스크가 됩니다. RBAC에서 ABAC로 조건을 옮기거나, 관리자 권한을 세분화하거나, 새 정책 엔진을 붙이는 순간 기존 사용자의 접근 결과가 달라집니다. 이때 필요한 것은 더 많은 테스트만이 아니라 기존 판정과 새 판정을 비교하고, 차이를 위험별로 분류한 뒤, 작은 범위부터 강제하는 절차입니다.

아래 순서로 읽으면 권한 모델 선택에서 시작해 정책 변경, 캐시 무효화, 권한 드리프트, 감사 증거까지 한 흐름으로 이어집니다.

  1. Authorization 모델: RBAC, ABAC, ReBAC
  2. Authorization Policy Shadow Rollout
  3. 권한 판정 캐시 무효화
  4. Permission Drift와 Access Review
  5. Tamper-Evident Audit Log
  6. Activity Timeline과 Event Feed

이런 상황이면 이 경로부터 보세요

  • 관리자 권한, 결제, 개인정보 export처럼 잘못 허용하거나 잘못 거절했을 때 피해가 큰 action이 있는 경우
  • RBAC 조건을 ABAC/ReBAC 또는 정책 엔진으로 옮기려는데 운영 데이터의 예외 권한을 확신하기 어려운 경우
  • 테스트 fixture는 통과하지만 실제 테넌트, 파트너, 배치 계정, support override에서 어떤 차이가 생길지 모르는 경우
  • 권한 판정 캐시가 길게 남아 정책 변경 뒤에도 stale allow가 유지될 수 있는 경우
  • 권한 변경, 정책 버전 변경, access review 결과를 나중에 감사 로그로 설명하기 어려운 경우
  • 고객·CS·운영자 화면에서 같은 권한 변경 사건을 서로 다른 visibility와 문구로 보여줘야 하는 경우

읽으면서 남길 운영 산출물

  • action/resource/subject group별 risk class와 owner
  • shadow decision log schema: current decision, shadow decision, diff type, reason code, policy version
  • allow_to_deny, deny_to_allow, eval_error, cache_stale_allow의 rollout gate 기준
  • canary enforcement flag, rollback flag, policy version별 release note
  • 고위험 action의 audit event와 decision log를 연결하는 trace key
  • public/support/operator/security visibility별 timeline projection 필드와 마스킹 기준

이 경로의 목표는 인가 정책을 더 복잡하게 만드는 것이 아닙니다. 권한 결과가 바뀌는 순간을 관측 가능하고 되돌릴 수 있게 만드는 것입니다. 특히 고객 데이터, 관리자 도구, 정산, 계정 정지처럼 한 번 잘못 열리면 되돌리기 어려운 기능은 정책 코드보다 rollout 절차가 먼저 준비되어야 합니다.

고위험 접근과 API 계약 운영 경로: 열기 전에 되돌릴 수 있는지 확인하기

관리자 도구, 고객 지원 화면, 데이터 export, 권한 변경, 공개 API 응답 변경은 모두 공통점이 있습니다. 한 번 잘못 열리면 단순 rollback만으로 피해를 지우기 어렵습니다. 잘못된 사용자가 파일을 내려받았거나, 오래된 모바일 앱이 새 enum 값에서 크래시했거나, 지원 담당자의 임시 권한이 만료되지 않았다면 코드를 되돌린 뒤에도 감사, 고객 안내, 데이터 보정이 남습니다.

그래서 이 경로는 “권한을 어떻게 구현할까"보다 변경 전에 어떤 증거를 모으고, 배포 중 어떤 숫자로 멈추며, 문제가 생겼을 때 어떤 순서로 닫을까에 초점을 둡니다. 아래 글을 함께 읽으면 객체 단위 인가, 권한 축소, 응답 계약, 에러 계약, 감사 로그를 하나의 리뷰 체크리스트로 묶을 수 있습니다.

  1. Object-Level Authorization: IDOR/BOLA 방어
  2. Token Exchange와 Downscoped Token
  3. API Response Compatibility Contract
  4. API Error Semantics와 Retryability Contract
  5. Permission Drift와 Access Review
  6. Tamper-Evident Audit Log

이런 상황이면 이 경로부터 보세요

  • 고객 지원 담당자가 사용자 계정, 주문, 파일, 정산 내역에 대신 접근하는 기능을 만들고 있는 경우
  • 관리자 export, bulk update, impersonation, break-glass처럼 강한 권한을 일시적으로 열어야 하는 경우
  • 응답 필드 삭제, enum 추가, nullable 변경, 에러 코드 변경이 모바일 앱이나 파트너 연동을 깨뜨릴 수 있는 경우
  • 권한 회수 뒤에도 cache, presigned URL, downscoped token, 배치 worker가 예전 권한을 들고 있을 수 있는 경우
  • 장애나 보안 리뷰 때 “누가 어떤 근거로 허용했고, 어떤 데이터가 나갔는가"를 audit log로 설명하기 어려운 경우

읽으면서 남길 운영 산출물

  • 고위험 action inventory: export, delete, impersonate, refund, permission.change, file.download
  • action별 risk class, owner, approval 필요 여부, break-glass 만료 시간
  • actor와 subject를 분리한 접근 로그: 실제 수행자, 대리 대상, ticket/reason, policy version
  • API contract diff gate: response schema diff, error code diff, consumer usage, deprecation window
  • rollback gate: flag off, token revoke, URL invalidate, cache purge, partner notice 중 우선순위
  • 사후 증거: affected resource count, denied/allowed decision sample, audit chain hash, customer-facing incident note 필요 여부

실무에서는 기능별 PR 템플릿에 아래 질문을 붙이는 것만으로도 사고 가능성이 꽤 줄어듭니다.

질문확인할 기준
이 변경은 누군가의 데이터 접근 범위를 넓히는가?새 action, 새 role, 새 relation, 새 token scope가 생기면 보안 리뷰 대상으로 둔다
실패했을 때 사용자가 이미 본 데이터나 받은 파일을 회수할 수 있는가?회수가 어렵다면 배포 전 audit와 승인 gate를 강화한다
오래된 클라이언트가 새 응답·에러·enum을 안전하게 무시하는가?consumer contract test와 production usage telemetry를 확인한다
권한 회수 후 stale allow가 남을 수 있는가?cache TTL, token TTL, presigned URL TTL, worker queue age를 함께 본다
운영자가 나중에 이유를 설명할 수 있는가?reason code, approval id, request id, policy version을 같은 trace로 묶는다

이 경로의 목표는 보안 검토를 느리게 만드는 것이 아닙니다. 위험한 접근과 계약 변경일수록 허용 조건, 관측 지표, 중단 기준, 사후 증거를 작게라도 먼저 고정해 두자는 것입니다. 그래야 빠르게 배포하더라도 문제가 생겼을 때 “일단 막고, 범위를 계산하고, 사용자에게 설명하는” 순서가 흔들리지 않습니다.

민감 데이터 암호화 운영 경로: 평문이 되는 순간을 줄이기

개인정보, 외부 provider token, 계좌 식별자, 고객지원 원문처럼 유출 피해가 큰 데이터는 “DB가 암호화되어 있다"는 말만으로 충분하지 않습니다. 애플리케이션 계정이 정상 조회하면 원문이 나오고, 백업·로그·검색 인덱스·분석 이벤트로 값이 복제될 수 있기 때문입니다. 그래서 이 경로는 저장소 보안이 아니라 어떤 필드가 언제 평문이 되고, 누가 왜 복호화했으며, 키를 어떻게 회전·폐기할지를 운영 계약으로 정리하는 데 초점을 둡니다.

아래 순서로 읽으면 비밀 관리에서 시작해 필드 암호화, 원문 조회 권한, 감사 증거, 삭제·보존까지 한 흐름으로 이어집니다.

  1. 비밀 관리: Vault/Secrets Manager와 Spring 연동
  2. Envelope Encryption과 PII Field Crypto 운영 플레이북
  3. Object-Level Authorization: IDOR/BOLA 방어
  4. API Key Lifecycle과 권한 회전
  5. Tamper-Evident Audit Log
  6. 데이터 보존과 삭제 아키텍처

이런 상황이면 이 경로부터 보세요

  • 이메일, 전화번호, 계좌번호, 주민번호, OAuth token이 일반 read replica나 분석 계정에서 평문으로 보이는 경우
  • 고객지원 화면이 원문 PII를 기본 표시하고, 마스킹 조회와 원문 조회 권한이 분리되어 있지 않은 경우
  • 로그, trace, error report, 검색 인덱스, 데이터 웨어하우스에 원문 민감 값이 섞일 가능성이 있는 경우
  • key_version, nonce, algorithm, authentication tag 없이 암호문만 저장해 회전과 알고리즘 교체가 어려운 경우
  • “키 유출 의심” 상황에서 15분 안에 신규 write를 막고 영향 범위를 산정하는 절차가 없는 경우

읽으면서 남길 운영 산출물

  • 민감 필드 inventory: field, sensitivity, owner, retention, search requirement, plaintext surface
  • 암호문 schema: alg, key_version, dek_ref, nonce, ciphertext, tag
  • 정확 검색용 blind index 설계와 pepper rotation 기준
  • 원문 복호화 capability, reason code, ticket id, audit event schema
  • key rotation 상태 전이와 dual-read/backfill/lazy rotation 중단 기준
  • 로그·검색·분석 이벤트에서 원문 유출을 막는 테스트 체크리스트

이 경로의 목표는 모든 컬럼을 무리하게 암호화하는 것이 아닙니다. 유출 피해가 큰 필드부터 원문 노출 경로를 줄이고, 키를 잃거나 회전해야 하는 날에도 서비스와 감사 설명이 무너지지 않게 만드는 것입니다. 암호화는 마지막 방어선이 아니라 데이터 수명주기와 접근 권한을 다시 설계하게 만드는 계기입니다.

데이터 파이프라인 운영 경로: Outbox에서 CDC 복구까지

데이터 변경을 이벤트, 검색 인덱스, read model, 웨어하우스로 흘려보내는 시스템은 처음에는 “비동기 처리"처럼 보이지만, 운영에 들어가면 누락·중복·지연·재처리를 다루는 복구 시스템이 됩니다. 특히 CDC를 붙이는 순간 애플리케이션 코드는 단순해질 수 있어도, 원본 DB 로그 보존, 커넥터 offset, schema compatibility, sink 멱등성이라는 새 책임이 생깁니다.

아래 순서로 읽으면 이벤트 발행 설계에서 CDC lag 대응까지 한 흐름으로 연결됩니다.

  1. Transactional Outbox + CDC, 이중 쓰기 없이 이벤트를 안전하게 내보내는 법
  2. Kafka 기본: 토픽, 파티션, Consumer Group
  3. Kafka Consumer Lag: 밀림을 해석하고 줄이는 법
  4. PostgreSQL WAL, Checkpoint, Replication Lag
  5. 백엔드 커리큘럼 심화: CDC Connector Lag와 Snapshot 복구 운영 플레이북
  6. Projection Lag와 Read Model Rebuild
  7. Reconciliation Ledger Pipeline

이런 상황이면 이 경로부터 보세요

  • DB 저장과 메시지 발행을 한 요청 안에서 처리하다가 유실/중복 복구 기준이 불명확한 경우
  • Kafka consumer lag는 보이지만 사용자 기능이 실제로 얼마나 늦는지 설명하기 어려운 경우
  • 초기 snapshot이나 backfill이 운영 DB, replica, sink worker를 흔드는 경우
  • CDC connector 재시작, offset reset, replication slot 삭제를 장애 중에 즉흥적으로 판단하고 있는 경우
  • 검색 인덱스나 read model은 맞지만 정산, 포인트, 권한 같은 부작용 시스템은 더 엄격한 재처리 기준이 필요한 경우

읽으면서 남길 운영 산출물

단순히 글을 읽고 끝내지 않으려면 아래 5가지를 문서나 런북에 숫자로 남기는 편이 좋습니다.

  • 이벤트 발행 경로별 event_id, aggregate key, ordering key, dedup 보존 기간
  • outbox backlog age, CDC source lag, connector lag, sink apply lag, business lag의 warning/critical 기준
  • snapshot chunk size, pause 조건, read replica 사용 여부, 재시작 checkpoint 기준
  • schema 변경 시 additive rollout, consumer fixture, breaking change 제거 시점
  • replay 가능 경로와 불가능 경로, full snapshot 대신 targeted backfill을 선택할 기준

이 경로의 목표는 CDC나 Kafka를 “쓸 줄 아는 것"이 아니라, 장애가 났을 때 어디까지 처리됐고, 무엇을 다시 돌려도 안전하며, 어떤 데이터는 사람 승인 없이 건드리면 안 되는지를 설명할 수 있게 만드는 것입니다.

사용자 접점 운영 경로: 알림을 보내기 전에 신뢰를 설계하기

알림은 기능 목록에서는 작게 보이지만, 실제 서비스에서는 사용자의 신뢰와 피로도를 동시에 건드립니다. 결제 실패, 보안 경고, 배송 변경처럼 놓치면 안 되는 알림도 있고, 추천·마케팅처럼 너무 많이 보내면 사용자가 채널 자체를 꺼버리는 알림도 있습니다. 그래서 알림 설계는 “메일 발송 코드"가 아니라 업무 이벤트, 사용자 선호, 큐 재시도, 중복 제거, 증거 로그를 함께 보는 운영 문제입니다.

아래 순서로 읽으면 업무 이벤트를 외부 효과로 바꾸는 경로를 안전하게 나눌 수 있습니다.

  1. Transactional Outbox + CDC, 이중 쓰기 없이 이벤트를 안전하게 내보내는 법
  2. Queue Visibility Timeout과 Ack/Nack
  3. Notification Preference와 Delivery Pipeline
  4. 멱등성 설계
  5. 구조화 로깅
  6. Webhook Delivery Reliability 플레이북

이런 상황이면 이 경로부터 보세요

  • 주문, 결제, 보안, 구독 변경 알림을 API 트랜잭션 안에서 바로 보내고 있는 경우
  • 큐 재시도 때문에 같은 메일·푸시·문자가 두 번 이상 가는 사고가 있었던 경우
  • 사용자가 수신 거부했는데 이미 쌓인 큐 작업을 어떻게 처리할지 기준이 없는 경우
  • provider dashboard에는 성공으로 보이지만 실제 bounce, invalid token, complaint가 suppression에 반영되지 않는 경우
  • “왜 이 알림이 갔는가"를 CS나 보안 담당자가 template, policy, source event 기준으로 추적하기 어려운 경우

읽으면서 남길 운영 산출물

  • 알림 유형표: security, transactional, operational, digest, marketing
  • 유형별 지연 SLO, 수신 거부 가능 여부, quiet hours 예외 기준
  • event_id, notification_id, dedup_key, delivery_attempt_id, provider_message_id의 의미와 보존 기간
  • preference snapshot과 발송 시점 최신 preference 재조회 중 어떤 방식을 쓸지에 대한 기준
  • delivery evidence schema: template key, policy version, source event, provider response, final status

이 경로의 목표는 알림을 더 많이 보내는 것이 아닙니다. 중요한 알림은 잃지 않고, 중요하지 않은 알림은 사용자의 집중과 신뢰를 해치지 않게 줄이는 것입니다. 알림은 한 번 보내면 되돌리기 어렵기 때문에, 중복 방지와 감사 증거를 코드보다 먼저 설계하는 편이 안전합니다.

외부 통합 운영 경로: Webhook을 보내고 받는 양쪽 설계

Webhook은 단순한 HTTP callback처럼 보이지만, 실제 운영에서는 외부 시스템과 내부 상태를 맞추는 계약입니다. 우리가 이벤트를 보내는 쪽이면 재시도, 서명, delivery log, 수신자 장애 대응이 중요하고, 받는 쪽이면 raw body 서명 검증, replay 방지, inbox 저장, 상태 전이, quarantine이 중요합니다. 한쪽만 설계하면 장애 때 “상대가 다시 보내겠지” 또는 “우리가 이미 처리했겠지” 같은 추측에 기대게 됩니다.

아래 순서로 읽으면 실시간 통신 선택 기준에서 webhook 발신/수신 안정성까지 이어집니다.

  1. 실시간 통신: WebSocket vs SSE vs Webhook
  2. Webhook Delivery Reliability 플레이북
  3. Inbound Webhook Receiver 플레이북
  4. 멱등성 설계
  5. Transactional Inbox와 멱등 Consumer
  6. Operational State Machine 설계

이런 상황이면 이 경로부터 보세요

  • 결제사, 인증 SaaS, 마켓플레이스, 파트너 API와 webhook으로 상태를 맞추고 있는 경우
  • 같은 이벤트가 중복 도착하거나, 늦게 도착한 이벤트가 현재 상태를 되돌리는 경우
  • 서명 검증은 있지만 raw body, timestamp 허용 오차, key rotation 기준이 문서화되어 있지 않은 경우
  • provider에게 2xx를 돌려주는 시점과 내부 비즈니스 처리가 완료되는 시점을 구분하지 못하는 경우
  • delivery success, accepted, processed, replayed, quarantined 지표가 한 대시보드에 섞여 있는 경우

읽으면서 남길 운영 산출물

  • provider별 endpoint, account mapping key, secret version, rotation window
  • event id, payload hash, replay window, dedup 보존 기간
  • 발신 측 delivery log와 수신 측 inbox schema
  • 상태 전이표: 정상 전이, stale event, manual review, quarantine 기준
  • 지표 분리: delivered, accepted, processed, replayed, rejected, quarantined

이 경로의 목표는 webhook을 “비동기 알림"으로만 보는 관점에서 벗어나, 외부 이벤트를 검증 가능한 ingestion pipeline으로 운영하는 것입니다. 특히 결제·권한·구독·정산처럼 되돌리기 어려운 도메인은 빠른 처리보다 위조 차단, 유실 방지, 중복 효과 방지, 상태 전이 정확성이 먼저입니다.

결제 상태 머신 운영 경로: 돈이 빠져나간 상태를 설명할 수 있게 만들기

결제 기능은 성공률만 높인다고 안전해지지 않습니다. 승인(authorize)은 됐지만 매입(capture)은 안 된 주문, provider 호출은 timeout이 났는데 카드사에는 승인된 결제, 웹훅은 늦게 왔지만 내부 주문은 이미 취소된 상태처럼 돈과 주문 상태가 서로 다른 시점에 움직이는 문제가 계속 생깁니다. 이때 PAID, FAILED, CANCELED 같은 단순 상태만 있으면 운영자는 장애 때 추측으로 복구하게 됩니다.

아래 순서로 읽으면 결제 상태 전이에서 시작해 멱등 키, 외부 webhook, 원장 대사, 수동 보정까지 한 흐름으로 이어집니다.

  1. 백엔드 커리큘럼 심화: 결제 승인·캡처 상태 머신, 중복 차감과 유령 주문을 막는 법
  2. Operational State Machine 설계
  3. 멱등성 설계
  4. Inbound Webhook Receiver 플레이북
  5. Reconciliation Ledger Pipeline
  6. Correction Job과 Audit Guardrail

이런 상황이면 이 경로부터 보세요

  • 결제 API timeout을 FAILED로 닫고 사용자가 다시 결제하게 만드는 흐름이 있는 경우
  • 주문은 성공으로 보이는데 provider settlement에는 매입이 없거나, provider에는 captured인데 내부 주문은 미확정인 경우
  • 같은 결제 버튼을 여러 번 눌렀을 때 authorize, capture, refund의 멱등 키가 모두 order_id 하나로 묶여 있는 경우
  • 웹훅이 늦게 도착했을 때 현재 상태를 되돌리거나, 금액·통화·merchant account 검증 없이 상태를 덮어쓰는 경우
  • 운영자가 결제 상태나 환불 상태를 수동으로 바꿀 수 있지만 승인자, reason code, correction event, 대사 결과가 남지 않는 경우

읽으면서 남길 운영 산출물

  • 결제 상태 전이표: INITIATED, AUTHORIZING, AUTHORIZED, CAPTURING, CAPTURED, CANCELING, CANCELED, REFUNDING, REFUNDED, UNKNOWN_REQUIRES_RECONCILIATION
  • 액션별 멱등 키 표: authorize, capture, cancel, refund, webhook ingest를 서로 다른 중복 방지 단위로 분리
  • payment_attemptpayment_ledger의 역할 구분: 현재 상태 조회와 불변 사실 기록을 분리
  • provider write timeout 처리 기준: 즉시 실패가 아니라 조회 예약, 사용자 중복 결제 차단, 확인 중 UX
  • reconciliation 대상 쿼리: 장시간 AUTHORIZED, 장시간 CAPTURING, 내부/provider 금액 차이, 환불 잔액 불일치
  • 수동 보정 gate: 2인 승인, step-up authorization, correction event, 사후 대사, affected order count

이 경로의 목표는 결제 코드를 복잡하게 만드는 것이 아닙니다. 이미 복잡한 금전 상태를 상태 머신과 원장으로 드러내서, 장애가 났을 때 사용자에게 무엇을 보여줄지, 무엇을 자동으로 재시도할지, 어떤 건은 사람 승인 없이는 건드리면 안 되는지를 결정할 수 있게 만드는 것입니다.

오늘 추천 학습 경로: 안전한 릴리스와 운영 검증

최근 백엔드 시스템은 기능을 “한 번에 배포하고 끝"내기보다, 작은 단위로 노출하고 관측한 뒤 점진적으로 확대하는 방향으로 움직입니다. 배포 자체보다 중요한 것은 새 경로가 실제 트래픽을 만났을 때 어떤 비용·지연·정합성 리스크를 만들지 미리 확인하는 것입니다. 그래서 오늘은 기능 플래그, 트래픽 전환, Shadow Traffic, Drain-aware 배포, 분산 트레이싱을 하나의 릴리스 검증 흐름으로 묶었습니다.

  1. Feature Flag: 배포와 릴리스를 분리하는 운영 패턴
  2. Feature Flag Lifecycle Cleanup: 오래된 플래그가 운영 부채가 되지 않게 하는 법
  3. Traffic Cutover & Migration: 트래픽 전환을 안전하게 설계하는 법
  4. 백엔드 커리큘럼 심화: Shadow Traffic과 Dark Launch 운영 플레이북
  5. Drain-aware Deployment: 연결을 끊지 않는 배포 전략
  6. 분산 트레이싱 도입 플레이북

이런 분에게 특히 추천

  • 새 기능을 배포할 때마다 “문제 생기면 바로 롤백” 말고 더 구체적인 사전 검증 절차가 필요한 경우
  • 카나리, blue/green, feature flag, shadow traffic의 차이가 머릿속에서 섞이는 경우
  • p95/p99 지연, 에러율, diff rate, queue lag처럼 릴리스 중단 기준을 숫자로 잡고 싶은 경우
  • 배포 중 커넥션 드레인, 캐시 워밍, downstream 부하, 추적 ID 전파가 자주 빠지는 경우

읽는 순서 팁

  • 릴리스 제어가 약하면 Feature Flag부터 읽고, 배포와 기능 노출을 분리하는 기준을 먼저 잡습니다.
  • 플래그가 오래 남는다면 Feature Flag Lifecycle Cleanup 글에서 owner, 만료일, cleanup trigger를 먼저 고정합니다.
  • 트래픽을 옮겨야 한다면 Traffic Cutover 글에서 전환 단위, rollback window, 성공 기준을 확인합니다.
  • 사용자 영향 없이 검증하고 싶다면 Shadow Traffic 글로 넘어가 복제 금지 요청, PII 마스킹, diff checker 기준을 정합니다.
  • 배포 중 연결 끊김이 문제라면 Drain-aware Deployment로 readiness, preStop, connection draining 순서를 점검합니다.
  • 원인 추적이 어렵다면 분산 트레이싱 글을 마지막에 붙여 trace/span/log correlation을 보강합니다.

실무 적용 체크리스트

아래 항목을 릴리스 리뷰 템플릿에 붙여두면 글을 읽고 끝나는 것을 줄일 수 있습니다.

  • 기능 플래그 이름, owner, 기본값, 만료 예정일이 정해져 있는가?
  • 새 경로로 보낼 트래픽 비율과 증가 간격이 문서화되어 있는가?
  • shadow 대상에서 결제·주문·포인트·알림처럼 부작용이 있는 요청을 차단했는가?
  • 신규/기존 응답 diff에서 정확히 일치해야 하는 필드와 허용 오차가 있는 필드를 나눴는가?
  • p95/p99, error rate, timeout, queue lag, downstream QPS의 중단 기준이 숫자로 적혀 있는가?
  • 배포 종료 전 readiness false, connection drain, background worker stop 순서가 검증되었는가?
  • 문제가 생겼을 때 flag off, traffic shift back, rollback deploy 중 무엇을 먼저 할지 정했는가?
  • 장애 분석을 위해 trace id, request id, feature flag variant, shadow run id가 로그에 남는가?

이 경로를 다 읽고 나면 특정 배포 기법 이름을 아는 수준을 넘어, 릴리스 전 검증 → 제한 노출 → 관측 → 중단/확대 판단 → 롤백까지 하나의 운영 루프로 설계할 수 있습니다. 블로그에 흩어진 심화 글도 이 흐름 안에서 다시 연결되므로, 최신 글을 읽은 뒤 관련 개념으로 자연스럽게 이동하기 좋아집니다.

성능·비용 보호 학습 경로: 요청 하나의 리소스 예산 잡기

장애는 항상 전체 트래픽이 폭증할 때만 오지 않습니다. QPS는 낮지만 DB aggregation, 외부 API fan-out, 큰 응답 payload, 재시도가 붙은 요청 하나가 pool을 오래 잡고 있으면 평범한 조회까지 같이 느려집니다. 그래서 성능 튜닝을 평균 latency 개선으로만 보면 부족하고, 요청 하나가 어떤 리소스를 얼마나 쓰는지를 먼저 드러내야 합니다.

아래 순서로 읽으면 capacity planning에서 시작해 admission control, API별 resource budget, tail latency, graceful degradation까지 한 흐름으로 이어집니다.

  1. Capacity Planning과 Little’s Law
  2. Admission Control과 Concurrency Limits
  3. API Resource Budgeting, 요청 하나의 CPU·DB·외부 호출 비용을 설계하는 법
  4. API 레이트 리밋과 백프레셔
  5. Tail Latency 엔지니어링 플레이북
  6. Graceful Degradation과 Brownout

이런 상황이면 이 경로부터 보세요

  • 트래픽은 많지 않은데 특정 리포트, 검색, export API가 DB pool wait을 키우는 경우
  • rate limit은 있지만 가벼운 요청과 무거운 요청을 같은 1건으로 취급하는 경우
  • tenant 한 곳의 batch나 관리자 조회가 interactive API의 p95/p99를 흔드는 경우
  • timeout, retry, pagination, cache fallback 기준이 API마다 제각각인 경우
  • 429와 503을 섞어 쓰고 있어 클라이언트 재시도 정책이 서버 부하를 더 키우는 경우

읽으면서 남길 운영 산출물

  • 핵심 API 10개의 p95 latency, DB query count, external call count, response size, retry count
  • endpoint별 request cost unit과 interactive/admin/batch request class 구분
  • tenant budget, system-wide admission control, degraded path의 적용 순서
  • budget 초과 시 429, 시스템 포화 시 503, 큰 payload 제한 시 413/422를 나누는 응답 기준
  • budget decision 로그 필드: endpoint, request class, tenant hash, budget units, used units, decision

이 경로의 목표는 서버를 무조건 아끼는 것이 아닙니다. 사용자가 바로 기다리는 요청, 데이터 정합성이 중요한 요청, 나중에 처리해도 되는 batch를 구분해서 바쁠 때 무엇을 먼저 살릴지 결정하는 기준을 만드는 것입니다. 평균 지표가 멀쩡한데 p99와 비용만 계속 튀는 서비스라면 이 경로가 특히 잘 맞습니다.

기존 설계 학습 경로: DDD와 헥사고날 아키텍처

구조 설계 주제가 필요하다면 아래 경로를 이어서 보면 좋습니다. 운영 안정화가 “릴리스 후 시스템을 지키는 기술"이라면, DDD와 헥사고날 아키텍처는 “변경이 잦아도 도메인 규칙을 잃지 않는 구조"에 가깝습니다.

  1. DDD 전술적 설계: Entity, VO, 그리고 Aggregate
  2. 육각형 아키텍처 (Hexagonal): 도메인을 프레임워크로부터 격리하라
  3. DDD 심화: Aggregate Root와 트랜잭션 경계

개념이 약하면 DDD 전술적 설계부터 시작하고, 현재 구조 개선이 급하면 육각형 아키텍처를 먼저 읽은 뒤, 운영 관점의 경계 설정이 궁금하면 Aggregate Root와 트랜잭션 경계까지 이어서 보세요. 이 경로를 다 읽고 나면 단순히 패턴 이름을 아는 수준이 아니라, 도메인 규칙을 어디에 두고 어떤 경계로 보호할지를 더 분명하게 판단할 수 있습니다.

장애 대응 학습 경로: 감지에서 종료까지

운영 글을 읽을 때는 “문제가 생기면 알람이 울린다"에서 멈추지 말고, 누가 지휘하고, 어떤 숫자로 심각도를 정하고, 언제 닫을지까지 이어서 봐야 합니다. 아래 경로는 알람 감지부터 인시던트 커맨드, 데이터 보정, 회고 액션까지 하나의 흐름으로 묶습니다.

  1. 알람 전략: 에러율/레이턴시/자원지표 설계
  2. SLO/SLI/Error Budget
  3. 인시던트 커맨드와 Severity 운영 플레이북
  4. Reconciliation Ledger Pipeline
  5. Poison Message Quarantine

처음에는 알람과 SLO로 “언제 깨울지"를 잡고, 그다음 인시던트 커맨드 글에서 IC/Tech Lead/Comms Owner 역할과 15분 업데이트 리듬을 정리하세요. 결제, 포인트, 권한, 메시지 발송처럼 부작용이 남는 시스템이라면 마지막 두 글까지 이어서 읽어야 합니다. API가 다시 200을 반환해도 데이터 보정과 재처리 기준이 없으면 장애는 실제로 끝난 것이 아닙니다.

📂 학습 주제

AI Agent Operations

학습 노트 모음

1개 04/14

Algorithm

학습 노트 모음

1개 12/16

API

URL, Header, Query 기반 버전 관리와 Breaking Change 전략

3개 12/28

API Design

학습 노트 모음

1개 10/12

Architecture

학습 노트 모음

35개 08/05

Audit Log

학습 노트 모음

1개 05/12

Authorization

학습 노트 모음

1개 05/11

Backend

학습 노트 모음

18개 03/05

Backend API Design

학습 노트 모음

2개 07/28

Backend API Operations

학습 노트 모음

1개 05/15

Backend Architecture

학습 노트 모음

4개 05/28

Backend Caching

학습 노트 모음

1개 05/18

Backend Concurrency

학습 노트 모음

1개 06/27

Backend Consistency

학습 노트 모음

1개 05/20

Backend Data Access

학습 노트 모음

1개 05/25

Backend Data Modeling

학습 노트 모음

2개 08/03

Backend Data Pipeline

학습 노트 모음

1개 05/27

Backend Data Pipeline Operations

학습 노트 모음

1개 06/23

Backend Data Quality

학습 노트 모음

1개 07/09

Backend Deep Dive

학습 노트 모음

1개 12/28

Backend Domain Modeling

학습 노트 모음

1개 08/15

Backend Integration

학습 노트 모음

2개 06/25

Backend Messaging

학습 노트 모음

1개 05/14

Backend Messaging Reliability

학습 노트 모음

1개 05/19

Backend Operational Timeline

학습 노트 모음

1개 07/30

Backend Operations

학습 노트 모음

5개 07/25

Backend Performance

학습 노트 모음

1개 04/20

Backend Reliability

학습 노트 모음

9개 07/29

Backend Resilience

학습 노트 모음

1개 05/17

Backend Security

학습 노트 모음

14개 08/21

Backend Security & Operations

학습 노트 모음

1개 08/16

Build

학습 노트 모음

1개 12/16

Caching

학습 노트 모음

4개 05/02

Cloud

S3 개념, Presigned URL, 대용량 업로드, 비용 최적화

1개 12/28

Code Quality

네이밍, 함수 설계, 주석, 리팩토링 원칙

1개 12/28

CS

학습 노트 모음

2개 12/29

Data Architecture

학습 노트 모음

1개 03/17

Data Engineering

학습 노트 모음

6개 05/04

Data Export

학습 노트 모음

1개 06/24

Data Platform

학습 노트 모음

1개 04/08

Database

학습 노트 모음

34개 08/12

Database Internals

학습 노트 모음

1개 12/28

Database Reliability

학습 노트 모음

1개 04/02

Design Patterns

학습 노트 모음

2개 10/09

DevOps

학습 노트 모음

23개 12/29

Distributed

Kafka, RabbitMQ, Redis Pub/Sub 비교와 선택 기준

1개 12/28

Distributed Coordination

학습 노트 모음

1개 04/10

Distributed Systems

학습 노트 모음

13개 04/28

Event Driven Architecture

학습 노트 모음

1개 05/09

File Upload

학습 노트 모음

1개 06/30

Frontend

React 성능 최적화, Virtual DOM, memo, useCallback 관련 핵심 개념과 실전 예제 정리

4개 12/01

Git

학습 노트 모음

1개 12/16

Incident Management

학습 노트 모음

1개 05/24

Java

학습 노트 모음

8개 12/29

Java/Spring Operations

학습 노트 모음

1개 07/19

JPA

Lazy/Eager 로딩, Batch Size, QueryDSL, Hibernate 통계

4개 12/28

JSONB Schema Governance

학습 노트 모음

1개 05/13

JVM

학습 노트 모음

4개 02/12

Kafka

학습 노트 모음

6개 12/16

Load Balancing

학습 노트 모음

1개 05/10

Messaging

학습 노트 모음

1개 12/16

Modern Tech

학습 노트 모음

5개 12/28

Network

학습 노트 모음

8개 12/29

Networking

학습 노트 모음

2개 12/16

Object Storage Security

학습 노트 모음

1개 07/18

Observability

학습 노트 모음

9개 07/17

OOP

학습 노트 모음

1개 10/06

Operations

학습 노트 모음

2개 05/07

Ops

학습 노트 모음

5개 08/06

OS

학습 노트 모음

1개 12/28

Performance

학습 노트 모음

3개 04/03

Practical Project

학습 노트 모음

1개 12/28

Q&A

학습 노트 모음

3개 12/16

React

React 라이브러리 학습 노트

1개 11/03

Reactive

Reactive Programming, Publisher/Subscriber, Backpressure 관련 핵심 개념과 실전 예제 정리

1개 12/01

Realtime Operations

학습 노트 모음

1개 07/23

Redis

학습 노트 모음

2개 12/16

Release Engineering

학습 노트 모음

1개 05/26

Resilience

학습 노트 모음

5개 04/18

Search Architecture

학습 노트 모음

2개 08/19

Security

학습 노트 모음

15개 03/04

Spring

ApplicationEvent, @EventListener, 비동기 이벤트, 트랜잭션 바인딩

36개 12/28

Spring Data JPA

학습 노트 모음

1개 11/02

System Design

학습 노트 모음

4개 12/16

Testing

테스트 피라미드, Mock vs Stub, 통합 테스트 격리 전략

3개 12/28

Testing Strategy

학습 노트 모음

1개 03/03

최근 학습 노트

Operations

백엔드 커리큘럼 심화: Drain-aware 배포 플레이북

무중단 배포에서 SIGTERM 처리만으로 부족한 이유를 짚고, 로드밸런서·readiness·커넥션 풀·큐 컨슈머를 함께 drain하는 실무 기준을 정리합니다.

Deployment Connection Draining Graceful Shutdown +2
Security

Spring Security OAuth2 + JWT 실전 구현

Authorization Code 흐름과 JWT 발급/검증을 Spring Security 구성으로 연결하고, 실무에서 흔한 함정까지 정리

Spring Security OAuth2 JWT +2
CS

OSI 7계층과 TCP/IP 이해

백엔드 개발자가 알아야 할 실무 관점의 네트워크 계층 구조와 장애 진단 체크포인트 (L4 vs L7 로드밸런서 포함)

Network OSI 7 Layer TCP/IP +1
DevOps

CI/CD with GitHub Actions: 배포 자동화의 시작

GitHub Actions의 Workflow 구조부터 Matrix 전략, 보안 하드닝, Docker 빌드, 배포 파이프라인, 비용 최적화까지 — 운영 수준의 CI/CD 설계

CI/CD GitHub Actions Automation +5
Database Internals

스토리지 엔진 내부: B-Tree vs LSM-Tree

DB 성능의 핵심인 스토리지 엔진. MySQL의 B-Tree와 Cassandra/RocksDB의 LSM-Tree 구조를 비교하고 장단점을 파헤칩니다.

Database B-Tree LSM-Tree +2
Distributed Systems

분산 트랜잭션: 2PC에서 SAGA까지

마이크로서비스 환경에서 데이터 정합성을 어떻게 보장할까요? 강한 일관성(2PC)의 한계와 결과적 일관성(SAGA) 패턴의 구현 방법을 다룹니다.

Distributed Transaction SAGA 2PC +1
Distributed Systems

데이터 정합성 모델: Strong부터 Eventual까지

분산 시스템에서 '최신 데이터'를 본다는 것의 의미와 비용. Linearizability, Sequential, Eventual Consistency의 차이를 명확히 구분합니다.

Consistency Distributed Systems Linearizability +1
Database

데이터 샤딩과 Consistent Hashing

DB 데이터를 여러 서버에 나누는 샤딩 전략과, 서버 증설 시 데이터 이동을 최소화하는 Consistent Hashing 알고리즘 설명.

Sharding Consistent Hashing Database Scaling +3
Network

WebSocket과 실시간 통신

WebSocket 프로토콜 동작 원리, STOMP 기반 실시간 통신과 Spring 적용

WebSocket STOMP Real-time +1
Modern Tech

Vector DB 내부: HNSW 인덱스와 RAG 백엔드

AI 서비스의 필수 인프라인 Vector Search. ANN 알고리즘(HNSW, IVF, PQ) 원리, 파라미터 튜닝, RAG 파이프라인 설계, 그리고 운영 체크리스트까지.

AI Vector DB HNSW +5
Security

TLS Handshake 1.3: HTTPS는 어떻게 연결될까?

HTTPS 연결이 성립되는 과정을 Wireshark 패킷 관점에서 봅니다. TLS 1.2와 1.3의 차이, Cipher Suite 선택, 인증서 체인 검증, 0-RTT의 위험, 그 …

Security TLS HTTPS +4
Observability

OpenTelemetry: 통합 관측 표준

OpenTelemetry의 Trace/Metric/Log 통합 관측 표준과 Spring Boot 적용 가이드

OpenTelemetry Observability Tracing +2
Network

DNS 내부: 주소창에 google.com을 치면?

재귀적 질의, 레코드 타입, 캐싱 전략, DNSSEC/DoH 보안, 컨테이너 DNS, GSLB, 실전 트러블슈팅까지 DNS 내부를 완전히 파헤칩니다.

DNS Network Infra +3
Architecture

DDD 심화: Aggregate Root와 트랜잭션 경계

DDD에서 가장 자주 무너지는 Aggregate 경계를 실무 시나리오로 풀어내고, 트랜잭션 범위와 결과적 일관성의 판단 기준을 정리합니다.

DDD Aggregate Transaction +1
Architecture

CQRS: 명령과 조회의 분리

CQRS 패턴의 개념, 읽기/쓰기 모델 분리, Event Sourcing과의 조합 가이드

CQRS Architecture DDD +1
Ops

클라우드 비용 최적화 전략

FinOps 프레임워크, Compute/DB/Network/Storage 영역별 최적화, Kubernetes 비용 관리, Spot/RI 전략, …

Cost Optimization Autoscaling FinOps +3
Security

웹 보안 기본: CORS/CSRF와 헤더 보안

SOP/CORS 동작 원리, CSRF 공격 시나리오와 4가지 방어 전략, 보안 헤더(HSTS/CSP/Permissions-Policy) 실전 적용 가이드

CORS CSRF Security Headers +4
Architecture

실시간 통신: WebSocket vs SSE vs Webhook

실시간/준실시간 요구에 따라 WebSocket, SSE, Webhook을 선택하는 기준과 설계 패턴 — Spring Boot 구현 코드, 스케일 아웃 전략, 운영 체크리스트 포함

WebSocket SSE Webhook +3
System Design

시스템 설계: 뉴스피드

Fan-out on write/read, 캐시/타임라인 테이블 설계, 지연/일관성 트레이드오프 정리

System Design Newsfeed Fanout +1
System Design

시스템 설계: URL Shortener

Key 생성, 충돌 방지, 캐시/DB 설계, 확장성·가용성 고려사항 정리

System Design URL Shortener Hash +2
Security

비밀 관리: Vault/Secrets Manager와 Spring 연동

애플리케이션 비밀을 분리·주입·회전하는 설계 — Vault/AWS SM 비교, Spring 연동 코드, 회전 자동화, 유출 대응, 운영 체크리스트까지

Secrets Vault AWS Secrets Manager +4
Ops

배포 런북: 안전한 배포와 롤백

배포 전/중/후 판단 기준과 실전 명령어, K8s 매니페스트, ArgoCD Rollout, DB 마이그레이션 SQL까지 — 바로 복사해서 쓰는 런북

Deployment Rollback Runbook +4
Architecture

모놀리스를 모듈러/서비스로 나누기

모놀리스 코드베이스를 단계적으로 모듈러/서비스로 분리하는 전략 — 판별 기준, 실무 코드, 데이터 분리, Strangler 구현, 운영 체크리스트까지

Monolith Modularization Service Split +3
Architecture

멀티테넌시 설계 전략

스키마/데이터베이스 분리, 테넌트 격리/보안, 마이그레이션·운영 고려사항과 실전 구현

Multitenancy Schema Isolation +3
Architecture

레거시 리팩터링 전략

대규모 레거시 개선을 위한 우선순위, 단계별 접근, 위험 관리

Legacy Refactoring Strangler +1
Spring

WebFlux vs MVC 선택 가이드

Spring MVC와 WebFlux를 실행 모델·병목 유형·운영 난이도로 비교하고, 안전한 전환 전략과 실전 체크리스트를 정리합니다.

WebFlux Spring MVC Reactive +1
Spring

Spring 프로필과 설정 분리 전략

dev/stage/prod 설정 분리, @ConfigurationProperties, Secret 관리, Kubernetes 환경변수 주입, Vault 연동, …

Spring Profile Configuration +3
Testing

Spring 통합 테스트와 Testcontainers

MySQL/Redis/Kafka를 Testcontainers로 올려 실제 환경과 유사한 통합 테스트를 구성하는 방법

Testcontainers Spring Boot Integration Test +2
Security

Spring Security: 필터 체인의 미학

어렵게만 느껴지는 Security의 내부 작동 원리(DelegatingFilterProxy, FilterChain)와 커스텀 필터

Spring Security Filter Chain JWT +1
Spring

Spring Security + JWT 인증 흐름

JWT 기반 인증 필터, 토큰 발급/검증, Stateless 세션 구성을 코드로 정리

Spring Security JWT Authentication +1
Spring

Spring Boot 자동 설정 해부

자동 설정 동작 원리, 조건부 빈 등록, 커스터마이징 포인트 정리

Spring Boot AutoConfiguration Condition +1
Spring

Spring Batch와 스케줄링 기초

대량 배치 처리와 스케줄링 설계, Spring Batch/Quartz/스케줄러 기본부터 운영 안정성까지

Spring Batch Scheduling Quartz +2
Spring

Spring AOP (Part 1: 개념과 기초)

Spring AOP의 동작(프록시)과 포인트컷/어드바이스를 이해하고, self-invocation 같은 실전 함정을 피하는 방법

Spring AOP Proxy +2
Redis

Redis 캐시 패턴 모음

Cache-Aside, Write-Through, Write-Behind, 분산락 패턴을 코드 예시와 함께 정리

Redis Cache Aside Write Through +2
Q&A

Q&A 모음: 운영/보안 20제

CI/CD, 모니터링/알람, 네트워크, CORS/CSRF/OWASP 등 운영/보안 관련 20문항 Q&A

Ops Security DevOps +1
Kafka

Kafka 재시도/DLQ 설계

재시도 토픽, DLQ, 멱등 처리로 Kafka 소비 실패를 다루는 패턴

Kafka Retry DLQ +1
Architecture

gRPC 서비스 설계 기초

프로토 정의, 일방향/양방향 스트리밍, gRPC-Gateway 연계 등 gRPC 설계 핵심

gRPC Protobuf Streaming +1
Architecture

GraphQL 스키마 설계 가이드

스키마 정의, 리졸버 구조, N+1 방지(DataLoader), 버전 관리 베스트 프랙티스

GraphQL Schema Resolver +1
Architecture

Event Sourcing과 CQRS 입문

이벤트 소싱과 CQRS 기본 개념, 장단점, 적용 시 고려사항

Event Sourcing CQRS Command +1
Security

CI/CD 보안: 공급망 공격 막기

SLSA 프레임워크부터 SBOM 생성, Sigstore/Cosign 이미지 서명, OIDC 인증, GitHub Actions 하드닝, 취약점 스캔 파이프라인까지 — 공급망 보안 완 …

CI/CD Supply Chain SBOM +4
Architecture

API 레이트 리밋과 백프레셔 심화

API Gateway 레이트 리밋, 애플리케이션 레벨 백프레셔, 큐/서킷 브레이커 연계 — 알고리즘 선택부터 Redis 분산 구현, Spring Cloud Gateway 설정까지

Rate Limit Backpressure API Gateway +2
DevOps

Service Mesh (Istio): 마이크로서비스 통신 관리

Istio Service Mesh로 마이크로서비스 간 통신을 관리하고 보안을 강화하는 방법 — 도입 판단 기준부터 트래픽 관리, mTLS, 관측성, 장애 주입까지 실무 설계 포인트 …

Service Mesh Istio Microservices +2
Spring

WebFlux 구조 정리

WebFlux 내부 구조, Reactor 패턴, 이벤트 루프와 스레드 모델 Q&A

Spring WebFlux Reactor Reactive +2
Database

SQL 성능 튜닝 정리

SQL 실행 계획 분석, Join 전략 선택, 쿼리 튜닝 체크리스트 Q&A

SQL Performance Join +1
Spring

Spring Bean Lifecycle 정리

Spring Bean 생성 순서, 초기화/소멸 콜백, Proxy 객체와 @Configuration 동작 Q&A

Spring Bean Lifecycle +1
Reactive

Reactive Programming 개념 정리

Reactive Programming 핵심 개념, Publisher/Subscriber 패턴, Backpressure 전략 Q&A

Reactive Backpressure Publisher +1
Kafka

Kafka Partition 설계 정리

Kafka Partition 설계 전략, Key 기반 분배, 순서 보장과 리밸런싱 Q&A

Kafka Partition Ordering +1
Kafka

Kafka Consumer Group 정리

Kafka Consumer Group 동작 원리, 리밸런싱, 오프셋 관리 전략 Q&A

Kafka Consumer Group Rebalance +1
Java

JVM 내부 구조 정리

JVM 내부 구조, ClassLoader 계층, JIT 컴파일러, Safepoint 동작 원리 Q&A

Java JVM ClassLoader +1
DevOps

Docker & Kubernetes 정리

Docker 컨테이너 기초, Kubernetes Pod/Service/Deployment 개념과 운영 Q&A

Docker Kubernetes DevOps +1
Database

DB 인덱스 최적화 정리

B-Tree 인덱스, 복합 인덱스 설계, Index Scan 종류별 차이와 실전 최적화 전략 Q&A

Database Index B-Tree +1
Database

Elasticsearch (Part 1: 개념과 구조)

Elasticsearch의 역인덱스 구조, 분석기 파이프라인(Nori 한국어 포함), 매핑 설계, 쿼리 유형별 실전 코드, BM25 스코어링, 집계, 클러스터 운영 가이드

Elasticsearch Search Full-text Search +3
React

React Hooks 기초

React Hooks의 기본 개념과 사용법 정리

React Hooks Frontend
Database

MySQL 인덱스 기초 예제

WHERE, ORDER BY, JOIN에서 인덱스가 어떻게 사용되는지 간단한 예제로 정리

MySQL Index Explain +1