본문 바로가기

분류 전체보기

(285)
Docker가 바라보는 script를 잘 파악하자 (feat. role "postgres" does not exist) 같은 db를 바라보는 repo를 옮겨다니면서 docker로 postgre를 실행하는데 있어서 계속 에러가 났었다. 이전엔 연결이 잘 됐는데..?! 내가 뭘 잘못한건가 싶어서 다시 한번 보았다. 결론적으로 나는 dev를 바라보는 script를 찾아보고 있었으나, Run 실행환경(start:local)은 local script를 바라보고 있었던 것이다. [Nest] 67804 - 08/23/2023, 9:32:00 PM ERROR [ExceptionHandler] role "postgres" does not exist .local.env 파일 DB_HOST=localhost DB_PORT=5432 DB_NAME=postgres 그러나, start:dev로 다시 실행했을때 위에서 발생했을때 에러는 사라졌다. ..
NestJS의 main.ts를 파헤쳐보자 nest new를 터미널에 입력하면 새로운 nest 프로젝트가 생성된다. 이것을 VSCode에서 열고 실행을 해보면 NestJS에 깔린 기본 내장 프로젝트들이 미리 설치되어 있다. 그중에서도 main.ts를 눈여겨보자. Nest에서는 NestFactory라는 기능을 사용하여 nest 애플리케이션 인스턴스를 생성하는 애플리케이션의 엔트리 파일이다. import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap(); ..
엔티티와 SQL문의 관계 엔티티가 바뀔때마다 SQL문도 함께 업데이트를 해줘야 하는가?에 대한 이야기가 나왔다. 기존에는 엔티티 내에서 직접적으로 데이터를 추가/삭제/수정 해주었고 해당 엔티티에 대한 SQL은 따로 사용하지 않았었다. 그렇다면 엔티티 + SQL 조합으로 사용할 때, 엔티티가 바뀔때마다 SQL문은 업데이트 해도 되지 않는가?에 대한 질문이 나왔었다. 답은, 엔티티가 업데이트 될 때 SQL도 같이 업데이트를 해주는게 좋다는 것이었다. 예를 들면, 해당 엔티티에서 안쓰는 컬럼들이 너무 많을 경우 SQL로 관리하면 엔티티의 의미가 더욱 명확해진다는 것이다. 또한 테이블의 더미데이터도 SQL로 작성하면 쉽게 DB를 날릴때도 유용하다는 것. 아직 익숙하지는 않지만, 천천히 시도해보려고 한다.
FindOneOptions 안의 where 그리고 relations 단건조회 API를 작성을 했는데, 전체 조회할때 나왔던 릴레이션 관계가 나오지 않았었다. 알고보니 내가 단건조회 시 릴레이션을 잡지 않았던 것이다. 단건조회의 경우 FindOneOptions를 통해 where절을 id로 조회하는 것을 넣었었는데, 전체조회 시 적용했던 릴레이션이 없었기 때문에 릴레이션을 적용한 부분이 나오지 않았었다. 수정 전 async getOne(id:number): Promise { const options: FindOneOptions = { where: {id}, }; return this.memberRepsository.findOne(options); } 수정 후 async getOne(id:number): Promise { const options: FindOneOptions ..
회원가입때 받을 개인정보 컬럼이 달라질 것을 고려하기 위해 jsonb 사용한다? 다른 다오가 생길때 회원가입시 받아야 하는 정보가 늘어나면 컬럼도 늘어나기 마련. 그래서 jsonb로 유동적으로 받게 한다고 한다. jsonb는 그 자체로 유연한 스키마를 가지고 있다. { "age": 30, "department": "HR" } { "age":30, "department" : "HR", "location" : "NY" } jsonb 컬럼을 사용하면 이전 속성에 영향을 받지 않고 새로운 컬럼을 추가하거나 기존 속성 수정 가능 -> 다양한 프로젝트 간에 일관된 데이터를 유지하고자 할 때 유용하다. BUT 데이터의 일관성과 유지를 위해 비즈니스 로직에서 신경쓸 부분이 있다고 한다. (검증 및 처리 로직)
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..