PHP 주니어 종합 기술면접

PHP 주니어 (1~3년) 종합 5문항 조회수 112 · 2026-06-22 (월) 11:10:43
1 PHP 세션 관리
Easy

Q. PHP에서 세션(Session)과 쿠키(Cookie)의 차이점을 설명하고, 각각 어떤 데이터를 저장하는 것이 적합한지 말씀해주세요.

A. 모범답안

세션은 서버 측에 데이터를 저장하고 클라이언트는 세션 ID만 쿠키로 가지며, 쿠키는 클라이언트 브라우저에 직접 데이터를 저장합니다. 세션은 서버에 저장되므로 보안에 유리하고 로그인 정보나 민감한 사용자 상태를 저장하는데 적합합니다. 쿠키는 클라이언트에 저장되어 사용자가 수정할 수 있으므로 테마 설정, 언어 선택 같은 비민감한 환경설정 정보를 저장하는데 적합합니다. 세션은 만료 시 서버에서 삭제되지만 쿠키는 유효기간을 설정하여 브라우저를 닫아도 유지할 수 있습니다.

핵심 포인트
  • • 세션은 서버 저장, 쿠키는 클라이언트 저장
  • • 세션은 보안에 유리하여 민감 정보 저장에 적합
  • • 쿠키는 비민감한 환경설정 저장에 적합
  • • 세션 ID는 쿠키를 통해 전달됨
Follow-up 질문

세션 하이재킹(Session Hijacking) 공격을 방지하기 위한 방법에는 어떤 것들이 있나요?

2 데이터베이스 정규화
Medium

Q. 데이터베이스 정규화(Normalization)가 무엇인지 설명하고, 제1정규형(1NF)과 제2정규형(2NF)의 조건을 각각 말씀해주세요.

A. 모범답안

데이터베이스 정규화는 데이터 중복을 최소화하고 데이터 무결성을 유지하기 위해 테이블을 체계적으로 분리하는 과정입니다. 제1정규형은 각 컬럼이 원자값(atomic value)을 가져야 하며, 반복되는 그룹이 없어야 합니다. 예를 들어 전화번호 컬럼에 여러 개의 값을 쉼표로 구분하여 저장하면 안 됩니다. 제2정규형은 1NF를 만족하면서 부분 함수 종속성을 제거해야 하며, 기본키가 아닌 모든 속성이 기본키 전체에 완전 함수 종속되어야 합니다. 주문 테이블에서 주문번호와 상품번호가 복합키일 때, 상품명은 상품번호에만 종속되므로 별도 테이블로 분리해야 합니다.

핵심 포인트
  • • 정규화는 데이터 중복 최소화와 무결성 유지가 목적
  • • 1NF는 원자값과 반복 그룹 제거
  • • 2NF는 부분 함수 종속성 제거
  • • 정규화를 통해 이상 현상 방지
Follow-up 질문

정규화를 과도하게 하면 어떤 문제가 발생할 수 있으며, 역정규화(Denormalization)는 언제 고려해야 하나요?

3 PHP 네임스페이스
Medium

Q. PHP의 네임스페이스(Namespace)가 무엇인지 설명하고, 왜 필요한지 실무 예시를 들어 말씀해주세요. 또한 use 키워드의 역할을 설명해주세요.

A. 모범답안

네임스페이스는 클래스, 함수, 상수의 이름 충돌을 방지하기 위해 논리적인 그룹으로 코드를 구분하는 방법입니다. 예를 들어 자체 개발한 Logger 클래스와 외부 라이브러리의 Logger 클래스가 충돌하는 것을 방지할 수 있습니다. namespace App\Service\Logger로 선언하여 고유한 경로를 부여하고, 다른 개발자나 라이브러리와의 이름 충돌을 예방합니다. use 키워드는 네임스페이스의 클래스를 현재 파일에서 사용하기 위해 가져오는 역할을 하며, use App\Service\Logger로 선언하면 전체 경로 없이 Logger로 사용할 수 있습니다. PSR-4 오토로딩과 함께 사용하여 현대적인 PHP 프로젝트의 기본 구조를 이룹니다.

핵심 포인트
  • • 네임스페이스는 이름 충돌 방지
  • • 논리적 그룹으로 코드 조직화
  • • use 키워드로 네임스페이스 임포트
  • • PSR-4 오토로딩과 함께 사용
Follow-up 질문

Composer의 autoload 설정에서 psr-4와 classmap의 차이점은 무엇인가요?

4 RESTful API 설계
Medium

Q. RESTful API를 설계할 때 리소스 기반 URL 설계 원칙을 설명하고, 사용자 게시글 관리 API의 올바른 엔드포인트 예시를 CRUD 작업별로 제시해주세요.

A. 모범답안

RESTful API는 리소스를 명사로 표현하고 HTTP 메서드로 동작을 나타내는 것이 원칙입니다. URL에는 동사를 사용하지 않고 리소스의 계층 구조를 표현합니다. 사용자 게시글 관리 예시로 GET /users/123/posts는 특정 사용자의 게시글 목록 조회, POST /users/123/posts는 새 게시글 생성, GET /users/123/posts/456은 특정 게시글 조회, PUT /users/123/posts/456은 게시글 전체 수정, DELETE /users/123/posts/456은 게시글 삭제입니다. 리소스 간의 관계를 URL 경로로 표현하고, 상태 코드로 결과를 명확히 전달하는 것이 중요합니다.

핵심 포인트
  • • 리소스는 명사로 표현, HTTP 메서드로 동작 표현
  • • URL에 동사 사용 지양
  • • 리소스 계층 구조를 경로로 표현
  • • 적절한 HTTP 상태 코드 사용
Follow-up 질문

PUT과 PATCH 메서드의 차이점은 무엇이며, 실무에서 어떻게 구분하여 사용하나요?

5 알고리즘 최적화
Hard

Q. 문자열에서 중복되지 않는 첫 번째 문자를 찾는 문제를 해결할 때, 단순 반복문 접근법과 해시맵을 활용한 접근법의 시간 복잡도를 비교하고, 해시맵 방식의 알고리즘 원리를 설명해주세요.

A. 모범답안

단순 반복문 접근법은 각 문자마다 문자열 전체를 다시 순회하며 중복 여부를 확인하므로 O(n^2)의 시간 복잡도를 가집니다. 해시맵 활용 접근법은 첫 번째 순회에서 각 문자의 등장 횟수를 해시맵에 저장하고, 두 번째 순회에서 등장 횟수가 1인 첫 번째 문자를 반환하여 O(n)의 시간 복잡도를 가집니다. 해시맵은 키-값 쌍으로 문자와 빈도수를 O(1) 시간에 저장하고 조회할 수 있어 효율적입니다. PHP에서는 연관 배열을 해시맵처럼 사용할 수 있으며, 문자열 길이가 길어질수록 성능 차이가 크게 나타납니다.

핵심 포인트
  • • 단순 반복문은 O(n^2), 해시맵 활용은 O(n)
  • • 해시맵은 빈도수를 O(1)에 저장/조회
  • • 두 번의 순회로 문제 해결
  • • PHP 연관 배열을 해시맵으로 활용
Follow-up 질문

만약 문자열이 유니코드 문자를 포함한다면 PHP에서 어떤 함수를 사용해야 하며, 주의할 점은 무엇인가요?

댓글 0

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

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