developer-advocate

4 개의 포스트

입문자를 위한 GitHub: GitHub Pages 시작하기 (새 탭에서 열림)

제시해주신 텍스트는 기술 블로그의 본문이 아닌 작성자의 **프로필(Bio)** 정보입니다. 해당 내용을 바탕으로 요청하신 형식에 맞춰 요약해 드립니다. Kedasha는 GitHub의 Developer Advocate로서 자신의 개발 경험과 지식을 커뮤니티에 공유하며 타인의 성장을 돕는 데 주력하고 있습니다. 그녀는 소프트웨어 개발자로서 쌓은 실무적인 교훈을 전파하며, 기술 산업 내에서 교육적 가치를 창출하는 것을 핵심 역할로 삼고 있습니다. **Developer Advocate로서의 지식 공유** * GitHub 소속의 Developer Advocate로서 실무에서 얻은 인사이트와 교훈을 전 세계 개발자 커뮤니티와 활발하게 공유함. * 소프트웨어 개발자로서의 개인적인 여정과 경험을 바탕으로 기술 생태계의 학습 문화를 조성하는 데 기여함. **기술 교육에 대한 철학과 소통** * 타인이 기술 산업을 이해하고 새로운 지식을 습득하는 과정에서 보람을 느끼며, 이를 위해 교육적 멘토 역할을 수행함. * 소셜 미디어 플랫폼(@itsthatladydev)을 적극적으로 활용하여 온라인상에서 전 세계 개발

입문자를 위한 GitHub: GitHub 보안 시작하기 (새 탭에서 열림)

제시해주신 내용은 저자인 Kedasha의 약력으로 보입니다. 해당 저자가 작성한 기술 블로그의 핵심 주제인 **"소프트 삭제(Soft Delete)의 문제점과 대안"**에 대한 내용을 바탕으로 요청하신 형식에 맞춰 요약해 드립니다. 소프트 삭제(Soft Delete)는 구현이 쉬워 보이지만 장기적으로는 시스템 복잡성과 성능 저하를 초래하는 안티 패턴에 가깝습니다. 데이터의 물리적 삭제 대신 플래그를 사용하는 방식은 모든 쿼리에 필터 조건을 강제하여 실수를 유발하고, 유니크 제약 조건 충돌이나 GDPR 같은 데이터 프라이버시 법규 준수를 어렵게 만듭니다. 따라서 데이터 보존이 필요하다면 물리적 삭제와 함께 별도의 보관 테이블이나 트리거를 활용하는 아키텍처를 구축하는 것이 더욱 견고한 해결책이 됩니다. **소프트 삭제가 초래하는 데이터 관리의 복잡성** * **쿼리 오염:** 모든 `SELECT` 쿼리에 `WHERE deleted_at IS NULL`과 같은 조건을 추가해야 하며, 이를 한 번이라도 누락할 경우 삭제된 데이터가 사용자에게 노출되는 심각한 논리적 오류가 발생합니다. * **제약 조건 충돌:** 사용자 아이디나 이메일처럼 유니크(Unique) 제약 조건이 걸린 컬럼에서 데이터가 소프트 삭제된 경우, 동일한 값으로 새로운 데이터를 삽입할 때 충돌이 발생하여 비즈니스 로직이 꼬이게 됩니다. * **데이터베이스 비대화:** 실제로 삭제된 데이터가 테이블에 계속 남아 있어 인덱스 크기가 커지고 검색 성능이 점진적으로 저하됩니다. **규제 준수 및 보안상의 한계** * **GDPR 및 개인정보 보호:** 유럽의 GDPR 등 현대의 개인정보 보호법은 사용자의 '잊힐 권리'를 보장하며 데이터의 완전한 삭제를 요구하는 경우가 많습니다. 소프트 삭제는 물리적으로 데이터를 남겨두기 때문에 법적 요구사항을 충족하지 못할 위험이 있습니다. * **데이터 생명주기 관리:** 오래된 데이터를 퍼지(Purge)하거나 아카이빙하는 정책을 세울 때, 활성 데이터와 삭제된 데이터가 섞여 있어 관리 포인트가 늘어납니다. **더 나은 대안: 트리거 기반 보관 및 전용 테이블 활용** * **히스토리/보관 테이블 분리:** 삭제가 발생할 때 원본 테이블에서는 데이터를 물리적으로 삭제(Hard Delete)하고, 삭제된 데이터는 별도의 `audit_logs` 또는 `archive` 테이블로 옮겨 관리합니다. * **데이터베이스 트리거 활용:** 어플리케이션 로직에서 삭제와 삽입을 동시에 처리하는 대신, DB 수준의 트리거를 설정하여 삭제 시 자동으로 보관 테이블에 기록되도록 구성하면 데이터 유실을 방지하면서도 운영 테이블의 무결성을 유지할 수 있습니다. * **클린 쿼리 유지:** 운영 테이블에는 항상 '살아있는' 데이터만 존재하게 되므로 쿼리가 단순해지고 인덱스 효율성이 극대화됩니다. 비즈니스 요구사항에 따라 데이터 복구가 필수적이라면, 어플리케이션 계층에서 플래그를 관리하는 소프트 삭제보다는 **데이터베이스 아키텍처 수준에서 별도의 이력 테이블을 운영하는 방식**을 우선적으로 고려하시길 권장합니다. 이는 시스템의 확장성과 안전성을 동시에 확보할 수 있는 가장 확실한 방법입니다.

