과거의 내가 미래의 나에게
MongoDB TTL 설정하기(w.MongoDB Compass) 본문
플랫폼에 추가 요구사항이나 에러이슈가 들어오면 우리팀이 가장 먼저 이를 보고 어떻게 처리할 지 판단하여 각 팀에 뿌려준다. 이번 이슈는 사용자의 사용기록을 단순히 테이블로 쌓는 페이지에서, 1년이 지난 기록은 없어지게 해달라는 클라이언트에 요청이 있었다. 이 페이지는 DB에서 쌓인 데이터를 끌고만 오는 페이지라 DB에서 일정기간 지나면 데이터가 삭제되게끔 하는 처리만 하면 될 것 같아 백엔드팀에게 문의해보니 TTL을 설정만 하면 된다는 답변을 들었다.
따라서, 오늘은 처리했던 TTL 설정법을 단순하게 기록용도로 적을 것이다!
TTL이란?
Time to Live의 약자로 데이터가 살아있는 시간을 뜻한다. MongoDB는 TTL이 자체적으로 포함되어있어서 설정이 쉬운 편인데, 이는 noSQL DB들의 특징인 듯 하다. 아무래도 noSQL의 목적이 대규모 데이터 처리를 쉽게 하도록 하는 것이다보니 단순한 데이터 만료 같은 기능은 쉽게 제공할 수 있는 것이 아닐까?
MongoDB는 TTL을 Index 설정의 추가 기능으로 지원한다. 따라서, 특정 타입 필드에 Index를 걸어야하는데, 이 때 TTL을 사용할 거면 반드시 Date 타입의 필드로 하여야 한다. 그래야 이를 기반으로 데이터를 어떤 시각에 삭제할 지 알 수 있으니깐 말이다.
< Index 설정? >
Index란 목차이다. MongoDB의 컬렉션이 하나 있다면 특정 타입 필드에 Index를 설정할 수 있는데, 설정하게 되면 이 필드 값을 기반으로 정렬된 데이터 구조를 생성하게 된다. 이를 활용하여 검색 시 원본 데이터에서 뒤적뒤적하는 것이 아닌 해당 데이터 구조를 기반으로 하여 더 빠른 검색을 이루어낼 수 있게 해준다. 다만, 이는 추가 저장 공간을 필요로 하며 또한 데이터를 새로 등록할 때 Index를 설정한 목차도 업데이트해야하니 약간의 비용이 증가할 수는 있겠다. 그러니 검색 성능 높인다고 Index를 다 설정하는 건 절대 옳지 못한 일!
TTL을 설정한 컬렉션은 그 시간이 만료될 시 MongoDB가 백그라운드 프로세스로 자동 삭제하는데 이는 실시간이 아니고 최대 60초까지는 지연될 수 있다. TTL 설정 시 대량 삭제 되면 성능에도 영향을 미칠 수 있으니 잘 고려해봐야 할 것이다.
MongoDB Compass로 TTL 설정하기
1. 원하는 컬렉션으로 들어가 Indexes 탭 선택
TTL을 설정하기 위해 DATE 타입 필드에다가 Index를 설정해야한다. 그러기 위해 Index를 설정할 수 있는 탭으로 간다.
2. Date 타입 필드에 Index 설정
혹시 Index 항목을 보고 혹시 이미 Date 타입 필드가 Index가 걸려있다면 새로 생성하기 보단 해당 필드에 추가로 TTL 설정을 하는 것이 더 나을 것이다. 물론 상황에 따라 다르겠지만 말이다!!
Index fields에 원하는 필드를 선택하고, 오름차순인지 내림차순인지 선택한 후, Options을 연다. Create TTL이 딱 보일텐데, 해당 체크박스를 활성화하면 아래 Input창이 생길텐데 이는 데이터가 살아 있는 시간 초를 적는 곳이다.
예를 들어 데이터들이 오늘로부터 1년까지만 살아있길 원한다면 365일 × 24시간 × 60분 × 60초해서 “31,536,000”를 적어놓으면 된다.
그리고 Create Index하면 끝!!!
매우 간단한 작업이지만 블로그에 써놓으면 언젠간 다시 보는 날도 있고 또 일종의 작업 일기같은 느낌이 되는지라 오늘은 해당 주제를 하여 포스팅을 한다. 새 년도가 다가오는데 블로그에 정체성에 대해서 좀 더 생각해봐야겠다.