컨텐츠로 건너뛰기

개인 플래너 (칸반보드, 프로젝트 트래킹) Planka 오픈소스

개인적으로 프로젝트 트래킹이 필요해서 여기저기 찾아보고 하다가 Planka에 정착했습니다.

1. Planka를 선택한 이유

  1. 가볍고 플랫폼 종속적이지 않음.
  2. 개발자가 열정적이고 피드백이 빠름.
  3. AGPL-3.0 라이선스.
  4. ODIC 지원으로 사용자를 통합하기 편함. (SSO)
  5. JS, Python 기반으로 커스터마이징이 쉬움.
  6. UX/UI가 미려함.
  7. 스탑워치를 지원함.

2. 타 소프트웨어와 비교해 본다면?

사용해 본것은 Wekan, Kanboard, focalboard, Mattermost 등이 있습니다.
그런데 전부 각 회사의 BM을 따라, 특정 조건을 충족하지 못하더라구요.

  1. 이중 라이선스로 코어는 수정할 수 없다던가,
  2. 사용자를 연동하려면 비용을 지불해야 하거나,
  3. 너무 복잡하고 문서화도 되어 있지 않고
  4. 공대식 디자인,
  5. 너무 무거워 신경쓸게 많기도 합니다.

3. 한국어 지원 여부

또한, 서양 언어권의 관점에서 만들다 보니, 한국어 정서법과 맞지 않아 번역이 어려운 것도 한몫했습니다.
사실 이게 제일 중요했는데, 부모님도 일에서 필요하다고 하셔서 한국어 적용이 가장 중요했습니다.

저야 생업이 프로그래밍이 아니지만 취미가 서버이니 대충 알아 듣는데, 사용하는 사람이 불편하거나 학습곡선이 필요하면, 아무리 좋은 기능이 있어도 사용하기 힘들지요.

  • 한국어 번역이 되어있던 기존의 번역을 뒤집어엎고, 일관적으로 같은 단어를 사용해서, 사용자가 이해하기 쉽도록했습니다.

  • 한국어의 존비어 문화에 맞지 않은 부분도 최대한 고려하려 노력했고, 명사형은 명사형으로, 동사형은 동사형으로 개발자의 의견에 따라 번역 했습니다.

  • 한국어 어문 규범을 충실히 따르려고 노력했으나, 일부 단어는 원본 깃허브에 관련근거를 남기고 수정 하였습니다.
    (예를 들어 Label은 레이블로 적는게 올바르나, 일상생활에서 레이블은 음반을 지칭하는 경우가 많고, 다들 라벨로 사용하지요. ‘텀블러’ 대신 ‘통컵’ 이런 번역을 별로 좋아하지 않기도 합니다.)

  • 새로 기능이 추가되었으나, 관련 스트링이 빠진 경우 새로 추가하고 충실한 표현을 하려 노력했습니다.

4. 폰트 추가?

지속 관여할 예정이고, 시간이 된다면 로마자에 맞춘 폰트도 수정해서 반영할 예정입니다.
아마 일본어를 사용하시는 분은 적겠지만, 일본어도 관련 수정을 해두었습니다.

현재 SAML 관련 백엔드가 추가 예정입니다. 개인적으로 SAML이 더 편한 것 같아, 업데이트 되면 관련 설정을 정리해서 올리겠습니다. :) (시놀로지를 사용하시면Synology C2 Identity요거요거 편합니다.)

부족한 번역이겠지만, 어색하거나 더 좋은 표현이 있다면 바로 Github로 Pull 해주시면 고맙겠습니다.

지난달에 PR했으나, 빠르게 반영 안 된 Focalboard 처럼 이번에도 반영 안될까봐 따로 Docker build용 레포를 만들었었습니다만, 반영이 빨라 제 이미지를 사용하셔도 되고, 공식 이미지를 사용하셔도 됩니다.

아마 제 이미지는 폰트관련 적용을 먼저 해보게 되지 않을까 싶습니다. 원본 레포의 업데이트도 자동으로 따라갑니다.

5. 기타

