GitHub / developer-advocate

1 개의 포스트

github

GitHub for Beginners: Getting started with GitHub Issues and Projects (새 탭에서 열림)

제공해주신 텍스트는 해당 블로그 글의 작성자인 Kedasha(GitHub의 Developer Advocate)에 대한 **소개 문구(Bio)**입니다. 요청하신 "소프트 삭제"나 "트리거 기반 보관"과 같은 기술적 내용을 요약하기 위해서는 블로그의 **본문 내용**이 필요합니다. 사용자께서 예시로 들어주신 "소프트 삭제의 문제점" 등의 키워드로 미루어 보아, Kedasha가 작성한 **"Soft deletes are bad; do this instead(소프트 삭제는 나쁘니 대신 이렇게 하세요)"**라는 글을 요약하고자 하시는 것으로 이해됩니다. 해당 글의 핵심 내용을 바탕으로 요청하신 형식에 맞춰 요약해 드립니다. --- 데이터베이스 설계 시 관행적으로 사용되는 '소프트 삭제(is_deleted 플래그)'가 시스템 복잡성과 성능 저하를 초래한다는 점을 지적하며, 이를 대체할 수 있는 더 깨끗하고 효율적인 데이터 관리 방안을 제시합니다. 궁극적으로 소프트 삭제 대신 별도의 이력 테이블이나 아카이빙 전략을 사용할 것을 권장합니다. ### 소프트 삭제의 문제점 * **인덱스 및 성능 저하**: 삭제된 데이터가 테이블에 계속 남아 인덱스 크기를 키우고, 쿼리 시 `WHERE deleted = false` 조건을 항상 포함해야 하므로 실행 계획의 효율성을 떨어뜨립니다. * **유니크 제약 조건 충돌**: 특정 필드(예: 이메일)에 유니크 제약이 있을 경우, 소프트 삭제된 행이 존재하면 동일한 값으로 새 데이터를 삽입할 수 없는 논리적 오류가 발생합니다. * **쿼리 복잡성 증가**: 모든 조회 쿼리에 삭제 여부 필터를 적용해야 하므로, 개발자가 이를 누락할 경우 삭제된 데이터가 사용자에게 노출되는 버그가 발생할 위험이 큽니다. ### 트리거 기반의 보관(Archiving) * **별도 테이블 이동**: 본 테이블(Main Table)에는 활성 데이터만 남기고, 삭제된 데이터는 트리거(Trigger)를 통해 별도의 보관용 테이블(Archive Table)로 자동 이동시키는 방식을 제안합니다. * **무결성 유지**: 이 방식을 통해 본 테이블의 유니크 제약 조건을 깨끗하게 유지할 수 있으며, 인덱스 성능 또한 최적으로 관리할 수 있습니다. * **성능 최적화**: 운영 쿼리가 훨씬 적은 양의 데이터만 탐색하게 되어 전반적인 애플리케이션 응답 속도가 향상됩니다. ### 감사 로그(Audit Logs)의 활용 * **상태 변경 추적**: 단순 삭제 여부만 저장하는 대신, 누가 언제 왜 데이터를 변경/삭제했는지 기록하는 감사 로그 시스템을 구축하는 것이 장기적으로 데이터 거버넌스 측면에서 유리합니다. * **데이터 복구 용이성**: 단순 플래그보다 더 풍부한 맥락 정보를 담고 있어, 필요 시 데이터를 복구하거나 이력을 추적하는 데 훨씬 효과적입니다. 단순히 플래그 하나로 삭제를 처리하기보다는, 데이터의 생명 주기를 고려하여 **운영 데이터와 아카이브 데이터를 물리적으로 분리**하는 설계가 확장성 있는 시스템 구축의 핵심입니다. 만약 다른 본문의 요약을 원하신다면 전체 텍스트를 다시 제공해 주세요.