Skip to content

release: develop → release (2026-09-07) - #399

Merged
uykm merged 456 commits into
releasefrom
develop
Sep 7, 2026
Merged

uykm merged 456 commits into
releasefrom
develop

Conversation

@uykm

@uykm uykm commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

배경

  • 3월 8일 이후 첫 prod 배포. EC2 재기동·탄력적 IP 전환(43.203.15.221) 후 dev는 재배포·검증 완료.
  • prod 컴포즈 Secret(DOCKER_COMPOSE_PROD_YML_BASE64)을 8월 29일자 로컬 파일로 갱신함 ([Fix] 다중 동네 폴백 UNION ALL 전환 후 요청당 앱 CPU +37% 회귀 #394 문장 캐시 DB_URL 포함).
  • 배포 직전 prod MySQL 전체 덤프를 서버 /home/ubuntu/backups 에 보관.

포함 범위

  • develop의 미배포 커밋 456개 (Flyway 마이그레이션 일괄 적용됨)

🤖 Generated with Claude Code

https://claude.ai/code/session_01KLFBmRQ62ZXpTH9tRqtthv

uykm and others added 30 commits July 12, 2026 20:27
…is-cache

[refactor] Redis 북마크 캐시 제거 및 DB 직행 단순화
bench DB의 bench 사용자 1,000명 ID로 HS512 access token을 발급하여
load-test/data/users.csv에 기록하는 스크립트 추가 (Artillery 시나리오용)
[perf] 북마크 인덱스 벤치마크(100만 행) 및 인덱스 확정 (V19·V20)
uykm and others added 28 commits August 17, 2026 17:51
정렬 스냅샷이 없는 창(기동 직후·빌드 실패)에는 트래픽이 통째로 DB 경로로
온다. 그 경로가 town_id IN 한 문장이라 후보 전량을 읽고 정렬해야 했고,
읽는 양이 동네당 장소 수에 정비례했다.

정적 정렬 다섯을 동네마다 한 브랜치씩 UNION ALL로 엮는다. 구간 안에서는
인덱스가 순서를 만들어 주므로 브랜치가 LIMIT을 채우는 자리에서 멈춘다.
술어와 LIMIT은 전부 브랜치 안에 두고, 바깥 ORDER BY는 SELECT 별칭으로
같은 전순서를 다시 적는다. 동네가 하나면 브랜치도 UNION도 만들지 않고,
거리순은 ORDER BY·LIMIT이 없어 조기 종료가 성립하지 않으므로 IN을 둔다.

근거: docs/blog/2026-08-21-multi-town-query-cost-structure.md
[feat] 장소 목록 정렬 6종 확장·인메모리 스냅샷 정렬 채택과 북마크 카운트 아웃박스 전환
[docs] GC 분해 실측의 원고 반영
MySQL 8.0이 LATERAL 안 상관 참조(town_id = towns.town_id)를 동적 상수로 쓰지 못해
동네 구간 전량 읽기 + filesort로 떨어진다(실측 rows=100~200 loops=18, 커버링 상실,
규모 2배에서 읽기 정비례·포화 QPS -24%). UNION ALL의 채택 근거(동네별 조기 종료·규모
내성)를 반납하는 교환이라 기각. 근거: load-test/campaigns/2026-08-29_394-stmt-shape/
results/stage0-gate-readout.md. 채택안은 드라이버 설정(③b) — 후속 커밋.
같은 창 4구성 비교(2026-08-29_394-stmt-shape)의 우승 구성. 목표 부하(제공 ~571 req/s)
실측: 앱 스로틀 21.6→1.4%, p95 308→7ms, 요청당 앱 CPU 2.536→2.165ms(옛 IN 형상
2.286보다 낮음), DB 1.905→1.539ms. 캐시 적중은 판정 창 Com_stmt_prepare 증가 0으로 실증.
prepStmtCacheSize=512는 벤치 실동작 114문장 기준 — 운영 개시 시 실트래픽 형상 수로 재산정.
(운영·개발 compose는 gitignore 대상이라 로컬에만 같은 파라미터를 반영했다 — prod는 반영 완료.)
- 인메모리 정렬 원고를 2026-08-29-inmemory-read-model.md로 개명·전면 개편:
  기준선을 UNION ALL+마스크(문장 캐시 없음, 08-29 창 실측)로 바꾸고,
  문장 캐시 vs 인메모리 전환의 3자 비교로 재구성. GC 검증 절 상세판 복원.
- 문장 캐시 원고를 두 갈래 해법의 첫 번째 문서로 재프레임:
  IN+마스크 비교 제거, 08-28 붕괴 수치는 한계 절로, 폴백 지위는 결말로.
- 재료 문서에 개편 확정 사항(기준선·기호 라벨 금지·% 병기 규칙)을 기록.
[fix] 다중 동네 폴백 문장 처리 비용 회귀 해결 (드라이버 문장 캐시 + 서버 prepstmt)
…snapshot

[refactor] 장소 목록 스냅샷 단일 읽기 모델 재설계
@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Team

Run ID: f6c1c73a-1787-4c72-87a7-20745f2605e8

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@uykm
uykm merged commit 7bbd4d5 into release Sep 7, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant