본문 바로가기

Backend

(112)
전화번호 조회시 010-0000-0000 또는 01000000000 둘다 조회 가능하도록 하는 코드 (feat. /-/g) 전화번호를 조회하는 코드에서 010-0000-0000 또는 01000000000 으로도 조회가 가능하도록 코드를 작성했다. // 사용자가 전화번호 입력시 - (하이픈)도 포함해서 검색할 경우에도 검색 가능하도록 처리 if (keyword) { const formattedKeyword = keyword.replace(/-/g, ''); // 하이픈 제거 daoMemberListQuery.andWhere( "(LOWER(wa.name) LIKE LOWER(:keyword) OR REPLACE(wa.phoneNumber, '-', '') LIKE :formattedKeyword)", { keyword: `%${keyword}%`, formattedKeyword: `%${formattedKeyword}%`, }..
SQL 쿼리문이 Run 실행환경에서 안나올때 쿼리빌더를 작성했는데 쿼리문이 (select,where절 등) Run 실행환경에 찍혀나오지 않는 현상이 있었다. 이럴 경우 postgres.config.ts 파일에서 logging 부분을 true로 바꿔주면 SQL 쿼리문이 잘 실행된다.
Logger 설정할때 앞에 이름 붙이고 싶다면? TokenController 라는 파일 내부에서 Logger을 사용하려면 @nestjs/common의 Logger 모듈을 import 해와야한다. 만약 Run 실행환경에서 [ EVTH : TokenService] ~와 같이 이름을 붙이고 싶다면? export class TokenController extends EventController { private readonly logger = new Logger( 'EVTH: ' + TokenController.name, ); 위와 같이 설정해주면 된다.
package.json에서 내가 놓치고 있었던 것들 그리고 --watch 모노레포 형식이 아닌 프로젝트에서 event handler repo를 실행하기 위해 이런 저런 방법을 시도해보았다. 1) start:local -> start:dao-event-handler가 있어서 실행 안함 2) start:dao-event-handler -> start:local:dao-event-handler로 최종 실행함 즉, 로컬에서 돌려야 하는 구조였다. 이번에 package.json에서 새로 알게 된 것이 바로 실행할때 환경변수가 붙는 실행이 있다는 것이었다. "start" : "nest start" "start:local:dao-event-handler" : export $(cat env/.local.env | xargs) && TZ=Asia/Seoul nest start dao-even..
Enum Type과 Enum 구조체 사용의 고민 현재 우리 팀은 Enum Type을 사용하고 있다. 하지만 협업하는 다른 팀에서 Enum 구조체를 사용하고 있는데, 우리도 이 방향으로 갈지 아니면 혼용해서 쓸지 고민이다. 일단 Enum Type과 Enum 구조체의 차이점을 알아보자. enum CoffeeSize { Small = 'small', Medium = 'medium', Large = 'large } @Controller('coffee') export class CoffeeController { @Get(':size') orderCoffee(@Param('size') size: CoffeeSize) { } } 가독성과 의미부여용으로 주로 사용 enum PaymentStatus { Pending = 'pending', Completed = 'co..
hard delete와 soft delete의 차이점 hard delete와 soft delete라는 단어를 듣게 되었다. 삭제하는데 hard하게 하는건 뭐고 soft하게 하는건 뭐고,, 무슨 차이인지 궁금해서 찾아보았다. 일단 DB에서 삭제 방법은 hard delete(물리삭제)와 soft delete(논리삭제)가 있다. hard delete soft delete 레코드를 전체적으로 삭제 데이터 사용 유무값(flag)만 바꿔 사용자에게 보이지 않게 하는 삭제 데이터베이스에서 DELETE 키워드 이용 DB에서 특정 column 사용 여부를 UPDATE 시켜 사용자에게 보이지 않게 처리 장점 : 삭제 처리를 통해 테이블 디스크의 사용량 줄일 수 있음 + SQL 작성 편리함 / 단점 : 데이터 복구 불가능 장점 : 복구가 필요한 데이터의 경우 손쉽게 복구 가능..
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 ..