[Node.js] 쿼리빌더 라이브러리: Knex
knex는 Node.js 환경에서 사용가능한 유연하고 가벼운 형태의 쿼리빌더다.
시퀄라이즈나 TypeOrm, Prisma 등의 견고한 ORM과 비교하면 기능은 부족하지만 가볍고 쉽게 쓸 수 있다는 장점이 있다.
프로덕션 레벨에서 많이 쓰이는지는 모르겠다.
Javascript와 Typescript 모두 지원된다.
여기서는 일단 타입스크립트를 위주로 다뤄보겠다.

그리고 사용한 데이터베이스의 네이티브 모듈도 설치한다.
내 경우에는 postgres이기 때문에 pg를 설치한다.

그리고 가장 먼저 할 것은 커넥션 객체를 생성하는 것이다.
데이터베이스 종류와 연결을 위한 호스트, 사용자&패스워드, DB명을 정리해서 입력해준다.
import knex from 'knex';
// ...
const knexConnection = knex({
client: 'postgres',
connection: {
host: 'localhost',
user: 'nestjs_test',
password: '패스워드',
database: 'nestjs_test',
},
pool: { min: 0, max: 7 },
});
개발중이라면 debug 모드를 켜두는게 편리하다.
이러면 쿼리가 실행될때마다 그 내역을 로그로 잘 찍어준다.
select 기본
select 쿼리는 기본적으로 다음과 같이 작성할 수 있다.
커넥션 객체로 함수를 호출하며 테이블을 지정해주고, 체이닝 메서드 select로 가져올 컬럼을 명시해준다.

그럼 다음과 같이 쿼리가 작성되고 실행될 것이다.

짜잔.
여러개 컬럼을 명시적으로 지정하고 싶다면 다음과 같이 할 수 있다.



조건절 where
조건절의 부여는 체이닝 메서드 where로 처리할 수 있다.
인자를 2개 전달한다면 첫번째 인자와 두번째 인자를 동등 비교를 한다.


그리고 3개를 전달한다면, 2번째 인자가 비교에 사용할 연산자가 된다.


여러개의 조건절을 부여하고 싶다면 where 메서드를 여러번 사용하거나


where 메서드에 오브젝트를 인자로 넘기면 된다.


이외에도 whereIn, whereRaw 등의 편리한 메서드가 많으니 그건 문서를 참조하길 바란다.
insert 기본
데이터의 삽입도 그리 어렵지 않다. 그냥 knex 함수로 테이블 객체를 불러온 다음에 거기에 insert 메서드로 삽입할 데이터만 전달하면 된다.


returing 값을 반환받고 싶다면 두번째 인자로 리턴받을 컬럼을 명시해주면 된다.
전부 받고싶다면 역시 와일드카드 *다.


update 기본
update도 별것 없다.
select와 동일하게 where로 변경할 로우의 조건절을 명시해주고, update에 변경할 값의 오브젝트를 넘겨주면 된다.

그럼 다음과 같이 쿼리가 짜여서

잘 반영될 것이다.
그렇다.
일단 간략하게 맛만 봤는데, 세부 기능들에 대해서는 차차 하나씩 자세히 다뤄보겠다.