회원과 곡 보관함 기능을 추가한다
회원 가입과 로그인 및 등급별 접근과 공개 범위를 구현했다.`nMIDI 업로드와 검색 및 같은 곡의 버전 묶음을 추가했다.`n비밀번호 변경과 회원 탈퇴 및 관리자 회원 관리를 포함했다.`n직접 만든 공개 샘플 MIDI 네 곡과 운영 문서를 추가했다.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# Bach to Basics 회원과 곡 보관함 운영
|
||||
|
||||
## 기능 범위
|
||||
|
||||
Bach to Basics의 기존 파일 가져오기 기능을 유지하면서 서버 곡 보관함을 추가했다. 비회원은 전체 공개 MIDI를 바로 연주할 수 있다. 회원은 MIDI를 올리고 공개 범위와 회원 등급을 지정할 수 있다.
|
||||
|
||||
공개 범위는 다음 네 단계다.
|
||||
|
||||
| 공개 범위 | 접근 대상 |
|
||||
|---|---|
|
||||
| 전체 공개 | 비회원 포함 모든 사용자 |
|
||||
| 회원 공개 | 지정한 최소 등급 이상의 로그인 회원 |
|
||||
| 지정 회원 공유 | 최소 등급을 만족하며 업로더가 지정한 회원 |
|
||||
| 나만 보기 | 업로더 본인과 관리자 |
|
||||
|
||||
회원 등급은 일반 회원 1단계와 우수 회원 2단계 및 지도 회원 3단계와 관리자 4단계로 구성한다. 역할은 회원과 운영자 및 관리자로 구분한다. 등급은 곡 접근 범위에 사용하며 역할은 운영 권한에 사용한다.
|
||||
|
||||
## 회원 기능
|
||||
|
||||
- 회원 가입과 로그인 및 로그아웃
|
||||
- 현재 비밀번호를 확인한 뒤 비밀번호 변경
|
||||
- 모든 세션을 종료한 뒤 새 비밀번호로 다시 로그인
|
||||
- 비밀번호와 확인 문구를 입력한 회원 탈퇴
|
||||
- 탈퇴 시 본인이 올린 MIDI와 공유 정보 제거
|
||||
- 관리자 화면에서 회원 등급과 역할 및 이용 상태 변경
|
||||
|
||||
비밀번호는 `scrypt`로 해시한다. 원문은 DB와 로그에 저장하지 않는다. 로그인 세션 토큰도 SHA-256 해시만 DB에 보관한다. 상태 변경 요청에는 로그인 세션과 CSRF 확인 값을 함께 검사한다.
|
||||
|
||||
## MIDI 업로드
|
||||
|
||||
- 허용 확장자: `.mid`, `.midi`
|
||||
- 최대 파일 크기: 10MB
|
||||
- 회원별 최대 파일 수: 100개
|
||||
- 회원별 최대 보관 용량: 500MB
|
||||
- 파일 이름에서 디렉터리 요소 제거
|
||||
- `MThd` 헤더 확인
|
||||
- 임의 저장 이름과 SHA-256 해시 기록
|
||||
- 곡 제목과 아티스트 및 설명
|
||||
- 난이도와 장르 및 편곡 형태
|
||||
- 최대 12개 검색 태그
|
||||
- 전체 공개 곡은 등급 제한 사용 불가
|
||||
|
||||
저장 위치는 `/home/syskiller/piano/bach-to-basics/data`다. SQLite DB와 MIDI 파일은 Git에 넣지 않는다. DB 파일 권한은 600이며 데이터 디렉터리는 750으로 유지한다.
|
||||
|
||||
## 검색과 버전 묶음
|
||||
|
||||
곡명과 아티스트 및 설명과 태그를 함께 검색한다. 장르와 난이도 및 편곡 형태와 개별 태그로 결과를 좁힐 수 있다. 같은 아티스트와 같은 제목은 한 묶음으로 표시한다. 묶음 안에서 멜로디와 반주 및 피아노 독주와 듀엣과 연습 패턴을 선택한다.
|
||||
|
||||
## 공개 샘플
|
||||
|
||||
상업 가요를 복제하지 않고 직접 만든 다음 연습곡을 전체 공개 샘플로 제공한다.
|
||||
|
||||
- 첫눈이 내리는 밤: 입문 멜로디
|
||||
- 첫눈이 내리는 밤: 중급 양손 반주
|
||||
- 파란 바람 산책: 쉬운 가요풍 멜로디
|
||||
- 아침의 작은 왈츠: 중급 피아노 독주
|
||||
|
||||
같은 제목의 난이도와 편곡 형태를 한 묶음에서 고르는 동작은 `첫눈이 내리는 밤`의 두 버전으로 확인한다.
|
||||
|
||||
## 초기 관리자
|
||||
|
||||
초기 관리자 아이디는 Compose 환경 변수로 지정한다. 비밀번호는 `secrets/library_admin_password`에서만 읽는다. DB에 같은 아이디가 없을 때만 최초 관리자를 생성한다. 컨테이너 재시작 때 기존 비밀번호를 덮어쓰지 않는다.
|
||||
|
||||
## 백업과 복구
|
||||
|
||||
다음 항목을 같은 시점에 백업한다.
|
||||
|
||||
- `data/library.sqlite3`
|
||||
- `data/midi`
|
||||
- `secrets/library_admin_password`
|
||||
- 소스 저장소 Git 번들
|
||||
|
||||
비밀 파일은 일반 소스 백업과 분리하고 권한 600을 유지한다. SQLite를 복사하기 전에는 백엔드의 쓰기 요청을 잠시 막거나 SQLite 온라인 백업 명령을 사용한다. 단순 파일 복사 중 DB가 변경되면 일관된 백업이 아닐 수 있다.
|
||||
|
||||
## 운영 확인
|
||||
|
||||
배포 후 다음을 검사한다.
|
||||
|
||||
1. 비회원에게 공개 샘플만 표시되는지 확인한다.
|
||||
2. 회원 가입과 로그인 및 로그아웃을 확인한다.
|
||||
3. 비공개 곡이 다른 회원과 비회원에게 보이지 않는지 확인한다.
|
||||
4. 회원 공개와 지정 공유 및 최소 등급 제한을 확인한다.
|
||||
5. MIDI 업로드와 한글 제목 및 태그 검색을 확인한다.
|
||||
6. 같은 제목의 멜로디와 반주 버전을 각각 불러온다.
|
||||
7. 비밀번호 변경 후 기존 세션이 끝나는지 확인한다.
|
||||
8. 시험 회원 탈퇴 후 계정과 업로드가 제거되는지 확인한다.
|
||||
9. 모바일 화면에서 검색과 업로드 및 계정 화면이 가로로 넘치지 않는지 확인한다.
|
||||
Reference in New Issue
Block a user