PHP 프레임워크 신입 기술면접

PHP 신입 · 취준 (0~1년) 프레임워크 10문항 조회수 25 · 2026-08-15 (토) 17:41:43
1 MVC 패턴
Easy

Q. Laravel 같은 PHP 프레임워크에서 사용하는 MVC 패턴의 각 구성요소(Model, View, Controller)의 역할을 설명하고, 왜 이러한 구조로 분리하는지 설명해주세요.

각 요소가 담당하는 데이터, 표현, 로직의 관점에서 생각해보세요.

A. 모범답안

Model은 데이터베이스와 상호작용하며 비즈니스 로직과 데이터 구조를 담당합니다. View는 사용자에게 보여지는 화면(HTML, CSS)을 담당하며 데이터를 시각적으로 표현합니다. Controller는 사용자의 요청을 받아 Model에서 데이터를 가져오고 View에 전달하는 중개자 역할을 합니다. 이렇게 분리하는 이유는 코드의 재사용성을 높이고, 각 부분을 독립적으로 수정할 수 있어 유지보수가 용이하기 때문입니다. 또한 여러 개발자가 동시에 작업할 때 역할을 명확히 나눌 수 있습니다.

핵심 포인트
  • • Model은 데이터와 비즈니스 로직 담당
  • • View는 화면 표현 담당
  • • Controller는 요청 처리 및 중개
  • • 코드 재사용성과 유지보수성 향상
답변에 넣으면 좋은 키워드
MVC Model View Controller 관심사의 분리 유지보수
실무에서는

대규모 웹 애플리케이션에서 디자이너, 백엔드 개발자, 프론트엔드 개발자가 각자의 영역에서 독립적으로 작업할 수 있게 합니다.

Follow-up 질문

실제 사용자가 게시글 목록을 요청했을 때 MVC 각 컴포넌트가 어떤 순서로 동작하는지 설명해주세요.

2 라우팅
Easy

Q. PHP 프레임워크에서 라우팅(Routing)이란 무엇이며, 왜 필요한지 설명해주세요. 전통적인 PHP 파일 기반 접근 방식과 어떻게 다른가요?

URL과 실행될 코드를 연결하는 방식의 차이를 생각해보세요.

A. 모범답안

라우팅은 사용자가 요청한 URL을 특정 컨트롤러의 메서드나 함수에 연결시켜주는 메커니즘입니다. 전통적인 PHP에서는 URL이 실제 파일 경로와 일치해야 했지만(예: /user/profile.php), 프레임워크의 라우팅은 URL을 논리적으로 설계할 수 있습니다(예: /user/profile). 라우팅을 사용하면 깔끔하고 의미있는 URL을 만들 수 있고, RESTful API 설계가 가능하며, URL 구조 변경 시 파일을 이동하지 않고 라우팅 설정만 수정하면 됩니다. 또한 URL 파라미터를 쉽게 추출하고 처리할 수 있습니다.

핵심 포인트
  • • URL과 컨트롤러 메서드를 매핑
  • • 논리적이고 의미있는 URL 구조 가능
  • • 파일 경로와 URL 분리
  • • RESTful 설계 지원
답변에 넣으면 좋은 키워드
라우팅 URL 매핑 RESTful 컨트롤러 엔드포인트
실무에서는

API 서버에서 /api/v1/products/123 같은 RESTful URL을 설계할 때 라우팅을 통해 깔끔하게 구현합니다.

Follow-up 질문

Laravel에서 GET /users/123 같은 동적 파라미터를 포함한 라우트는 어떻게 정의하나요?

3 ORM
Medium

Q. Eloquent나 Doctrine 같은 ORM(Object-Relational Mapping)이 무엇인지 설명하고, 직접 SQL 쿼리를 작성하는 것과 비교했을 때의 장단점을 설명해주세요.

객체 지향 코드와 데이터베이스 테이블 간의 변환에 초점을 맞춰보세요.

A. 모범답안

ORM은 데이터베이스 테이블을 객체로 매핑하여 SQL을 직접 작성하지 않고도 데이터베이스를 조작할 수 있게 해주는 기술입니다. 장점으로는 PHP 코드로 데이터베이스를 다루어 가독성이 높고, 데이터베이스 종류가 바뀌어도 코드 수정이 최소화되며, SQL Injection 같은 보안 취약점을 자동으로 방어합니다. 단점으로는 복잡한 쿼리의 경우 ORM으로 표현하기 어렵거나 성능이 떨어질 수 있고, ORM이 생성하는 쿼리를 이해하지 못하면 비효율적인 쿼리가 실행될 수 있습니다. 또한 ORM 학습에 시간이 필요합니다.

