개요 백엔드를 주 개발을 하면서 뷰까지 개발하게 되면 `SSR`을 사용하게 되는데, 이러한 `SSR`을 사용하게 되면 문제는 실시간으로 반영되는 데이터를 유저에게 보여줄 수 없다는 것입니다. 그렇다면 유저는 당연하게도 원하는 데이터를 화면에서 보기 위해서 페이지 새로고침을 해야 한다는 것입니다. 이러한 문제를 해결하기 위해서 사용되는 방식은 `SSE`와 웹소켓인데 이번 그 중에서 `SSE`를 `Nest.js`로 구현하면서 이해 해보고자합니다. SSE vs Web Socket 기술을 사용하기 전에 실시간 통신을 하기위해 사용되는 `SSE`와 `Web Socket`은 어떠한 차이가 있는지 알아 보고자 합니다. SSE `단방향 통신` : SSE는 오로지 서버에서 클라이언트 쪽 서버로만 데이터를 보낼 수 있는 ..
`Nest.js`는 강력한 백엔드 프레임워크로서, 복잡한 비즈니스 로직과 백그라운드 작업을 효과적으로 관리해야 할 때 사용할 수 있는 다양한 도구와 라이브러리를 제공합니다. 이 중에서도 `Bull.js`는 백그라운드 작업을 처리하기 위한 강력한 큐 라이브러리 중 하나로, `Nest.js`와 함께 사용하면 효율적인 작업 관리가 가능해집니다. Bull.js란? `Bull.js`는 `Node.js` 기반의 큐 라이브러리로, 백그라운드 작업을 비동기적으로 처리할 때 사용됩니다. `Bull.js`는 안정성과 성능을 중시하며, 다양한 기능과 옵션을 제공하여 다양한 상황에 적용할 수 있습니다. Task `Bull.js`에서 `task`는 큐(Queue)에 추가된 개별 작업을 나타냅니다. 이 작업은 비동기적으로 백그라..
Integration Test 설정 `Integration Test`는 `API` 부터 반환 되는 결과까지 검증하는 테스트로 통합 테스트와 같은 의미로 사용되고 있습니다. `Nest.js`는 `supertest` 모듈을 사용한 테스트를 진행하고 있습니다. let app: INestApplication; let authService: AuthService; beforeEach(async () => { const moduleFixture: TestingModule = await Test.createTestingModule({ imports: [AppModule], }) .compile(); authService = moduleFixture.get(AuthService); app = moduleFixture...
개요 테스트 코드를 작성을 하다 보면 독립성을 가진 테스트 코드를 작성하는데 많은 고민을 하게 됩니다. 독립성을 가지기 위해서 DB 관련된 작업을 수행하게 되면 다음 테스트 전에 데이터를 삭제하고 다음 테스트를 수행하게 하는 등 많은 방식을 사용하고 있습니다. 하지만 여기서 문제가 되는 것은 의존성을 가진 채로 테스트를 계속 진행을 하게 되면은 문제가 되는 것이 테스트용 디비를 따로 사용을 하게 되지만 다른 테스트에 결국은 영향을 받기도 하고 테스트 속도면에서도 많이 느려지는 문제가 존재하고 있습니다. 그렇다면 이러한 문제를 해결하기 위해서 디비와 캐시를 메모리를 사용하여 처리하는 방식을 사용하게 되었습니다. 이번 글에서 이러한 연결과 방식은 어떻게 되는 것인지 알아보도록 하겠습니다. Oringin Mo..
Rate Limiting 이란 `Rate Limiting`(레이트 제한)은 서비스에 들어오는 요청의 수나 특정 리소스의 사용량을 제한하는 기술적 접근 방식입니다. 이는 다양한 이유로 사용되며, 주로 서버가 과부하 상태에 빠지지 않게 하거나 악의적인 공격(예: DDoS 공격)을 방어하는 데에 쓰입니다. `Rate Limiting`은 일반적으로 다음과 같은 방식으로 구현됩니다. `IP 기반`: 하나의 `IP` 주소로부터 일정 시간 동안 허용되는 요청의 수를 제한합니다. `사용자/토큰 기반`: 인증된 사용자나 `API` 토큰을 사용해 일정 시간 동안 허용되는 요청의 수를 제한합니다. `Endpoint 기반`: `API`의 특정 엔드포인트에 대한 요청 수를 제한합니다. `리소스 기반`: 업로드 사이즈나 다운로드..
`Swagger`는 `local` 환경이나 개발 단계에서 사용을 하게 되는 문서입니다. 이러한 문서를 아무나 접근을 하여 사용하려고 하면 보안에 취약해질 수 있으니 이를 방지 할 수 있도록 `Swagger`에 보안을 설정 해주도록 하겠습니다. 모듈 설치 npm i express-basic-auth npm i dotenv .env 파일 설정 `/src/.env` 파일 생성 해줍니다. NODE_ENV=dev SWAGGER_USER=admin SWAGGER_PASSWORD=admin App Module 설정 `imports`에 `configModule`을 추가 해줍니다. ConfigModule.forRoot({ isGlobal: true, envFilePath: '.env', }), main.ts 설정 `ru..