Skip to main content
← 블로그

프로젝트는 법인 같은 거야

VauDium ·

'나'와 '프로젝트'를 오가는 전환 버튼 하나를 만들다가, 프로젝트가 폴더가 아니라 워크스페이스라는 걸 알게 됐다. 멤버 가시성, 공유 필터, 그리고 '보이면 소식도 와야 한다'는 불변식까지.

프로젝트는 법인 같은 거야

데스크톱 작업 중에 질문이 하나 나왔습니다.

“나 ↔ 프로젝트 1 ↔ 프로젝트 2, 이렇게 전환하는 버튼을 만들어야 하는데.”

처음엔 필터 단축 버튼인 줄 알았습니다. 프로젝트 필터를 빨리 거는 버튼. 그런데 대화가 이어지면서 전혀 다른 그림이 나왔습니다.

“프로젝트는 따지고 보면 법인 같은 거야.”

이 한 문장이 설계를 다 정리했습니다. 법인은 폴더가 아닙니다. 법인 안에 들어가면 그 법인의 장부가 보이고, 그 법인의 구성원이 보이고, 그 법인의 규칙이 적용됩니다. 내 개인 통장과 회사 통장을 한 화면에 섞어 보지 않는 것처럼, “나”의 할 일과 “프로젝트”의 할 일은 섞이는 게 아니라 전환되는 것이었습니다.

전환되면 바뀌는 것들

그래서 필터가 아니라 컨텍스트를 만들었습니다. 상단 바 오른쪽 끝의 전환 버튼으로 프로젝트에 들어가면:

  • 리스트·달력·칸반·테이블이 전부 그 프로젝트로 좁혀집니다. 화면마다 필터를 거는 게 아니라, 발 딛고 선 땅이 바뀝니다.
  • Community와 Me 탭이 사라지고 그 자리에 프로젝트 정보 버튼이 나타납니다. 법인 안에 있을 때 내 개인 서랍은 필요 없으니까요. 프로젝트 화면도 따로 만들었습니다 — “나”에 대한 메뉴 없이, 그 프로젝트의 목표·마일스톤·활동·멤버만.
  • 새로 만드는 할 일과 메모는 자연히 그 프로젝트 소속이 됩니다.
  • 그리고 가장 큰 변화 — 멤버 전체의 할 일이 보입니다. 지금까지는 프로젝트로 필터해도 내 것만 보였는데, 법인의 장부는 구성원이 함께 보는 게 맞습니다. 서버의 가시성 규칙을 열었습니다. 물론 멤버십을 확인한 경우에만.
  • 저장해 둔 필터도 따라옵니다. “나”의 필터는 내 기기에, 프로젝트의 필터는 서버에 — 멤버가 공유합니다. 한 명이 필터를 꽂으면 다른 멤버의 바에도 나타납니다.

마일스톤(중간 목표)도 이 흐름에 올라탔습니다. 프로젝트 스코프의 달력에는 목표일이 잡힌 마일스톤이 할 일과 같은 모양으로 깃발을 꽂고 서 있고, 누르면 프로젝트의 중간 목표 화면으로 데려갑니다.

보이면, 소식도 와야 한다

기능을 다 만들고 코드 리뷰를 돌렸더니 뼈아픈 게 하나 나왔습니다. 멤버 전체의 할 일이 보이게는 했는데, 다른 멤버가 할 일을 바꿨을 때의 알림은 여전히 본인에게만 가고 있었습니다. 같은 테이블을 열어둔 두 사람 중 한 명이 상태를 바꾸면, 다른 한 명의 화면은 새로고침 전까지 옛날 그대로인 거죠.

“보이는 것에는 소식도 따라온다” — 가시성을 넓히면 이벤트의 범위도 같이 넓혀야 한다는, 적고 보면 당연한 불변식입니다. 변경 이벤트를 프로젝트 멤버 전원에게 부채꼴로 퍼뜨리도록 고쳤습니다. 이런 건 기능을 만든 눈으로는 잘 안 보입니다. 리뷰가 열 건을 잡아줬고, 전부 그 자리에서 고쳤습니다.

Journey의 답을 한 달 만에 받다

한 달 전에 Journey라는 새 엔티티를 만들다 폐기한 회고를 적었습니다. 그때의 교훈은 “엔티티의 경계는 다른 엔티티와 연결할 때 드러난다”였고, 결론은 새 엔티티 대신 Project를 더 잘 만들자는 것이었습니다.

오늘이 그 첫 답인 것 같습니다. 새 개념을 추가한 게 아니라, 이미 있던 Project에 들어갈 수 있게 만들었습니다. 폴더는 열어보는 것이지만 법인은 소속되는 것이고, 그 차이가 화면 좁히기·탭 교체·멤버 가시성·공유 필터로 자연스럽게 이어졌습니다. 버튼 하나 달자고 시작한 일 치고는, 꽤 멀리 왔습니다.