목록전체 글 (34)
눈덩이의 테크블로그
CREATE TABLE visitor_hour ( idx SERIAL PRIMARY KEY, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, visitor INTEGER NOT NULL ); CREATE TABLE visitor_day ( idx SERIAL PRIMARY KEY, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, visitor INTEGER NOT NULL );
1. Parameterized Query / Prepared Statement방식 const register = async (req, res, next) => { const { id, pw, name, email, phonenumber } = req.body try { const sql = "INSERT INTO account (id, pw, name, email, phonenumber) VALUES ($1, $2, $3, $4, $5)" //물음표 여러개면 $1, $2, $3 const values = [id, pw, name, email, phonenumber ] await pool.query(sql, values) 여기선 $1, $2이런식으로 값을 넣어주고 2. Template Literal 방식 ..
우선 psql.js에서 이렇게 connection pool과 연결시켜주었다. //Import const { Pool } = require("pg") const pool = new Pool({ user: process.env.USER, password: process.env.PASSWORD, host: process.env.HOST, database: process.env.DATABASE, port: process.env.PORT, max: 5 // 맥스값 설정하기 }) pool.connect(err => { if (err) { console.log('Failed to connect db ' + err) } else { console.log('Connect to db done!') } }) module.e..
npm install dotenv 우선 환경변수를 설정하기 위해 프로젝트의 최상위 폴더에 dotenv를 설치해주었다 touch .env 그리고 .env파일을 만들어 환경변수를 설정해주었다. vim .env 그리고 설정해둔 값을 코드로 불러와주면 끝
const crypto = require("crypto") // 난수 생성 모듈 const createSessionSecret = (password) => { return crypto.createHash("sha512").update(password).digest("base64"); }; console.log('생성된 세션 시크릿:', createSessionSecret("1234")); // 생성된 세션 시크릿을 콘솔에 출력합니다.
DB 연결 정보: 데이터베이스 연결에 필요한 정보(호스트, 포트, 사용자 이름, 비밀번호, 데이터베이스 이름 등)를 환경변수로 설정하여 보안을 강화하고, 변경 시 쉽게 관리할 수 있습니다. API 키 또는 비밀 정보: 외부 서비스(API)를 사용할 때 필요한 인증 키나 비밀 정보를 환경변수로 저장하여 보안을 유지하고, 코드에서 하드코딩하지 않도록 합니다. 프로젝트 설정값: 특정 기능을 활성화 또는 비활성화하거나, 로깅 레벨을 설정하는 등의 프로젝트 설정값을 환경변수로 관리할 수 있습니다. 테스트/개발/운영 환경 구분: 각 환경에 따라 다른 설정이 필요한 경우, 환경별로 다른 환경변수를 사용하여 코드를 유연하게 처리할 수 있습니다. 서버 또는 포트 정보: 서버의 호스트명이나 포트 번호를 환경변수로 설정하여..
- 단일 Connection 제일 기본적인 커넥션 방법이다. 말 그대로 단일 커넥션으로, 한 번 생성하여 사용한 뒤, end, destory 등으로 삭제하고 재생성됨에 따라 handshake 비용, 프로세스 혹은 스레드 비용이 증가한다는 단점이 존재한다. 작은 규모의 애플리케이션이나 단일 요청을 처리하는 경우에 적합합니다. - Connection Pool Connection Pool은 미리 필요한 수 만큼 Connection을 만들어 놓는 개념이다. 위의 그림에 따르면 Pool 안에 Connection을 만들어 놓고 사용할 때 꺼내서 쓰고 반환 시, 다시 Pool에 넣어놓는다. 단일 Connetion과는 다르게 Connection을 다시 생성하는 데 연결 시간(비용)이 소비되지 않는 장점이 있어 그 만큼..
$$: PL/pgSQL 코드를 감싸는 따옴표로, 여러 줄의 PL/pgSQL 코드를 정의할 때 사용됩니다. LANGUAGE plpgsql;: 이 함수가 PL/pgSQL 언어로 작성되었음을 명시합니다. CREATE TABLE account ( idx SERIAL PRIMARY KEY, id VARCHAR(20) NOT NULL UNIQUE, pw VARCHAR(20) NOT NULL, name VARCHAR(20) NOT NULL, phonenumber VARCHAR(15) NOT NULL UNIQUE, email VARCHAR(24) NOT NULL UNIQUE, is_admin BOOLEAN DEFAULT FALSE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TI..
BEFORE : INSERT, UPDATE, DELETE문이 실행되기 전에 트리거가 실행 된다. AFTER : INSERT, UPDATE, DELETE문이 실행된 후 트리거가 실행 된다. trigger_event : INSERT, UPDATE, DELETE 중에서 한 개 이상 올 수 있다. FOR EACH ROW : 이 옵션이 있으면 행 트리거가 된다. -- 기존에 있던 기본 설정값을 삭제 ALTER TABLE post MODIFY modified_at TIMESTAMP NULL; -- 트리거 추가 DELIMITER // CREATE TRIGGER update_modified_timestamp BEFORE UPDATE ON post FOR EACH ROW BEGIN SET NEW.modified_at =..
req.params 라우터의 매개변수 예를 들어 /:id/:name 경로가 있으면 ":id"속성과 ":name"속성을 req.params.id, req.params.name으로 사용할 수 있다. www.example.com/post/1/jun 일 경우 1과 jun을 받는다. req.query 경로의 각 쿼리 문자열 매개 변수에 대한 속성이 포함 된 개체다. (주로 GET 요청에 대한 처리) 예를 들어 www.example.com/post/1/jun?title=hello! 이면, title=hello! 부분을 객체로 매개변수의 값을 가져온다. 출처: https://inpa.tistory.com/entry/EXPRESS-📚-reqparams-reqquery-reqbody-🤔-정리 [Inpa Dev 👨💻:티..