MySQL 쿼리를 작성하다 보면 테이블 이름이나 컬럼명을 **백틱(Backtick, `)**으로 감싸는 경우를 자주 보게 됩니다. 단순한 습관처럼 사용하는 분들도 있고, 어떤 경우에는 필수적으로 사용해야만 쿼리가 작동하기도 합니다.
오늘은 MySQL의 식별자 구분 기호인 백틱의 정확한 개념과 버전별 차이, 그리고 실무에서 권장되는 사용 패턴을 정리해 보겠습니다.
1. 백틱(`)이란 무엇인가?
MySQL에서 백틱은 **식별자(Identifier)**를 감싸는 특수 기호입니다. 여기서 식별자란 데이터베이스명, 테이블명, 컬럼명, 인덱스명 등을 의미합니다.
백틱의 핵심 역할은 **"이 단어는 SQL 명령어가 아니라 내가 지정한 이름이다"**라고 MySQL 엔진에게 알려주는 것입니다.
왜 백틱이 필요한가요?
주로 다음과 같은 세 가지 상황에서 백틱이 필수적으로 사용됩니다.
- 예약어(Reserved Words) 사용 시: SELECT, ORDER, GROUP, TABLE 등 MySQL이 미리 정의한 키워드를 컬럼명으로 쓸 때 필요합니다.
- 특수 문자 및 공백 포함 시: 식별자에 공백이나 하이픈(-) 같은 특수 문자가 포함된 경우입니다.
- 숫자로 시작하는 식별자: 식별자 이름이 숫자로만 이루어졌거나 숫자로 시작할 때 혼동을 방지합니다.
2. 실무 사례로 보는 백틱의 활용
예약어와 충돌하는 경우 (주니어 개발자 주의)
예를 들어, 주문 정보를 담는 테이블에서 '순서'를 나타내기 위해 ORDER라는 컬럼을 만들었다고 가정해 봅시다.
-- 에러 발생: ORDER는 예약어이기 때문입니다.
SELECT order FROM orders;
-- 정상 작동: 백틱으로 식별자임을 명시합니다.
SELECT `order` FROM orders;
공백이나 하이픈이 들어간 경우
가급적 권장되지 않지만, 만약 컬럼명에 공백이 있다면 백틱 없이는 쿼리 실행이 불가능합니다.
-- 에러 발생
SELECT user name FROM users;
-- 정상 작동
SELECT `user name` FROM users;
3. MySQL 버전 변화와 백틱의 관계
시니어 개발자나 DBA라면 MySQL 버전에 따른 예약어의 추가를 주의 깊게 살펴야 합니다.
새로운 예약어의 등장
MySQL이 업데이트되면서 이전 버전에서는 예약어가 아니었던 단어가 예약어로 지정되는 경우가 있습니다. 대표적인 예가 MySQL 8.0에서 추가된 WINDOW입니다.
- MySQL 5.7: SELECT window FROM my_table; (정상 작동)
- MySQL 8.0: SELECT window FROM my_table; (구문 에러 발생)
8.0 버전부터 윈도우 함수(Window Functions)가 도입되면서 WINDOW가 예약어가 되었기 때문입니다. 이처럼 버전을 업그레이드할 때 기존 코드가 깨지는 것을 방지하기 위해, ORM(Hibernate, Sequelize 등) 도구들은 모든 식별자를 백틱으로 자동 매핑하는 전략을 취하곤 합니다.
ANSI_QUOTES 모드
MySQL은 기본적으로 백틱을 쓰지만, 설정(sql_mode)에 따라 표준 SQL처럼 쌍따옴표(")를 식별자 구분 기호로 쓸 수도 있습니다.
-- ANSI_QUOTES 모드가 활성화된 경우
SET sql_mode = 'ANSI_QUOTES';
SELECT "column_name" FROM table_name;
타 데이터베이스(PostgreSQL, Oracle)와 호환성을 유지해야 하는 프로젝트라면 이 설정을 고려하기도 합니다.
4. 결론 및 실무 권장 사항
백틱은 예기치 못한 에러를 막아주는 안전장치이지만, 남용하면 쿼리의 가독성을 떨어뜨릴 수 있습니다.
💡 실무를 위한 3가지 팁
- 예약어 사용 지양: 가급적 order, group, select와 같은 단어를 컬럼명으로 쓰지 마세요. order_count, group_name 처럼 의미를 구체화하면 백틱 없이도 안전합니다.
- 명명 규칙 준수: 식별자에는 영문 소문자, 숫자, 언더바(_)만 사용하는 관습을 들이세요. 공백이나 하이픈을 피하면 백틱 의존도를 낮출 수 있습니다.
- 동적 쿼리/마이그레이션 시 필수 사용: 프로그램 코드에서 동적으로 테이블이나 컬럼을 생성해야 한다면, 미래의 MySQL 버전에서 어떤 예약어가 추가될지 모르므로 반드시 백틱으로 감싸는 것이 안전합니다.
공식 문서 링크
MySQL 식별자 및 백틱에 대한 자세한 기술적 사양은 아래 공식 문서에서 확인하실 수 있습니다.
'SQL > MYSQL' 카테고리의 다른 글
| [MySQL] LIKE 연산자 활용법과 성능 최적화 가이드 (인덱스 활용 및 주의사항) (0) | 2026.02.05 |
|---|---|
| [MySQL] 논리 연산자 완벽 가이드: AND, OR, NOT 제대로 사용하기 (0) | 2026.02.03 |
| [MySQL] WHERE 절 완전 정복: 기본 문법부터 8.0 최적화 팁까지 (0) | 2026.01.30 |
| [MySQL] DISTINCT: 중복된 데이터를 세련되게 처리하는 기술 (기초부터 성능 최적화까지) (0) | 2026.01.29 |
| [MySQL] 습관적으로 쓴 SELECT * 가 당신의 DB를 느리게 만드는 이유 (feat. 실행 계획 분석) (0) | 2026.01.27 |
| [MySQL] 에러 핸들링의 숨은 조력자: SHOW ERRORS 문 완벽 가이드 (0) | 2026.01.26 |
| [MySQL] 스토리지 엔진 확인의 첫걸음: SHOW ENGINES 문법 완벽 가이드 (0) | 2026.01.22 |
| [MySQL] SHOW ENGINE 문법 정복: SHOW ENGINE INNODB STATUS로 잠금·데드락·버퍼 이슈 읽어내기 (1) | 2026.01.20 |