Prisma는 Timezone을 지원하지 않아 UTC로 고정이 된다는 문제 발생

컨테이너와 DB의 시간대를 KST로 설정해놓아도 Prisma ORM을 사용하여 데이터를 저장하면 UTC로 시간대가 고정이 되어버림
수정 전 코드 (prisma 일부분, typescript 일부분) + DB 컨테이너 설정
model DeviceLog {
id Int @id @default(autoincrement())
device_id String
code String
created_at DateTime @default(now())
}
await prisma.deviceLog.create({
data: { device_id, code }
});
console.log(`DB 저장 완료 - device_id: ${device_id}, code: ${code}`)
environment:
MQTT_INT_PORT: ${MQTT_INT_PORT}
DATABASE_URL: ${DATABASE_URL}
TZ: Asia/Seoul
1차 수정 (prisma 일부분, typescript 일부분)
model DeviceLog {
id Int @id @default(autoincrement())
device_id String
code String
created_at DateTime
}
await prisma.deviceLog.create({
data: { device_id, code, created_at: new Date() }
});
console.log(`DB 저장 완료 - device_id: ${device_id}, code: ${code}`);
다음과 같이 직접 new Date()를 사용해서 prisma에 전달하는 것으로 해결 시도.

https://github.com/prisma/prisma/issues/20615
이슈에도 나와있듯 prisma는 UTC로 변환해버리기 때문에, 이 또한 해결이 안되었음.
2차 수정 (컨테이너를 UTC로 바꾸고 직접 UTC+9를 계산한 값을 전송하기로 수정) + TZ삭제
model DeviceLog {
id Int @id @default(autoincrement())
device_id String
code String
created_at DateTime
}
const kst = new Date(Date.now() + 9 * 60 * 60 * 1000);
await prisma.deviceLog.create({
data: { device_id, code, created_at: kst }
});
environment:
MQTT_INT_PORT: ${MQTT_INT_PORT}
DATABASE_URL: ${DATABASE_URL}
결과는 성공.

Date 객체의 내부 UTC 밀리초 값을 그대로 DB에 저장한다.TZ: Asia/Seoul을 설정해도 Prisma가 넘기는 값은 항상 UTC 기준이므로 효과가 없다.19:10:10이 UTC로 반환된다.