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..
전체 설정 순서 `Jenkins`는 `Java` 기반으로 작동하는 오픈소스입니다. 그러기에 자바를 우선 설치를 해줍니다. 이후, `Jenkins`를 `Docker` 기반으로 작동 시켜야 하기 때문에 `Docker`를 설치 해줍니다. 작동 중인 `Jenkins`에 필요한 설정들을 시작합니다. Ubuntu 설정 `apt`를 최신버젼을 가져올 수 있도록 먼저 `update`를 해줍니다. sudo apt update `Jenkins`는 자바 기반으로 작동이 되기에 `Java`를 설치해줍니다. sudo apt install -y default-jdk `Ubuntu`에 `Java`가 제대로 설치되었는지 확인 해줍니다. java -version openjdk version "11.0.20.1" 2023-08-24 O..
해싱(Hashing) 해싱은 데이터의 효율적인 저장과 검색을 위해 사용되는 알고리즘입니다. 해시 함수를 사용하여 데이터를 해시 테이블에 저장하고, 동일한 해시 함수를 사용하여 데이터를 나중에 다시 검색할 수 있습니다. 해시 함수는 일정한 길이의 문자열(해시 값)을 생성하므로, 데이터의 길이에 상관없이 항상 일정한 크기의 데이터를 반환합니다. 이러한 해싱 작업을 수행하는데 도움을 주는 모듈이 `bcrypt` 입니다. 해당 글에서는 `Next.js`에서 어떻게 해싱을 하는지 알아 보도록 하겠습니다. 모듈 설치 npm i bcrypt npm i -D @types/bcrypt 사용하기 해싱을 하는 곳은 대체로 회원가입하는 유저의 비밀번호 입니다. 회원가입시 유저의 비밀번호를 해싱하는 코드를 구현해 보겠습니다. ..