PHP 시니어 프레임워크 기술면접

PHP 시니어 (7년+) 프레임워크 5문항 조회수 39 · 2026-07-15 (수) 11:11:04
1 Symfony HttpKernel
Hard

Q. Symfony의 HttpKernel 컴포넌트가 Request를 처리하는 전체 라이프사이클을 설명하고, kernel.request, kernel.controller, kernel.view, kernel.response, kernel.terminate 등 각 이벤트가 발생하는 시점과 역할을 설명해주세요. 또한 SubRequest의 개념과 ESI(Edge Side Includes)를 활용한 페이지 캐싱 전략을 실무 관점에서 설명해주세요.

A. 모범답안

HttpKernel은 Request 객체를 받아 Response를 반환하는 핵심 컴포넌트입니다. kernel.request는 컨트롤러 실행 전 요청 변환에 사용되고, kernel.controller는 컨트롤러 결정 후 실행 전 단계, kernel.view는 컨트롤러가 Response를 반환하지 않을 때 뷰 렌더링에 사용되며, kernel.response는 응답 전송 전 수정, kernel.terminate는 응답 후 로깅이나 분석 작업에 활용됩니다. SubRequest는 메인 Request 내에서 독립적인 요청을 처리하며, ESI를 통해 페이지 일부를 다른 캐시 TTL로 관리하여 동적 콘텐츠와 정적 콘텐츠를 분리 캐싱할 수 있습니다. 대규모 시스템에서는 Varnish와 ESI를 결합하여 사용자별 콘텐츠와 공통 콘텐츠를 다른 전략으로 캐싱합니다.

핵심 포인트
  • • HttpKernel의 이벤트 기반 아키텍처와 각 이벤트의 실행 순서 및 역할
  • • SubRequest를 통한 독립적인 요청 처리와 격리된 실행 컨텍스트
  • • ESI를 활용한 부분 캐싱 전략과 Varnish 연동을 통한 성능 최적화
  • • kernel.terminate를 활용한 비동기 작업 처리와 응답 지연 방지
Follow-up 질문

HttpKernel의 handle() 메서드에서 예외가 발생했을 때 kernel.exception 이벤트가 처리되는 방식과 커스텀 에러 핸들링 전략을 설명해주세요.

2 Laravel Service Provider
Medium

Q. Laravel의 Service Provider 라이프사이클에서 register()와 boot() 메서드의 차이점을 설명하고, Deferred Provider의 동작 원리와 성능 최적화에 미치는 영향을 설명해주세요. 또한 대규모 모듈형 애플리케이션에서 여러 Service Provider 간의 의존성을 관리하는 전략을 제시해주세요.

A. 모범답안

register() 메서드는 서비스 바인딩만 수행하며 다른 서비스에 의존해서는 안 되고, boot() 메서드는 모든 서비스가 등록된 후 실행되어 다른 서비스를 안전하게 사용할 수 있습니다. Deferred Provider는 실제로 필요할 때까지 로딩을 지연시켜 애플리케이션 부트스트랩 시간을 단축하며, provides() 메서드로 제공하는 서비스를 명시합니다. 대규모 시스템에서는 Provider 간 의존성을 명시적으로 관리하기 위해 boot() 메서드에서 필요한 서비스를 명확히 타입 힌팅하고, 순환 의존성을 피하기 위해 이벤트 기반 통신이나 Facade를 활용합니다. 모듈별 Provider를 분리하고 Package Discovery를 활용하여 자동 등록하는 것이 유지보수성을 높입니다.

핵심 포인트
  • • register()는 바인딩만, boot()는 모든 서비스 등록 후 실행되는 라이프사이클
  • • Deferred Provider를 통한 지연 로딩과 부트스트랩 성능 최적화
  • • Provider 간 의존성 관리와 순환 참조 방지 전략
  • • 모듈형 아키텍처에서 Package Discovery를 활용한 자동 등록
Follow-up 질문

Laravel의 Package Discovery 메커니즘이 composer.json의 extra.laravel.providers를 어떻게 처리하는지 설명하고, 대규모 팀 환경에서 패키지 버전 관리 전략을 제시해주세요.

3 Symfony Form Component
Hard

Q. Symfony Form 컴포넌트의 DataMapper와 DataTransformer의 차이점과 각각의 역할을 설명하고, 복잡한 중첩 폼(Nested Form)에서 데이터 변환이 어떻게 처리되는지 설명해주세요. 또한 대용량 셀렉트 박스나 동적 폼 필드를 처리할 때 성능 최적화 방법과 AJAX를 활용한 Dynamic Form 구현 전략을 제시해주세요.

A. 모범답안

DataMapper는 폼과 도메인 객체 간의 데이터 매핑을 담당하며 객체의 속성과 폼 필드를 연결하고, DataTransformer는 뷰와 모델 데이터 형식 간의 변환을 처리합니다. 중첩 폼에서는 각 레벨에서 독립적으로 DataTransformer가 동작하며, 부모에서 자식으로 데이터가 전파될 때 각 Transformer가 순차적으로 적용됩니다. 대용량 셀렉트는 Choice Loader를 사용해 Lazy Loading을 구현하고, EntityType의 query_builder 옵션으로 필요한 데이터만 조회합니다. Dynamic Form은 Form Events(PRE_SET_DATA, PRE_SUBMIT)를 활용하여 요청 데이터에 따라 필드를 동적으로 추가하고, AJAX로 부분 폼을 렌더링하여 전체 페이지 리로드를 방지합니다.

