Backend (115) 썸네일형 리스트형 rabbitMQ) prefetchCount란? event-lisenter repo에서 app.connetMicroservice {} 내부에 prefectCount라는게 있었다. 이것을 처음 보아서 이번 기회에 정리해두려고 한다. prefetchCount:1로 설정이 되어있었는데, 서버당 한 번에 1개의 메시지를 처리한다는 의미이다. 이를 5로 조정한다면, 서버당 한 번에 5개의 메시지를 가져와 처리할 수 있다는 의미이다. 그렇다면 여기서 의문이 생겼었다. 서버당 메시지를 받는 개수가 정해져 있는거면, 한 서버의 하나의 메시지만 온다는 것이 잘 와닿지 않는다. => 이는 여러 개의 이벤트가 큐에 쌓여있을 때 동시에 몇 개까지 땡겨서 작업하겠는가?에 대한 것이다. prefetch:5로 설정했을 경우 1개만 작업하던 것을 동시에 5개까지 메시지를 땡겨와 .. role이 단수개가 아닌 복수개 처리 role이 원래 단수개였다가 roles로 복수개 처리해야 하는 상황이 왔다. roles를 그냥 string[]으로 받으면 될 줄 알았는데, 이미 있는 메서드에서 role:string으로 처리하고 있었기 때문에 따로 이벤트를 수신할때 처리가 필요했다. const roles = []; for (const role of event.returnValues.roles) { roles.push(this._parseHexToUtf8(role)); } const payload: ~ payload(constants) = { roles: roles, ... }; 위에서 따로 foreach처럼 하나씩 꺼내와서 리스트에 저장하는 로직을 작성해주고, payload 부분에서는 갖다쓰기만 하면 된다. event listener와 handler에서 이벤트 수신하기 위한 Dev 환경 셋팅 모노레포인데, 모듈로 쪼개졌기 때문에 evenet listener와 handler repo를 각각 clone받아 작업해야 하는 상황이다. 그래서 event listener와 handler 레포를 각각 다운받고 Dev 환경 셋팅을 하였다. 1. 제일 기본이 되는(.development.env가 먼저 쓰여진) 파일을 listener 레포의 최상위 env 파일 하위에 .development.env 파일을 만들고 똑같이 복사해온다. 2. postgresConfig 파일도 복사해온 환경과 같이 맞춰준다. 특히 ssl 부분을 잘 봐야한다. 3. 복사해온 곳으로부터 가져온 dev db 연결정보를 똑같이 입력해주어 Dev DB를 연결해준다. 그런데, 아래와 같은 문제가 발생하였다. [Nest] 88887 - 08/31.. 전화번호 조회시 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로 다시 실행했을때 위에서 발생했을때 에러는 사라졌다. .. 이전 1 2 3 4 5 6 7 ··· 12 다음