전체 글

전체 글

    [Socket] socket 채팅 서버 부하 테스트하기

    Artillery 설치하기 $ npm i artillery 간단하게 테스트 해보기 $ npx artillery quick --count 100 -n 50 http://localhost:[port] --count 옵션: 가상의 사용자 수 --n 옵션: 요청 횟수 --rate: 초당 요청 지금 저는 로컬에서 테스트 했지만 AWS등의 클라우드에서 테스트할 경우 요금 폭탄이 나올 수 있습니다. 따라서 실제 서버와 같은 사양의 컴퓨터에서 테스팅하는 것을 추천드리며 이를 staging서버라고 부릅니다. report 생성하기 $ artillery run -o testResult.json test_ver1.yml test_ver1.yml 경로에 testResult.json이라는 report 파일이 생깁니다. 보기 편하..

    [WIL] 이번주에 마주했던 문제들 (typeORM, socket.io, DB index)

    1. TypeORM에 queryBuilder 적용하기 이전에 ORM에 대해서 글을 쓴 적이 있습니다. 개념적으로 이해했지만 프로젝트에 적용을 하는 것은 또 다른 문제였기에 만났던 문제들을 적어보고자 합니다. 현재 NestJS와 typeorm을 사용하여 프로젝트를 진행 중입니다. DB에서 데이터를 뽑아올 일이 굉장히 잦은데 처음엔 queryBuilber를 사용하지 않고 sequelize와 같은 문법으로 사용하여 데이터를 뽑아오다가 좀 더 복잡한 쿼리가 필요하여 queryBuilder를 사용하여 보았습니다. 제가 예시를 들 부분은 feed(게시글) 조회 부분입니다. 현재 지역에서 발생한 피드를 클라이언트에 보내줘야하는데 각 피드의 작성자에 대한 정보를 응답해야합니다. 단순히 join하는 경우에는 문제가 되지..

    [WIL] 실전 프로젝트 1주차

    1. 테이블간의 매핑된 필드의 경우 직접적으로 데이터를 넣지 못하는 현상 ManyToOne / OneToMany 필드로 묶인 필드의 경우 entity형식의 데이터를 넣어야 조인 칼럼의 데이터를 넣을 수 있었습니다. 다음은 예시입니다. async commentQuest( // user: User, feed: Feed, comment: string ) { const newComment = this.create({ comment, feed, }); await this.save(newComment); return newComment; } comment에 feedId를 넣고자 할때 feedId를 직접적으로 넣을 수 없고 feed: Feed와 같이 entity를 불러와서 넣어야합니다. 2. 채팅 서버 구현 nest..

    [NestJS] NestJS 시작하기

    @nestjs/cli를 전역으로 설치를 하고 프로젝트를 생성합니다. nest new로 프로젝트를 생성하실 때는 원하는 경로로 이동후 실행하셔야합니다. $ npm i -g @nestjs/cli $ nest new [프로젝트명] 그럼 app.module.ts, app.controller.ts, app.service.ts 가 src/ 폴더 안에 생성되는데 하나씩 역할을 살펴보겠습니다. module module.ts는 하나의 기능을 하는 모듈을 말합니다. module안에는 contorller와 provider가 있을 겁니다. controller 컨트롤러는 기본적으로 url을 가져오고 함수를 실행합니다. express에서 라우트같은 존재라고 할 수 있습니다. 컨트롤러에는 데코레이터가 있습니다. 한 가지 주의할 점..

    [WIL] Middleware, N+1 문제 정리 및 해결

    Middleware 서버에 클라이언트로부터 들어온 요청을 처리하는 중간에 기능상의 목적에 맞게 넣어 거쳐가는 함수들을 미들웨어라고 합니다. 여러 기능이 필요한 경우 여러 미들웨어를 넣을 수도 있습니다. 각각의 미들웨어는 next()라는 함수가 실행됨으로서 다음 미들웨어가 호출되어 실행됩니다. 또한 값을 담아서 다음 미들웨어로 해당 값을 전달해 줄 수도 있습니다. 1. 어플리케이션 레벨 미들웨어 어플리케이션 레벨 미들웨어란 express() 로 생성할 수 있는 app 객체의 app.use()나 app.METHOD() 함수를 이용해 미들웨어를 app 인스턴스에 바인딩하는 미들웨어 입니다. 마운트 경로가 없는 미들웨어 함수는 앱이 요청을 수신할 때마다 실행하게 됩니다. ex) app.use((req, res,..