핵심 포인트
  • • 테이블을 객체로 매핑하여 다룸
  • • SQL 직접 작성 없이 데이터 조작
  • • 보안성과 이식성 향상
  • • 복잡한 쿼리나 성능 최적화에는 제약
답변에 넣으면 좋은 키워드
ORM Eloquent 객체 매핑 SQL Injection 방지 데이터베이스 추상화
실무에서는

사용자 정보를 조회할 때 User 모델의 find() 메서드로 간단히 데이터를 가져오고 객체로 다룰 수 있습니다.

Follow-up 질문

ORM의 N+1 쿼리 문제가 무엇인지 알고 있나요? 어떻게 해결할 수 있을까요?

4 미들웨어
Medium

Q. PHP 프레임워크에서 미들웨어(Middleware)의 개념과 역할을 설명하고, 어떤 상황에서 사용하는지 예시를 들어주세요.

요청이 컨트롤러에 도달하기 전후에 실행되는 코드를 생각해보세요.

A. 모범답안

미들웨어는 HTTP 요청이 컨트롤러에 도달하기 전이나 응답이 브라우저로 전송되기 전에 실행되는 중간 처리 계층입니다. 요청과 응답을 필터링하거나 수정하는 역할을 하며, 여러 미들웨어를 체인처럼 연결하여 순차적으로 실행할 수 있습니다. 주로 사용자 인증 확인, 권한 검증, 로깅, CORS 헤더 추가, 요청 데이터 검증 등에 사용됩니다. 예를 들어 관리자 페이지 접근 시 인증 미들웨어가 로그인 여부를 확인하고, 미인증 사용자는 로그인 페이지로 리다이렉트합니다. 미들웨어를 사용하면 공통 로직을 재사용하고 컨트롤러 코드를 간결하게 유지할 수 있습니다.

핵심 포인트
  • • 요청/응답 사이의 중간 처리 계층
  • • 인증, 권한, 로깅 등 공통 로직 처리
  • • 체인 형태로 여러 미들웨어 연결 가능
  • • 코드 재사용성과 관심사 분리
답변에 넣으면 좋은 키워드
미들웨어 인증 필터링 체인 요청 처리 관심사 분리
실무에서는

API 서버에서 모든 요청에 대해 JWT 토큰 검증을 미들웨어로 구현하여 인증을 자동화합니다.

Follow-up 질문

전역 미들웨어와 라우트 미들웨어의 차이는 무엇인가요?

5 의존성 주입
Medium

Q. 의존성 주입(Dependency Injection)이란 무엇이며, PHP 프레임워크에서 어떻게 활용되는지 설명해주세요. 직접 객체를 생성하는 것과 어떤 차이가 있나요?

객체가 필요로 하는 다른 객체를 외부에서 주입받는 방식을 생각해보세요.

A. 모범답안

의존성 주입은 객체가 필요로 하는 다른 객체(의존성)를 내부에서 직접 생성하지 않고 외부에서 전달받는 디자인 패턴입니다. 클래스 내부에서 new 키워드로 객체를 생성하는 대신, 생성자나 메서드 파라미터를 통해 필요한 객체를 주입받습니다. Laravel 같은 프레임워크는 서비스 컨테이너를 통해 자동으로 의존성을 주입해주므로, 컨트롤러 생성자에 타입힌트만 작성하면 필요한 객체가 자동으로 전달됩니다. 이를 통해 코드 간 결합도가 낮아지고, 테스트 시 Mock 객체로 쉽게 교체할 수 있으며, 코드의 유연성과 재사용성이 향상됩니다.

핵심 포인트
  • • 외부에서 필요한 객체를 주입받음
  • • 객체 간 결합도 감소
  • • 테스트 용이성 향상
  • • 프레임워크의 서비스 컨테이너가 자동 주입
답변에 넣으면 좋은 키워드
의존성 주입 DI 서비스 컨테이너 결합도 Mock 타입힌트
실무에서는

결제 서비스를 테스트할 때 실제 결제 API 대신 가짜 결제 객체를 주입하여 안전하게 테스트합니다.

Follow-up 질문

서비스 컨테이너에 커스텀 클래스를 바인딩하는 방법을 알고 있나요?

