본문 바로가기

Backend

(112)
QueryFailedError: invalid input syntax for type uuid RESTFUL API를 만들면서 QueryFailedError: invalid input syntax for type uuid 라는 에러가 발생했다. 상황은 이렇다. controller.ts 파일에서 @Put() 메서드에 url path 지정을 하지 않고 API DEV 환경에 배포를 해놓은 상황이고, 프론트엔드단에서 이 API를 토대로 데이터를 사용하려던 중에 다른 @Put('/:id') 메서드와 경로가 겹칠 수 있다는 것이다. 그래서 다시 확인을 해보았다. 나는 @Put()을 지정했던 이유가, 위와 같은 에러가 계속 발생해서 url path 지정을 따로 해주지 않았던 것인데, 해당 에러가 나는 상황에서 에러로그를 살펴보니, @Put('/:id')를 쓰는 곳에서 무언가 문제가 발생하여, 자꾸 내가 작성한..
timestamp 처리하는 방법 timestamp를 처리할 일이 있어 entity 파일에 아래와 같이 timestamp의 type을 Date 객체 타입으로 지정하였는데, @Column({ type: 'timestamp' }) @Transform(transformDate) timestamp: Date; Postman에서 이를 기반으로 timestamp값을 Body 안에 넣고, DTO 등등의 파일에서도 Date 객체 값으로 선언을 하였더니 'timestamp must be Date instance'라는 400 에러가 발생하였다. (왜지) 내가 시도해본 방법은 다음과 같다. 1) { "timestamp" : "2023-07-20" } 2) { "timestamp" : "2023-07-20Z00:00 ~" -> 이런 식이었는데 정확한 값이 기..
extends Repository<레포지토리명>이 아닌 <엔티티명>으로 가야하는 이유 Nestjs로 Repository에 코드를 작성하던 중에 export class AgreementApiRepository extends Repository { async findByAddress(walletAddress: string) { return this.findOne({ where: { walletAddress: ILike(walletAddress) } }); } } 이런 내용을 작성하였다. 그런데 내가 안에 삽입했던 로직에서 에러가 나고 있었다. where절 안에서 발생하는 에러였다. 에러상황 TS2322: Type '{ walletAddress: FindOperator; }' is not assignable to type 'FindOptionsWhere | FindOptionsWhere[]'...
블록체인 이벤트 수신 시 로컬에서 이벤트 수신 vs kubernates의 pods로 이벤트 수신 차이점 요즘 블록체인 이벤트 수신과 관련해서 여기저기 질문을 하며 공부를 하고 있는데, 문득 궁금한 점이 생겼다. 1) IntelliJ의 terminal에서 로컬Queue로 이벤트를 띄워 이벤트를 수신해보는 것 2) Kubernates의 pods로 이벤트를 수신해보는 것 -> 결국 블록이나 order 정보를 가져오는건 동일한 것 같은데, 어떤 점에서 차이점이 있는지 분간이 가지 않아 팀원에게 질문을 하였다. 결론적으로는, 로컬큐에서 이벤트 띄워서 이벤트를 Terminal에서 수신과 Kubernates의 이벤트 수신과 거의 동일하다. 그러나 차이점을 보자면, Kubernates의 pods의 경우 현재 배포가 실시간으로 띄워져있는 서버여서 실시간으로 계속 블록체인 이벤트가 구독중이다. -> 실제로 운영 및 배포가 ..
Request와 Response 백엔드에서는 클라이언트(쉽게 설명하자면 프론트엔드)에서 request하는 데이터에 대한 적절한 response를 응답해주어야 한다. Udemy에 있는 'Fundamentals of Backend Engineering'에 대한 강의를 듣고, 나름의 정리를 해보았다. Request Response 모델 정의 - Client는 Request를 보낸다. - Server는 Request에 대한 분석을 한다. - Server는 Request를 처리한다. - Client는 Server가 분석한 Response를 분석하고 consume한다. -> 결국 API가 필요한 것이다. 프론트엔드가 필요한 데이터 응답을 만들어주기 위해 프론트엔드에서 요청하는 데이터 response를 API 형태로 내려주는 것이 백엔드의 역할이라..
Local DB 연결방법 Local DB를 연결했던 방법에 대해 정리하려고 한다. 1) IntelliJ 내장 DB > PostgreSQL 선택 2) DB Properties 작성 - 내가 생성한 PostgreSQL 계정 정보를 입력한다. 그리고 상단 name을 작성하면 그것이 DB 연결 리스트에도 같은 이름으로 등록된다. 3) 만약, 해당 프로젝트 디렉토리 하위의 get-typeorm.module.ts 내부의 synchronize:true로 되어있으면 내가 위에서 만든 DB에 해당 DB 내용이 복사될 것이다. (ex. src/해당 프로젝트-data) entities: [entityPath], autoLoadEntities: true, synchronize: false, 그리고 autoLoadEntities가 있는데 복사된 DB의..
[TypeORM] @OneToMany 그리고 @ManyToOne에서 추가로 알게 된 것들 주말에 인프런 '따라하며 배우는 NestJS'를 수강하였다. 이미 NestJS로 개발을 하고 있고, 부족한 부분을 채워넣는 것이 우선이기에 강의를 끝에서부터 듣고 있다 ㅎ 그중에 오늘 @OneToMany와 @ManyToOne에 대한 내용을 수강하였는데, 내가 놓치고 있던 부분이 있어 다시 한번 정리하고자 한다. 상황은 이렇다. 1명의 User는 여러개의 Board를 쓸 수 있다. (@OneToMany) 1개의 Board - 게시글 하나에 대해서는 여러명이서 1개의 게시글을 작성할 수 없다. (@ManyToOne) 정리하자면, User의 입장에서는 @OneToMany이고, Board의 입장에서는 @ManyToOne인 것이다. 참고로 TypeORM을 사용할때 @ManyToOne을 PostgreSQL에 적용할..
SQL table 만들고 id 생성(PK) 1) table의 column은 Entity 기반으로 만든다. 2) 해당 테이블을 클릭한채로 위의 메뉴바에서 연필 모양을 누른다. 3) 1차적으로 DDL 코드가 이렇게 작성되어 있을 것이다. -- auto-generated definition create table obelisk_activity ( value integer, "profileImage" varchar, tx_hash varchar, age integer, tx_from varchar, tx_to varchar, tx_fee integer, dao_id integer ); 4) 위아래로 이렇게 추가해준다. -- auto-generated definition create table obelisk_activity ( id uuid default..
400 error at postman (Unexpected token) 문제 상황 CRUD 테스트중 "message": "Unexpected token , in JSON at position 142" 위와 같은 에러가 발생하였다. 400 에러는 잘 보이지 않는데, 400 에러에 대해 찾아보았다. 문제 원인 MDN 문서에 따르면 서버가 클라이언트단의 오류를 감지해 HTTP 요청을 처리할 수 없다는 의미이다. 나같은 경우에는 DELETE 요청시에 에러가 발생한 것이다. 내가 url에 HTTP 요청 주소를 잘못 넣었다. 원인1) @Delete 메서드에서 Path variables를 :/id 라고 작성했었는데 -> /:id 로 작성했었어야 한다. 원인2) Postman Body부분에서 JSON test data를 넣을때 { "id" : "abc123" } 이라고 했다면, url창에..
unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); 문제 상황 NestJS로 CRUD를 작성하던 중에 throw new unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); ^ Error: An invalid controller has been detected. "(모듈이름)Module" does not have the @Controller() decorator but it is being listed in the "controllers" array of some module. 라는 에러가 발생하였다. 문제 원인 module.ts 파일에서 controllers: [] 부분에서 컨트롤러 이름을 작성했어야 했는데 여기에 모듈 이름을 작성해서 위와 같은 에러가 발생했던 것이었..