PVDI의 Django session 정리

U-VDI는 Python Web Framework인 Django( https://www.djangoproject.com/ )를 사용하여 작성되었습니다. 사용자 로그인시 Django의 session을 이용하여 서버(DB)에 session에 관한 정보를 저장하게 되는데, session이 만료(expired)되어도 그 데이터를 지워지지 않고 DB에 남아 있게됩니다. 따라서 주기적으로 만료된 Session 데이터를 정리(clear)해야만 합니다.

DB Table

Django Session에 대한 정보는 Master VM의 DB(Mysql)에 저장됩니다. 활성화된 Master VM의 ssh 접속후 아래의 명령으로 DB에 접속하여 확인할 수 있습니다.

# su - orchard
$ cd ~/pvdi/src
$ ./manage.py dbshell

django_session 테이블에 session에 관한 정보가 저장됩니다.

mysql> desc django_session;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| session_key  | varchar(40) | NO   | PRI | NULL    |       |
| session_data | longtext    | NO   |     | NULL    |       |
| expire_date  | datetime    | NO   | MUL | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
  • session_key : session에 관한 key
  • session_data : session key에 대한 value
  • expire_date : session 만료(expired)시간

만료된 session 수, 즉 삭제해야할 데이터 row수는 아래와 같이 확인 할 수 있습니다.

mysql> select count(*) from django_session where date(expire_date) < date(now());
+----------+
| count(*) |
+----------+
|      535 |
+----------+

clear sessions

SQL문법에 익숙하다면 직접 SQL문을 작성하여 expire_date field값이 현재 시간을 초과한 rows를 DELETE하면 됩니다. 그러나 django에서는 아래의 명령으로 간단히 만료된 sessions를 정리할 수 있습니다.

# su - orchard
$ cd ~/pvdi/src
$ ./manage.py clearsessions

cronjob 등록

관리자가 직접 clearsession 명령을 주기적으로 실행하는것보다 daily cronjob에 추가하는 방법을 권장합니다. 만약 VDI의 DB Backup이 스케쥴링되어 있다면, DB Backup이 수행되기 전에 clearsessions를 수행해야 불필요한 Data가 백업되지 않습니다.

아래는 매일 새벽 1시에 clearsession이 수행되도록 한 예입니다.

# su - orchard
$ crontab -e
0 1 * * * /home/orchard/pvdi/manage.py clearsessions

참고 : https://docs.djangoproject.com/ja/1.9/topics/http/sessions/