본문 바로가기

분류 전체보기

(290)
JSONB 타입이 column에 존재한다 PostgreSQL 9.4부터 JSONB 타입이 추가되었다고 한다. (2014년경) JSON JSONB 입력받은 텍스트값을 DB에 그대로 저장한다. 그대로 저장 X JSONB와 반대 문자열 사이의 공백도 제거 + KEY 순서 보장 X JSONB와 반대 JSONB가 JSON보다 좀 더 많은 디스크를 사용한다(Always는 아님) Indexing 불가능 Indexing 가능 ※ 특별한 사유가 없으면 JSONB를 사용하라고 하는데 아직은 잘 와닿지 않는다 ㅜ Data Insert시 JSON > JSONB Data 처리 JSON < JSONB (바이너리 형태) 예를 들어 member 라는 테이블이 존재할때 JSONB로 정의된 'signup_info'라는 컬럼이 있다고 하자. JSONB 타입에 JSON을 보통 다..
relation 그리고 연관관계 잡기 내가 현재 기준점을 잡은 entity의 이름을 A라고 하자. A와 B entity는 서로 일대일 관계이고, B와 C는 일대다 관계였다. 이런 상황에서 A->C로 바로 참조할 수 있는 방법이 있나?라고 고민하던 중에 내가 처음으로 시도하던 방법은 relation에 2개의 테이블 이름을 넣는 것이었다. const result = await this.memberRepository.find({ relations: ['B','C'], }); 결과값이 원하는 대로 나오긴 했지만, 이는 올바른 방법이 아니다. 왜일까? 만약 A에서 중구난방으로 떨어진 테이블을 참조하려고 하면 그 관계가 끝도 없이 파야 나올텐데, 내가 했던 방법은 올바르지 않은 것이다. 이럴 때에는 참조하는 테이블을 잘 명시해주어야 한다. 수정한 내용..
fidOne()과 FindOneOptions 객체 기존 코드 async getOne(id: number): Promise { return this.memberRepository.findOne(id); // id만 전달 } findOne(id)로 했었는데 아래와 같은 에러가 발생하였다. Argument type number is not assignable to parameter type FindOneOptions id가 들어가는 인자부분에서 에러가 난 것이었다. 이를 해결하기 위해 일단 체크해야 할 점 - findOne() 함수에 전달되는 파라미터는 검색할 레코드의 식별자(ex. primary key)이다. 숫자 혹은 문자열과 같은 식별자를 전달하면 해당 레코드를 찾아 반환한다. member db에서 id가 PK로 잡혀있었기에 뭐가 문제지?싶었다. 사용해..
Cannot GET /v1/party-member/2 에러해결 조회 API를 만들기 위해 간단한 테스트 데이터를 넣고 로직을 짰었다. controller와 service랑 연관을 잘 지었다고 생각했지만..? 계속해서 404 에러가 발생했었다. 404 에러가 발생했던 이유에 대해서 생각했던 점은 다음과 같다. 1) Dev DB에 dummy(test) data가 없어서 -> 추가 그런데 Dev DB에 데이터를 추가했어도 계속해서 404 에러가 발생했던 것이었다. { "statusCode": 404, "timestamp": "2023-08-18T03:08:25.690Z", "path": "/v1/party-member/2", "message": "Cannot GET /v1/party-member/2" } 내가 작성했던 Controller.ts는 다음과 같다. @Get()..
Nestjs 프로젝트 생성하며 알게된점 (package.json 내부의 모듈역할, dependencies 그리고 devDependencies) NestJS로 어찌저찌 일을 하고는 있지만, 사실 부족한 개념들이 많은 것 같다. 퇴근하고 NestJS 강의를 들으며 새로 알게된 사실들이 있어서 정리하고자 한다. 기존에는 신경을 쓰지 않았던 것들이다. 1) 터미널에서 nestjs의 특정 모듈, 타입스크립트 특정 버전을 명시하여 설치할 수 있다. npm install @nestjs/common@7.6.17 @nestjs/core@7.6.17 @nestjs/platform-express@7.6.17 reflect-metadata@0.1.13 typescript@4.3.2 2) package.json에서 보이는 NEST 관련 모듈들의 역할 "dependencies": { "@nestjs/common": "^10.0.0", "@nestjs/core": "^1..
winston이란? (package.json에 nest-winston 모듈 있는데 모듈 없다고 에러뜸 해결) winston 모듈이 없다고 뜨길래 package.json 파일을 살펴보니 dependencies에 잘 깔려만 있었다. "nest-winston": "^1.9.3", 그런데 왜 인식을 하지 못했던걸까? 합리적 의심 1 : package.json 파일에 해당 라이브러리가 명시되어있지만, 실제로 해당 라이브러리가 설치되지 않았을 수도 있음 -> 프로젝트 터미널에서 npm install OR yarn install로 의존성 설치 합리적 의심 2 : 프로젝트에 설치된 다른 라이브러리나 패키지와의 버전 충돌 -> 의존성 버전 조정 OR npm ls OR yarn list를 통해 의존성 트리 확인 합리적 의심 3 : 빌드과정에 없음 -> 빌드 스크립트가 모듈을 포함하고 있는지 확인 합리적 의심 4 : 캐싱 문제 -..
Module '"nestjs-typeorm-paginate"' has no exported member 'IPaginationOptions'. 팀원이 모듈을 설정한 부분이 있었다. 나는 develop 브랜치를 update 해왔는데 위와 같은 에러가 발생하고 있었다. V 체크해볼 부분 - 해당 프로젝트는 npm으로 설치가 되어있었던 터라 node_modules 파일이 있었다. - .gitignore 파일을 보면 /dist와 /node_modules 파일이 컴파일에서 제외되다보니 팀원이 설치한 라이브러리에 대해서 같이 가져올 수 없었다. V 해결방법 터미널에서 yarn install을 통해 그동안 안깔렸던 여러 모듈들을 깔아주었다. 또한 yarn install 하기 전 제목과 같은 에러가 발생하였을때 import { IPaginationMeta, IPaginationOptions } from 'nestjs-typeorm-paginate'; IPag..
zsh: command not found: nest 해결방법 맥북 터미널을 이용해 프로젝트 경로에서 프로젝트를 생성하려고 하니 자꾸 아래와 같은 에러가 떴다. 난 Nest 다 설치해서 쓰고 있었고, node와 npm 둘다 설치해서 쓰고 있는데 뭐가 문제인가..! zsh: command not found: nest 계속해서 시도해본 방법은 다음과 같다. 1) 아래의 명령어를 입력하면 에러가 뜬다. 프로젝트 경로이름 npm install -g @nestjs/cli npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plainte..
git flow - hotfix 작업방법 기존에 hotfix 브랜치에 작업할 내용이 없었는데, 이번 기회에 hotfix로 작업을 해보게 되었다. git은 언제나 어려워~ 1) hotfix 브랜치를 popup 이라는 버전의 이름으로 작업할 것 git flow hotfix start popup hotfix로 작업을 하려고 하니 아래와 같은 에러가 발생하였다. Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first. 2) git flow init 하면 아래와 같이 브랜치를 설정하는 리스트가 쭉 뜬다. Which branch should be used for bringing forth production releases? Which branch should be used for ..
QueryBuilder 사용시 = 표현과 = : 표현의 차이점 왜 이 두 표현의 차이점이 이제야 보이기 시작했을까?는 의문이다. (그냥 모르고 갖다 쓴거지 뭐) .createQueryBuilder('popup') .leftJoinAndSelect('popup.popupMultilingualTables', 'multilingual_table') .where('popup.language = :language', { language }) .andWhere('popup.is_active = true') 여기서 보이는 where절과 andWhere절에서 = :language로 쓰느냐, = 로 쓰느냐는 의미가 다르다. 1) popup.language = :language의 경우 뒤에 두번째 인자(파라미터)로 language가 온다. 즉, 파라미터가 있을 경우에 = : 라는 표..