# 3. 상세요구사항(Specific Requirements) ## 3.1. 외부 인터페이스 요구사항(External interface requirements) 해당되지 않음. ## 3.2. 기능 요구사항(Functional requirements) <%~ it.issues.map(i => `### (#${i.number}) ${i.title}\n${i.body.replaceAll("\r\n","\n")}`).join("\n\n") %> ## 3.3. 성능 요구사항(Performance requirements) 1. 최소 1000 RPS를 보장해야한다. 2. 첫 로드후 로딩하면 0.5s 이내에 동작해야합니다 3. 동시 편집 이용자를 5명까지는 허용해야 합니다. 4. 적어도 400개의 파일을 관리할 수 있어야 합니다. ## 3.4. 논리적 데이터베이스 요구사항(Logical database requirements) ```mermaid erDiagram User { int id string accessToken date expiredAt } User ||--o{ Permission : has Permission { string name string path } ``` 단순하게 공유를 위한 User 구조만 있다. ## 3.5. 설계 제약사항(Design constraints) 2.1.1. 에서 언급했듯이 다음 브라우저에서 동작해야 한다. - Chrome 버전 61 이상 - Firefox 버전 60 이상 - Edge 버전 79 이상 - Safari 버전 11 이상 - Chrome for Android 버전 100 이상 - Samsung internet 버전 8.2 이상 그리고 모바일에서도 큰 불편함 없이 원활히 동작해야 한다. ### 3.5.1. 표준 준수(Standards compliance) 해당되지 않음. ## 3.6. 소프트웨어 시스템 속성(Software system attributes) 해당되지 않음. ## 3.7. 상세 요구사항의 구성(Organizing the specific requirements) ### 3.7.1. 객체(Objects) 다음과 같은 UML을 그릴 수 있다. ```mermaid classDiagram class Document{ - URL path - string[] tags + renderChunk() + remove() + addTag(name: string) + deleteTag(name: string) + async share(option: ShareOption): URL + renderNavigator() } class Chunk{ - id_t id - Content data - bool focused - pos_t cursorPos + focus(index: number) + unfocus(index: number) + remove(index: number) + insertBefore() + draw() + drawPreview() + autoComplete(ctx: AutoCompleteContext) + swapWith(p : Chunk) + edit() } Document "1" <-- "n" Chunk : List class Fileview{ + listDirectory(path: URL) + open(path: URL) + remove(path: URL) + create(path: URL) + upload(file: Uint8Array| FileStream) + download(path: URL) + export(path: URL, option: ExportOption) } Fileview <.. Document : create class StashList{ Content[] stash int maxStash createFromServer() push(c: Content) pop() } class DnDManager{ + dropTo(Fileview) + dropTo(Document) + dropTo(Stash) + dragFrom(Fileview) + dragFrom(Document) + dragFrom(Stash) } DnDManager <.. Fileview : param DnDManager <.. Document : param DnDManager <.. StashList : param class SearchManager{ search(query,option) } SearchManager <.. Document : return ``` ```mermaid classDiagram class Management{ login(auth:Auth) setServerConfigure(config: Configure) setLocale(lang: string) setTheme(theme: string) getLocale() getTheme() getServerConfigure() } class Extension{ registerPlugin(plugin: Plugin) } ``` Chunk는 문서를 이루는 기본적인 단위이다. 글의 문단이라고 생각 할 수 있다. Document는 그런 Chunk의 리스트이다. FileView는 파일에 접근하고 Document를 열 수 있는 파일 브라우저이다. StashList는 단순한 파일이나 텍스트 등을 임시로 저장하고 꺼내쓰는 컨테이너이다. ### 3.7.2. 사용자 인터페이스 상세 ![interface](./interface.png) 다음과 같이 컴포넌트가 배치될 것이다. 배치될 컴포넌트는 Treeview, Chunk, ChunkList, Appbar, GeneralDialogue, Drawer, ContextMenu, StashList가 있다.