모든 도커 빌드 인수 및 환경설정은 제깃허브에 올라와 있습니다.

  • knex.js를 사용해서 관련된 설정을 수정하기 편하시겠지만, 혹시 참고가 필요하시다면깃허브를 참고해주세요. (외부 DB Root CA관련 예시를 올려두었습니다.)

  • 혹시 커스텀이 필요해서 알파인 이미지가 아닌 다른 이미지 사용하실 분들은 bookworm 관련 빌드를 확인하실 수 있습니다.
    (용량은 알파인 기반이 80mb정도 데비안이 100mb 정도입니다. 알아서 잘하시겠지만요… ㅎㅎ)

도커파일 라이선스 관련해서 저는 “As is” 책임 회피용으로 MIT를 적용했습니다. :) 자유롭게 출처도 없이 사용하셔도 좋습니다.

Terminal window
git clone https://github.com/NavyStack/planka-ns.git && cd planka-ns

로 시작하시면 되고, 관련 깃허브에 참고하실만한 docker-compose 파일을 올려두었습니다.
도커 허브에도 올려두었습니다.

개인적으로는 Traefik을 사용하시는 것을 추천합니다. 관련 설정에 대한 자료가 별로 없어 이 역시도 제 깃허브에 올려두었습니다.

데모는 여기에서 확인해보세요 :) 데모에는 예전 한국어 번역이 적용되어있습니다.

Planka

고수님들의 버스를 타고싶어 이것 저것 번역하고 참여하고 있습니다. 숨은 고수님들 추가기능 필요하신거 있으면 참여 부탁드립니다 :)

6. docker-compose 파일 예시

간단한 docker-compose 파일 예시입니다. 전문은 깃허브에서 확인하세요~

version: '3.9'
services:
planka:
image: navystack/planka:latest
restart: unless-stopped
volumes:
- user-avatars:/app/public/user-avatars
- project-background-images:/app/public/project-background-images
- attachments:/app/private/attachments
ports:
- 3000:1337
environment:
- BASE_URL=http://localhost:3000
- DATABASE_URL=postgresql://postgres@postgres/planka
- SECRET_KEY=notsecretkey
- TRUST_PROXY=0
# - TOKEN_EXPIRES_IN=365 # In days
# related: https://github.com/knex/knex/issues/2354
# As knex does not pass query parameters from the connection string we
# have to use environment variables in order to pass the desired values, e.g.
# - PGSSLMODE=<value>
# Configure knex to accept SSL certificates
# - KNEX_REJECT_UNAUTHORIZED_SSL_CERTIFICATE=false
# - DEFAULT_ADMIN_EMAIL=demo@demo.demo # Do not remove if you want to prevent this user from being edited/deleted
# - DEFAULT_ADMIN_PASSWORD=demo
# - DEFAULT_ADMIN_NAME=Demo
# - DEFAULT_ADMIN_USERNAME=demo
# - OIDC_ISSUER=
# - OIDC_CLIENT_ID=
# - OIDC_CLIENT_SECRET=
# - OIDC_SCOPES=openid email profile
# - OIDC_ADMIN_ROLES=admin
# - OIDC_ROLES_ATTRIBUTE=groups
# - OIDC_IGNORE_ROLES=true
depends_on:
- postgres
postgres:
image: postgres:16-bullseye
restart: unless-stopped
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=planka
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
user-avatars:
project-background-images:
attachments:
db-data:

수고 많으셨습니다. 감사합니다.


Askfront.com (에스크프론트)

기존의 댓글 대신, 초보자도 자유롭게 질문할 수 있는 포럼을 만들었습니다.
에스크프론트에서는 가이드뿐만 아니라 모든 종류의 질문을 하실 수 있습니다.
검색해도 오래된 정보나 도움이 되지 않는 정보만 나오는 것 같고, 주화입마에 빠진 것 같은 기분이 들 때가 있습니다.
그럴 때, 부담 없이 질문해 주세요 :) 같이 의논하며 생각해봅시다.
가능하다면, 제가 답변 드리겠습니다. 고맙습니다.