# Séquence 02 - Développement d'une application web en microservices

## Objectif

Développer une application complète utilisant des technologies variées et découpée en plusieurs micro-services ayant chacune un tâche définie.

L'application est un système de surveillance des données d'utilisation d'un serveur pour une entreprise fictive proposant une plateforme de stockage de photos familiales.

L'objectif est de mettre en œuvre de nombreuses connaissances acquises au cours du cursus pour développer une application complexe similaire à ce qui se fait dans l'industrie

## Pré-requis

Séquence intervenant en fin de deuxième année, peu avant les projets et nécessitant donc de nombreuses connaissances.

- Développement en Python
- Machines virtuelles et conteneurs
- SSH
- Bases de données (MCD, MPD, SQL)
- HTML, CSS, JavaScript
- VCS Git

## Compétences développées

| Numéro | Intitulé                                                  | Mobilisée |
| ------ | --------------------------------------------------------- | --------- |
| C01    | COMMUNIQUER EN SITUATION PROFESSIONNELLE FRANÇAIS/ANGLAIS | X         |
| C02    | ORGANISER UNE INTERVENTION                                | X         |
| C03    | GÉRER UN PROJET                                           |           |
| C04    | ANALYSER UN SYSTÈME INFORMATIQUE                          | X         |
| C05    | CONCEVOIR UN SYSTÈME INFORMATIQUE                         | X         |
| C06    | VALIDER UN SYSTÈME INFORMATIQUE                           |           |
| C08    | CODER                                                     | X         |
| C09    | INSTALLER UN RÉSEAU INFORMATIQUE                          | X         |
| C10    | EXPLOITER UN RÉSEAU INFORMATIQUE                          |           |
| C11    | MAINTENIR UN RÉSEAU INFORMATIQUE                          |           |

## Scénario pédagogique

### Démarche globale
| Démarche                |     |
| ----------------------- | --- |
| Déductive               |     |
| Inductive               | X   |
| Investigation           |     |
| Résolution de problèmes |     |
| Projet                  | X   |

### Organisation
#### S1 - Installation, paramétrage et développement de la base de données
- **Apport de connaissances** : -
- **Activité** : 
  - Déployer un SGBD (PostgreSQL) dans une docker sur une machine virtuelle
  - Gérer les droits d'accès à la base de données
  - Écrire le modèle (MCD/MPD) et le script SQL pour déployer la base de données
- **Structuration de connaissances** : - 

#### S2 - Service d'observation des données d'utilisation de la machine
- **Apport de connaissances** : Selon besoins
- **Activité** : 
  - Développement d'un programme permettant d'observer les données d'utilisation du serveur et les stocker en base
  - Développement de l'image Docker du programme
  - Sécurisation du service (accès au réseau, à la base et au système hôte sécurisés)
  - (Option) Stockage de l'image sur un registry gitlab
  - (Option) Construction de l'image via un pipeline d'intégration continue
- **Structuration de connaissances** : (Option) Intégration continue, registry de conteneurs

#### S3 - Service d'affichage d'un tableau de bord web
- **Apport de connaissances** : Initiation au framework Python Flask
- **Activité** : 
  - Développement d'un tableau de bord web avec back-end python Flask
  - Back-end propose une API qui interroge la DB pour récupérer l'historique des informations de la machine
  - Conteneurisation et sécurisation
  - (Option) Installation d'un reverse proxy Traefik
- **Structuration de connaissances** : Architecture en micro-service

### Évaluation

| Description               | Formative | Sommative | Semaine |
| ------------------------- | --------- | --------- | ------- |
| Compte-rendus d'activités | X         |           | 1, 2, 3 |
| Dossier de conception     |           | X         | 3+      |


## Connaissances mobilisées

### C01 - COMMUNIQUER EN SITUATION PROFESSIONNELLE FRANÇAIS/ANGLAIS

| Compétence | Connaissance                                                         | Niveau taxonomique |
| ---------- | -------------------------------------------------------------------- | ------------------ |
| C01        | Communication écrite : cahiers des charges, dossiers de présentation | 3                  |
| C01        | Règles de présentation et typographie                                | 3                  |

### C02 - ORGANISER UNE INTERVENTION

| Compétence | Connaissance                                                                         | Niveau taxonomique |
| ---------- | ------------------------------------------------------------------------------------ | ------------------ |
| C02        | Langages de modélisation UML, SysML                                                  | 2                  |
| C02        | Termes d’un contrat de prestation de service, contraintes en termes de sécurisation  | 2                  |
| C02        | Différents acteurs du projet : sous-traitants, clients, maître d'œuvre, utilisateurs | 2                  |
| C02        | Moyens d’échanges et de stockage de données retenus pour le projet                   | 3                  |


### C04 - ANALYSER UN SYSTÈME INFORMATIQUE

| Compétence | Connaissance                                                                                                          | Niveau taxonomique |
| ---------- | --------------------------------------------------------------------------------------------------------------------- | ------------------ |
| C04        | Infrastructures matérielles et logicielles centralisées, décentralisées ou réparties                                  | 3                  |
| C04        | Langages de modélisation UML, SysML, MERISE                                                                           | 3                  |
| C04        | Différents acteurs d'un projet : sous-traitants, clients, maître d'œuvre, maître d'ouvrage, utilisateurs, exploitants | 2                  |
| C04        | Acteurs de l’écosystème réglementaire, normatif, CNIL, ANSSI, NIS, Cybermalveillance.gouv.fr                          | 2                  |
| C04        | Méthodologies de recherche et d’analyse de documentation (y compris en anglais)                                       | 3                  |


### C05 - CONCEVOIR UN SYSTÈME INFORMATIQUE

| Compétence | Connaissance                                                                                              | Niveau taxonomique |
| ---------- | --------------------------------------------------------------------------------------------------------- | ------------------ |
| C05        | Langages de modélisation d’application et d’infrastructure UML, SysML, MERISE, synoptique réseau          | 3                  |
| C05        | Infrastructures logicielles centralisées, décentralisées ou réparties                                     | 2                  |
| C05        | Livrables d’un projet                                                                                     | 3                  |
| C05        | Niveaux de sécurité attendus par solution logicielle (chiffrage, protection communications, accès BDD...) | 2                  |

### C06 - VALIDER UN SYSTÈME INFORMATIQUE

| Compétence | Connaissance                                                                                          | Niveau taxonomique |
| ---------- | ----------------------------------------------------------------------------------------------------- | ------------------ |
| C06        | Réseaux informatiques : protocoles, équipements et outils usuels et industriels                       | 4                  |
| C06        | Fiches de recette, scénario d’utilisation, résultats attendus                                         | 3                  |
| C06        | Maîtrise des environnements de développement, intégration, déploiement logiciel et versions associées | 2                  |

### C08 - CODER

| Compétence | Connaissance                                                           | Niveau taxonomique |
| ---------- | ---------------------------------------------------------------------- | ------------------ |
| C08        | Langages de développement, description, création d’API et IDE associés | 4                  |
| C08        | Spécificités des environnements de développement, test, production     | 2                  |
| C08        | Chaînes d’intégration et de déploiement                                | 2                  |
| C08        | Bases de données et environnements de traitement de données            | 4                  |
| C08        | Programmation multitâche                                               | 3                  |
| C08        | Outils de documentation                                                | 3                  |

### C09 - INSTALLER UN RÉSEAU INFORMATIQUE

| Compétence | Connaissance                                          | Niveau taxonomique |
| ---------- | ----------------------------------------------------- | ------------------ |
| C09        | Systèmes d’exploitation Windows, UNIX, virtualisation | 3                  |