mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 09:06:24 +00:00
4.3 KiB
4.3 KiB
Notification DB 체크 제약 조건 수정 가이드
🚨 문제 상황
ERROR: new row for relation "notifications" violates check constraint "notifications_notification_type_check"
Event Hub에서 메시지는 정상적으로 수신되지만, 데이터베이스 저장 시 체크 제약 조건 위반으로 실패
✅ 해결 방법
방법 1: Azure Portal 사용 (권장)
-
Azure Portal 접속
-
PostgreSQL 서버 찾기
- 리소스 검색에서 "4.230.159.143" 또는 "notificationdb" 검색
-
Query Editor 열기
- 좌측 메뉴에서 "Query editor (preview)" 선택
- 사용자명:
hgzerouser - 비밀번호:
Hi5Jessica! - 데이터베이스:
notificationdb
-
SQL 실행
-- 기존 제약 조건 삭제 ALTER TABLE notifications DROP CONSTRAINT IF EXISTS notifications_notification_type_check; -- 새로운 제약 조건 추가 ALTER TABLE notifications ADD CONSTRAINT notifications_notification_type_check CHECK (notification_type IN ( 'MEETING_INVITATION', 'TODO_ASSIGNED', 'TODO_REMINDER', 'MEETING_REMINDER', 'MINUTES_UPDATED', 'TODO_COMPLETED' )); -
확인
SELECT constraint_name, check_clause FROM information_schema.check_constraints WHERE constraint_name = 'notifications_notification_type_check';
방법 2: DB 관리 도구 사용
DBeaver 사용
- DBeaver 다운로드: https://dbeaver.io/download/
- 새 연결 생성:
- Host:
4.230.159.143 - Port:
5432 - Database:
notificationdb - Username:
hgzerouser - Password:
Hi5Jessica!
- Host:
- SQL Editor에서 위의 SQL 실행
pgAdmin 사용
- pgAdmin 다운로드: https://www.pgadmin.org/download/
- 서버 등록 후 Query Tool에서 SQL 실행
방법 3: psql 직접 설치 (Mac/Linux)
# Mac (Homebrew)
brew install postgresql@15
# 실행
PGPASSWORD='Hi5Jessica!' psql -h 4.230.159.143 -p 5432 -U hgzerouser -d notificationdb -f notification/fix_constraint.sql
방법 4: Python 스크립트 사용
# psycopg2 설치
pip install psycopg2-binary
# 스크립트 실행
python3 notification/fix_db_constraint.py
📋 실행할 SQL
생성된 파일: notification/fix_constraint.sql
-- 기존 제약 조건 삭제
ALTER TABLE notifications DROP CONSTRAINT IF EXISTS notifications_notification_type_check;
-- 새로운 제약 조건 추가 (Java Enum의 모든 값 포함)
ALTER TABLE notifications
ADD CONSTRAINT notifications_notification_type_check
CHECK (notification_type IN (
'MEETING_INVITATION', -- 회의 초대
'TODO_ASSIGNED', -- Todo 할당
'TODO_REMINDER', -- Todo 리마인더
'MEETING_REMINDER', -- 회의 리마인더
'MINUTES_UPDATED', -- 회의록 수정
'TODO_COMPLETED' -- Todo 완료
));
🔍 검증 방법
1. 제약 조건 확인
SELECT constraint_name, check_clause
FROM information_schema.check_constraints
WHERE constraint_name = 'notifications_notification_type_check';
2. 서비스 재시작 후 로그 확인
# notification 서비스 재시작
cd notification
./gradlew bootRun
# 로그 모니터링
tail -f logs/notification-service.log | grep -E "ERROR|이벤트 수신|알림 발송"
3. 에러가 사라졌는지 확인
이 에러가 더 이상 나타나지 않아야 합니다:
ERROR: new row for relation "notifications" violates check constraint "notifications_notification_type_check"
📌 참고
Java Enum 정의 위치
notification/src/main/java/com/unicorn/hgzero/notification/domain/Notification.java:220-227
public enum NotificationType {
MEETING_INVITATION, // 회의 초대
TODO_ASSIGNED, // Todo 할당
TODO_REMINDER, // Todo 리마인더
MEETING_REMINDER, // 회의 리마인더
MINUTES_UPDATED, // 회의록 수정
TODO_COMPLETED // Todo 완료
}
현재 상태
- ✅ Event Hub 연결: 정상
- ✅ 메시지 수신: 정상
- ✅ 이메일 발송: 정상
- ❌ DB 저장: 제약 조건 위반으로 실패 ← 해결 필요
⚠️ 주의사항
- 프로덕션 환경이라면 백업 먼저 수행
- 테스트 환경에서 먼저 검증 후 프로덕션 적용
- SQL 실행 권한이 필요합니다