
[SAN] 리콜 카드 조회 설계: 저장 vs 실시간, 추출 기준, ERD 의사결정
TIL 페이지 하단 리콜 카드 목록을 설계하면서 생긴 의문점들 — DB 저장 vs 실시간 조회, 어떤 임베딩 기준으로 추출할지, 임베딩 테이블 분리 안티패턴, NULL 허용 여부 — 의사결정 과정을 기록합니다.

TIL 페이지 하단 리콜 카드 목록을 설계하면서 생긴 의문점들 — DB 저장 vs 실시간 조회, 어떤 임베딩 기준으로 추출할지, 임베딩 테이블 분리 안티패턴, NULL 허용 여부 — 의사결정 과정을 기록합니다.

async_jobs 단일 테이블로 여러 비동기 작업을 관리하는 DB 설계를 기록합니다. target_id에 FK를 걸지 않은 이유(다형적 연관관계), error_message를 파일 로그 대신 DB에 저장하는 이유를 중심으로 정리합니다.

네이버 소셜 로그인을 OIDC로 시도했다가 OAuth 2.0으로 전환한 과정을 기록합니다. CORS 차단으로 백엔드 토큰 교환을 선택하고, URL 오류·state 누락·follow_redirects 등 서버 사이드 디버깅까지 정리합니다.

카카오 소셜 로그인을 프론트엔드에 연동하는 과정을 정리합니다. SDK 동적 로드, 프론트 측 토큰 교환, sessionStorage를 이용한 약관 동의 전달, scope 범위 결정까지 다섯 가지 결정을 중심으로 기록합니다.

ALB+ACM과 컨테이너 certbot 방식을 비교하고, webroot 인증과 standalone 선발급을 조합해 컨테이너 중단 없는 HTTPS 자동 갱신 구조를 설계한 과정을 정리합니다.
React SPA를 서빙하는 Nginx 설정 파일을 환경별로 어떻게 나눴는지, 그리고 SSM 전용 Prod 서버에서 rsync 대신 Dockerfile 이미지 빌드를 선택한 이유를 정리합니다.
root 계정 액세스 키 하나로 모든 AWS 작업을 처리하던 구조를 환경(Dev/Prod)과 기능(Issuance/OCR/CI)별로 IAM 사용자를 세분화하여 교체했습니다. 최소 권한 원칙을 적용한 설계 과정과 EC2 IAM Role 전환, DeleteObject·HeadObject 권한 이슈까지 다룹니다.

SSH 없는 Keyless Prod 환경에서 GitHub Actions CD 파이프라인을 구성하며 마주한 세 가지 트러블슈팅을 기록합니다. SSM Waiter의 100초 하드코딩 타임아웃, /bin/sh의 pipefail 미지원, ssm-user와 ubuntu 간 권한 격리, 그리고 SSH 없이 Compose 파일을 EC2로 전달하는 S3 경유 방식까지 다룹니다.
AI가 만들어내는 저품질 생성물 'AI Slop'이 정보 생태계를 어떻게 바꾸는지, 그리고 AI에 의존하는 개발 워크플로가 인간의 역할을 어떻게 축소시키는지에 대한 생각을 정리합니다.
SSH 키 없이 AWS SSM으로만 접근하는 Prod EC2를 구축한 과정을 공유합니다. 개발(Dev)과 운영(Prod) 리소스를 완전히 분리한 이유, Nginx 리버스 프록시와 Let's Encrypt HTTPS 설정, 그리고 Docker Compose 기반 컨테이너 운영 구조까지 다룹니다.