KSCA

청소년이 쓴 것을
남길 곳.

전국 단위 청소년 컴퓨터 사이언스 학회의 웹 서비스입니다. Zenodo처럼 영구 식별자와 인용 포맷, 버전 관리를 갖춘 논문·프로젝트 아카이브와, 신고 기반으로 관리되는 커뮤니티 게시판으로 이뤄집니다. 기능 명세를 마치고 구현을 시작했습니다.

Korea Student Computer Science Association (가칭) / Next.js + Supabase, 구현 단계

요약

KSCA-{YYYY}-{NNNNNN}
논문마다 붙는 영구 식별자 형식
3건
신고가 쌓이면 자동 비공개되는 기준
2가지
자동 생성하는 인용 포맷. APA와 BibTeX
Zenodo
참고한 아카이브 모델

무엇을 만드나

대한민국 청소년이 쓴 논문과 프로젝트를 올리고, 인용하고, 이야기 나눌 수 있는 전국 단위 웹 서비스입니다. 학교 인증 없이 이메일과 비밀번호로 가입하고, 학교명은 자유롭게 입력합니다. 크게 두 축입니다.

  • 논문·프로젝트 아카이브: 운영진의 사전 승인 없이 올리고, 신고로 사후 관리합니다.
  • 커뮤니티 게시판: 자유, 질문, 스터디·프로젝트 모집, 공지 카테고리와 댓글.

논문 아카이브

논문 아카이브 업로드PDF · 초록 · 태그운영진 승인 없음 concept_id 발급KSCA-{YYYY}-{NNNNNN}원자적 카운터 상세 페이지초록 · PDF · 조회수 새 버전concept_id 유지version_no 증가 인용APA · BibTeX 초록 댓글버전 배지 표시 신고3건 → 자동 비공개 신고 3건이 쌓이면 자동으로 status = hidden, 이후 운영진이 삭제 또는 복구 결정
업로드부터 인용, 신고까지

Zenodo에서 가져온 것

논문 하나(concept)에 영구 식별자 하나를 붙입니다. 형식은 KSCA-{YYYY}-{NNNNNN}으로, 연도별 6자리 일련번호를 학회 전체 통합 카운터로 발급합니다. 같은 논문의 새 버전을 올려도 식별자는 그대로 두고 버전 번호만 올립니다.

상세 페이지에서는 APA와 BibTeX 인용을 자동으로 만들어 복사할 수 있게 합니다.

식별자   KSCA-2026-000042

@misc{ksca_2026_000042,
  author = {...},
  title  = {...},
  year   = {2026},
  note   = {KSCA-2026-000042},
}

신고 기반 관리

신고 1건공개 신고 2건공개 신고 3건자동 비공개 운영진 검토삭제 / 복구
신고가 쌓였을 때의 처리

사전 승인이 없는 대신, 같은 대상에 신고가 3건 쌓이면 자동으로 비공개 상태가 되고 운영진 검토 큐로 넘어갑니다. 운영진이 최종적으로 삭제를 확정하거나 복구합니다. 게시판 글도 같은 방식으로 관리합니다.

이 로직은 신고가 들어올 때마다 실행되는 Postgres 트리거로 구현할 계획입니다. 식별자 발급은 카운터를 원자적으로 올리는 함수로 처리해, 동시에 여러 명이 올려도 번호가 겹치지 않게 합니다.

create or replace function generate_concept_id() ...
  -- paper_counters를 원자적으로 증가 (INSERT ... ON CONFLICT DO UPDATE)
  -- SECURITY DEFINER로 RLS를 우회해 카운터만 갱신

데이터

기술 스택은 Percentage와 같은 Next.js와 Supabase, 배포는 Vercel입니다. 파일은 비공개 버킷에 두고 짧게 만료되는 서명 URL로만 내려받게 합니다.

테이블
테이블내용
profiles사용자 프로필, 권한(role)
papers논문. concept_id, version_no, 파일 경로
paper_comments초록 페이지의 댓글, 작성 시점 버전
posts, comments게시판 글과 댓글
reports신고
paper_counters식별자 발급용 카운터

상태

기능, DB 스키마, 접근 제어(RLS) 정책까지 정리한 기능 명세 v1.0과 구현 계획을 마치고, 지금 구현을 시작한 단계입니다.