6 템플릿 엔진
Easy

Q. Blade나 Twig 같은 템플릿 엔진을 사용하는 이유는 무엇인가요? 순수 PHP 코드를 View에 직접 작성하는 것과 비교해서 설명해주세요.

코드의 가독성과 보안, 재사용성 측면에서 생각해보세요.

A. 모범답안

템플릿 엔진은 View 레이어를 더 간결하고 읽기 쉽게 작성할 수 있도록 도와주는 도구입니다. 순수 PHP보다 문법이 간결하여 디자이너나 프론트엔드 개발자도 쉽게 이해할 수 있고, 자동 이스케이프 기능으로 XSS 공격을 방지합니다. 레이아웃 상속과 컴포넌트 재사용 기능을 제공하여 중복 코드를 줄일 수 있으며, 조건문과 반복문을 더 직관적으로 표현할 수 있습니다. 또한 템플릿 캐싱을 통해 성능을 최적화하고, 비즈니스 로직과 표현 로직을 명확히 분리할 수 있습니다.

핵심 포인트
  • • 간결하고 읽기 쉬운 문법
  • • 자동 이스케이프로 XSS 방지
  • • 레이아웃 상속과 컴포넌트 재사용
  • • 로직과 표현의 명확한 분리
답변에 넣으면 좋은 키워드
템플릿 엔진 Blade Twig 이스케이프 레이아웃 상속 XSS 방지
실무에서는

웹사이트의 헤더와 푸터를 레이아웃으로 정의하고 각 페이지에서 상속받아 중복 코드를 제거합니다.

Follow-up 질문

Blade에서 레이아웃 상속을 구현할 때 @extends, @section, @yield의 역할을 설명해주세요.

7 유효성 검증
Easy

Q. PHP 프레임워크에서 제공하는 유효성 검증(Validation) 기능의 중요성과 동작 방식을 설명해주세요. 직접 if문으로 검증하는 것과 어떤 차이가 있나요?

사용자 입력 데이터의 안전성과 코드의 일관성을 생각해보세요.

A. 모범답안

유효성 검증은 사용자로부터 받은 데이터가 예상한 형식과 규칙에 맞는지 확인하는 과정입니다. 프레임워크의 검증 기능은 규칙을 선언적으로 정의할 수 있어 코드가 간결하고 가독성이 높으며, 에러 메시지를 자동으로 생성하고 다국어 지원이 가능합니다. 직접 if문으로 검증하면 코드가 길어지고 중복이 발생하며, 에러 처리가 일관성 없게 됩니다. 프레임워크는 이메일, URL, 숫자 범위 등 다양한 규칙을 미리 제공하고, 커스텀 규칙도 쉽게 추가할 수 있습니다. 또한 검증 실패 시 자동으로 이전 페이지로 리다이렉트하고 에러를 표시합니다.

핵심 포인트
  • • 선언적이고 간결한 규칙 정의
  • • 자동 에러 메시지 생성
  • • 다양한 내장 규칙 제공
  • • 일관성 있는 검증 처리
답변에 넣으면 좋은 키워드
유효성 검증 Validation 규칙 에러 메시지 사용자 입력 보안
실무에서는

회원가입 폼에서 이메일 형식, 비밀번호 길이, 필수 입력 등을 체계적으로 검증하여 데이터 무결성을 보장합니다.

Follow-up 질문

Form Request 클래스를 사용하면 어떤 장점이 있나요?

8 마이그레이션
Medium

Q. 데이터베이스 마이그레이션(Migration)이란 무엇이며, 왜 사용하는지 설명해주세요. 직접 phpMyAdmin이나 SQL 파일로 테이블을 관리하는 것과 어떤 차이가 있나요?

데이터베이스 스키마 변경의 버전 관리와 팀 협업 측면을 생각해보세요.

A. 모범답안

마이그레이션은 데이터베이스 스키마의 변경사항을 코드로 관리하고 버전 관리하는 시스템입니다. PHP 코드로 테이블 생성, 컬럼 추가/수정, 인덱스 설정 등을 정의하며, up 메서드로 변경사항을 적용하고 down 메서드로 롤백할 수 있습니다. Git과 함께 사용하여 데이터베이스 변경 이력을 추적할 수 있고, 팀원들이 동일한 스키마를 쉽게 구축할 수 있습니다. 개발, 스테이징, 프로덕션 환경에서 일관된 스키마를 유지할 수 있으며, 배포 시 자동으로 마이그레이션을 실행하여 실수를 줄입니다. SQL 파일로 관리하면 변경 이력 추적이 어렵고 환경별 동기화가 복잡해집니다.

