본문 바로가기

Backend

(112)
Unexpected token { in JSON at position 1 새로운 repo를 받아 postman으로 실행해보려고 요청을 날렸는데 Unexpected token { in JSON at position 1 이라며 실행환경에서 에러가 발생하였고, postman에서는 아래와 같이 에러가 발생하였다. { "statusCode": 400, "timestamp": "2023-08-16T07:32:37.789Z", "path": "/v1/comments/health-check", "message": "Unexpected token { in JSON at position 1" } 여러 문서를 참고했지만, 도움이 될만한건 없었다 ㅜㅜ JSON 형식이 아니어서 해당 에러가 생겼다는 의견도 있었다. 하지만 해결방법은 간단했다. 내가 이전에 postman에서 body 부분에 json ..
Docker 빌드 에러 developement pipeline에 배포를 하려고 하니 아래와 같은 에러가 발생하였다. 터미널에서도 에러 안나는거 확인했는데 막상 배포하려고 하니 에러가.. 아래 문구만 봐서는 Docker 파일 내부에 문제가 있는 것 같았으나 해당 프로젝트의 Dockerfile-development와 다른 프로젝트의 Dockerfile-development 둘다 버전 등을 확인해보았는데도 다른 부분은 없었다. 그래서 View the log to see the remaining 732 error for this task를 열어보니 엄청난 에러가 발생하였다..ㄷㄷ 로그를 좀만 더 내려서 보니 Swagger을 적용했던 DTO와 Entity 파일에서 에러가 발생하고 있었다. @ApiProperty() import도 잘 되..
role does not exist Docker + postgreSQL을 함께 사용중이었는데, 계속 제공된 local DB 정보를 연결하면 IntelliJ에서 postgreSQL 연결시 'role does not exist'라는 에러가 발생하였다. 뭔가 현재 접속 계정이, 접근 권한이 없는건가?라는 생각이 들었다. 해결 방법은 다음과 같다. 0) package.json에서 start:db running(이 이름은 각 프로젝트마다 다를 수 있다) 1) local.env 파일에 접속 (관련해서 비슷한 이름이 있는 local db 환경변수 파일에 접속) 2) DB_USER 부분을, 나의 super 권한을 가진 계정 이름으로 입력하기 DB_HOST=localhost DB_PORT=5432 DB_NAME=postgres DB_USER=해당 db의 ..
npm 특정 패키지 버전 확인 다른 패키지들은 괜찮은데 하나의 라이브러리 때문에 터미널에서 계속 버전 오류가 나는 상황이 있었다. 그래서 해당 패키지의 npm 버전이 얼마인지 하나만 똑 떼와서 체크하려면 어떻게 해야하나?를 찾아보았다. npm show 패키지명 version 나는 canvas의 버전을 확인해야 했기 때문에 아래와 같이 입력하였다. npm show canvas version
TypeError: Cannot read properties of null(reading 'id') 문제 상황 static create() 메소드를 dto 파일 내부에 만들면서, 엔티티 객체로 받는 파라미터 값을 처음에 A entity로 연결했었다. ex) static create(popup: Popup) { Popup 엔티티로 파라미터를 받았다가, static create(popup: PopupMultilingual) { PopupMultilingual 엔티티로 파라미터를 변경하였다. DB에 생성된 id(type:uuid)값을 가져와서 포스트맨에서 Body 부분에 테스트를 하려고 보니, TypeError: Cannot read properties of null(reading 'id') 라는 에러가 발생하였다. 해결 방법 처음에 Popup 엔티티에 있는 id 값을 가져왔었기 때문에, PopupMulti..
Parameter id is not described in JSDoc controller.ts 파일에서 @Get() 메소드 위에 Todo문 하나를 작성해놓은 상태였다. /** * Todo: 팝업 한 개 반환 API * @param dto */ @ApiTags('팝업 한 개 반환 API') @Get('/:id') async getOnePopup(@Param('id') id: string) { return Response.okWith(await this.popupApiService.getOne(id)); } 그런데 @Param('id') id:string 부분에서 노란색으로 감싸져있어서 마우스를 올려보았더니, Paramter id is not described in JSDoc 이라는 문구가 출력되었다. JSDoc이 뭐지.. JSDocument의 줄임말인가?하고 생각해보며 구글..
nvm 이용시 노드 버전 업그레이드 놓쳤던 점 (nvm alias default 버전) 앞에 포스팅에서 https://thisisbrandy.tistory.com/166 node 버전을 업그레이드 했지만, 터미널을 껐다가 다시 켜면 이전 버전이 나타나는 이유 > nvm은 터미널 세션(현재 열려 있는 창)에만 영향을 미친다. 따라서 새로운 터미널 세션을 열면 nvm이 설치한 최신 버전이 적용되지 않고 이전 버전으로 설정된다. 라는 댓글을 내가 남겼었다. 어쩌다보니 터미널을 종료했다가 다시 node-v를 해보니 이전 버전으로 계속 설치가 되어있는게 아닌가? Nodejs 홈페이지 가서도 최신 LTS 버전으로 설치도 하고 했는데, 계속해서 나의 NODE 이전 버전인 16버전으로 출력이 되는거다. 그래서 오랜 삽질 끝에, 업그레이드 하는 방법을 다시 찾게 되었다. node -v 이때 출력했을때 no..
nvm(Node Version Manager)로 특정 노드 버전 쉽게 업그레이드하기 노드 버전을 16버전을 사용하고 있었는데, 18버전으로 업그레이드를 해야했다. 18.12.0 이라는 특정 버전을 업그레이드 하기 위해서 nvm을 이용하였다. nvm은 노드 버전 매니저로, 노드 버전을 업데이트 하기 위한 패키지 매니저이다. nvm이 설치되어 있지 않다면 https://github.com/nvm-sh/nvm 에서 설치가 가능하다. 나는 기존에 nvm이 깔려있었기 때문에 아래와 같은 순서로 진행하였다. 1) nvm ls로 nvm list 확인 nvm ls 현재 16.19.0 버전을 사용하고 있었고, LTS 버전 안에 있는 모듈들의 버전까지 쭉 명시가 된다. -> v16.19.0 system default -> v16.19.0 node -> stable (-> v16.19.0) (default..
NestJS 10 버전업 과정 기존에는 nest 버전을 9버전대를 사용하고 있었다. (nestjs 버전 확인은 package.json에서 @nestjs/core을 확인하면 된다. 그런데 7월 중순경에 10버전이 출시했다는 소식을 듣고, 우리 팀은 nestjs 9버전에서 10버전으로 업그레이드를 해보았다. "@nestjs/core": "^10.1.2" 9버전에서 10버전으로 갔는데 엄청난 type error가 발생하고 있었다. 더군다나 web3 모듈의 경우 지금 최신이 4버전인가 그런데 아직 1버전을 쓰고 있었는데 우리가 먼저 업데이트를 하면 안됐어서 web3와 블록체인 관련 모듈은 업그레이드를 하지 않고 nest와 typescript 관련 모듈만 최신으로 업그레이드를 하였다. https://docs.nestjs.com/migratio..
@Controller 데코레이터 위에 @UseGuards()를 선언했을 경우와 메소드에서만 선언했을때 차이점 들어가기 앞서, @UseGuards() 데코레이터란? Guard란 permission, roles 등에 따라서 주어진 request가 route handler에 의해 handling이 될지 말지를 결정한다. authorization 구현에 많이 쓰이는데, 나 또한 admin에서 특정 권한을 가진 role이 약관 동의 업데이트 시 account 테이블 내의 특정 컬럼들을 한 번에 false로 만드는 작업을 해야했다. 이 작업을 위해 @UseGuards()를 사용해야 했었다. 그러나 여기서 한 가지 놓치고 있었던 점이 있다. 바로 @UseGuards() 데코레이터의 선언 위치였다. @Controller 데코레이터 위에서 선언했을때와 @UseGuards(RolesAuthGuard) @Controller('ad..