붉은거위 노트 (redgoose note)

쿼리빌더를 만들었을때..

Nest
Blog
Category
Things
Hit
203
Star
0

goose 프로젝트를 한창 만들고 있을때 API 프로젝트를 분리해서 만들는 시기였다.

mysql 쿼리를 한줄로 직접 작성해서 사용하는일이 너무 귀찮았다. 한줄로 쭉 적힌 쿼리의 모습은 가독성도 형편없었다.
아무래도 배열이나 객체로 조합된 모습이 가독성이 좋아서 함수로 특정한 패턴을 가진 객체나 배열을 넘겨주면 쿼리를 만들어서 실행하게 해주는 도구를 만들어 사용하면 사용하고 관리하는데 더 좋을것이라고 느껴졌다.

여차여차 초기버전을 만들고 계속계속 다듬어가니 흠없는 클래스가 만들어졌다. 그때 당시에는 php를 주력으로 사용하고 있다보니 물론 php로..
이렇게 db를 컨트롤하는 클래스를 만들다보니 데이터베이스를 다루는 작업의 난이도가 급격하게 떨어졌다. (나중에 생각해보니 쿼리짜는 능력이 바보로 만들어주는 원인이 된거같다. ^.^)

잘 쓰고있는데 나중에 커뮤니티에서 들었을때 쿼리빌더라는 용어로 같은 컨셉이 있다는것을 알게 되었다. ㅎㅎ

사용하는 모듈의 소스코드: https://github.com/redgoose-dev/goose-api/blob/main/core/Model.php

사용예제

사용하는 방식은 다음과 같다. (대략적으로 이런 모습이라는걸 파악해도 된다.)

// make instance
$model = new Model();

// get count
$total = $model->getCount((object)[
  'table' => 'foo',
  'where' => 'id=1',
  'debug' => true,
]);

// get items
$items = $model->getItems((object)[
  'table' => 'foo',
  'field' => '*',
  'order' => 'regdate',
  'sort' => 'desc',
  'where' => 'id=2',
  'debug' => true,
]);

// add item
$result = $model->add((object)[
  'table' => 'foo',
  'data' => (object)[
    'srl' => null,
    'user_srl' => 4,
    'id' => 'photo',
    'name' => 'Photography',
    'description' => '사진에 관한 창고',
    'regdate' => date('Y-m-d H:i:s'),
  ],
  'debug' => true,
]);

이런식으로 작성해서 실행하면 sql 쿼리로 만들어서 실행해 버린다.
용어는 mysql에서 사용하는것들과 동일하게 사용하다보니 오해는 없으며 객체나 배열 형태로 잘 정돈되어 있으니 가독성은 대단히 높아진다. ㅎㅎ

만들 당시에는 용어도 전혀 몰라서 레퍼런스가 하나도 몰라서 정말로 순수하게 창작해버린 수준이었고, 잘 쓰고있기 때문에 대단히 만족스러운 도구다.

갑자기 떠올라서 이렇게 적어본다.