본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP 오류 제어 연산자 — @ 완전 정리

by 왕진 2026. 6. 26.
반응형

 

 

Web Development · PHP

PHP 오류 제어 연산자 —
@ (at-sign)

경고/알림 메시지를 한 줄에 한해 숨기기
시작 오늘 분석할 코드

존재하지 않을 수도 있는 배열 키를 접근할 때 @를 붙여 경고를 화면에 띄우지 않게 한다.

<?php $string = @$data[$key]; // $data가 없거나 $key가 없어도 경고 X print "오류제어 연산자 테스트"; ?>

용어 핵심 키워드
@한 표현식 앞에 붙여 경고 억제
"오류 제어"실은 "오류 메시지 억제"
try-catch정식 예외 처리 — 권장
isset()키 존재 검사 — 더 깔끔
??null 합병 (PHP 7+) — 가장 모던
성능 비용@는 사실 느림 — 내부적으로 처리

1 @의 정확한 의미

@"이 표현식에서 발생하는 PHP 경고/알림 메시지를 화면에 표시하지 마라"이다. 오류 자체를 막는 게 아니다 — 그냥 메시지만 숨긴다.

// @ 없이 $x = $arr['no_key']; // Notice: Undefined index: no_key in ... // @ 사용 $x = @$arr['no_key']; // 메시지 없음 — $x는 null

2 권장하지 않는 이유
  • 버그를 숨김 — 문제가 보이지 않으니 디버깅이 매우 어려움
  • Fatal error는 못 막음 — 치명적 오류는 그대로 발생
  • 성능 저하 — PHP는 @ 표현식에서 잠시 오류 보고를 끄고 다시 켠다 (느림)
  • 코드 의도 불명 — 왜 @를 붙였는지 다음 사람이 모름
"안 됐는데 왜인지 모름" — @를 남용한 코드의 가장 큰 부작용. 며칠 동안 디버깅하고 보면 결국 @ 때문인 경우가 많다.

3 더 나은 방법들
// 1) isset() — 키 존재 확인 (구식이지만 명확) $string = isset($data[$key]) ? $data[$key] : ""; // 2) ?? null 합병 (PHP 7+ — 가장 모던) $string = $data[$key] ?? ""; // 3) try-catch (예외 발생 코드용) try { $content = file_get_contents($path); } catch (Exception $e) { $content = ""; }

 

반응형

 

4 그래도 @를 쓸 만한 곳

드물게 정당한 경우:

  • @unlink($file) — 파일 없어도 OK인 삭제
  • @fopen() — 실패해도 처리 가능 (보통 try-catch가 더 좋음)
  • 레거시 코드 호환

거의 모든 경우 ?? 또는 isset이 더 좋다.


5 error_reporting과의 관계

전역 오류 보고 설정은 php.ini에서 error_reporting으로 한다. @한 줄짜리 임시 무시일 뿐이다.

// 개발 환경 — 모든 오류 보임 error_reporting(E_ALL); ini_set('display_errors', 1); // 운영 환경 — 화면 X, 로그만 ini_set('display_errors', 0); ini_set('log_errors', 1);

핵심 한 줄 요약

@한 줄 경고 메시지 억제
오류는 그대로메시지만 숨김 — 버그 숨김
권장 X디버깅 지옥, 성능 저하
대안 ??$arr[$k] ?? "" (PHP 7+)
대안 issetisset(...) ? ... : ...
예외 코드try-catch가 정석

Tags

#PHP #오류제어 #at-operator #suppress #isset #null-coalescing #try-catch #디버깅 #백엔드 #CSS #HTML #웹개발 #티스토리
▼ 티스토리 태그 입력란 복사용
PHP, 오류제어, at-operator, suppress, isset, null-coalescing, try-catch, 디버깅, 백엔드, CSS, HTML, 웹개발, 티스토리
반응형

댓글