PHP 신입 트러블슈팅 면접
새 면접Q. 사용자가 이미지 파일을 업로드하려고 할 때 '파일이 업로드되지 않았습니다'라는 에러 메시지가 표시됩니다. $_FILES 배열을 확인했을 때 'error' 키의 값이 1로 나타났습니다. 이 문제의 원인과 해결 방법을 설명해주세요.
PHP 설정 파일에서 업로드 가능한 파일 크기 제한과 관련된 설정을 확인해보세요.
에러 코드 1은 UPLOAD_ERR_INI_SIZE로, 업로드한 파일 크기가 php.ini의 upload_max_filesize 설정값을 초과했다는 의미입니다. 먼저 phpinfo()나 php.ini 파일을 확인하여 현재 upload_max_filesize 값을 확인해야 합니다. 또한 post_max_size 값도 함께 확인해야 하는데, 이 값은 upload_max_filesize보다 크거나 같아야 합니다. 해결 방법은 php.ini에서 upload_max_filesize와 post_max_size 값을 적절히 증가시키고 웹 서버를 재시작하는 것입니다. 만약 서버 설정을 변경할 수 없다면, .htaccess 파일이나 ini_set() 함수로 런타임에 설정을 변경할 수 있습니다.
- • 에러 코드 1은 upload_max_filesize 초과를 의미
- • php.ini에서 upload_max_filesize와 post_max_size 확인 필요
- • post_max_size는 upload_max_filesize보다 크거나 같아야 함
- • 설정 변경 후 웹 서버 재시작 필요
사용자가 프로필 사진이나 첨부파일을 업로드할 때 파일 크기 제한으로 인한 업로드 실패는 가장 흔한 문제 중 하나입니다.
만약 서버 관리 권한이 없어서 php.ini를 수정할 수 없는 상황이라면 어떤 대안을 사용할 수 있을까요?
Q. 게시판에 한글로 작성된 게시글을 저장하고 다시 조회했을 때, 한글이 '???'나 깨진 문자로 표시됩니다. 데이터베이스에는 정상적으로 저장되어 있는 것을 확인했습니다. 이 문제를 해결하기 위해 확인해야 할 사항들을 순서대로 설명해주세요.
PHP 파일, 데이터베이스 연결, HTML 출력 각 단계에서의 문자 인코딩 설정을 확인해보세요.
이 문제는 문자 인코딩 불일치로 인해 발생합니다. 첫 번째로 PHP 파일 자체가 UTF-8로 저장되어 있는지 확인해야 합니다(BOM 없는 UTF-8 권장). 두 번째로 데이터베이스 연결 시 문자셋을 명시적으로 설정해야 하는데, mysqli_set_charset() 함수나 PDO의 DSN에 charset=utf8mb4를 추가합니다. 세 번째로 HTML 헤더에 meta charset='UTF-8' 태그가 있는지 확인합니다. 네 번째로 header() 함수로 Content-Type: text/html; charset=UTF-8을 설정할 수 있습니다. 마지막으로 데이터베이스 테이블과 컬럼의 collation이 utf8mb4_general_ci나 utf8mb4_unicode_ci로 설정되어 있는지 확인합니다.
- • PHP 파일이 UTF-8로 저장되어 있는지 확인
- • 데이터베이스 연결 시 charset 명시적 설정 필요
- • HTML meta 태그와 HTTP 헤더에서 문자셋 선언
- • 데이터베이스 테이블의 collation 확인
다국어 지원 웹사이트나 이모지를 포함한 사용자 입력을 처리할 때 문자 인코딩 문제는 반드시 해결해야 하는 기본 과제입니다.
utf8과 utf8mb4의 차이는 무엇이며, 어느 것을 사용하는 것이 더 좋을까요?
Q. 외부 API를 호출하여 날씨 정보를 가져오는 페이지를 개발했는데, 페이지 로딩 중에 'Maximum execution time of 30 seconds exceeded' 에러가 발생하며 페이지가 중단됩니다. 외부 API 응답이 느린 상황에서 이 문제를 해결하기 위한 방법들을 설명해주세요.
스크립트 실행 시간 제한, API 호출 타임아웃 설정, 그리고 사용자 경험 개선 측면에서 생각해보세요.
이 문제는 PHP의 최대 실행 시간 제한과 외부 API의 느린 응답이 결합되어 발생합니다. 첫 번째 해결책은 set_time_limit() 함수로 스크립트 실행 시간을 늘리는 것이지만, 이는 근본적인 해결책이 아닙니다. 두 번째로 curl_setopt()의 CURLOPT_TIMEOUT 옵션으로 API 호출 자체에 타임아웃을 설정하여 무한정 대기하지 않도록 해야 합니다. 세 번째로 API 응답 실패 시 기본값이나 캐시된 데이터를 사용하는 예외 처리를 구현해야 합니다. 네 번째로 API 응답 결과를 일정 시간 동안 캐싱하여 매번 외부 호출을 하지 않도록 최적화할 수 있습니다. 마지막으로 비동기 처리나 백그라운드 작업으로 전환하여 사용자가 페이지 로딩을 기다리지 않도록 개선할 수 있습니다.
- • CURLOPT_TIMEOUT으로 API 호출 타임아웃 설정
- • API 실패 시 예외 처리 및 대체 데이터 제공
- • 응답 결과 캐싱으로 반복 호출 최소화
- • 비동기 처리나 백그라운드 작업 고려
결제 게이트웨이, 소셜 로그인, 날씨/지도 API 등 외부 서비스 연동 시 네트워크 지연과 타임아웃 처리는 필수적인 고려사항입니다.
외부 API 응답을 캐싱할 때 고려해야 할 사항은 무엇이 있을까요?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!