핵심 포인트
  • • 스키마 변경을 코드로 관리
  • • 버전 관리 및 롤백 가능
  • • 팀 협업과 환경 동기화 용이
  • • 자동화된 배포 지원
답변에 넣으면 좋은 키워드
마이그레이션 스키마 버전 관리 롤백 up down
실무에서는

새로운 기능 추가로 users 테이블에 profile_image 컬럼을 추가할 때 마이그레이션으로 모든 환경에 일관되게 적용합니다.

Follow-up 질문

마이그레이션 파일의 타임스탬프는 어떤 역할을 하나요?

9 서비스 프로바이더
Hard

Q. Laravel의 서비스 프로바이더(Service Provider)가 무엇인지 설명하고, 프레임워크 부트스트래핑 과정에서 어떤 역할을 하는지 설명해주세요.

애플리케이션 초기화 시 서비스를 등록하고 설정하는 중앙 집중 방식을 생각해보세요.

A. 모범답안

서비스 프로바이더는 Laravel 애플리케이션의 모든 서비스를 등록하고 부팅하는 중앙 집중식 위치입니다. register 메서드에서 서비스 컨테이너에 바인딩을 등록하고, boot 메서드에서 애플리케이션 부팅 시 필요한 초기화 작업을 수행합니다. 라우트 등록, 이벤트 리스너 연결, 미들웨어 설정, 뷰 컴포저 등록 등의 작업을 서비스 프로바이더에서 처리합니다. 모든 서비스 프로바이더는 config/app.php의 providers 배열에 등록되며, 프레임워크 부팅 시 순차적으로 실행됩니다. 커스텀 패키지나 모듈을 만들 때도 서비스 프로바이더를 통해 Laravel에 통합합니다.

핵심 포인트
  • • 서비스 등록과 부팅의 중앙 위치
  • • register에서 바인딩, boot에서 초기화
  • • 라우트, 이벤트, 미들웨어 등 설정
  • • 패키지 통합의 진입점
답변에 넣으면 좋은 키워드
서비스 프로바이더 register boot 바인딩 부트스트래핑 서비스 컨테이너
실무에서는

커스텀 결제 모듈을 개발할 때 서비스 프로바이더에서 결제 서비스를 등록하고 설정 파일을 퍼블리시합니다.

Follow-up 질문

지연 로딩(Deferred) 서비스 프로바이더는 언제 사용하나요?

10 Eloquent 관계
Medium

Q. Eloquent ORM에서 모델 간의 관계(Relationship)를 정의하는 방법과 종류를 설명해주세요. hasMany와 belongsTo의 차이는 무엇인가요?

1:N 관계에서 어느 쪽이 외래키를 가지는지 생각해보세요.

A. 모범답안

Eloquent 관계는 모델 간의 데이터베이스 관계를 객체 지향적으로 표현하는 방법입니다. 주요 관계 타입으로는 hasOne(1:1), hasMany(1:N), belongsTo(N:1), belongsToMany(N:M) 등이 있습니다. hasMany는 '하나가 여러 개를 가진다'는 의미로, 예를 들어 User가 여러 Post를 가질 때 User 모델에 정의합니다. belongsTo는 '~에 속한다'는 의미로, Post가 하나의 User에 속할 때 Post 모델에 정의하며 외래키를 가지는 쪽입니다. 관계를 정의하면 $user->posts처럼 직관적으로 연관 데이터에 접근할 수 있고, Eager Loading으로 N+1 문제를 해결할 수 있습니다.

핵심 포인트
  • • 모델 간 관계를 메서드로 정의
  • • hasMany는 1:N의 '1' 쪽
  • • belongsTo는 1:N의 'N' 쪽이며 외래키 보유
  • • 객체처럼 연관 데이터 접근
답변에 넣으면 좋은 키워드
Eloquent 관계 hasMany belongsTo 외래키 Eager Loading
실무에서는

블로그 시스템에서 사용자와 게시글의 관계를 정의하여 특정 사용자의 모든 게시글을 쉽게 조회합니다.

Follow-up 질문

Eager Loading과 Lazy Loading의 차이를 설명하고, with() 메서드의 역할은 무엇인가요?

댓글 0

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

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