reindexing
This commit is contained in:
parent
ce2921a6c1
commit
918a4eeb52
@ -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]
|
||||||
|
@ -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)
|
@ -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 {
|
||||||
|
21
src/index.md
21
src/index.md
@ -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)
|
@ -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)
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# 추가 이력 (Supporting Information)
|
# 요구사항 명세 추가 이력 (Requirement Specification Supporting Information)
|
||||||
|
|
||||||
## 4.1. 부록(Appendixes)
|
## 4.1. 부록(Appendixes)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user