Spring 애플리케이션에서 JPA/Hibernate SQL 로깅은 application.yml 설정으로 쉽게 확인할 수 있지만, 이는 애플리케이션 레벨의 로깅입니다. 실제 데이터베이스에서 어떤 쿼리가 실행되는지 모니터링하고 싶다면 MySQL의 general_log 기능을 활용할 수 있습니다.
MySQL은 두 가지 방식으로 쿼리를 로깅할 수 있습니다:
-- 파일로 저장
SET GLOBAL log_output = 'FILE';
-- 테이블로 저장
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
테이블에 저장된 로그를 확인하는 유용한 쿼리들:
-- 최근 실행된 쿼리 10개 보기
SELECT event_time, argument
FROM mysql.general_log
ORDER BY event_time DESC
LIMIT 10;
-- 특정 테이블 관련 쿼리만 보기
SELECT * FROM mysql.general_log
WHERE argument LIKE '%user_table%'
ORDER BY event_time DESC;
-- 최근 1분 동안의 쿼리 보기
SELECT event_time, argument
FROM mysql.general_log
WHERE event_time > NOW() - INTERVAL 1 MINUTE
ORDER BY event_time DESC;
성능 영향
저장 공간
TRUNCATE TABLE mysql.general_log;
로그 테이블 제약
권한 설정
GRANT SELECT ON mysql.* TO 'user'@'host';
FLUSH PRIVILEGES;
작업이 끝난 후에는 반드시 로깅을 꺼야합니다:
SET GLOBAL general_log = 'OFF';
MySQL general_log는 강력한 디버깅 도구이지만, 성능과 저장 공간에 영향을 주므로 신중하게 사용해야 합니다. 로컬 개발 환경에서만 사용하고, 필요한 작업이 끝나면 반드시 비활성화하는 것이 좋습니다.