reindexing

This commit is contained in:
monoid 2022-06-11 16:58:50 +09:00
parent ce2921a6c1
commit 918a4eeb52
7 changed files with 43 additions and 33 deletions

View File

@ -3,7 +3,7 @@ authors = ["monoid"]
language = "ko" language = "ko"
multilingual = false multilingual = false
src = "src" src = "src"
title = "Software Requirement Specification" title = "Software Development Comprehensive Document"
[preprocessor] [preprocessor]
[preprocessor.mermaid] [preprocessor.mermaid]

View File

@ -5,6 +5,6 @@
- [Introduction](./intro.md) - [Introduction](./intro.md)
- [Overall Description](./overall.md) - [Overall Description](./overall.md)
- [Specific Requirement](./specific.md) - [Specific Requirement](./specific.md)
- [Supporting information](./support.md) - [Requirement Specification Supporting Information](./support.md)
- [Architecture](./architecture.md) - [Architecture](./architecture.md)
- [Testing](./testing.md) - [Testing](./testing.md)

View File

@ -1,4 +1,4 @@
# 5. 설계 # 5. 설계(Architecture)
## 5.1 UML ## 5.1 UML
@ -398,15 +398,15 @@ FsManager ..> "1" RPCMessageManager
FsManager ..> "1" FsGetResult FsManager ..> "1" FsGetResult
``` ```
## 5.2 의사코드 ## 5.2 의사코드(Pseudo Code)
의사코드는 다음과 같이 진행된다. 의사코드는 다음과 같이 진행된다.
### 서버 RPC 메세지 처리 ### 5.2.1 서버 RPC 메세지 처리
클라이언트는 RPC를 진행하기 위해 웹소켓을 연결합니다. 웹소켓의 주소 `/ws` 클라이언트는 RPC를 진행하기 위해 웹소켓을 연결다. 웹소켓의 주소 `/ws`
도달하기 위해서 먼저 라우팅이 진행이 됩니다. 라우팅은 `TreeRouter` 클래스에서 도달하기 위해서 먼저 라우팅이 진행이 다. 라우팅은 `TreeRouter` 클래스에서
진행됩니다. 진행다.
``` ```
Input: req Request Input: req Request
Output: Response Output: Response
@ -419,7 +419,8 @@ fn Route(req){
response with 404 Not Found response with 404 Not Found
} }
``` ```
마침내 엔드포인트에 도달하게 되면 웹소켓을 얻어내고 새로운 연결을 등록합니다. 마침내 엔드포인트에 도달하게 되면 웹소켓을 얻어내고 새로운 연결을 등록한다.
여기서 reqeust session으로 유저를 얻어내서 접속하는 것에 대해 주의하라.
``` ```
Input: req Request Input: req Request
Output: Response Output: Response
@ -431,8 +432,8 @@ fn RPCHandleEndpoint(req){
res res
} }
``` ```
이제부터 메세지를 받을 수 있습니다. 이제부터 `RPCMethod` 메세지를 받을 수 있다.
메세지가 오면 이 함수가 실행이 됩니다. 메세지가 오면 함수 `handleMessage` 가 실행이 호출된다.
``` ```
Input: message on send Input: message on send
Output: response Output: response
@ -443,11 +444,11 @@ fn Connection.handleMessage(msg: string){
} }
``` ```
디스패치가 성공적으로 이루어지면 RPC 작업를 처리하는 함수에 도착합니다. 디스패치가 성공적으로 이루어지면 RPC 작업를 처리하는 함수에 도착다.
청크 작업을 예로 들겠습니다. 청크 작업에서는 권한을 확인하고 청크 작업을 예로 들면 이렇다. 청크 작업에서는 권한을 확인하고
명령의 충돌을 히스토리를 비교하며 다시 적용하며 해결합니다. 명령의 충돌을 히스토리를 비교하며 다시 적용하며 해결다.
그리고 요구된 작업을 처리하고 문서의 `updatedAt`을 업데이트하고 그리고 요구된 작업을 처리하고 문서의 `updatedAt`을 업데이트하고
문서 업데이트 사실을 이 문서를 보고 있던 참여자에게 전파합니다. 문서 업데이트 사실을 이 문서를 보고 있던 참여자에게 전파다.
``` ```
Input: conn Connection Input: conn Connection
Input: m RPCChunkMethod Input: m RPCChunkMethod
@ -481,15 +482,15 @@ fn ChunkOperation(conn, m){
} }
``` ```
문서 작업도 마찬가지로 이루어집니다. 문서 작업도 마찬가지로 이루어다.
### 클라이언트의 메세지 처리 동기화 ### 5.2.2 클라이언트의 메세지 처리 동기화
클라이언트에서는 다음과 같은 일이 일어납니다. 클라이언트에서는 다음과 같은 일이 일어다.
먼저 `notification`을 받습니다. 그러면 모든 `DocumentViewModel`에게 이벤트를 전달합니다. 먼저 `notification`을 받는다. 그러면 모든 `DocumentViewModel`에게 이벤트를 전달한다.
그리고 각각의 `DocumentViewModel`은 자기 문서에 일어난 일인지 확인하고 `ChunkListMutator`를 만들어서 그리고 각각의 `DocumentViewModel`은 자기 문서에 일어난 일인지 확인하고 `ChunkListMutator`를 만들어서
문서에 적용합니다. 문서에 적용다.
``` ```
Input: e RPCNotification Input: e RPCNotification
Input: this document view model Input: this document view model
@ -502,7 +503,7 @@ fn updateOnNotification(this,notification){
} }
``` ```
문서의 레디큐에 mutator를 집어넣고 `seq` 번호가 기다리는 것이면 실행하고 업데이트합니다. 문서의 레디큐에 mutator를 집어넣고 `seq` 번호가 기다리는 것이면 실행하고 업데이트다.
``` ```
Input: mutator ChunkListMutator Input: mutator ChunkListMutator
@ -531,7 +532,7 @@ fn apply(this, mutator, updatedAt, seq){
} }
``` ```
### 다른 작업들 ### 5.2.3 다른 작업들
``` ```
module chunk { module chunk {

View File

@ -1,12 +1,12 @@
# 목차(Index) # 목차(Index)
1. [Introduction](./intro.md) 1. [소개(Introduction)](./intro.md)
1. [목적(Purpose)](./intro.md#11-목적purpose) 1. [목적(Purpose)](./intro.md#11-목적purpose)
2. [범위(scope)](./intro.md#12-범위scope) 2. [범위(scope)](./intro.md#12-범위scope)
3. [용어 및 약어 정의(Definitions, acronyms and abbreviations)](./intro.md#13-용어-및-약어-정의definitions-acronyms-and-abbreviations) 3. [용어 및 약어 정의(Definitions, acronyms and abbreviations)](./intro.md#13-용어-및-약어-정의definitions-acronyms-and-abbreviations)
4. [참고자료(References)](./intro.md#14-참고자료references) 4. [참고자료(References)](./intro.md#14-참고자료references)
5. [개요(Overview)](./intro.md#15-개요overview) 5. [개요(Overview)](./intro.md#15-개요overview)
2. [Overall Description](./overall.md) 2. [전체 시스템 개요(Overall description)](./overall.md)
1. [제품 관점(Product perspective)](./overall.md#21-제품-관점product-perspective) 1. [제품 관점(Product perspective)](./overall.md#21-제품-관점product-perspective)
1. [시스템 인터페이스(System interfaces)](./overall.md#211-시스템-인터페이스system-interfaces) 1. [시스템 인터페이스(System interfaces)](./overall.md#211-시스템-인터페이스system-interfaces)
2. [사용자 인터페이스(User interfaces)](./overall.md#212-사용자-인터페이스user-interfaces) 2. [사용자 인터페이스(User interfaces)](./overall.md#212-사용자-인터페이스user-interfaces)
@ -24,7 +24,7 @@
const name = `${c} Operation`; const name = `${c} Operation`;
const href = `2.2.${index} ${c} Operation` const href = `2.2.${index} ${c} Operation`
%><%= `${index++}. [${name}](./overall.md#${it.toHeadId(href)})\n ` %><%}%><%="\n"%> %><%= `${index++}. [${name}](./overall.md#${it.toHeadId(href)})\n ` %><%}%><%="\n"%>
3. [Specific Requirement](./specific.md) 3. [상세요구사항(Specific Requirements)](./specific.md)
1. [외부 인터페이스 요구사항(External interface requirements)](./specific.md#31-외부-인터페이스-요구사항external-interface-requirements) 1. [외부 인터페이스 요구사항(External interface requirements)](./specific.md#31-외부-인터페이스-요구사항external-interface-requirements)
2. [기능 요구사항(Functional requirements)](./specific.md#32-기능-요구사항functional-requirements) 2. [기능 요구사항(Functional requirements)](./specific.md#32-기능-요구사항functional-requirements)
<%= it.issues.map((i)=>`(#${i.number}) ${i.title}`).map( <%= it.issues.map((i)=>`(#${i.number}) ${i.title}`).map(
@ -38,6 +38,15 @@
7. [상세 요구사항의 구성(Organizing the specific requirements)](./specific.md#37-상세-요구사항의-구성organizing-the-specific-requirements) 7. [상세 요구사항의 구성(Organizing the specific requirements)](./specific.md#37-상세-요구사항의-구성organizing-the-specific-requirements)
1. [객체(Objects)](./specific.md#371-객체objects) 1. [객체(Objects)](./specific.md#371-객체objects)
2. [사용자 인터페이스 상세](./specific.md#372-사용자-인터페이스-상세) 2. [사용자 인터페이스 상세](./specific.md#372-사용자-인터페이스-상세)
4. [Supporting information](./support.md) 4. [요구사항 명세 추가 이력 (Requirement Specification Supporting Information)](./support.md)
5. [Architecture](./architecture.md) 1. [부록(Appendixes)](./support.md#41-부록appendixes)
6. [Testing](./testing.md) 2. [개발 환경(Development Environment)](./support.md#42-개발-환경development-environment)
3. [일정표(Schedule)](./support.md#43-일정표schedule)
5. [설계(Architecture)](./architecture.md)
1. [UML](./architecture.md#51-uml)
1. [Server Side UML](./architecture.md#511-server-side-uml)
2. [Client Side UML](./architecture.md#512-client-side-uml)
2. [의사코드(Pseudo Code)](./architecture.md#52-의사코드pseudo-code)
6. [시험(Testing)](./testing.md)
1. [유닛 테스트(Unit test)](./testing.md#61-유닛-테스트unit-test)
2. [기능 테스트(Functional Test)](./testing.md#62-기능-테스트functional-test)

View File

@ -1,6 +1,6 @@
# 2. 전체 시스템 개요(Overall description) # 2. 전체 시스템 개요(Overall description)
### 2.1. 제품 관점(Product perspective) ## 2.1. 제품 관점(Product perspective)
### 2.1.1. 시스템 인터페이스(System interfaces) ### 2.1.1. 시스템 인터페이스(System interfaces)

View File

@ -1,4 +1,4 @@
# 추가 이력 (Supporting Information) # 요구사항 명세 추가 이력 (Requirement Specification Supporting Information)
## 4.1. 부록(Appendixes) ## 4.1. 부록(Appendixes)

View File

@ -1,6 +1,6 @@
# Testing # 6. 시험(Testing)
## 유닛 테스트 ## 6.1 유닛 테스트(Unit test)
유닛 테스트로 69.6%의 Line Coverage와 73.4%의 Function Coverage를 달성했다. 유닛 테스트로 69.6%의 Line Coverage와 73.4%의 Function Coverage를 달성했다.
다음과 같은 로그가 있다. 다음과 같은 로그가 있다.
@ -75,7 +75,7 @@ test result: ok. 35 passed (15 steps); 0 failed; 0 ignored; 0 measured; 0 filter
``` ```
## 기능 테스트 ## 6.2 기능 테스트(Functional Test)
### Chunk ### Chunk