문제 상황
데이터가 정상적으로 마이그레이션됐는데 예약이 안 되는 버그가 발생했다.
> eb logs --debug
eb cli인 위 커맨드로 로그를 확인했다.
그리고 다음과 같은 SQL failed 에러를 발견했다.
id가 default로 생성되지 않아서 생긴 500번 에러였다.
좀 이상했다 users.id는 원래 아래 TypeORM 데코레이터에 의해 Auto generated 돼야 하는데 말이다.
@Entity({ name: 'users' })
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
}
그래서 postico로 DDL을 찾아보기 시작했다.
그리고 머지않아 정답을 발견했다.
Table DDL 관찰
원본 RDS의 Reservation 테이블 DDL
새로 생성한 RDS의 Reservation 테이블 DDL
마이그레이션하면서 모든 테이블의 Primary key에 대한 default 옵션인 uuid_generate_v4() 이 적용이 되지 않았던 것이다.
찾아보니 heroku로 프로비저닝 한 RDS의 PostgreSQL 엔진의 버전은 13.4였고, Beanstalk에 붙인 RDS PostgreSQL엔진 버전은 13.3이었다. 확실히 버전 차이인지는 모르겠으나 현 상황에서는 가장 유력하다.
문제 해결
일단 원인 규명보다는 문제 해결이 더 급하기에, 아래 SQL 문으로 모든 테이블의 id Column에 대한 Default를 옵션을 Update 해줬다.
ALTER TABLE reservations ALTER COLUMN id SET DEFAULT uuid_generate_v4();
다행히도 문제가 해결되어 예약 생성이 잘 되었다.
이렇게 Heroku 기반 서버에서 AWS 서버로 마이그레이션에 성공하였다.
AWS로부터 얻을 수 있는 모든 이점을 누리기 위해, CloudWatch를 좀 잘 붙여서 모니터링/알람 시스템 구축까지 하는 것이 나의 최종 목표이다.
'AWS' 카테고리의 다른 글
[2/2] AWS Lambda와 Sharp로 이미지 리사이징하기 (이미지 최적화) (6) | 2021.12.02 |
---|---|
[1/2] AWS Cloudfront로 S3 origin에 대한 CDN 프록시 서버만들기 (이미지 최적화) (0) | 2021.11.29 |
[1/2] AWS DMS를 사용하여 Heroku adds-on DB를 Beanstalk RDS로 migration하기 (DB 마이그레이션) (0) | 2021.11.26 |
AWS Route 53 활용하여, Sub domain 생성하고, SSL 적용하기 (0) | 2021.11.25 |