분류 전체보기
-
Node.js에서 URL객체를 이용하여 쿼리 스트링을 만들때 인코딩 문제Node.js 2024. 7. 14. 18:48
공공 데이터 포털의 api를 이용할 때 key값을 쿼리 스트링으로 보내야 되는데 이때 URL 객체를 이용하여 만들게 될때 의도와 다른 값이 들어가는것을 확인 할 수 있다.73gWZtFI9JQ0Bg%3D%3Dconst newUrl = new URL(`${this.endPoint}`);newUrl.searchParams.set('serviceKey', serviceKey); search: '?serviceKey=73gWZtFI9JQ0Bg%253D%253D',searchParams: URLSearchParams { ...'serviceKey' => '73gWZtFI9JQ0Bg%3D%3D' }, ...}URL에서 제공하는 메서드인append 와 set 둘다 사용해도 결과는 똑같다.왜 이러한 현상이 일어나냐면 7..
-
xml-parser를 위한 fast-xml-parser 라이브러리Javascript/라이브러리 및 API 2024. 7. 14. 16:07
공공데이터포털에서 제공하는 Api를 호출 했을때 굉장히 불편함을 느끼는것이 2가지가 있다.1. 분명히 http 통신인데 성공일때든 실패일때든 http Status 200으로 성공으로 무조건 보내준다.2. 실패 했을때 status 200으로 성공 상태로 에러 주는것도 불편한데 심지어 xml로 준다. 핸들링 가능한 모든 에러는 다 map으로 이동 된다. catchError는 http request error가 아닌 요청 자체를 못보내는 케이스나 그럴때나 핸들링 가능할것 같다. 예를들면 틀린 url에 요청을 보냈거나 했을때 즉 httpService에러일때나 catchError를 사용될것이다. https://www.npmjs.com/package/fast-xml-parser fast-xml-parserValid..
-
class-validator의 `@ValidateNested` 데코레이터의 오해와 진실Nest.js/class-validator 2024. 7. 9. 16:45
이러한 중첩 객체가 있다면 @ValidateNested 데코레이터와 @Type 데코레이터를 사용 해주어야 한다. 그러나 만약 request-dto가 아닌 response-dto라면 어떻게 해야할까? GorupEventItemResDto인데 해당 Response Dto에는 response 하기 때문에 @Type 데코레이터만 사용해도 중첩 객체의 @Trsnfomer 데코레이터나 @Exclude @Expose 작업 같은것들이 정상적으로 실행된다. 자세한건 아래 Reference에 class-transformer 공식문서를 참고하면 된다. 결론적으로 @ValidateNested 데코레이터는 애초에 class-validator에서 가져오는것이고 중첩객체의 validation이 필요할때 사용 하는 데코레이터이고 만..
-
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 타입으로 손쉽게 불변..