Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Observer Pattern 이란


옵서버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. - 출처 wikipedia

옵저버 패턴은 객체의 상태 변화를 등록한 관찰자에게 알려주는 패턴으로 데이터 변경이 발생할 때 여러 객체에게 통지할 수 있습니다.

...

  • retrieved : DB 에서 레코드를 가져온 후에
  • creating : 레코드를 DB 에 insert 하기 전
  • created : 레코드를 DB 에 insert 한 후
  • updating : 레코드를 DB 에 update 하기 전
  • updated : 레코드를 DB 에 update 한 후
  • saving : 레코드를 DB 에 저장하기 전(created 와 updated 모두 해당).
  • saved : 레코드를 DB 에 저장한 후(created 와 updated 모두 해당).
  • deleting : 레코드를 DB 에서 삭제하기 전(soft delete 와 delete 모두 해당).
  • deleted : 레코드를 DB 에서 삭제한 후(soft delete 와 delete 모두 해당).
  • restoring : Soft delete 한 레코드를 DB 에서 복구하기 전
  • restored : Soft delete 한 레코드를 DB 에서 복구한 후


Eloquent Model 에

...

메서드 작성

개별 모델 클래스에 처리하려는 이벤트 이름의 메서드를 작성하고 boot() 에 등록해 주면 됩니다. 예로 포스트 작성시 글쓴이의 id(writer_id 필드) 를 자동으로 설정하려면 아래와 같이 boot() 메서드에 creating() 을 구현해 주면 됩니다.

...

하지만 이 방식은 모델마다 옵저버를 등록하므로 모델이 많아질 경우 어느 모델이 observer 를 사용하는지 알기가 어렵고 관리가 용이하지 않은 단점이 있습니다.

Observer class 생성

laravel 에서는 옵저버 전용 클래스를 제공하며 make:observer artisan 명령으로 옵저버를 생성할 수 있습니다. 예로 다음 명령은 Post 모델의 event 를 받는 PostObserver 를 생성합니다.

...