Maravel-Framework 10.61.0는 순환 의존성을 방지합니다

발행: (2026년 2월 5일 오후 05:03 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

배경

Laravel에 이 기능을 추가하려는 시도가 여러 번 있었습니다.

문제

Maravel-Framework에서는 매크로 가능한 클래스가 컨테이너에서 해석됩니다.
\Illuminate\Events\DispatcherIlluminate\Console\Scheduling\Schedule 같은 일부 클래스는 컨테이너에서 해석될 때 순환 의존성을 만들게 됩니다. 이로 인해 다음과 같은 문제가 발생합니다:

  • 세그멘테이션 오류
  • 메모리 소진

개발자는 이러한 문제를 디버깅하는 데 오랜 시간을 소비할 수 있습니다.

해결책

이러한 경우를 조기에 감지하기 위해, 이 PR은 10 MB(app.circular_dependency_memory_limit을 통해 구성 가능)의 강제 메모리 제한을 도입합니다. 제한에 도달하면 프로세스가 치명적인 오류에 빠지는 대신 CircularDependencyException이 발생합니다.

/**
 * Limit of extra memory used to detect circular dependencies
 * when resolving an abstract from container (bytes)
 */
'circular_dependency_memory_limit' => 10_485_760, // 10 MB

오류 예시

Illuminate\Contracts\Container\CircularDependencyException
Circular dependency detected while resolving [Illuminate\Console\Scheduling\Schedule].
Memory limit reached or exceeded 10485760 bytes.
Dependencies initial memory (bytes): {"Illuminate\Console\Scheduling\Schedule":27262976}
    at vendor/macropay-solutions/maravel-framework/illuminate/Container/Container.php:886

메시지 의미

  1. Illuminate\Console\Scheduling\Schedule이 해석되기 시작할 때 PHP 메모리 사용량(memory_get_usage(true))은 27 262 976 바이트입니다.
  2. 감지 루프는 메모리 증가량이 10 MB(10 485 760 바이트)를 초과할 때까지 계속됩니다.
  3. 이 루프가 중단되지 않으면 메모리를 계속 할당하게 되어 세그멘테이션 오류나 치명적인 “메모리 부족” 오류가 발생합니다.

추가 참고 사항

  • 시간 기반 제한도 세그멘테이션 오류나 메모리 제한 치명 오류를 초래합니다.
  • 메모리 증가량을 기준으로 제한을 시도한 첫 번째 방법은 신뢰성이 떨어졌습니다.
  • 이 개선은 DI 헬퍼에 대한 이전 변경 사항을 따릅니다. 해당 변경은 애플리케이션 부팅이 완료되기 전에 컨테이너에서 make를 호출하는 것을 방지했습니다.
Back to Blog

관련 글

더 보기 »

Laravel 초보자를 위한 PHP 기본

Laravel 여정을 시작한다면, 미리 알아두어야 할 한 가지가 있습니다: > PHP 기본기가 탄탄할수록 Laravel은 더 쉬워집니다. 많은 초보자…