KSCA
청소년이 쓴 것을
남길 곳.
전국 단위 청소년 컴퓨터 사이언스 학회의 웹 서비스입니다. Zenodo처럼 영구 식별자와 인용 포맷, 버전 관리를 갖춘 논문·프로젝트 아카이브와, 신고 기반으로 관리되는 커뮤니티 게시판으로 이뤄집니다. 기능 명세를 마치고 구현을 시작했습니다.
요약
- KSCA-{YYYY}-{NNNNNN}
- 논문마다 붙는 영구 식별자 형식
- 3건
- 신고가 쌓이면 자동 비공개되는 기준
- 2가지
- 자동 생성하는 인용 포맷. APA와 BibTeX
- Zenodo
- 참고한 아카이브 모델
무엇을 만드나
대한민국 청소년이 쓴 논문과 프로젝트를 올리고, 인용하고, 이야기 나눌 수 있는 전국 단위 웹 서비스입니다. 학교 인증 없이 이메일과 비밀번호로 가입하고, 학교명은 자유롭게 입력합니다. 크게 두 축입니다.
- 논문·프로젝트 아카이브: 운영진의 사전 승인 없이 올리고, 신고로 사후 관리합니다.
- 커뮤니티 게시판: 자유, 질문, 스터디·프로젝트 모집, 공지 카테고리와 댓글.
논문 아카이브
Zenodo에서 가져온 것
논문 하나(concept)에 영구 식별자 하나를 붙입니다. 형식은 KSCA-{YYYY}-{NNNNNN}으로, 연도별 6자리 일련번호를 학회 전체 통합 카운터로 발급합니다. 같은 논문의 새 버전을 올려도 식별자는 그대로 두고 버전 번호만 올립니다.
상세 페이지에서는 APA와 BibTeX 인용을 자동으로 만들어 복사할 수 있게 합니다.
식별자 KSCA-2026-000042
@misc{ksca_2026_000042,
author = {...},
title = {...},
year = {2026},
note = {KSCA-2026-000042},
}
신고 기반 관리
사전 승인이 없는 대신, 같은 대상에 신고가 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과 구현 계획을 마치고, 지금 구현을 시작한 단계입니다.