Skip to main content

Command Palette

Search for a command to run...

[Ash] 동호회 관리 플랫폼 개발기 #1 - PRD

Updated
•2 min read•View as Markdown
[Ash] 동호회 관리 플랫폼 개발기 #1 - PRD

Ash로 토이프로젝트를 진행하면서 기록을 남겨보려 한다.
구체적인 코딩을 시작하기 전에 Project Requirements Document를 먼저 작성 해보자.


Project Requirements

동기

나는 현재 참가하는 오프라인 동호회가 2개가 있다.
하나는 축구동호회 나머지 하나는 풋살동호회고, 2개의 동호회 모두 인원이 20명이 넘는다.

운영진은 여러 가지 서비스 (카카오톡, 네이버 카페, 네이버 밴드) 들을 사용해서 동호회 관리를 한다.
다만 이 서비스들이 동호회 관리에 특화된 플랫폼이 아니기 때문에 일정 공지나 투표 미참여 인원 알림, 회비 및 벌금 관리 등 여러 가지 부분에서 관리자가 직접 신경 써야 하는 부분들이 많다.

관리자가 수동으로 하던 일들을 자동화하는 동호회 관리 플랫폼을 만들면 좋을 것 같다는 생각이 들어서 시작하게 되었다.

문제정의

  • 현재 동호회들이 사용하는 카카오톡/카페/밴드 앱은 동호회 관리에 특화되지 않음

  • 일정 관리, 참석 확인, 경기 기록 등 동호회에 특화된 기능이 부족

  • 여러 동호회 참여시 각각 다른 플랫폼 사용으로 인한 불편함

목표

  • 관리자가 수동으로 하던 일들을 자동화하는 동호회 관리 플랫폼 구축

  • 내가 참가하는 동호회 2개 모두 내가 만든 플랫폼을 사용

사용자

  • 동호회 운영진 (관리자)

  • 동호회 회원

성공 지표

  • 운영진의 관리시간 50% 단축

기능 요구사항

핵심 기능

  • 동호회 관리

    • 동호회 생성

    • 멤버 관리

    • 멤버 권한 관리

  • 일정 관리

    • 일정 생성 및 수정

    • 일정 상세 정보 조회

  • 참석 관리

    • 일정 참석 투표 기능

    • 실제 일정 참석 여부 관리

기술 스택

  • Backend

    • Elixir

    • Ash Framework

    • Phoenix Framework

  • Frontend

    • Svelte

    • LiveSvelte

  • Database

    • PostgreSQL

제약사항

  • Web 기반으로 제작
박
박상엽1y ago

Did I miss the rest of the blog, or are Project Requirements the whole enchilada?

More from this blog

Ash Typescript

TL;DRElixir의 Ash Framework로 정의한 리소스를 TypeScript와 바로 연결해 주는 툴.백엔드 스펙을 따로 문서화하지 않아도 타입 안정성과 동기화를 자동으로 보장한다. 왜 사용하는가? Elixir로 백엔드를, TypeScript로 프런트엔드를 작성하다 보면 변경되는 API 스펙을 항상 동기화된 상태로 관리하기 쉽지 않다.결국 동기화를 위해서는 Graphql 을 사용하거나, 별도의 툴이 필요하다.AshTypescript ...

Sep 28, 20253 min read

Ash Reactor

TLDR; Reactor는 복잡한 워크플로우를 단계별로 정의하고 실행하는 라이브러리다. 각 단계가 독립적으로 돌아가며, 병렬 처리와 에러 핸들링도 쉽게 할 수 있다. 왜 쓸까? 프로젝트에서 "데이터 조회 → 가공 → 외부 API 호출 → 저장" 같은 복잡한 로직을 처리할 때가 있다.이런걸 그냥 함수로 쭉 연결하면 코드가 복잡해지고 에러 처리도 어려워진다. Reactor를 쓰면 각 단계를 명확히 분리하고 선언적으로 워크플로우를 관리할 수 있다. ...

Sep 21, 20254 min read

Ash StateMachine

TLDR; Ash StateMachine 은 상태 변경이 가능한 케이스를 명시하고, 미리 선언된 상태 변경만 가능하도록 한다. 왜 쓸까? 예를 들면, “새로 생성 → 진행 중 → 완료” 처럼 정해진 workflow 가 있다면, 로직으로 if/else 를 사용하는 것보다 상태머신으로 선언해 두는 게 안전하고 읽기 쉽다. 예제: Task 요구사항: 기본 상태는 :new :start 액션이 :new → :in_progress :finish ...

Sep 14, 20252 min read

Ash Oban

최근 작업중에 이메일 발송을 처리해야 했다.after_action 에 이마일 발송을 고려했는데 최종적으로는 AshOban 을 사용했다. AshOban이 뭔가? Ash Framework와 Oban을 이어주는 라이브러리다. 백그라운드 job을 Ash 스타일로 쓸 수 있게 해준다. 멤버 초대 이메일 보내기 클럽에 새 멤버를 초대하면 이메일을 보내야 하는 상황이다. 이걸 어떻게 처리할까? Action Hook으로 하면: 사용자가 서버에서 이메일 발송...

Aug 31, 20252 min read

kkbz.hop

14 posts