System Information & Structure

작동 시스템 구조

Microcloudchip-NATURAL은 DJango Framework 기반으로 작동을 하고 외부 스토리지를 지원하며 내부 데이터베이스(SQLite3) 뿐만이 아닌 외부 데이터베이스(MySQL, MariaDB)를 지원합니다. 또한 사용자 인증 토큰을 관리하기 위해 Token Manager Thread가 따로 작동합니다.

API Layer

클라이언트로 부터 Http Request를 직접 받고 response를 출력하는 Layer 입니다. 컨텐츠에 따라 요청 처리를 위해 Manager Layer로 요청 값을 전달합니다. url list는 urls.py에, view directory안에 API Layer가 작성되어 있습니다.

Manager Layer

API Layer로부터 받은 요청 데이터를 처리해서 다시 API Layer에게 결과 값을 전달하는 역할을 합니다. 컨텐츠에 따라 수행하는 Manager가 다릅니다. 0.0.x 버전 기준으로 현재 존재하고 있는 Manager 객체는 다음과 같습니다.

  • Storage Manager

    • 파일 및 디렉토리 같은 데이터를 다루는 Manager입니다.

    • 파일 및 디렉토리의 네이밍의 유효성이나, 기존 파일 존재 여부 등을 파악하여 안전하게 스토리지를 관리합니다.

  • User Manager

    • 유저 데이터를 관리하며 유저 생성/수정/삭제를 수행합니다.

    • 또한 로그인 및 로그아웃을 할 때도 이 Manager를 사용합니다.

    • 유저를 삭제할 때 모든 데이터를 삭제해야 하므로 모든 Manager를 호출을 합니다.

  • Token Manager

    • 클라이언트의 지속적인 로그인 상태를 관리하기 위한 클라이언트 인증 토큰을 관리하는 Manager.

    • 토큰 유효 시간이 지나면 자동으로 삭제해야 하기 때문에 Token을 관리하기 위한 Thread가 추가로 동작합니다.

    • 0.0.x 버전에서는 자체 hash map을 사용하지만 0.1.x 부터 JWT로 토큰 형식으로 변경할 예정입니다.

각 Manager들은 작업을 수행하기 위해 DataBuilder Layer나 Data Layer를 생성합니다.

SingleTone

또한, 이 Manager들은 여러 요청들을 제어하고 관리해야 하기 때문에 하나의 어플리케이션에 단 하나의 인스턴스만 호출해야 합니다. 따라서 이 Manager들은 싱글톤 패턴이 적용되었습니다.

DataBuilder Layer

Application에서 생성된 데이터들을 외부로 저장해야 할 일이 있습니다. User관련 데이터는 Database에 디렉토리/파일 관리는 외부 스토리지에 작업을 합니다. 이를 Raw하게 수행하는 객체가 DataBuilder입니다. 각 Builder들은 저장해야 할 값에 대한 Vaildator를 갖고 있기 때문에 외부로 저장할 때, 잘못된 값이 저장되는 일을 사전에 예방합니다.

주로 Manager로부터 요청 값을 받아 그 결과를 다시 Manager로 전달합니다. 현재 Builder 객체로는 StorageBuilder(FileBuilder, DirectoryBuilder)와 UserBuilder가 있습니다.

Data Layer(DataLabel Layer)

DataBuilder와는 반대로 데이터를 수정/삭제를 Raw하게 수행하는 데 사용합니다. 외부로부터 데이터를 불러오고 데이터를 수정하거나 삭제를 합니다. Manager가 이 객체를 생성해서 작업을 수행합니다.

System Config

어플리케이션을 수행하기 위한 설정 파일들입니다. File Format은 다음과 같습니다.

{
    "system": {
        "root": [Storage Root],
        "port": [application port],
        "host": [application host]
    },
    "database": {
        "rdbms": {
            "type": mysql,
            "engine": "django.db.backends.mysql",
            "name": [database name],
            "user": [database user],
            "password": [database user password],
            "host": [database host],
            "port": [database port]
        }
    },
    "admin": {
        "email": [email]
    }
}

System.Root

파일 및 디렉토리를 저장할 스토리지를 선택합니다. 파일 및 디렉토리를 생성하면 해당 루트 아래로 데이터가 생성됩니다. 이를 이용해 차후에 추가로 개발될 복구 프로세스에 외부 디렉토리를 활용할 수 있습니다.

System.Port

웹 어플리케이션이 작동 할 포트를 설정합니다. 예를 들어 포트가 8000이면 xxx.xxx.xxx:8000으로 접속이 가능합니다.

System.Host

Client에서 Server로 접속하기 위한 Host입니다. 개인적으로 개발을 할 경우에는 127.0.0.1를 입력하고 배포 및 구축할 경우 해당 서버의 IP를 입력합니다.

Database.RDBMS.Type

어떤 Relational Database를 사용할 지 고릅니다. sqlite, mysql 두 가지를 고를 수 있으며 sqlite를 선택할 경우 어플리케이션 내의 데이터베이스를 사용하게 되어 하위 설정 값 (engine, name ..)를 추가로 입력하지 않아도 됩니다.

Last updated