새해를 맞이하여 "매일"이라는 새 페이지를 만들었다. 이렇게 생겼다.
매일 또는 주기적으로 하고 싶은 일들을 체크하는 단순한 페이지다. 항상 생각만 하고 있다가 새해가 다가오고 바라는 것들이 있어서 후다닥 만들었다.
blog.kkeun.net/thinking/2021-12-28-new-years-wish
KkTable
사실 "매일" 페이지를 즐겁게 만드는 데에 도움을 준 건 나만의 작고 소중한 DB API, KkTable
이다.
class MyTable extends KkTable
{
public function __construct()
{
parent::__construct(
db_file: 'everyday.sqlite3',
table_name: 'everyday',
columns: [
'date' => KkTableColumnType::STRING,
'breakfast' => KkTableColumnType::INT,
'vitamin' => KkTableColumnType::INT,
'exercise' => KkTableColumnType::INT,
'book' => KkTableColumnType::INT,
],
);
}
...
(여담으로 오늘날의 PHP는 위와 같이 named parameter도 지원하고 enum도 지원한다. 🥳)
위와 같이 적고 나면 KkTable
이 많은 자잘한 일들을 해 준다.
MyTable::insert
를 제공하고,MyTable::select
를 제공하고,MyTable::update
를 제공한다.즉, 나중에 column을 새로 추가하고 싶을 때에는 아래처럼 PHP 코드만 수정하면 된다. 나의 작고 소중한 KkTable
이 대신 필요한 SQLite 쿼리를 날려 줄 거다.
columns: [
'date' => KkTableColumnType::STRING,
'breakfast' => KkTableColumnType::INT,
'vitamin' => KkTableColumnType::INT,
'exercise' => KkTableColumnType::INT,
'book' => KkTableColumnType::INT,
'new_column' => KkTableColumnType::INT, // added
],
아직 column을 지우는 건 지원하지 않지만 안 될 건 없다. 나중에 필요해졌을 때 lazy하게 지원할 생각이다.
www.techonthenet.com/sqlite/tables/alter_table.php
물론, 당연히, 복잡한 쿼리를 전부 지원하지는 않는다.
MyTable::insert
는 데이터를 한 줄씩 넣을 수 있을 뿐이고,MyTable::select
는 데이터를 항상 모두 가져오도록 되어 있으며,MyTable::update
는 데이터를 한 줄씩만 수정할 수 있다.그럼에도 이게 취미코딩을 하는 데에, 특히 나 혼자 쓰는 작은 크기의 데이터를 다루는 데에는 문제가 없다. (그리고 필요해지면 그때 기능을 추가하면 된다.) DB 쓰는 프로그램을 테스트할 때 아무리 작은 프로그램이라도 DB/table 만들고/지우고, 데이터 넣고/빼고 하는 것이 은근 성가셨는데, 이번에는 개발하면서 굉장히 편하게 테스트했던 것 같다.
KkTable
을 이용하고 있다. 😋연말에 취미코딩을 몰아서 하는 기분이다. 뿌듯뿌듯. 🤓
2021-12-30 씀.