본문 바로가기

전체 글25

Airflow Metric Monitoring - 설계 관측 대상 메트릭(최소화 버전)목표는 개별 run 로그가 아니라 aggregate 시계열dagrun.schedule_delay예정 시각과 실제 시작 시각의 차이scheduler 포화의 선행 지표dagrun.duration.{success,failed}DAG 실행 시간 추세executor.{open_slots,queued_tasks,running_tasks}executor 큐 압력.scheduler.tasks.starvingpool 슬롯 부족으로 스케줄 못 하는 태스크 수pool.{open,queued,running}_slotspool 단위 자원 병목이들은 gauge와 timer가 섞여 있고, 대부분 이름 세그먼트에 dag_id/pool 같은 식별자가 박혀서 나옴제약 조건Airflow 클러스터와 모니터링(.. 2026. 7. 18.
모듈러 모놀리스에 도메인 모듈 붙이기 allowedDependencies = {"common"}만으로는 common의 하위 패키지를 못 쓴다 개요Wit 백엔드는 Spring Modulith 기반 모듈러 모놀리스auth, user, feed, companion, location, common을 패키지 단위 모듈로 나눈다ModularityTest로 경계 위반을 빌드 타임에 검증한다Phase 0까지는 모듈이 package-info.java뿐인 빈 껍데기라 검증할 의존성이 없었다.Phase 1의 첫 조각으로 user 도메인을 채우면서 실제 모듈 간 의존이 생기게 되었다.공유 커널(common)을 어떻게 노출하는가모듈 경계를 어떻게 넘는가사용자 도메인을 어떻게 설계했는가allowedDependenciesuser 모듈은 common에 의존한다BaseE.. 2026. 7. 18.
Airflow Metric Monitoring - 개요 배경GKE에서 Airflow와 모니터링은 별도 클러스터에서 운영되고 있음Airflow에서 모니터링으로 메트릭을 보내고자 함Airflow 차트에 statsd-exporter가 내장되어 있지 않음GMP가 이미 활성화되어 있음목표현황대상결과Airflow statsd 설정❎차트의 serviceMonitor.enabledfalsestatsd-exporter 워크로드❎webserver의 in-container /admin/metrics404monitoring.googleapis.com/v1 CRD🅾️Airflow 관련 PodMonitoring/ServiceMonitor 리소스❎Cloud Monitoring의 airflow_* metric descriptor❎처음부터 statsd 경로로 구성 필요Airflow Me.. 2026. 7. 18.
내부 Long, 외부 ULID 모든 엔티티가 공유하는 식별자 전략을 정한다.무엇을 외부에 노출할 것인가엔티티에는 기본키가 필요하다.가장 손쉬운 선택은 DB의 auto-increment 정수다. 그런데 이 값을 API URL에 그대로 노출하면 문제가 생긴다. /v1/companions/1, /v1/companions/2 … 순번이 드러나면 몇 가지가 새어 나간다.데이터 규모 추측 — /v1/users/50000이 열리면 가입자가 최소 5만 명임을 안다리소스 순회(enumeration) 수집 — 순번을 훑으며 전부 긁어갈 수 있다따라서 외부에 노출하는 식별자와 내부에서 쓰는 식별자를 분리한다.UUID외부용 식별자의 첫 후보는 UUID다. 추측 불가능하고 전역 유일하다.하지만 UUID(v4)는 완전 랜덤이라 정렬 순서가 없다. 이 특성이 .. 2026. 7. 12.
Spring Modulith로 경계를 코드로 강제하기 여행 동행 매칭 서비스 Wit의 백엔드를 작업하며 남기는 개발기.1인 개발, 그리고 빠른 MVPWit는 지도 위에서 여행 동행과 피드를 보여주는 서비스다.아래 두 제약이 아키텍처 선택의 전부를 결정한다.1인 개발빠른 MVP 출시가장 먼저 마주하는 질문은 "모놀리스냐 MSA냐"다. 결론부터 말하면 모듈러 모놀리스를 택한다.왜 MSA가 아닌가MSA는 초기 오버헤드가 크다.서비스 분리네트워크 통신분산 트랜잭션배포 파이프라인...위 내용들이 서비스 수만큼 늘어난다. 아직 도메인 경계도 확정되지 않은 MVP 단계에서 이 비용을 먼저 지불하는 것은 합리적이지 않다. 그렇다고 평범한 모놀리스로 가면 다른 문제가 생긴다.패키지 경계가 문서상으로만 존재시간이 지나면 도메인 간 참조가 얽힘서비스 확장성 저하그래서 목표를.. 2026. 7. 12.
GCP Cloud SQL 1. Cloud SQL이란 무엇인가Cloud SQL은 Google Cloud Platform이 제공하는 완전 관리형 관계형 데이터베이스 서비스이다. AWS의 RDS와 같은 위치에 있는 서비스로, 개발자가 데이터베이스 자체에만 집중할 수 있도록 인프라, 백업, 패치, 복제 등을 GCP가 대신 처리해주는 매니지드 서비스이다.1.1 지원 데이터베이스Cloud SQL은 다음 세 가지 오픈 상용 데이터베이스 엔진을 지원한다.MySQL (5.7, 8.0, 8.4)PostgreSQL (13 ~ 17, 상황에 따라 18)SQL Server (2017, 2019, 2022)세 엔진 모두 원본 데이터베이스와 완전히 호환되기 때문에, 로컬에서 PostgreSQL로 개발하다가 그대로 Cloud SQL에 옮길 수 있다.1.2 .. 2026. 7. 4.