운세 데이터의 완전성 검증과 원자 upsert
0회 조회약 1분 읽기
운세 데이터의 완전성 검증과 원자 upsert
horoscopes는 날짜·종류·sign 하나가 아니라 한 날짜와 종류의 기대 sign 집합이 제품 결과다. 한 sign만 존재한다고 전체가 준비된 것은 아니다.
읽기와 쓰기의 같은 판정
조회는 GROUP BY horoscope_date, horoscope_type 뒤 sign 집합을 비교하고, 기대 집합과 같을 때만 생성 단위를 skip한다. 부분 행은 다음 생성 라운드가 복구할 수 있도록 미완료로 남긴다. 생성기는 중복·미지원 sign·잘못된 sign 이름·개수 부족을 DB 앞에서 거절한다.
한 묶음, 한 transaction
검증된 12개 행은 executemany와 한 번의 commit으로 저장한다. 한 행에서 오류가 나면 rollback하고 count를 0으로 보고한다. 이렇게 하면 UI가 일부 성공을 전체 성공으로 오인하지 않고, scheduler가 재시도할 범위를 유지한다.
이 원칙은 LLM 출력뿐 아니라 수동 Admin 생성과 자동 scheduler에도 적용해야 한다. 충돌 정책이 마지막 쓰기 우선이어도 완전하지 않은 묶음을 성공으로 만드는 것과는 별개의 문제다.