Developing a software project architecture: structure, tools, and technologies
Tags: aws, softwaredev, programming, appdev
Published: 2017-09-27 14:11:48

---
layout: post
title: "Developing a software project architecture: structure, tools, and technologies"
published: true
tags: aws, softwaredev, programming, appdev
cover_image: "https://thepracticaldev.s3.amazonaws.com/i/0gcc7nhdqmusrpfoof6t.jpg"
---


Software project development is a complicated challenging process that involves various stages. It also has a typical architecture, including backend and frontend and requiring a wide range of tools and technologies to be used.


<h3>1. Backend</h3>
 

<b>1.1 Server infrastructure</b>
 

Each project generally has two infrastructures:

- Development (staging)
- Production (live)


Each configuration has </span><a href="https://en.wikipedia.org/wiki/Virtual_private_cloud"><span style="font-weight: 400;">VPC (Virtual Private Cloud)</span></a><span style="font-weight: 400;"> with sub networks and route tables to establish security and resources isolation.
 
In our projects we use the following services and abilities provided by </span><a href="http://searchaws.techtarget.com/definition/Amazon-Web-Services"><span style="font-weight: 400;">Amazon Web Services:</span></a><span style="font-weight: 400;">

- Amazon VPC - provides the ability to create a virtual private cloud in Amazon and isolate all resources.

- Amazon EC2 - is a service providing server instances for different purposes.

- Amazon ECS - provides Docker container orchestration possibilities in Amazon infrastructure. It represents an Amazon analog for Kubernetes orchestration tool.

- Amazon Application Load Balancer - enables to automatically distribute incoming app traffic across multiple Amazon app instances deployed to ECS cluster or EC2 instances.

- Amazon Auto Scaling - helps maintain app availability and allows scaling EC2 instances (with an app or in ECS cluster) capacity up or down automatically according to the defined conditions (CPU or Network traffic).

- Amazon Lambda - allows a serverless approach in Amazon infrastructure. This service can be used to execute some short live tasks or cron actions.

- Amazon RDS - includes a database for the application.

- Amazon ElastiCache - the service provides already configured and production ready In-Memory Database such as Redis or Memcache.

- Amazon S3 - is a service using for all kind of files.

- Amazon SQS - represents a message queue service that provides functionality similar to JMS. Thanks to Amazon SQS we get the ability to decouple application components.

- Amazon SNS - is a service mainly used for sending push notification on different platforms.

- Amazon SES - is used for email sending.

- Amazon Route 53 - is a cloud DNS service that effectively connects user requests to the infrastructure, running in AWS – such as Amazon EC2 instances, Application Load Balancers, Amazon S3 buckets or Amazon CloudFront distributions.

- Amazon Certificate Manager - allows storing any certificates and connect them to Amazon CloudFront or Amazon Application Load Balancer. With ACM, developers get the ability to upload the already existing certificate to this service or use certificates that are freely generated by Amazon.

- Amazon CloudFront - provides CDN functionality in Amazon. We can connect this service with Amazon S3 and distribute files with caching in some edge locations provided by Amazon. This service also enables developers to automate files distribution.


<b>1.2 Backend architecture</b>
 

Generally, an application has a monolith architecture with layers for code decoupling.


<b>- Repository layer.</b> This layer has classes that implement database communication functionality such as requests or updates through database models.

<b>- Services layer.</b> It has classes that implement app business logic, integration with third-party systems, transactions handling, and caching.

<b>- Controller layer.</b> This layer has classes that implement HTTP requests handling. HTTP API is implemented according to RESTful principles and can work with different request content types such as JSON, XML, and protobuf.


Learn more about the <b></span><a href="https://smartym.pro/blog/our-app-development-process-building-a-software-project-architecture/"><span style="font-weight: 400;">technology stack for a software project architecture and practical expertise.</span></a><span style="font-weight: 400;"></b>
&nbsp;