전체 글 312

NestJS <-> MySQL 트랜잭션 데드락

정말 오랜만에 js에서 db deadlock을 마주했다.QueryFailedError: Lock wait timeout exceeded; try restarting transaction 트랜잭션을 끊지 않은 상태에서 DB커넥션을 연결하니 발생한, 실수였다.async refundCharge(charge_idx: number, mem_idx: number, point: number): Promise { const qr = this.dataSource.createQueryRunner(); await qr.connect(); await qr.startTransaction(); try { await qr.manager.update( ... ); await ..

Study/에러 정리 2025.03.28

C++ std::cout 로그로 인한 지연처리

C++ 콘솔앱에서 std::cout으로 로그를 출력하는데, 리소스를 많이 잡아먹기 때문에 별도의 로깅용 스레드를 사용한다는 이야기를 들은 기억이 있다. 그리고 이번에 로깅으로 인한 레이턴시를 경험했다.udp 서버를 만들었다.총 13개의 스레드를 사용하고 작업 내용은 아래와 같다.- 메인스레드초기화 로직을 거친 후 대기에 들어간다.- udp 서버 클래스 (3개의 스레드)1. 임의의 피어로부터 데이터를 수신하고, 정해진 소켓에게 해당 데이터를 다이렉트로 전송한다.2. 메모리에 저장된 데이터를 틱마다 특정 피어에게 송신한다.3. 임의의 피어로부터 데이터를 수신하고 메모리에 저장된 데이터를 업데이트한다.-> 멀티스레드 특성상 lock을 사용하여 동기화를 해줘야하나, 정확한 동기화보다는 속도가 중요한 이벤트라 정..

Study/에러 정리 2025.03.21

Window) batch파일 만들기

메모장에 내용을 작성한다.txt 확장자를 bat로 바꾼다.@echo offrem 폴더 이동cd /d "C:\Users\%USERNAME%\Desktop"rem cmd 로그 출력echo [Notice] Wait 10 seconds for program to turn on...rem 타임아웃 -> 블라킹 걸린다.timeout /t 10 /nobreak >nulrem exe파일 실행start test.exerem 새 cmd창 열어서 pm2 실행cd /d "C:\Users\%USERNAME%\Desktop\node\test-project"npm run build && start cmd /k "pm2 start C:\Users\%USERNAME%\Desktop\node\test-project\ecosystem.c..

Settings/Setting 2025.02.25

NestJS) 함수 사용에서 일관되지 않은 this 참조

하나의 서비스에서 this의 잘못된 참조를 발견했다.결론부터 이야기하면, 일반 함수가 아닌 화살표 함수로 해결했다.testFunction(){}testFunction = () => {} net 라이브러리를 사용해서 tcp통신을 한다.main.ts 파일의 bootstrap 함수에서 tcp함수를 시작한다.// main.ts// Start tcp Server try { const tcpService = app.get(TcpService); tcpService.startServer( process.env.TCP_SERVER_HOST, Number(process.env.TCP_SERVER_PORT), ); } catch (error) { console.log( ..

Study/에러 정리 2025.02.19

NestJS) useGlobalFilters, APP_FILTER

HttpExceptionFilter 커스텀 익셉션을 만들었는데 작동하지 않았다.main.ts에 useGlobalFilters() 함수를 작성하고, app.module.ts 파일에 APP_FILTER로 동시에 작성해두었다. 결론은 커스텀 필터 사용시, 동시에 작성하면 안된다.의존성 주입이 필요하다면 APP_FILTER를,의존성 주입이 필요 없다면 useGlobalFilters()를 사용해야한다. // main.tsapp.useGlobalFilters(new HttpExceptionFilter()); 의존성 주입을 거치지 않는다.의존성 주입을 받지 못한다.직접 인스턴스를 생성해 필터 클래스로 동작한다. // app.module.tsproviders: [ { provide: APP_FILTER,..

Study/에러 정리 2025.02.18

NestJS) circular-dependency, forwardRef, undefined

forwardRef로 순환참조를 작성했지만, 참조된 클래스에서 순환참조할 클래스를 찾지 못하는 에러가 발생했다.udpService에서 packet-handler 참조(호출)packet-handler에서 udpService 참조(순환참조 = 호출) -> 에러 발생 TypeError: Cannot read properties of undefined (reading 'udpService') 결론을 미리 말하자면,순환참조시 순환참조에 대한 참조값을 초기화 한 후 작업을 진행해야한다.의존성 단방향 주입// udp.module.ts@Module({ controllers: [UdpController], providers: [UdpService], exports: [UdpService, PacketHandlerS..

Study/에러 정리 2025.02.17

NestJS) Docker - MySQL 연결 환경설정

도커를 사용할 때 DB 호스트는 컨테이너 이름으로 한다.// .env# DB_HOST=localhost # localDB_HOST=my-mysql # DockerDB_PORT=3306DB_USER=rootDB_PASS=[MY_PASS]DB_DATABASE=[MY_DB]docker-compose.yml 파일과 함께 실행한다면 Dockerfile을 직접 실행하지 않는다.// DockerfileFROM node:22WORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run buildCMD ["npm","run","dev"]EXPOSE 8000ROOT 사용자로 DB 연결일반 사용자로 연결한다면 services-db-environment 키값이 바뀌어..

Client/Next.js 2025.02.11

NestJS) EC2 -> crypto is not defined

crypto is not definedec2에서 nestjs 프로젝트를 pm2로 실행하면 에러가 발생했다.나의 경우는 nestjs-scheduler를 사용해서 크론잡 실행시 에러가 발생했다.로컬에서 pm2를 실행했을 때는 발생하지 않았다.비슷한 사례를 찾아 여러 시도를 해보았다.https://github.com/typeorm/typeorm/issues/11270 ReferenceError: crypto is not defined when using TypeORM in Nest.js · Issue #11270 · typeorm/typeormIssue description I'm using @nestjs/typeorm with TypeOrmModule.forRootAsync() in a NestJS proj..

Study/에러 정리 2025.02.07