Skip to content

docs(feature): add activity cms specification (feature 2) (#1)#2

Open
all4null wants to merge 6 commits intoquipu-uos:mainfrom
all4null:docs/1-activity-cms-spec
Open

docs(feature): add activity cms specification (feature 2) (#1)#2
all4null wants to merge 6 commits intoquipu-uos:mainfrom
all4null:docs/1-activity-cms-spec

Conversation

@all4null
Copy link

@all4null all4null commented Mar 16, 2026

Changes

  • 기존 메인 웹의 하드코딩된 Activity 영역을 DB 기반 동적 구조로 전환하기 위한 상세 명세서[02-activity-cms.md] 추가
  • 프론트엔드와 백엔드의 역할 분담 및 기능 2번(Activity CMS) 달성을 위한 전반적인 사항 문서화

Implementation

  • 데이터 계층 모델링: 백오피스 관리 단계를 Type, Field, Content 3단계로 명확히 분리하여 설계
  • DB 스키마 뼈대: MongoDB(NoSQL) 특성에 맞춰 유연함을 보장하는 ActivityTypes, ActivityContents 컬렉션 모델 설계
  • 프론트엔드 동적 렌더링: 신규 필드 추가 시 프론트엔드 코드 무수정(Zero-Code Modification) 원칙을 지키기 위한 Schema-driven UI 기반의 map 순회 및 Fallback 렌더링 로직 정의
  • 순서(Order) 제어 로직: 백오피스의 Drag & Drop 이벤트를 활용한 직관적인 UX 구현 및 백엔드의 DB 조회 단계를 활용한 정렬 최적화(.sort({ order: 1 })) 방식 지정
  • 용어 사전(Glossary) 구축: 처음 접하는 팀원들을 위해 명세서 상단에 핵심 개념(Type, Field 등) 정리

Notes

Closes #1

@all4null all4null marked this pull request as ready for review March 20, 2026 08:54
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

문서 내 용어 혼용(Type/탭, Content/게시물/카드)으로 개발 시 네이밍에 어려움이 있을 거 같습니다.
아래와 같이 용어를 통일하면 어떨지 검토해주세요.

  • Type: 활동 분류 단위 (name, 예: study)
  • Field: 스키마 항목 (label + key, 예: label="작성일", key="writtenAt")
  • Item: 실제 데이터 레코드 (data 객체, 예: data.writtenAt = "...")

즉 구조는 Type > Field > Item으로 고정하고, 실제 값은 Item.data로 관리하는 구조입니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각 Type 공개 여부(isActive)
각 Content 공개 여부(isVisible)
라고 이해했습니다.

Activity 섹션의 목적은 동아리 활동의 상세 기록을 담는 포럼이 아니라,
우리 동아리가 어떤 활동을 하는지 보여주는 홍보용 대표 콘텐츠를 노출하는 데 있다고 생각합니다.

그래서 저장된 데이터 중에 모집 시기나 운영 시점에 맞춰 노출 대상을 조절할 수 있는 이러한 기능(공개 여부 조절, 드래그로 순서 변경)이 있으면 상당히 편할 거 같습니다.

이걸 편하고 안전하게 컨트롤 할 수 있도록 UX에 더욱 신경을 쓰면 좋을 거 같습니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이미지 업로드 기능에서 AWS S3는 과금이 붙기 때문에 Cloudflare R2를 쓰는게 좋을 거 같습니다. 이건 개발을 할때부터 Quipu 계정으로 만들면 좋을 거 같아서, 개발을 시작할 때 저에게 말씀주시면 Quipu 이메일 계정 알려드리겠습니다. 이걸로 Cloudflare에 가입해서 사용하면 됩니다.

상세 구현 계획상 이미지는 업로드 즉시 클라우드에 저장되고 URL을 발급받는 흐름으로 이해했습니다.
이 경우 사용자가 작성 중 취소/이탈하면 미사용 이미지가 스토리지에 누적될 수 있는데,
취소 시 즉시 삭제 쪽으로 방법을 고려해주시면 좋겠습니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

type.name, field.label 같은 변경 가능한 문자열을 식별 key로 사용하는 것은 위험해 보입니다.
해당 값들은 언제든지 수정될 수 있으므로,
참조 기준은 별도의 immutable id(typeId, fieldId)로 두는 것이 안전할 것 같습니다.
표시용 이름(name, label)은 언제든 변경 가능하게 분리하면 좋겠습니다.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

백오피스와 메인이 동일 MongoDB를 직접 조회하는 구조인지,
혹은 한쪽(예: 백오피스 백엔드)이 API를 제공하고 다른 쪽이 이를 구독하는 구조인지 문서에 명확히 기재하면 좋겠습니다.
서비스 의존도를 낮추고 운영 단순화를 위해서는,
기존처럼 각 서비스가 동일 DB를 직접 조회하는 구조가 더 적합해 보입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(feature): create specification for Activity CMS (Feature #2)

2 participants