개요 테스트 코드를 작성을 하다 보면 독립성을 가진 테스트 코드를 작성하는데 많은 고민을 하게 됩니다. 독립성을 가지기 위해서 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..
해싱(Hashing) 해싱은 데이터의 효율적인 저장과 검색을 위해 사용되는 알고리즘입니다. 해시 함수를 사용하여 데이터를 해시 테이블에 저장하고, 동일한 해시 함수를 사용하여 데이터를 나중에 다시 검색할 수 있습니다. 해시 함수는 일정한 길이의 문자열(해시 값)을 생성하므로, 데이터의 길이에 상관없이 항상 일정한 크기의 데이터를 반환합니다. 이러한 해싱 작업을 수행하는데 도움을 주는 모듈이 `bcrypt` 입니다. 해당 글에서는 `Next.js`에서 어떻게 해싱을 하는지 알아 보도록 하겠습니다. 모듈 설치 npm i bcrypt npm i -D @types/bcrypt 사용하기 해싱을 하는 곳은 대체로 회원가입하는 유저의 비밀번호 입니다. 회원가입시 유저의 비밀번호를 해싱하는 코드를 구현해 보겠습니다. ..
Module 이란 Nest.js에서는 Module은 하나의 애플리케이션을 담당을 하고 있다고 볼 수 있습니다. MSA(Micro Service Architeture)가 인기있는 요즘 이러한 Module을 기준으로 구분하여 분리 할 수 있도록 의존성을 구분하면 좀 더 관리가 용이한 서비스가 나올 것입니다. 그렇다면 이러한 Module의 구성은 어떻게 되는지 알아보도록 하겠습니다. 구성 Module은 데코레이터를 통해 정의 할 수 있습니다. 그리고 설정 되는 값은 크게 아래 4개로 나뉘어 집니다. Controllers: 요청을 처리하고 응답을 반환하는 로직을 담당합니다. Providers: 다양한 형태의 서비스, 리포지토리, 팩토리 등을 포함하며, 이들은 주입을 통해 컨트롤러나 다른 프로바이더에 사용됩니다...
Provider Spring을 하다보면 자주 듣게 되는 용어 DI(의존성 주입) 그러한 의존성 관리를 해주는 IOC 컨터네이가 Spring에는 존재하고 있습니다. 하지만 Nest.js에서는 아직 의존성을 관리해주는 기능은 없어 명시적으로 입력을 해주어야 하는데 이때 사용되는 것이 Provider 입니다. Provider에는 다양한 방식과 형태로 의존성을 제공하고 있습니다. 이번 글에서 한번 어떻게 사용되고 있는지 보도록 하겠습니다. Nest.js가 아니라 spring으로 보는 의존성 주입에 대한 내용입니다. 의존성 주입에 대한 개념이 헷갈리신다면 보시는 것을 추천드립니다. Spring이란? (DI 와 IOC) Spring Spring이란 JAVA기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워..