DB 삭제기록 유지 (paranoia)

Preservation DB (paranoia)

사이트 운영자는 자신의 홈페이지를 운영하면서 홈페이지 내 데이터가 삭제된다면, 그것이 그냥 삭제되도록 냅두는것이 아닌 삭제된 데이터에 대해 기록이 남겨져야 할 이유가 있습니다.

나중에 게시글 내 욕설로 인해 피해자가 가해자에게 고소를 하면, 게시글을 관리하는 사이트 운영자는고소의 시발점이 되는 (삭제된) 자료를 경찰이 요구를 하면 해당 게시글의 (삭제된) 기록에 대해 보여줘야 할 의무가 있기 때문입니다.

그래서, 이번 시간에는 삭제된 데이터를 보관하는방법에 대해 알려드리고자 합니다.

1) 이번 기능은 결과를 확인해 보려면 rails_db Gem이 깔려있어야 하는 기능입니다.

[참고 : http://blog.naver.com/kbs4674/221052908122 ]

2) Controller에서 삭제를 담당하는 def 명칭이 'destroy'여야 합니다. 이 명칭이 아니면 아마 이 기능에 있어 문제가 될 수 있습니다.


Paranoia (삭제 후, 데이터 DB 보존)

  • /Gemfile 에서 다음 내용을 입력합니다.
gem 'paranoia', '~> 2.2'

그리고 내용 입력 후, 다음 내용을 명령어 입력창(터미널)에 입력을 해줍니다.

bundle install
  • 명령어 입력창(터미널)에 다음 명령어를 입력해줍니다.
rails g migration AddDeletedAtTo(DB 기록을 남길 게시판DB명)

저같은 경우는 게시판 관련 DB명이 posts(/db/migrate/기간_create_posts.rb)라서 다음과 같이 입력했습니다.

rails g migration AddDeletedAtToPosts
  • 위 명령어를 치면 /db/migrate 폴더 내에 'add_deleted_at_to_posts.rb' 라는 새로운 DB 파일이 생긴게 보일겁니다.

    해당 파일을 열어주고, 다음을 입력해 줍니다.

class AddDeletedAtToPosts < ActiveRecord::Migration[5.1]
  def change
    add_column :(모델명)s, :deleted_at, :datetime
    add_index :(모델명)s, :deleted_at
  end
end

만약 post에 대한 DB를 보존해야 한다면

...
add_column :posts, :deleted_at, :datatime
add_index :posts, :deleted_at
...
  • 입력 후, 명령어 입력창에 다음 명령어를 입력해줍니다.
rake db:migrate
  • /app/model/post.rb 로 이동하시고, 'acts_as_paranoid'을 추가적으로 입력해 줍니다.
class Post < ApplicationRecord
  acts_as_paranoid

    ...
end
  • rails_db Gem을 통해 DB정보를 보여주는 사이트로 가서 post에 대한 Table을 보면

Deleted at이라는 새로운 컬럼(Column)이 생겨난 것을 확인할 수 있습니다.

그리고 게시글을 삭제하면 Deleted at에 삭제된 게시물에 대한 삭제 시간 및 Table에 보존되어있는것을 보실 수 있습니다.

원래 게시글이 삭제되면, 삭제시간이 기록이 안되고, Table에서도 기록이 다 사라집니다.

게시글 외에도 카테고리, 댓글 등에도 이 Gem을 적용할 수 있습니다.

방법은 Post(게시글)과 동일합니다.

참고

개인적으로, user.rb 모델에는 Paranoia를 적용하지 않으면 좋을 것 같습니다.

일단, 적용은 되는데 A 회원이 가입 및 탈퇴를 하고, 새로운 회원가입 시 A회원이 썼던 이메일 등을 재탕하고 가입을 시도하면 과거의 기록을 갖고있다 보니 충돌(?) 문제 때문인지 회원가입이 안되고, 오류가 발생합니다.

참고

  1. Github : https://github.com/rubysherpas/paranoia

results matching ""

    No results matching ""