전체 글 77

Node.js로 특정 IP 접근 허용/차단

특정 IP로만 접근을 허용하거나 차단해야 하는 경우가 있다. Node.js와 Express.js 환경에서 어떻게 하는지 알아보자. 특정 IP 설정 const ips = ['127.0.0.1','127.0.0.2']; 접근 허용 const allowIPs = (ips) => { return (req, res, next) => { const clientIP = req.headers['x-forwarded-for'] || req.socket.remoteAddress; if (ips.includes(clientIP)) { next(); } else { res.status(403).send('접근 차단'); } }; }; app.use(allowIPs(ips)); 접근 차단 const blockIPs = (ips..

JavaScript Fetch, Axios 차이

HTTP Request를 위한 방법 중 Fetch, Axios에 대해 알아보자. Fetch fetch("https://localhost:3000/user", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ id: "hj1", name: "hjkang", }), }).then((response) => console.log(response)); 장점 내장 라이브러리이므로 별도로 import 할 필요가 없다. 내장 라이브러리이므로 업데이트에 따른 에러 방지가 가능하다. Promise를 기반으로 만들어져서 다루기 쉽다. 단점 지원하지 않는 브라우저가 존재한다.(ex. IE11) 네트워크 에러 발생 ..

PostgreSQL 배열 함수

PostgreSQL은 다양한 배열 함수를 지원한다. 그 중 자주 사용하는 배열 함수 몇 가지를 알아보자. 설명 위한 테이블 & 데이터 생성 create table table1 ( col1 text, col2 integer[] ); insert into table1 values ('Bill', '{10000, 10000, 10000, 10000}'); insert into table1 values ('Carol', '{20000, 25000, 25000, 25000}'); create table table2 ( col1 text, col2 text ); insert into table2 values ('A', 'A1'); insert into table2 values ('A', 'A2'); insert i..

PostgreSQL UNION, UNION ALL

UNION 이란? 두 개 이상의 SELECT 문 결과를 결합하며 결합 시 중복 데이터는 제거된다. 두 개의 SELECT문 간의 컬럼 개수는 동일해야하고, 데이터 유형 역시 호환되어야 한다. 데이터를 정렬하기 위해서는 맨 마지막 SELECT문에 ORDER BY 절을 사용해야 한다. UNION ALL 이란? 두 개 이상의 SELECT 문 결과를 결합하며 결합 시 중복된 데이터도 모두 출력한다. 예제 CREATE TABLE table1 ( id varchar(255) , name varchar(255) , email varchar(255) ); INSERT INTO table1 VALUES ('id1', 'a', 'a@naver.com') , ('id2', 'b', 'b@naver.com') , ('id3',..

JavaScript console.time()

console.time()이란? 코드나 함수 실행에 걸리는 시간을 계산 할 때 타이머로 사용 console.timeEnd()이란? 타이머를 종료하고 걸린 시간을 밀리초 단위로 출력 사용 방법 매개변수인 label은 타이머의 이름으로 자유롭게 지정 가능 입력하지 않을 시 default label로 자동 지정 // 타이머 시작 console.time(label) // 시간 측정이 필요한 코드 작성 // 타이머 종료 console.timeEnd(label) 예시 1부터 999999 까지의 숫자를 더하는 add() 함수의 실행 시간 계산 타이머 이름은 "test timer"로 하였음 function add() { let sum = 0; for (let i = 1; i < 1000000; i++) { sum +=..

JavaScript console.table()

많은 사람들이 JavaScript 코드 디버깅 할 때 console.log() 를 사용한다. console.table()을 활용하여 좀 더 효율적으로 디버깅해보자. console.table()이란? 배열과 객체를 테이블 형식으로 콘솔에 출력 테이블의 헤더를 클릭하여 정렬도 가능 사용 방법 1. 배열 const fruits = ['apple', 'banana', 'mango'] console.table(fruits) 2. 배열의 배열 const names = [['Kang', 'HyeonJi'], ['Hong', 'GilDong'], ['Kim', 'Test']] console.table(names) 3. 객체 const user = { name: "Kang HyeonJi", age: 30, } conso..

PostgreSQL 인덱스를 타지 않는 이유

인덱스가 생성되어 있는데도 인덱스를 타지 않는 경우가 있다. 그 이유를 정리해보자! 1. 인덱스에 변형을 준 경우 select * from table where LOWER(name) = 'world'; select * from table where seq - 1 = 5; 2. NOT 또는 IN 연산자 사용 - NOT일 경우에도 인덱스를 타긴 타지만, 일반적으로, NOT에 사용된 값이 아닌 데이터의 비율이 높은 경우가 많기 때문에 인덱스를 타지 않는 경우가 많다. - 마찬가지로 IN일 경우에도, IN에 포함된 데이터들의 비율이 매우 높다면 풀스캔을 하는 것이 낫다고 DBMS가 판단하면 인덱스를 타지 않는다. 3. 와일드 카드 LIKE문장에서 범위 전체를 지정 - 문자열로 이루어진 값을 인덱스로 잡았을 때,..

PostgreSQL 문자열 함수

문자열 함수 btrim : 문자열의 시작과 끝 양쪽에 지정된 문자들을 제거 char_length : 문자열의 길이를 반환 character_length : 지정된 문자열의 길이를 반환 || : 2개의 문자열을 합하여 반환 initcap : 문자열 중 첫번째 문자는 대문자로 변환하고 나머지는 소문자로 변환 length : 문자열의 길이를 반환 lower : 지정된 문자열을 모두 소문자로 변환 lpad : 지정된 문자열을 원하는 길이로 맞추는데, 이때 부족한 문자를 왼쪽에 채움 ltrim : 문자열의 왼쪽에서 지정된 모든 문자를 제거 position : 문자열에서 지정된 문자열이 존재하는 인덱스값을 반환 repeat : 문자열을 원하는 만큼 반복해서 반환 replace : 기존의 문자열을 구성하는 부분 문자..

JavaScript에서 jwt 발급

jsonwebtoken 패키지 설치 npm i jsonwebtoken 토큰 발급 const jwt = require("jsonwebtoken"); // es 쓰는 경우 import jwt from "jsonwebtoken"; const token = jwt.sign({ email: "test@user.com" }, "secret_value"); console.log(token); // 로그를 찍어보면 eyJ로 시작하는 긴 문자열이 출력되는데, 이 값이 발급받은 토큰 토큰 검증 - jsonwebtoken 에서 제공하는 verify() 함수를 사용하여 검증한다. - 첫번째 인자로는 토큰 문자열을 받고, 두번째 인자로는 sign() 함수와 동일하게 키를 받는다. const token = jwt.sign({ e..