Laravel Octane에서 지속되는 싱글톤과 그렇지 않은 싱글톤을 구별하려면 Octane이 싱글톤 인스턴스를 처리하는 방법과 해결 방법을 이해해야 합니다. 고려해야 할 주요 사항은 다음과 같습니다.
지속되는 싱글톤
1. 서비스 제공자의 싱글톤: 서비스 제공자 내부에서, 특히 `boot` 또는 `register` 메소드에서 확인된 싱글톤은 요청 전반에 걸쳐 지속됩니다. 이는 이러한 싱글톤이 애플리케이션 부트스트랩 중에 확인되어 컨테이너 캐시에 저장되기 때문입니다.
2. Warm Services: Octane 구성 파일의 `warm` 배열에 싱글톤을 추가하여 애플리케이션 부트스트래핑 중에 싱글톤이 해결되고 지속되도록 할 수 있습니다. 이렇게 하면 이러한 싱글톤을 모든 요청에서 사용할 수 있습니다.
지속되지 않는 싱글톤
1. 요청 처리의 싱글톤: 요청 처리 중에 확인된 싱글톤은 지속되지 않습니다. 요청이 있을 때마다 생성되며 컨테이너 캐시에 저장되지 않습니다.
2. Flush Services: 서비스 공급자 내부에 싱글톤을 등록하고 해결하는 패키지가 있고 모든 요청 전에 해당 인스턴스를 플러시하려는 경우 Octane 구성 파일의 'flush' 배열에 추가할 수 있습니다. . 이렇게 하면 각 요청을 처리한 후 싱글톤이 컨테이너에서 제거됩니다.
모범 사례
1. 콜백 사용: 싱글톤을 등록할 때 실제 인스턴스 대신 콜백을 사용하여 한 번만 해결되도록 합니다.
2. 정적 속성 방지: 메모리 누수로 이어질 수 있고 요청 전반에 걸쳐 지속될 수 있으므로 싱글톤에서 정적 속성을 사용하지 마세요.
3. 상수 사용: 불변성을 보장하려면 가능하면 정적 속성 대신 상수를 사용하세요.
4. 요청 인스턴스: 싱글톤을 해결할 때 콜백을 전달하여 요청 인스턴스가 올바르게 해결되었는지 확인합니다.
5. 구성 저장소: 구성 저장소를 삽입하는 대신 'config()' 도우미 기능을 사용하여 문제가 올바르게 해결되었는지 확인하세요.
이러한 모범 사례를 따르고 Octane이 싱글톤 인스턴스를 처리하는 방법을 이해함으로써 Octane[2][4][5]에서 실행되는 Laravel 애플리케이션에서 지속되는 싱글톤과 그렇지 않은 싱글톤을 효과적으로 관리하고 구별할 수 있습니다.
인용:[1] https://laracasts.com/discuss/channels/laravel/singletone-not-working-in-laravel
[2] https://divinglaravel.com/laravel-octane-bootstrapping-the-application-and-handling-requests
[3] https://grantwinney.com/difference-between-singleton-scoped-transient/
[4] https://betterprogramming.pub/the-downsides-of-coding-with-laravel-octane-17f4a7a4ea85?gi=d8afa3954408
[5] https://www.prismetric.com/laravel-octane/