MariaDB sql_mode에서 ONLY_FULL_GROUP_BY 제거

원본 MySQL 8과 동작을 맞추려고 이 모드를 켰던 것이 역효과였다. MySQL 8은
GROUP BY 컬럼에 대한 함수 종속성을 판정해 집계에 없는 컬럼도 통과시키지만
MariaDB는 그 판정을 하지 않는다. 같은 sql_mode를 그대로 옮기면 로컬에서
잘 돌던 쿼리가 서버에서만 터진다.

증상: 관리자 2차인증 로그인 직후 /mnt/main.do 가 404. 실제로는 대시보드
쿼리가 'Z.STATUS1' isn't in GROUP BY 로 실패하고 예외 처리가 404로 이어진 것.

ONLY_FULL_GROUP_BY 제외는 MariaDB의 기본값이기도 하다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
infraurp 2026-08-26 15:11:19 +09:00
parent 6c9d88aa2e
commit 28a0329114

View File

@ -21,8 +21,12 @@ table_open_cache = 400
tmp_table_size = 32M
max_heap_table_size = 32M
# 원본 MySQL 8은 ONLY_FULL_GROUP_BY가 켜진 상태로 운영된다. 동작을 맞춰 둔다.
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 원본 MySQL 8 은 ONLY_FULL_GROUP_BY 가 켜진 상태로 운영되지만, 여기서는 빼야 한다.
# MySQL 8 은 GROUP BY 컬럼에 대한 '함수 종속성'을 판정해 집계에 없는 컬럼도 통과시키지만
# MariaDB 는 그 판정을 하지 않는다. 같은 sql_mode 를 그대로 옮기면 로컬에서 잘 돌던
# 쿼리가 여기서만 터진다 (2026-08-26 관리자 메인 대시보드: 'Z.STATUS1' isn't in GROUP BY).
# ONLY_FULL_GROUP_BY 제외는 MariaDB 의 기본값이기도 하다.
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
default_time_zone = '+09:00'
slow_query_log = 1