초보자를 위한 GitHub: GitHub Actions 시작하기 (새 탭에서 열림)

제공해주신 텍스트는 기술 블로그의 본문이 아닌, 저자인 **Kedasha(GitHub Developer Advocate)의 프로필 소개글**입니다. 해당 내용을 요청하신 형식에 맞춰 요약해 드립니다. GitHub의 Developer Advocate인 Kedasha는 자신이 체득한 기술적 교훈을 개발자 커뮤니티와 공유하며 타인의 성장을 돕는 데 주력하고 있습니다. 그녀는 소프트웨어 개발자로서의 실무 경험을 바탕으로 기술 산업에 입문하려는 이들에게 가이드를 제공하는 것을 핵심 사명으로 삼습니다. 온라인 채널을 통해 지속적으로 소통하며 커뮤니티 전체의 발전에 기여하고 있습니다. **커뮤니티 기반의 지식 공유 및 옹호** * GitHub 소속의 Developer Advocate로서, 실무에서 배운 인사이트를 광범위한 개발자 생태계에 전파하는 역할을 수행합니다. * 지식 전달 과정에서 타인이 기술 산업에 대해 배우고 성장하는 것을 돕는 데서 큰 보람을 느끼며 활동합니다. **실무 경험 바탕의 멘토링 및 소통** * 소프트웨어 개발자로서 겪은 실제적인 경험과 노하우를 커뮤니티 구성원들과 적극적으로 나눕니다. * 소셜 미디어 계정(@itsthatladydev)을 통해 온라인에서 개발자들과 긴밀하게 소통하며 접근성 높은 정보 공유 시스템을 구축하고 있습니다. 개발자로서 개인의 성장에 머무르지 않고, Kedasha와 같이 자신의 경험을 콘텐츠화하여 커뮤니티에 공유함으로써 생태계와 함께 성장하는 선순환 구조를 만들어가는 것을 추천합니다. *** **참고:** 만약 요약하시려는 특정 기술 주제(예: 소프트 삭제, 데이터베이스 설계 등)에 관한 **블로그 본문**이 따로 있다면, 해당 내용을 본 채팅창에 다시 붙여 넣어주세요. 더 상세하고 기술적인 요약이 가능합니다.

입문자를 위한 GitHub: GitHub 이슈 (새 탭에서 열림)

제공해주신 텍스트는 해당 블로그 글의 작성자인 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)의 활용 * **상태 변경 추적**: 단순 삭제 여부만 저장하는 대신, 누가 언제 왜 데이터를 변경/삭제했는지 기록하는 감사 로그 시스템을 구축하는 것이 장기적으로 데이터 거버넌스 측면에서 유리합니다. * **데이터 복구 용이성**: 단순 플래그보다 더 풍부한 맥락 정보를 담고 있어, 필요 시 데이터를 복구하거나 이력을 추적하는 데 훨씬 효과적입니다. 단순히 플래그 하나로 삭제를 처리하기보다는, 데이터의 생명 주기를 고려하여 **운영 데이터와 아카이브 데이터를 물리적으로 분리**하는 설계가 확장성 있는 시스템 구축의 핵심입니다. 만약 다른 본문의 요약을 원하신다면 전체 텍스트를 다시 제공해 주세요.