물리삭제, 논리삭제

생공나온 개발자·2021년 4월 8일
0
post-thumbnail

데이터베이스의 데이터를 삭제하는 방법에는 물리삭제(hard delete)논리삭제(soft delete)가 있다

「물리삭제(hard delete)」는

  • delete명령어를 입력하여 데이터를 삭제하는 방법

「논리삭제(soft delete)」는

  • update명령어로 데이터가 삭제 되었다는 값을 삭제 여부를 알 수 있는 컬럼에 입력하는 방법

즉, 물리삭제는 완전히 삭제하는 것이고 논리삭제는 화면에선 삭제된 것 처럼 보이지만 실제론 데이터베이스에는 데이터가 남아있는 상태를 말한다

예를 들어 아래와 같은 user 라는 테이블에 id 가 1인 데이터를 삭제하려고 한다면

Delete from user where id = 1; 이라고 쿼리문을 작성해서 입력하면 삭제가 된다.
이렇게 삭제를 하는 것이 물리삭제(hard delete)이다

논리삭제는 위 테이블에서 삭제라는 컬럼에 1을 입력했을 경우 삭제한 것 처럼 인식하게 만드는 작업이다
Update user as u set u.삭제 = 1 where u.id = 1;
이런식으로 id가 1인 삭제 컬럼의 값을 1로 업데이트를 해줘서 사용자가 화면을 사용하면서 느끼기에 삭제가 된 것 처럼 느끼게 하는 것이 논리삭제(soft delete)이다

이 논리삭제를 라라벨에서는 어떻게 사용할 수 가 있는가?

아래와 같이 데이터베이스에 마이그레이션을 할 때 $table->softDeletes();를 추가하면 deleted_at 컬럼이 추가된다.

 public function up()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->softDeletes();
        });
    }


그리고 난 뒤 Model파일에서 softDeletes를 사용한다는 걸 명시를해준다

use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Model
{
    use SoftDeletes;
}

이렇게 명시를 해주고 마이그레이션을 한 테이블에서 물리삭제를 하고 싶을 때 deleted_at컬럼에 삭제 일시를 입력하면 논리삭제가 실행된다.

*예시 (user테이블에서 id가 1인 값을 논리삭제하라)
Update user as u set u.deleted_at = '2021-04-08 00:00:00' where u.id = 1;

profile
iOS앱개발, 웹개발을 공부중인 비전공 개발자입니다.

0개의 댓글