Sequelize 를 사용하면서

안녕하세요 @realmankwon입니다.

회사에서는 오라클을 사용하고 있고 3 Tier 방식으로 오라클에는 직접 접속을 하지않고 WAS 서버가 대신 처리를 해 주는 방식을 취하고 있습니다.
대신 쿼리문을 DB 에 쿼리 ID로 미리 저장해두고 ID만 클라이언트 프로그램에 입력을 하는 방식이라 소스코드에는 쿼리가 단 한줄도 없습니다.

이런 방식으로만 개발을 해 오다가 node.js 에서 DB를 사용할려고 하니 너무나도 불편하더군요.
그래서 회사에서 사용하던 것을 비슷하게 구현하여 나름대로 잘 사용해 왔었습니다.
하지만 이걸 유토피안에 한번 올렸다가 호되게 욕을 먹고 난 다음 마상을 입고 새로운 것을 찾아 나섰습니다.

그것이 바로 sequlize 라이브러리입니다.
sequlize 는 ORM 이기 때문에 간단하게 사용할 수 있어서 편하고 좋습니다.

특히 테이블과 매핑되는 파일을 생성시키고 내부적으로는 클래스로 사용을 합니다.
기본적으로 CRUD 가 다 처리되고 왠만한 것들은 쿼리를 작성하지 않고 해결이 됩니다.
복잡한 것들은 직접 쿼리를 작성할 수도 있습니다.

예를들면 사용자 정보를 저장하려고 한다면 이것을 실제 테이블로 생성합니다.
sequelize 는 복수형으로 테이블을 생성해야 하기 때문에 users로 테이블을 생성합니다.
대신 node.js에서의 파일명은 단수인 user.js로 해야만 인식을 합니다.

일단 이렇게 실제 테이블 users와 클래스 파일 user.js가 생성되면 그 다음에는 쉽게 다룰수가 있습니다.
보통 테이블은 database/models라는 디렉토리에 저장이 되고 이것을 불러옵니다.

const models = require(../database/models)

1 . create

  • const user = await models.user.create({id : id, name : name});

리턴값은 저장된 정보가 리턴이 됩니다.

2 . read

조회를 할때는 한건만 가져올때는 findOne을 다건을 가져올때는 findAll을 쓰게 됩니다.

  • const user = await models.user.findOne({where : {id : id}});
  • const users = await models.user.findAll();

이때 findOne 는 단순 json 정보가 findAll은 json 으로 이루어진 배열이 리턴됩니다.
만약 한 건도 없을 경우에는 findOne 은 null 로 findAll 은 []로 리턴됩니다.

3 . update

수정은 처음에는 변경할 값을 쓰고 그 뒤에는 where 조건문을 씁니다.

  • const user = await models.user.update({name : name}, {where : {id : id}});

리턴값은 변경된 수량입니다.

4 . delete

삭제도 조회와 마찬가지로 where 를 쓰고 조건을 쓰면 수행이 됩니다.

  • await models.user.delete({where : { id : id}});

기본적으로 위의 함수들을 이용하여 CRUD가 해결이 됩니다.
하지만 read 의 경우에는 컬럼명을 변경하거나 정령, 합계, 수량 등등 다양한 사용법이 있습니다.
이런 문법들도 한번 정리를 해야하는 요즘은 시간이 나지 않는군요.
차차 정리를 해나가야겠습니다.

사실 오늘 이 글을 쓰게 된건 그동안 sequelize를 쓰면서 한번도 쓰지 않았던 함수를 정리하고자 쓰게 되었습니다.
딱 그것만 쓸려니 너무 허전하더라구요 ㅎㅎ

오늘 사용한 함수는 바로 findOrCreate 입니다.
이름이 직관적이죠??
조회하고 있으면 가지고 오고 없으면 입력하는 것입니다.

보통 PK 때문에 조회를 먼저해 보고 없으면 넣도록 하여 2번의 작업을 수행해 주는데 이 함수는 내부적으로는 2번을 행할지 몰라도 개발할때는 편하게 작성이 가능합니다.
일단 문법은 다음과 같습니다.

  • const user = await models.user.findOrCreate({where : {id : id}, defaults : {name : name});

이렇게 작성을 하면 id로 조회하여 없으면 where 조건에 쓴 키값은 자동으로 저장이 되고 나머지 defaults 에 입력한 값이 키값의 나머지 정보로 저장이 됩니다.
만약에 존재한다면 id에 해당하는 레코드를 반환하게 됩니다.
또한 리턴값은 2개인데 하나는 위에 언급한 입력하거나 조회된 내용이고 나머지 하나는 입력을 했는지 조회를 했는지를 구분하는 용도로 사용되게 됩니다.

이 함수 덕분에 조회 후 없으면 입력하는 방식을 한줄로 줄일 수 있었습니다.
하나한 알아가는 요즘이 즐겁네요 ^^

H2
H3
H4
3 columns
2 columns
1 column
2 Comments