본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

스마트 앨범, 조건으로 묶는다

~11 min · smart-albums, declarative, query, multi-membership

Level 0빈 종이
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"그림 하나를 폴더 열 개에 넣지 마. 폴더 열 개의 조건을 적어두고, 맞는 데마다 알아서 나타나게 해."

집은 하나, 나타나는 곳은 여럿

Loomis 의 모든 항목은 실제 집이 딱 하나야. 진짜로 들어가 있는 폴더 말이지. 그런데 스마트 앨범에는 몇 군데든 나타날 수 있어. 모순이 아니야. 스마트 앨범은 뭘 넣어두는 자리가 아니라 조건이거든. 항목이 앨범에 뜨는 건 네가 거기 끌어다 놔서가 아니라 조건에 맞아서야. 집은 하나, 얼굴은 여러 군데, 복사본은 한 장도 없이.

소속은 계산되는 거지 옮기는 게 아니다

'어렵다고 표시했는데 아직 채점 안 한 손 습작' 같은 앨범은 조건으로 정의돼. 항목의 태그와 종류와 점수를 보는 조건이지. 그 조건에 맞는 항목은 저절로 앨범에 떠. 새로 만든 세션에 '어렵다' 를 붙이면 끌어다 놓지 않아도, 복사하지 않아도 그 앨범에 나타나. 태그를 떼면 조용히 빠지고. 앨범은 자기 조건을 실시간으로 비추는 창이라, 항목이 바뀔 때마다 다시 계산돼. 손으로 파일한 폴더처럼 낡을 수가 없어.

정리에는 시키는 것보다 적어두는 게 낫다

여기 깊은 차이가 있어. 시키는 방식의 정리는 항목마다 들어갈 자리를 직접 다 넣어주는 거야. 손이 많이 가고, 복사본이 생기고, 뭐 하나 바뀌면 바로 낡아. 적어두는 방식의 정리는 원하는 묶음을 조건으로 적어두고 소속은 계산되게 두는 거고. 폴더와 검색의 차이, 재생목록과 스마트 재생목록의 차이, 테이블과 뷰의 차이랑 같은 도약이야. 정리가 손으로 쌓은 더미가 아니라 저장해둔 조건들이 되면 알아서 굴러가. 폴더 열 개를 맞춰주는 노동이 그냥 증발해.

조건은 더하기만 하게 둔다

Loomis 는 스마트 앨범 조건을 더하기만 하는 방향으로 유지해. 맞는 항목이 생기면 앨범에 추가될 뿐, 다른 게 조용히 빠지는 일은 없어. 이 절제 덕에 머릿속 모형이 아주 단순해져. 스마트 앨범은 '이 조건에 맞는 전부' 그 이상도 이하도 아니고, 하나를 태그했더니 엉뚱한 게 재배치되는 기이한 일도 없어. 예측 가능하고 더하기만 하는 소속이 조건 기반 시스템을 수상한 물건이 아니라 믿을 만한 물건으로 만들어. 어떤 항목이 왜 거기 있는지는 늘 조건에 적혀 있으니까.

Code

폴더는 옮기는 것, 스마트 앨범은 저장해둔 조건·python
# A FOLDER is imperative: you MOVE an item into it. Exactly one home per item.
folders[item.home].append(item)         # one real home, chosen by hand

# A SMART ALBUM is declarative: a saved QUERY, not a place you drag things.
ungraded_hard_hands = SmartAlbum(
    predicate=lambda i: i.type == "hand" and not i.graded and "difficult" in i.tags
)

# Membership is COMPUTED on read -- no move, no copy:
contents = [i for i in all_items if ungraded_hard_hands.predicate(i)]

# Tag a NEW item 'difficult' and it appears automatically; untag it and it leaves.
# One item, many computed memberships, zero duplication -- and never out of date.

External links

Exercise

지금 항목을 여러 자리에 넣어서 정리하는 걸 하나 찾아봐. 메일을 폴더 여러 개에 넣거나, 북마크를 겹치는 분류에 넣거나, 사진을 앨범 여럿에 넣는 것 같은 거. 그걸 항목당 집 하나에 원하는 관점마다 조건 하나로 다시 설계해봐. 그러면 사라지는 관리 노동을 적어보고, 아예 없어지는 위험이 뭔지도 짚어봐. 힌트를 주자면 복사본끼리 어긋나는 일이야.
Hint
여러 자리에 손으로 넣는 방식은 항목이 갈 자리를 전부 기억했다가 뭐가 바뀌면 다 고쳐야 해. 그리고 복사본은 결국 서로 어긋나고. 집 하나에 조건 여러 개로 바꾸면 그 관리 노동이 통째로 사라져. 소속이 계산돼서 나오니까 늘 맞고, 애초에 항목이 하나뿐이라 맞춰줄 복사본도 없거든.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.