본문 바로가기

전체 글43

Node.js 카카오 로그인 유닛테스트 Unit Test (mockReturnValue) * 2022년 9월 16일 velog에 작성했던 게시글을 옮겨온 글입니다. 직접 만든 API가 아닌 외부 API를 이용하는 API를 테스트 하려면 외부 API를 목킹(mocking)해야 한다. 프로젝트 수준에서 일어날 수 있는 대표적인 상황을 예시로 들자면 소셜 로그인이다. 카카오, 구글 등 외부 API를 사용하여 정보를 얻어오고 해당 정보를 가공하여 GET, POST, DELETE, PUT, PATCH 등 API를 만들면 유닛 테스트를 작성할 때도 외부 API를 거쳐야만 테스트가 가능하다. // 카카오 로그인 API (DB 저장) const authDao = require("../models/authDao"); const jwt = require("jsonwebtoken"); const axios = .. 2022. 12. 31.
배열에서 합이 n인 연속된 구간 찾기 : 투포인터(Two Pointers) * 2022년 10월 19일 velog에 작성했던 게시글을 옮겨온 글입니다. 원소들의 합이 n이 되는 연속된 구간을 찾는 유형의 문제를 종종 볼 수 있는데 투 포인터 알고리즘을 통하여 해결 할 수 있다. 📈 시간 복잡도 선형 탐색 O(N) 시작점과 끝점을 0번째 인덱스로 지정한다. 부분합이 5와 같을 경우 카운트 한다. 부분합이 5보다 작기 때문에 끝점을 1 증가시킨다. 반대일 경우 시작점을 1 증가시킨다. 2~4를 반복한다. 부분합이 1이므로 끝점을 1증가 시킨다. 부분합이 3이므로 마찬가지로 끝점을 1증가 시킨다. 부분합이 6이므로 시작점을 1증가 시킨다. 부분합이 5이므로 카운트를 한다. 이후 끝점을 1증가 시킨다. 반복한다. 문제 [LeetCode] 977. Squares of a Sorted A.. 2022. 12. 31.
보일러 플레이트 첫 사용기 최소한의 변경으로 여러 곳에서 재사용되고, 반복적으로 사용되는 코드들을 바로 보일러 플레이트 코드라고 한다. 웹 서비스에서 로그인, 회원가입은 필수적인 과정이라고 해도 무방하다. 이 때 사용되는 API, 모듈 등의 구조를 미리 만들어 놓은 틀을 보일러 플레이트라고 한다. 1890년대에 신문사에서 반복해서 사용되는 문구들을 각인한 강철로 찍어내기 시작했고, 이때 이 도구를 보일러 플레이트라고 불렀는데 여기서 유래되었다. 로그인, 회원가입과 같은 기능적인 단위가 아니어도 서버단의 분리, jwt, database 등 웹 개발에서 필수적으로 쓰이는 요소들을 모듈화하여 세팅하기도 한다. 깃허브에 Express 보일러 플레이트를 검색하여 가장 별이 많은 저장소를 골랐다. https://github.com/hagop.. 2022. 12. 31.
쿼리문을 이용한 공격 SQL Injection * 2022년 10월 19일 velog에 작성했던 게시글을 옮겨온 글입니다. 해커들이 사용하는 가장 흔한 웹 해킹 방법이 바로 SQL Injection이다. 조작된 SQL 쿼리문을 이용하여 데이터 베이스를 실행시키는 방식으로 이루어진다. SQL Injection 안에서도 여러가지 기법이 존재한다. 가장 흔하게 이용되는 기법은 논리적 오류를 기반으로 한다. 1. 인증 우회 논리적 오류 기반 SQL Injection SELECT * FROM users WHERE user_id = 1; 1번에 해당하는 유저가 없다면 해당 쿼리는 아무 결과도 출력하지 않는다. SELECT * FROM users WHERE user_id = 1 OR 1=1; 그러나 OR 1=1 절을 붙여주면 모든 users 데이터가 조회된다. .. 2022. 12. 31.
사전에서 단어 찾는 방법 : 이진 탐색(Binary Search) * 2022년 10월 18일 velog에 작성했던 게시글을 옮겨온 글입니다. 사전순으로 정렬이라는 말은 A, B, C.. 혹은 ㄱ, ㄴ, ㄷ 순으로 앞에서 뒤로 작은 것부터 큰 것까지 차례대로 늘어놓은 것을 말한다. 만약 이렇게 정렬된 사전에서 특정 단어를 찾으라고 한다면 우리는 자연스럽게 이진 탐색 방법을 이용할 것이다. 우리도 모르게 사용하고 있는 이진 탐색 알고리즘은 정렬이 되었다고 약속되었을 때 효율적이다. 만약 Canada라는 단어를 찾는다면 우리는 사전 한 가운데를 펼치고 그 페이지에 나오는 단어들의 시작이 C보다 앞인지 뒤인지를 판단한다. 만약 뒤라면 그 뒷 페이지는 더이상 볼 필요가 없어진다. 다시 남은 절반의 페이지들의 가운데를 펼쳐 앞의 과정을 반복하다 보면 단 몇번만에 찾을 수 있다... 2022. 12. 31.
[]===[], {}==={} 는 거짓(false)이다 let arr = [1, 2, 3]; let arr2 = [1, 2, 3]; console.log(arr === arr2); //false 완벽하게 일치하는 두 배열을 비교하면 Boolean 값은 false이다. 이는 자바스크립트 자료형의 특징 때문이다. 총 8가지의 데이터 타입은 원시 자료형(primitive type)과 참조 자료형(reference type) 2가지 특징으로 나뉜다. JavaScript의 원시 자료형과 참조 자료형 원시 자료형은 선언될 때 변수에 값이 담기지만 참조 자료형은 주소(일명 reference)가 담긴다. string, number, boolean, undefined, null 등 이들은 "홍길동", 1, true와 같이 하나의 데이터만을 담는다. 반면 참조 자료형은 원시 .. 2022. 12. 31.