함수function 키워드로 선언하며 return 키워드로 값을 반환한다.function func1(var1, var2...) { // do something return}만약 함수가 아무런 값도 반환하지 않거나, return 뒤에 값이 없다면 undefined를 반환한다.매개변수js의 모든 함수는 0개 이상의 이름이 있는 매개변수를 가질 수 있다.만약 미리 선언되지 않은 n개의 '나머지 매개변수(rest parameter)'를 전달받으려면 ...args 키워드를 사용한다.function add(a, b, ...args) { // 1, 2를 제외한 나머지 매개변수는 배열로 args에 전달됨 console.log(args) return a + b;}console.log(add(1, 2, 3, 4, 5..
조건문지정한 조건이 참인 경우 블럭 안의 코드를 실행한다.if ... else제1 분기로 if, 이후 분기는 else if, 기본 분기로 else를 사용한다.if (condition1) { // statement 1} else if (condition2) { // statement 2} else { // default statement}만약 statement가 한 줄 이라면 내려쓰기와 중괄호는 생략할 수 있다.switch특정한 값과의 동등 비교(===)를 통한 분기에 사용된다.switch(var1) { case "A": // 이는 다음과 동일: if (var1 === "A") // statement1 break; case "B": // statement2 break; default: // def..
할당과 산술 연산연산자연산명설명=할당B를 A에 저장함. {A} = {B}+더하기사칙연산-빼기*곱하기/나누기**거듭제곱A의 B승을 구함. {A} ** {B}%나머지A / B의 나머지를 구함.(24 % 7 = 3)관계 비교와 논리 연산이하의 연산자들은 모두 Boolean값을 반환한다.연산자연산명설명, >=크기 비교A와 B의 크기를 비교함.==, !=동등, 부등A와 B가 같은지, 다른지 검사. 단, 형 변환 있음("123"==123은 형 변환에 의해 true)===, !==일치, 불일치A와 B가 같은지, 다른지 검사. 단, 형 변환 없음("123"===123은 false)&&ANDA와 B가 둘 다 참이라면 true 반환.||ORA와 B가 둘 중 하나라도 참이라면 true 반환.기타 연산연산자연산명설명? :삼항..

변수의 선언변수는 다음과 같은 형식으로 선언할 수 있다.[선언 키워드] [변수명] = [값]= (등호)를 사용해 초기화하는게 필수는 아니다.변수의 이름으로는 유니코드 문자셋을 사용하기 때문에 한글로 된 변수명이나 연산자가 아닌 특수문자 만으로도 이름을 사용할 수 있다.변수의 선언 키워드는 다음 세 가지가 있다.var가장 기본적인 변수. 이 키워드로 선언된 변수는 기본적으로 전역 범위를 갖는다. 반복문이나 조건문, 함수 안에서 var를 사용해 선언된 변수는 해당 범위 바깥에서도 사용할 수 있다.let블록 범위 변수. 이 키워드로 선언된 변수는 기본적으로 블록 범위를 갖는다. 반복문이나 조건문, 함수 안에서 let을 사용해 선언된 변수는 해당 범위 바깥에서 사용될 수 없다.const블록 범위 상수형 변수. ..

prisma에서 pagination을 구현하는 두 가지 방식을 소개한다.prisma는 orm으로서 갖춰야 할 기능을 여러 메서드로 제공하는데, pagination은 findMany 메서드에서 구현하는 방법을 제공한다.offset 방식offset 방식이란 n개의 데이터를 보여줄 때, 앞에서 {skip}개 만큼 건너 뛴 데이터를 {take}개 만큼 가져오는 방식을 의미한다.prisma.repository.findMany({ skip: number, take: number})실제 사용할때는 skip을 take만큼 증가시키며 사용한다.(위 그림에서, 다음 skip은 7이 될 것이다) cursor 방식cursor 방식이란 데이터를 보여줄 때, 특정 데이터로부터 {take}개 만큼 가져오는것을 의미한다.위 그..

현재 netstat 확인현재 서버가 어떻게 구성되어있는지 확인한다.netstat -ntlp스크린샷을 못남겼는데, 5432번 포트에 대해 127.0.0.1번만 허용되어있다.접속 허용 IP(listen_address) 변경postgresql 서버를 실행하는 설정은 모두 /etc/postgresql//main 디렉토리에 있다.이중 접속 허용 IP를 변경하려면 postgresql.conf 파일을 수정한다.이 중 listen_addresses를 허용할 ip 목록으로 수정한다.(기본값 127.0.0.1)수정 후 postgresql을 재시작한 뒤 다시 netstat 명령어를 통해 확인해본다.5432번 포트가 설정한 IP에 대해 허용된것을 확인할 수 있다.접속 허용 포트 변경파일을 하나 더 수정해야하는데, pg_hba..

WebAssembly란웹 브라우저에서 작동되는 프로그래밍 언어로, webAssembly 자체로 코드를 작성하기보다 C, C++, Rust등의 소스 언어를 컴파일하는 타겟 언어로써 고안되었다.브라우저에서 실행할 때는 javascript에서 webAssembly를 실행시키는 코드를 작성해 네이티브에 가까운 속도로 실행시킬 수 있다.그럼 이 webAssembly로 컴파일된 함수를 node에서 사용하면 어떨까?함수 작성성능 비교를 위해 백엔드 서버에서 해시 함수를 사용하는 상황을 가정하고, 다음과 같은 해시함수를 작성한다.export default function generateHash(input) { let hash = 2166136261; for (let i = 0; i 이 함수는 시행 시간을 측정하기 ..
기본적으로 express.js에서 Request body의 타입은 미리 정의되지 않는다. 그렇다면 바디에 담길 타입을 개발 과정에서 미리 정의해두고 싶다면 어떻게 해야할까?전역 모듈 선언 사용typescript에선 기본적으로 개발자가 특정 모듈에 대한 정의를 작성하거나, 수정할 수 있는 방법을 제공한다.프로젝트의 루트 디렉토리에 @types 폴더를 만들고, 다음과 같이 body의 타입을 정의할 수 있다.declare module "express" { interface Request { T?: T; } }}Custom Interface 작성Request에 대한 정의만 새로 작성하고 싶다면 Custom Interface를 사용할 수 있다.import { Request } from "ex..