[NestJS | 테스트] 외부 라이브러리(bcrypt) 테스트 코드 작성 1
·
백엔드
들어가며안녕하세요, 새하(seha)입니다.오늘은 NestJS 프로젝트를 만들어 보면서 사용한 bcrypt 라이브러리에 대한 테스트 작성 방법을 알아보겠습니다. NestJS와 테스트 코드 작성 연습을 동시에 진행하고 있기 때문에 부족한 부분이 있을 수 있습니다. 그러한 부분은 친절히 알려주시면 감사하겠습니다. 참고 깃허브 주소 : github - koseha/nest-panda-migration 외부 라이브러리 사용: bcryptbcrypt는 비밀번호 같은 민감한 데이터를 안전하게 저장하기 위한 해시 함수 라이브러리입니다.NestJS에서 사용자 인증 시스템을 구축할 때 bcrypt는 비밀번호 해싱(hash) 및 비교(compare) 에 자주 사용됩니다. 키워드설명`bcrypt`해시 함수 라이브러리로, 비밀..
[NestJS | 테스트] Chat GPT한테 물어본 테스트 코드 설계 템플릿
·
백엔드
✅ NestJS 테스트 설계 템플릿1. 🔍 테스트 대상 서비스 요약항목내용서비스 이름YourServiceName테스트 대상 메서드targetMethod()주요 의존성ConfigService, ExternalLibService, 등2. 📋 테스트 시나리오 정의시나리오 ID설명조건 (Given)입력 (When)기대 결과 (Then)TC-01정상 동작ConfigService.get()이 10 반환targetMethod("abc") 호출expectedResult 반환 + 내부 함수 호출 확인TC-02환경변수 없음 → 기본값 사용get()이 undefined 반환메서드 호출기본값 적용되어 호출됨TC-03외부 라이브러리 에러외부 함수에서 예외 발생호출에러가 throw됨3. 🛠 테스트 모듈 구성 체크리스트테스트..
[백준 | 실버 2 | JavaScript] 6603번, 로또
·
알고리즘/문제
Link6603번 - 로또 문제풀이(1)// let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");let input = require("fs") .readFileSync("4. Backtracking/inputs/s2-6603.txt") .toString() .split("\r\n");let idx = 0;let curr = input[idx++].split(" ").map(Number);while (curr[0] !== 0) { const k = curr[0]; const arr = curr.splice(1); const bt = (depth, start, trr) => { if (depth ..
[백준 | 실버 2 | JavaScript] 1182번, 부분 수열의 합
·
알고리즘/문제
Link1182번 - 부분 수열의 합 문제풀이(1)let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");const [N, S] = input[0].split(" ").map(Number);const nums = input[1].split(" ").map(Number);let answer = 0;const bt = (sum, start) => { if (sum === S) { answer += 1; return; } for (let i = start; i (2)// let input = require("fs").readFileSync("/dev/stdin").toString().trim().spl..
[Next.js | app router] TanStack Query로 Server Side Rendering 구현하기
·
프론트엔드
들어가며안녕하세요, 새하(seha)입니다.오늘은 NextJS - SSR 구현에 TanStack Query를 사용하는 방법을 알아보려고 합니다. 간단하게 진행하고 있는 팀 프로젝트에서 프론트팀은 데이터 패칭에 TanStack Query를 사용하고 있습니다. 자동 캐싱, 캐시 유지, 자동 리패칭, 로딩, 에러 상태 관리, Mutation 지원처럼 널리 알려진 장점과 더불어 무한 스크롤, 페이지네이션 구현이 쉽다, 실무에서 많이 쓰인다라는 점 때문에 채택하게 되었습니다. 또 Next 이전, React에서 TanStack Query를 사용하던 것이 관성적으로 넘어온 것도 있습니다. Next를 활용하면서 SSR을 고민하고, 데이터 패칭 구현할 때 저희는, 마찬가지로 TanStack Query를 사용하고 싶었습니다..
Backtracking, 백트래킹, JavaScript
·
알고리즘/이론
Backtracking, 백트래킹백트래킹이란?백트래킹은 DFS (깊이 우선 탐색) 의 한 형태로, 모든 후보 해를 탐색하되, 해답이 될 수 없는 부분은 미리 가지치기하여 탐색 범위를 줄이는 기법입니다. 예를 들어, 특정 조건을 만족해야 하는 조합, 순열, 그래프의 경로 문제에서 자주 활용됩니다.핵심 아이디어는 다음과 같습니다:해단 노드(상태)가 유효한지 검사한다.만약 유효하지 않다면(조건을 만족하지 않는다면) 바로 백트래킹(Backtracking)하여 이전 단계로 돌아간다.유효하다면 다음 노드(상태)로 이동하여 탐색을 이어간다.목표 조건(해를 찾았는지 or 모든 후보를 탐색했는지) 달성 시까지 1~3번 과정을 반복한다. 핵심 개념과 동작 원리상태(state)상태는 현재까지 내린 결정(선택)들의 집합을 ..
[백준 | 실버 3 | JavaScript] 15649번, N과 M (1)
·
알고리즘/문제
Link15649번 - N과 M (1) 문제풀이(1)// let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");let input = require("fs") .readFileSync("4. Backtracking/inputs/s3-15649.txt") .toString() .split("\r\n");const [N, M] = input[0].split(" ").map(Number);const isUsed = Array.from({ length: N + 1 }, () => false);const answers = [];const path = Array.from({ length: M }, () => 0);co..
[백준 | 골드 5 | JavaScript] 12865번, 평범한 배낭
·
알고리즘/문제
Link12865번 - 평범한 배낭 문제풀이(1)let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");const [N, K] = input[0].split(" ").map(Number);const dp = new Array(K + 1).fill(0);for (let i = 1; i = w; j--) { dp[j] = Math.max(dp[j], dp[j - w] + v); }}console.log(dp[K]);
[백준 | 실버 1 | JavaScript] 1932번, 정수 삼각형
·
알고리즘/문제
Link1932번 - 정수 삼각형 문제풀이(1)let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");let idx = 0;const n = Number(input[idx++]);const triangle = [];for (let i = 1; i = 0; i--) { for (let j = 0; j
[백준 | 실버 2 | JavaScript] 11053번, 가장 긴 증가하는 부분 수열
·
알고리즘/문제
Link11053번 - 가장 긴 증가하는 부분 수열 문제풀이(1)let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n");const N = input[0];const arr = input[1].split(" ").map(Number);const dp = Array.from({ length: N }, () => 1);for (let i = 0; i arr[j]) { // 조건 (1) dp[i] = Math.max(dp[i], dp[j] + 1); // 조건 (2) } }}console.log(Math.max(...dp));