핵심 포인트
  • • DataMapper는 객체-폼 매핑, DataTransformer는 뷰-모델 데이터 변환 담당
  • • 중첩 폼에서 Transformer의 계층적 적용과 데이터 전파 메커니즘
  • • Choice Loader를 통한 대용량 옵션의 지연 로딩과 쿼리 최적화
  • • Form Events를 활용한 동적 필드 생성과 AJAX 기반 부분 렌더링
Follow-up 질문

Symfony Form에서 Collection Type을 사용할 때 allow_add와 allow_delete 옵션의 동작 원리와 프론트엔드에서 동적으로 항목을 추가/삭제할 때 prototype 필드를 활용하는 방법을 설명해주세요.

4 Laravel Telescope & Debugging
Medium

Q. Laravel Telescope의 내부 아키텍처와 Watcher 시스템의 동작 원리를 설명하고, 프로덕션 환경에서 Telescope를 안전하게 사용하기 위한 전략을 설명해주세요. 또한 대규모 트래픽 환경에서 Telescope 데이터가 데이터베이스에 미치는 부하를 최소화하는 방법과 샘플링 전략, 그리고 Telescope 대신 사용할 수 있는 APM 도구들과의 비교를 제시해주세요.

A. 모범답안

Telescope는 Watcher 시스템을 통해 애플리케이션의 다양한 이벤트(쿼리, 요청, 예외, 캐시 등)를 수집하고, 각 Watcher가 해당 이벤트를 리스닝하여 데이터를 IncomingEntry로 변환 후 저장합니다. 프로덕션에서는 TelescopeServiceProvider의 gate() 메서드로 접근을 제한하고, 환경 변수로 활성화 여부를 제어해야 합니다. 대규모 환경에서는 샘플링 비율을 설정하여 일부 요청만 기록하고, 특정 Watcher만 활성화하며, 오래된 데이터를 주기적으로 삭제하는 telescope:prune 명령을 스케줄링합니다. New Relic, Datadog, Sentry 같은 APM은 더 강력한 성능 분석과 알림 기능을 제공하지만 비용이 발생하므로, Telescope는 개발/스테이징에, APM은 프로덕션에 사용하는 것이 일반적입니다.

핵심 포인트
  • • Watcher 시스템의 이벤트 리스닝과 IncomingEntry 변환 메커니즘
  • • 프로덕션 환경의 접근 제어와 조건부 활성화 전략
  • • 샘플링과 선택적 Watcher 활성화를 통한 성능 부하 최소화
  • • APM 도구와의 비교 및 환경별 모니터링 도구 선택 전략
Follow-up 질문

Laravel Horizon과 Telescope의 차이점을 설명하고, Queue 작업 모니터링 시 두 도구를 함께 사용하는 전략과 Redis 메모리 사용량 관리 방법을 설명해주세요.

5 PHP Attribute & Annotation
Hard

Q. PHP 8.0에서 도입된 Attribute(이전 Doctrine Annotation)의 동작 원리와 Reflection API를 통한 메타데이터 추출 과정을 설명하고, Symfony의 Routing, Validation, Security 등에서 Attribute가 활용되는 방식을 설명해주세요. 또한 커스텀 Attribute를 설계할 때 고려해야 할 사항과 Attribute 기반 AOP(Aspect-Oriented Programming) 구현 전략을 제시해주세요.

A. 모범답안

PHP Attribute는 클래스, 메서드, 프로퍼티에 메타데이터를 선언적으로 추가하는 기능으로, ReflectionClass, ReflectionMethod 등의 getAttributes() 메서드로 런타임에 추출됩니다. Symfony는 Routing에서 #[Route] Attribute로 경로를 정의하고, Validation에서 #[Assert] 시리즈로 검증 규칙을 선언하며, Security에서 #[IsGranted]로 접근 제어를 구현합니다. 커스텀 Attribute 설계 시 #[Attribute] 속성으로 적용 대상(TARGET_CLASS, TARGET_METHOD 등)을 명시하고, 반복 가능 여부(IS_REPEATABLE)를 설정해야 합니다. AOP 구현을 위해서는 Proxy 패턴이나 Decorator를 사용하여 Attribute가 붙은 메서드 호출을 가로채고, Reflection으로 Attribute 정보를 읽어 횡단 관심사(로깅, 트랜잭션, 캐싱)를 처리합니다.

핵심 포인트
  • • Reflection API를 통한 Attribute 메타데이터 런타임 추출
  • • Symfony 프레임워크의 Routing, Validation, Security에서의 Attribute 활용
  • • 커스텀 Attribute 설계 시 적용 대상과 반복 가능성 설정
  • • Proxy 패턴과 Reflection을 결합한 Attribute 기반 AOP 구현
Follow-up 질문

Doctrine ORM에서 Entity 매핑에 Attribute를 사용할 때와 XML/YAML 설정을 사용할 때의 장단점을 비교하고, 대규모 프로젝트에서 메타데이터 관리 전략을 제시해주세요.

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!