MongoDB의 TTL(Time-To-Live) Index는 일정 시간이 expired Document를 자동으로 삭제하는 기능이며
로그, 세션, 캐시 데이터 등등 기간이 있는 데이터에 사용됩니다.
OS환경 : Centos Linux 7.9 (64bit)
DB 환경 : MongoDB 6.0.19
🤔 TTL Index란?
TTL 인덱스는 문서에 있는 Date 타입 필드를 기준으로 일정 시간이 지나면
MongoDB가 백그라운드 작업으로 해당 Document를 삭제합니다.
삭제는 실시간이 아니라 약 60초 간격의 백그라운드 스케줄러가 수행됨
✅ TTL INDEX 만드는 방법
db.logs.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })
- createdAt: Date 필드
- expireAfterSeconds: 생성된 시간 기준으로 3600초(=1시간) 후 삭제
TTL 인덱스의 특징과 주의사항
- TTL 인덱스는 단일 필드만 허용되며, 복합 인덱스로는 설정 불가
- 기준 필드는 Date 타입이어야 하며, 문자열 또는 숫자는 동작 불가
※ update()를 통해 Date 필드를 갱신하면 TTL 타이머가 초기화됩니다.
🧪 TTL INDEX 테스트 시나리오
1. 테스트 환경 초기화
TTL 인덱스를 실험하기 위해 사용할 ttl_test
데이터베이스와 sessions
컬렉션을 정리합니다.
MongoDB는 Document를 insert하면 Collection이 자동으로 생성되기 때문에, 따로 createCollection()
명령은 생략해도 됩니다.
use ttl_test
db.sessions.drop() // 이전 테스트가 남아있을 수 있으므로 기존 컬렉션을 삭제
※ 참고 db.sessions.drop()은 기존 컬렉션 및 인덱스를 삭제하는 명령입니다. 테스트 전 초기화 하기 위한 작업
2. TTL 인덱스 생성
createdAt
필드를 기준으로, Document가 삽입된 후 30초가 지나면 자동으로 삭제되도록 설정합니다.
db.sessions.createIndex(
{ "createdAt": 1 },
{ expireAfterSeconds: 30 }
)
3. 테스트 데이터 Insert
현재 시간 기준으로 createdAt
필드를 포함하여 session collection에 Document를 Insert 합니다.
db.sessions.insertOne({
userId: "korea123",
createdAt: new Date()
})
4. Document 확인 및 삭제 확인
Document 가 잘 Insert되었는지 확인한 후, 30~90초 정도 기다렸다가 데이터 삭제 여부를 다시 확인합니다.
// 삽입 직후 확인
db.sessions.find()
TestReplSet [direct: primary] ttl_test> db.sessions.find()
[
{
_id: ObjectId('682a93668711c6afa4625e60'),
userId: 'korea123',
createdAt: ISODate('2025-05-19T02:11:50.933Z')
}
]
// 약 1분 후 재확인 (자동 삭제됨)
db.sessions.find()
※참고: MongoDB는 TTL 삭제를 실시간으로 수행하지 않습니다.
내부 TTL Monitor가 약 60초 간격으로 동작하기 때문에, 삭제 시점은 약간의 지연이 있을 수 있습니다.
TTL 인덱스는 세션, 로그, 인증 데이터처럼 시간이 지나면 자연스럽게 삭제되어야 하는 데이터에 매우 유용하면서 중요한 기능입니다. 불필요한 공간 낭비를 최소화 하기 위해 필요하며, 애플리케이션에서 별도의 삭제 로직을 구현하지 않아도 되므로 개발 효율성과 시스템 자원 관리를 동시에 잡을 수 있습니다.
🙌 댓글, 공감, 공유는 큰 힘이 됩니다! 😄
참조 : https://www.mongodb.com/ko-kr/docs/manual/core/index-ttl/
https://www.mongodb.com/ko-kr/docs/manual/tutorial/expire-data/
'NoSQL > MongoDB' 카테고리의 다른 글
[MongoDB] RDBMS DBA 관점에서의 MongoDB 커리큘럼 (0) | 2025.04.25 |
---|---|
[MongoDB] 성능 튜닝 실전편: 인덱스 전략과 Aggregation Pipeline 최적화 (0) | 2025.04.21 |
[MongoDB] MongoDB 운영 중 자주 발생하는 문제와 실전 대응법 (0) | 2025.04.20 |
[MongoDB] MongoDB DBA가 꼭 챙겨야 할 관리 포인트 정리 (0) | 2025.04.19 |
[MongoDB] MongoDB OpLog 변경하기 (0) | 2025.04.18 |