# Different From Microcloudchip(Old)

## &#x20;로고 비교

<img src="https://588004933-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgGmxS44A3NsyBUPODc%2F-MjAvbvwHej-sz2doa2k%2F-MjAvw2Jdfi_j5V1Wit9%2Flogo.png?alt=media&#x26;token=748a65cb-ff59-4ab0-bb37-f06d5bdb84ee" alt="" data-size="original"><img src="https://588004933-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MgGmxS44A3NsyBUPODc%2F-MjAvbvwHej-sz2doa2k%2F-MjAwP9lfYdxudIDR9Ie%2FAsset%207.png?alt=media&#x26;token=6480f8e2-b4d0-4f3d-ab7b-4b8c8012e23b" alt="" data-size="original"> &#x20;

&#x20;왼쪽: 구버전, 오른쪽: 현재&#x20;

## 비교

{% hint style="info" %}
*기울임: 개발 예정*

***기울임+굵게: 개발  중*** &#x20;
{% endhint %}

| Item                     | Microcloudchip | Microcloudchip-NATURAL             |
| ------------------------ | -------------- | ---------------------------------- |
| Framework(Backend)       | DJango         | DJango(with gunicorn)              |
| Framework(Frontend)      | JQuery         | ReactJS(Javascript)                |
| Available Database       | Sqlite3        | Sqlite3, MySQL, MariaDB            |
| User Auth                | Session        | 자체 구현된 Token:UserID, ***JWT(전환)*** |
| Platform(Server)         | Linux(Debian)  | Linux(Debian)***,** Windows*       |
| Platform(Client)         | PC             | PC, *Android, **CLI***             |
| 설치 방식                    | Docker         | Docker, ***Linux Service***        |
| 개발 전략                    | X              | TDD                                |
| RESTful                  | X              | O                                  |
| External Storage Support | X              | O                                  |

## 세부 사항

### Frontend

* **Old**: 하나의 서버가 Frontend, Backend를 담당해야 했기 때문에 JQuery를 사용했습니다. 그렇기 때문에 웹 URL만 있어, 플랫폼(Client)의 범위를 PC에서 Mobile 같은 다른 플랫폼으로 확장하기가 어렵습니다.
* **New**: ReactJS를 사용하여 build된 Web Client용 URL과 Backend API가 분리되어 있습니다. 따라서 다른 플랫폼으로 확장 하더라도 Backend API 와 통신만 하면 되기 때문에 확장이 쉽습니다.

{% hint style="info" %}
Microcloudchip-NATURAL 은 React Code를 Build하여 DJango의 template와 static directory 에 부해서 서비스 하는 방식으로 운영되고 있습니다.
{% endhint %}

### Available Database

* **Old**: 내부 저장소인 sqlite3 만 사용합니다. 자체 백업 기능이 있다면 복구를 할 수도 있겠지만 얘는 복구 기능이 없습니다.
* **New:**  MySQL 같은 외부 데이터 저장소를 사용할 수 있습니다. 불가피 하게 어플리케이션이 손상 되어서 다시 복구를 할 때 복구 기능을 사용하여 사용자 정보 등을 복구 할 수 있습니다. *(복구 기능은 아직 개발이 안되어 있는 상태입니다.)*&#x20;

### User Auth

* Natural은 *사용자 정보를 저장하지 않는다.*  라는 RESTful의 특징 중 하나 인 Serverless에 맞게 Old Version 처럼 Session을 사용하지 않습니다.
* **Key\[token]:Value\[userID]** 으로 서버에 임시로 저장되며 클라이언트와 서버는 token으로 설정합니다. token은 client가 일정 시간 통신을 하지 않으면 자동으로 소멸됩니다.
* 그러나 token과 userID가 암호화가 되지 않은 상태로 보관되는 것은 보안의 위험성이 있고 Serverless에 아직 취지에 맞지 않기 때문에 JWT(Json Web Token) 방식으로 전환을 시도하고 있습니다. 0.1.0 부터 업데이트 될 예정입니다.&#x20;

### Platform(Server)

* **Old:** 한때 CentOS 까지 설치할 수 있게 구현을 하려고 했으나 개발 중단으로 Debian 계열만 지원합니다.
* **New:** Debian 뿐만이 아닌, Windows에서도 작동이 되는 것을 목표로 개발하고 있습니다. 단 Windows용은 Server Testing 용도로만 구현될 예정입니다.

### Platform(Client)

* Frontend 에서도 언급된 부분이지만,  Frontend URL과 Backend API의 구별을 둠으로써 다른 플랫폼에서도 확장을 할 수 있습니다.

### 설치 방식

* **old:** Docker만 지원합니다. Docker가 아닌 본 서버 내에서도 실행할 수 있지만 Service 형태로 실행을 할 수 없습니다.
* **new:**  Docker 뿐만이 아니라 Perl 기반의 스크립트를 사용하여 Service file을 생성하고 Service 단위로 실행할 수 있게 해줍니다. (현재 개발중에 있고 0.1.0에 릴리즈 될 예정입니다.)

### &#x20;개발 전략

* Microcloudchip 부터 시작해서 여러 개의 프로젝트들이 계속 무산되었는데 가장 큰 원인 중 하나가 잦은 에러와 날코딩으로 인한 코드의 복잡성 이었습니다. 이를 해결하기 위해 TDD를 도입하게 되었고 그 결과 실수와 에러가 크게 줄어들었습니다.

### External Storage Support (In docker container)

* **old:** Docker 외의 스토리지를 마운팅 해서 사용할 수 없기 때문에 docker container에 치명적 오류가 발생해서 삭제를 해야 하는 상황이 와도 복구할 수 없습니다.
* **new:** 외부 스토리지를 마운팅해서 사용할 수 있기 때문에 docker container가 망가져도 데이터가 그대로 유지가 됩니다.
