전체 글
-
NestJS ResponseDto 적극 활용하기백엔드/견고한 백엔드 만들기 2024. 7. 8. 14:26
NestJS class-transformer TypeOrm 변환 관련 LifeCycle이전글 1. 정적 팩토리 메서드 패턴을 사용하여 ResponseDto 직렬화(serialize) 하기CreateCatResponse에서 of라는 메서드는 static 메서드로 해당 메서드를 통해서 class-transformer를 이용해서 newCat이라는 plainObject들을 CreateCatResponse dto로 serialize 한다.2. ResponseDto 직렬화(serialize)를 위해 인터셉터와 데코레이터 사용 위의 글을 참고하여 NestJS LifeCycle과 특정 프로퍼티들을 변환 하는 데코레이터들의 LifeCycle들을 이해하고 사용 해야한다. NestJS에서 ResponseDto는 보통 하나의..
-
class-transformer 사용시 plainToInstance 메서드 사용시 주의할점Nest.js/class-transformer 2024. 7. 7. 16:48
TestEntity@Entity({ name: 'test' })export class TestEntity { @PrimaryGeneratedColumn() id!: number; @Column({ name: 'content', type: 'text', }) content!: string; @Column({ type: 'timestamptz', transformer: new LocalDateTimeTransformer(), nullable: true, }) orderDateTime!: LocalDateTime; @Transform( ({ value }: { value: Date }) => { console.log('*******호출!!!******'); return value.toISOS..
-
Javascript Date타입 대신 date, time, date-time을 다루기Nest.js/class-transformer 2024. 7. 7. 15:02
- TypeOrm과 js-joda를 이용한 Date타입 대신 LocalDateTime 타입 사용하기 이전에 작성한 글을 참고 하면 좋다. createdAt, updatedAt 의 date-time 형식 createdAt나 updatedAt 칼럼을 database에서 가져와서 일련의 데이터 가공 작업을 하고 api response할때 ISO 8601 포맷으로 리턴을 해주어야 한다. 꽤나 오랜시간 고민을 많이 했다. repository에서 createdAt나 updatedAt 관련된 프로퍼티를 return 하는 방법을 고민 해보았다가 이것은 꽤나 많은 수정을 거쳐야 될것 같아서 아닌것 같았다.필요한 기능은 다음과 같다. database에서 select 해서 가져왔을때는 js-joda 타입으로 손쉽게 불변..
-
TypeOrm과 js-joda를 이용한 Date타입 대신 LocalDateTime 타입 사용하기Nest.js/TypeOrm 2024. 7. 6. 20:40
js-joda에서 제공 하는 타입은 다음과 같다.LocalDate : 년,월,일 타입LocalTime : 분,초 타입LocalDateTime : 년,월,시,분,초 타입ZonedDateTime: joda/timezone과 함께 사용하며 특정 국가의 timezone에 따른 타입이외에 다른 기능들은 공식문서에 설명이 되어 있다. @js-joda/core 라이브러리를 설치 한다. TypeOrm의 column 데코레이터의 transformer 프로퍼티와 ValueTransformer를 이용하여 js-joda를 이용하여 날짜 데이터 타입을 보다 효율적으로 다룰 수 있다.js-joda에서 Convert from/ to native js 부분을 참고 utils/convert-date-time.ts transforme..
-
TypeOrm과 Postgresql에서 timestamp을 UpdateDateColumn 데코레이터 사용시 transformer 이슈Nest.js/TypeOrm 2024. 7. 6. 19:01
@UpdateDateColumn 사용시 transformer 프로퍼티 옵션을 사용하면 onUpdate CURRENT_TIMESTAMP가 동작하지 않는다.무슨 말이냐면 @CreateDateColumn, @UpdateDateColumn 데코레이터 사용해서 데이터를 생성 하면 현재 date-time을 자동으로 데이터를 입력 해주는데 만약 필드에 변경이 일어날 경우에 UpdateDateColumn에서 업데이트 된 기준 일자로 다시 해당 칼럼을 업데이트 해주는데 만약에 UpdateDateColumn에 transformer 프로퍼티 옵션을 사용하게 된다면 해당 기능이 제대로 동작 하지 않는다. @CreateDateColumn 데코레이터와 @UpdateDateColumn 데코레이터를 사용 했을때해당 코드는 cre..
-
date, time, createdAt와 updateAt 같은 날짜와 시간 Date타입에 대해서백엔드/견고한 백엔드 만들기 2024. 7. 6. 13:38
Postgresql에서 timestamp와 timestamptzISO 8601 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준 포맷Date 타입의 불변성 Postgresql timestamp와 Mysql datetime과 유사하고Postgresql timestamptz와 Mysql의 timestamp와 유사하다. 2. ISO 8601 날짜와 시간에 관련된 데이터 표현을 다루는 국제 표준날짜와 시간을 표현할 때 나라마다 표시형식이 다르다보니 국제 표준화 기구(ISO)에서 정한 날짜 및 시간 표시 형식이다.즉, 해당 format을 이용하여 date format을 일관성 있게 사용 할 수 있다.ISO 8601과 RFC 3339를 제외한 Unix time, YYYY-MM-DD HH:mm:ss.SSS, ..
-
Date 타입의 불변성이 보장 되어야 하는 이유Javascript/개념 및 설명 2024. 7. 6. 12:48
js-joda나 day.js나 date-fns 등은 immutable 불변성을 보장하여 날짜 및 시간 객체가 변경 불가능 하기 때문에 예기치 않은 오류를 예방 할 수 있다. 로컬 시간대 사용 문제Date 객체는 생성할 때 시스템의 로컬 시간대 를 사용합니다. 이는 같은 코드라도 실행 환경에 따라 다르게 동작할 수 있습니다예를 들어, 동부 호주에서는 "new Date(2013, 0, 1)"이 실제로는 2012년 12월 31일 오후 1시(UTC)로 해석됩니다.이는 전 세계 어디에서든 동일한 시간으로 처리되어야 하는 소프트웨어에서는 큰 문제를 일으킬 수 있습니다. // 동부 호주의 로컬 시간대 (GMT+11)에서 실행된다고 가정let date = new Date(2013, 0, 1);console.log(da..