
서버 이전 후 $_GET 관련 문제 정리 (CentOS → Rocky, nginx 변경)
이번 서버 이전 작업(CentOS → Rocky Linux)과 nginx 버전 변경 과정에서 이상하게도 $_GET 관련 문제가 반복적으로 발생했다.
CLI에서는 정상 동작하지만, 웹(nginx + php-fpm)에서는 특정 조건에서만 비정상 동작하는 현상이 나타났다.
1. 증상 정리
- CLI 실행 → 정상
- 웹에서 기본 URL 호출 → 정상
- ?mode=data 같은 GET 파라미터 포함 시 → 비정상
- 코드에서 $mode='data' 강제 고정 → 정상
즉, GET 파라미터가 들어올 때만 흐름이 달라지는 문제가 발생했다.
2. 실제로 겪었던 유형들
① QUERY_STRING 관련 이슈
Undefined index: QUERY_STRING
nginx + php-fpm 환경에서 fastcgi_param 설정 차이로 인해 CLI와 웹 환경의 $_SERVER 값이 달라지는 현상.
② GET 값 존재 여부에 따른 분기 변화
$mode = $_GET['mode'] ?? 'data';
$mode = trim($mode);
if (!in_array($mode, ['data','record','summary'], true)) {
$mode = 'data';
}
기본값일 때는 정상, GET으로 전달될 때만 로직 흐름이 달라짐. 결과적으로 SQL 결과나 배열 구조가 미묘하게 달라짐.
③ 빈 배열 + SQL IN() 문제
implode("','", $FIds)
FIds가 비어 있을 경우 SQL 구문이 예상과 다르게 생성되어 웹 환경에서만 오류 발생 가능.
④ 환경 차이 (CLI vs FPM)
- memory_limit 차이
- php.ini 기본값 차이
- error reporting 차이
- fastcgi_param 차이
- SELinux 영향
코드는 같아도 실행 환경이 다르면 결과는 달라질 수 있다.
3. 왜 이런 일이 반복되는가?
서버 이전 시 가장 흔한 원인은 다음과 같다.
- php-fpm 기본 설정 변화
- nginx fastcgi include 파일 차이
- default charset 처리 방식 차이
- 버전 업그레이드로 인한 타입 처리 엄격화
- 기존 환경에서 “우연히 통과하던 코드”가 드러남
즉, 버그가 새로 생긴 것이 아니라 숨겨져 있던 전제가 깨진 것이다.
4. 결론 – 설계 문제였다
이번 경험에서 가장 중요한 깨달음은 이것이다.
HTTP(GET)로 내부 실행 제어를 하지 않는다.
REST는 인터페이스다. 엔진(계산 로직)은 CLI로 분리하는 것이 안정적이다.
최종 구조는 다음과 같이 정리했다.
[CLI / cron] → 계산 수행 → JSON 파일 생성 [REST API] → JSON 파일 읽기 → 응답 반환
이렇게 하면:
- nginx 영향 제거
- GET 파라미터 영향 제거
- 환경 차이 최소화
- 서버 이전 리스크 감소
5. 앞으로의 원칙
- 실행 제어는 CLI에서 한다.
- HTTP는 출력 전용으로 사용한다.
- GET 파라미터는 조회용으로만 쓴다.
- 서버 이전 전 설정 diff를 반드시 확인한다.
고레벨로 갈수록 에러도 고레벨이 된다. 문법 에러가 아니라 상태(state)와 환경(environment)의 문제가 된다.
이번 작업은 단순한 디버깅이 아니라, 아키텍처를 한 단계 정리하는 과정이었다.
결론:
$_GET은 문제가 아니다.
실행 구조를 HTTP에 의존한 것이 문제였다. 그러나 나는 $_GET은 정말 조심히 쓸것 같다.
시스템은 완벽하지 않다. 언제나 달라진다.
'Programing & OS' 카테고리의 다른 글
| Safari 철학 vs Edge 철학 – 구조적 차이 (#2) (0) | 2026.03.01 |
|---|---|
| Safari vs Edge – 병렬 모니터링 관점에서의 차이 탭 그룹 (0) | 2026.03.01 |
| DokuWiki를 다시 꺼낸 이유 (0) | 2026.02.27 |
| 로컬 LLM 기반 일정관리(MVP) 흐름 정리 (0) | 2026.02.26 |
| MC(midnight commander) 설치 삽질기. rocky linux8. (0) | 2026.02.24 |