바이브코딩으로 서비스를 운영하다 보면 로그, 알림 내역, AI 작업 기록 같은 데이터가 계속 쌓입니다.

 

오래된 데이터를 DELETE로 지우면 끝이라고 생각하기 쉽지만, PostgreSQL에서는 삭제해도 디스크 용량이 바로 줄어들지 않습니다.

쉽게 설명하면 이렇습니다.

  • DELETE : 필요 없는 데이터를 삭제
  • VACUUM : 삭제된 공간을 다시 사용할 수 있도록 정리
  • VACUUM FULL : 실제 파일 용량까지 줄임

일반적인 서비스라면 PostgreSQL의 autovacuum이 자동으로 공간을 정리합니다. 다만 실제 디스크 용량을 줄이는 VACUUM FULL은 테이블이 잠길 수 있어 운영 중 무작정 실행하면 안 됩니다.

가장 좋은 방법은 처음부터 데이터 보관 기간을 정하는 것입니다.

예를 들어 실행 로그는 30일, 알림 기록은 90일처럼 기준을 정하고 오래된 데이터가 자동으로 삭제되도록 만드는 것이 좋습니다.

AI에게는 이렇게 요청해 보세요.

PostgreSQL에서 30일이 지난 로그를 매일 자동으로 삭제해 줘.

한 번에 모두 삭제하지 말고 1,000건씩 나눠 처리하고,
created_at 인덱스와 autovacuum 상태도 확인해 줘.
삭제 건수와 오류는 로그로 남기고,
VACUUM FULL은 자동으로 실행하지 마.
운영 적용 전 삭제 대상을 확인하는 SELECT 쿼리도 제공해 줘.

기능을 빠르게 만드는 것도 중요하지만, 데이터가 언제까지 쌓이고 언제 삭제되는지도 함께 설계해야 합니다.

서버 용량은 갑자기 부족해지는 것이 아니라, 아무도 보지 않던 데이터가 조용히 쌓여 부족해지는 경우가 많습니다.