프로젝트/악취 포집기 앱 4

DB 마이그레이션 적용

프로젝트에 데이터베이스 스키마를 버전 관리하며 변경사항을 기록하고자 DB 마이그레이션을 적용해보려 한다. DB 마이그레이션은 쉽게말해 DB의 구조를 코드처럼 관리하고, 변화를 추적하며, 이전 버전으로 되돌릴 수 있게(롤백) 만든 시스템을 말한다.   MySQL DDL 명령어가 담긴 스크립트 post-migrate.sql을 생성해 성능 개선하는 코드를 추가했다.-- 인덱스 추가ALTER TABLE alarm_data ADD INDEX idx_alarm_data_reg_date (reg_date);ALTER TABLE alarm_data ADD INDEX idx_alarm_data_device_alarm (di_idx, ac_idx);-- 기존 제약 조건 제거ALTER TABLE alarm_data DROP..

PRIMARY KEY 미포함 컬럼 파티셔닝 오류

파티셔닝할 때 외래키 제약조건 외에 조심해야할 부분이 여기 하나 더 있다. 문제 정의reg_date 컬럼을 기준으로 alarm_data 테이블에 파티셔닝을 적용하려 했으나, 다음과 같은 오류가 발생했다.ERROR 1503: A PRIMARY KEY must include all columns in the table's partitioning function 이는 파티셔닝에 사용되는 컬럼이 기본 키에 포함되어야 함을 의미한다.  시도했던 방법기존 기본 키 유지한 채 파티셔닝 시도: 기존의 기본 키(ad_idx)를 유지하면서 reg_date를 기준으로 파티셔닝을 적용하려 했으나, 위와 동일한 오류가 발생했다.기본 키 수정: 기본 키에 reg_date 컬럼을 추가하여 (ad_idx, reg_date) 형태로 ..

MySQL 파티셔닝과 외래 키 제약의 충돌

지난 포스팅에 성능최적화를 하며 파티셔닝을 적용했었다. 이를 적용하며 발생했던 오류와 시도했던 방법, 그리고 해결방법까지 정리해보려 한다.  문제정의알람 데이터의 증가로 인해 alarm_data 테이블에 파티셔닝을 적용하려 했으나, 다음과 같은 오류가 발생했다.ERROR 1506: Foreign keys are not yet supported in conjunction with partitioning 이는 MySQL에서 파티셔닝된 테이블과 외래 키 제약을 동시에 사용할 수 없음을 나타낸다.  시도했던 방법1. 외래 키 제약 유지한 채 파티셔닝 시도 : 기존의 외래 키 제약을 유지하면서 파티셔닝을 적용하려 했으나 동일한 오류가 반복되었다.2. 파티셔닝 함수 변경: UNIX_TIMESTAMP(), TO_DA..

MySQL 성능 최적화

프로젝트 배경악취 포집기 모니터링 앱은 포집 장비로부터 전송되는 악취, 온도, 습도, 풍향 등 다양한 센서 데이터를 수집하여장비 상태를 실시간으로 확인하고 이상 발생 시 알림을 전송하는 모바일 기반 시스템이다.이 데이터는 alarm_data 테이블에 저장되며, 하루 수천 건 이상의 알람이 발생하므로 빠른 조회 성능과 대용량 처리가 중요한 요소이다.  초기 테이블 구조CREATE TABLE alarm_data ( ad_idx INT AUTO_INCREMENT PRIMARY KEY, di_idx INT, ac_idx INT, reg_date DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (di_idx) REFERENCES device_info(di_idx), ..