전체 글
-
NestJS Swaager 사용시 직관적이고 구체적인 응답 문서화 하기백엔드/견고한 백엔드 만들기 2024. 7. 9. 15:17
Swagger 문서는 프론트엔드 개발자와 소통을 위해 중요한 api 문서화 역할을 한다. 현재 Response 문서에는 상태 코드와 설명뿐이다 응답 성공시 기존 피드 생성 성공시 response swagger 예를들어 피드 생성에 성공에 대한 response인데 해당 피드가 공개 피드 생성 했을때 response와 비공개 피드 생성시 response를 보다 구체적으로 swagger로 제공 해준다면 프론트 엔드 개발자 입장에서 swagger 문서에 대한 가독성이 굉장히 올라갈것이다. 응답 실패시 기존 피드 삭제 에러 response swagger 404 에러 코드에 해당하는 에러 경우가 2가지인데 1. 2. 이런식으로 메세지만 구별되어 있어 구체적이지 못하고 가독성이 떨어진다. 끝으로 보다 직관적이..
-
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, ..