"최신 버전으로 깔았는데 예전 쿼리가 에러난다" — 실무에서 흔히 겪는 이 문제, 원인을 정리해봤다.
DB 메이저 버전의 업그레이드를 예시로 살펴본다.
1. 예약어 추가
버전이 올라가면 새 예약어가 생긴다. MySQL 8.0에서는 RANK, WINDOW, LEAD 같은 단어가 예약어가 됐다. 컬럼명으로 rank를 쓰던 테이블은 갑자기 문법 오류를 낸다.
→ 백틱으로 감싸거나 컬럼명을 바꿔야 한다.
2. Deprecated 기능의 완전 제거
경고만 뜨던 기능이 다음 메이저 버전에서 아예 사라지는 게 가장 흔한 사고 원인이다.
- MySQL 8.0: PASSWORD() 함수 제거, GROUP BY의 암묵적 정렬 제거
- PostgreSQL: 버전마다 옛 기능이 하나씩 사라짐
→ 업그레이드 전 "Deprecated Features" 문서를 꼭 읽어야 한다.
3. 인증 방식 변경
MySQL 8.0은 기본 인증 플러그인이 mysql_native_password에서 caching_sha2_password로 바뀌었다. 구버전 드라이버(JDBC, PHP 등)는 아예 접속이 안 된다.
이건 SQL 에러가 아니라 연결 단계에서 터지는 문제라 원인 찾기가 더 까다롭다.
4. 옵티마이저 변화 → 조용히 느려지는 쿼리
구문은 멀쩡한데 실행 계획이 바뀌어서 인덱스를 안 타는 경우. 에러 로그엔 안 남고 성능만 급락해서 발견이 늦다.
5. 문자셋/정렬 기본값 변경
MySQL 8.0은 기본 charset이 latin1에서 utf8mb4로 바뀌었다. 정렬 순서, 외부 시스템과의 인코딩 호환성이 미묘하게 어긋날 수 있다.
6. 확장/플러그인 호환성 깨짐
PostGIS 같은 확장이나 서드파티 백업·모니터링 툴이 신버전을 아직 지원하지 않아 장애로 이어지는 경우도 있다.
7. ORM Dialect 불일치
Hibernate 등에서 DB 버전에 맞는 Dialect를 안 바꾸면 신버전 문법을 못 쓰거나 예상 밖 SQL이 생성된다.
8. 롤백이 안 된다
대부분의 DB는 메이저 업그레이드 후 공식적인 다운그레이드를 지원하지 않는다. 문제가 생기면 백업 복구밖에 답이 없다.
예방 체크리스트
- 스테이징 환경에 먼저 신버전 설치 후 운영 쿼리 로그(슬로우 쿼리 로그 포함)를 재생(replay)해서 에러/성능 차이 검증
- 공식 문서의 "Upgrading" + "Deprecated/Removed Features" 섹션 필수 확인
- 드라이버/커넥터/ORM 버전도 DB 버전에 맞춰 동시에 업그레이드 대상에 포함
- 스냅샷/백업 확보 후 진행, 롤백 시나리오를 사전에 문서화
'Cloud, IT Infra' 카테고리의 다른 글
| 인프라 용어 설명 — NAS, DSM, NTP (0) | 2026.07.16 |
|---|---|
| 인프라/클라우드 공부 시작 (0) | 2026.07.08 |