Skip to content

Latest commit

 

History

History

decisions

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

아키텍처 결정 기록 (ADR)

각 결정의 배경 → 결정 → 근거 → 기각한 대안 → 결과(트레이드오프) 를 한 파일에 담는다. "왜 안 썼냐"에 답할 수 있는 것이 "무엇을 썼냐"보다 중요하다.

# 결정 한 줄
001 PHP 8.2 + CodeIgniter 3 대상은 CI 2.x. CI3가 관용구가 같고 공식 마이그레이션 경로상 다음 단계
002 등록 도메인 2개 철회 → 018. eTLD+1 분석은 유효하고 구매 결정만 뒤집힘
003 MySQL 아웃박스 전환과 전송 지시를 한 트랜잭션에. Redis·SQS는 정합성 구멍
004 FOR UPDATE SKIP LOCKED 중복 전송을 사후 차단이 아니라 DB가 예방
005 채널 어댑터 매체 10종 이상 실측. 클래스 1개 + 설정 1줄 → Meta 로 검증, 실측 6파일. 적재 계약은 어댑터로 격리되지 않는다
006 코인 원장 약관의 유료 5년 / 무료 1년은 잔액 컬럼으로 구현 불가
007 읽기/쓰기 분리 실물 복제본 + Lua 배정. 흉내에서 실물로
008 스텁 PG PG 30개사. 어댑터는 이미 005에서 증명 — 여기선 상태 머신만
009 SPA 미사용 백엔드 포지션 + 대상 서비스가 서버 렌더 + 추적 스니펫은 바닐라여야
010 K8s·ECR 미사용 컨테이너 4개. EKS 잡이 없는 것도 관측됨
011 GitHub Actions 초안의 "CI 공백" 전제가 틀렸음. 조직 표준은 Jenkins
012 관측 가능성 범위 어트리뷰션은 그대로, 계측을 운영 관점으로 승격. 인프라 포지션 동시 지원 대응. 자체 화면 항목은 뒤집힘 → 019
013 OpenResty (Caddy 아님) 최초 결정을 뒤집음. Lua로 복제본 배정을 구현한다
014 스택 정렬 원칙 다른 모든 ADR을 지배. "이 경험이 그 회사 업무에서 그대로 쓰이는가"
015 이미지 S3 + CloudFront Phase 2. 웹툰은 이미지가 본체. 미경험 영역이라 학습 가치가 크다
016 PG 테스트 연동 + 알림 어댑터 008 개정 — 구현체가 하나면 어댑터가 검증되지 않는다. 결제는 이행 중 → 020, 알림은 Phase 2
017 CI3 앱 구조 CI3 관용구 + Composer PSR-4 병용. src/는 프레임워크 독립이라 테스트가 성립
018 등록 도메인 1개 002 철회. 잃는 것은 A-1·A-2 둘뿐 — CORS 는 오리진 기준이라 그대로 걸린다
019 지표 화면 직접 (Grafana 아님) 012 의 "자체 화면을 만들지 않는다" 를 뒤집음. 대체재(Grafana)는 014가 같은 날 잘랐다
020 PG 직접 연동 — 모으는 자리는 상태 전이 016 이행(이니시스만). 이니시스 카드에는 웹훅이 없다. 인터페이스는 구현체 하나라 아직 검증 안 됨

뒤집힌 결정 4개

초안이나 이전 판단을 그대로 갔으면 틀렸을 항목들이다.

ADR 초안 실제
002 서브도메인 3개면 충분 same-site라 서드파티 쿠키 실험이 성립 안 함
018 002: 도메인 2개는 필수 공고 원문 대조 결과 우대. 그리고 CORS 는 1개로도 걸린다
004 dedup_key로 사후 차단 전송 중복은 못 막음 → SKIP LOCKED로 예방
011 "Jenkins 조직이라 CI 공백" 공백이 아니라 조직 표준. 명분을 교체

관측 근거는 전부 조사 요약에 있다.