Home part7. 웹 애플리케이션 아키텍처
Post
Cancel

part7. 웹 애플리케이션 아키텍처

개요

애플리케이션과 웹 애플리케이션의 차이

애플리케이션은 특정한 목적을 수행하기 위해 운영체제 위에 설치해 사용하는 프로그램을 말한다. 흔히 사용하는 한컴 오피스, 카카오톡, 포토샵 같은 프로그램이 바로 애플리케이션이다.

한편 웹 애플리케이션은 크롬, 마이크로소프트 엣지, 사파리 등과 같은 웹 브라우저 위에서 작동하는 프로그램을 말한다. 일반 애플리케이션과 비교 했을 때 웹 애플리케이션은 다음과 같은 장점이 있다.

  • 우수한 접근성 : 웹 브라우저가 있는 환경이라면 어디서든 접속할 수 잇다.
  • 만족도 높은 사용자 경험 : 일반 애플리케이션과 달리 다운로드를 할 필요가 없어 익숙지 않는 사람도 쉽게 사용할 수 있다.
  • 우수한 확장성 및 유지보수성 : 일반 애플리케이션은 기능이 업데이트 됐을 때 최신 버전을 다운로드해야 하지만 웹 애플리케이션은 그러한 과정이 필요 없다. 개발자 입장에서는 사용자에게 추가 동작을 요구하지 않고 기능을 더하거나 유지보수할 수 있다.

웹 애플리케이션 아키텍처의 개념

개발 언어와 프레임워크, 데이터베이스 등의 다양한 도구와 기술을 사용해 웹 애플리케이션을 설계하고 구현하는 방법론을 웹 애플리케이션 아키텍처(web application architecture)라고 한다. 백엔드 개발자는 웹 애플리케이션 아키텍처를 바탕으로 프로그래밍 한다.

웹 애플리케이션 아키텍처에는 웹 애플리케이션을 구성하는 각 모듈이 어떤 기능을 수행하는지, 어떻게 상호작용하는지 등이 정의돼 있다. 웹 애플리케이션 아키텍처에는 클라어언트, 서버, 데이터베이스 모듈을 도식화 해 각 영역이 상호작용하는 방법을 구체적으로 정의한 내용이 담겨 있다.

웹 애플리케이션 아키텍처의 중요성

웹 애플리케이션 아키텍처는 그 설계에 따라 웹 애플리케이션의 유지보수성과 확장성 등이 결정되기 때문에 매우 중요하다.

웹 애플리케이션 아키텍처의 종류

모놀리식 아키텍처

모놀리식 아키텍처(monolithic architecture)는 하나의 대규모 응용 프로그램으로 구성된 전통적인 소프트웨어 아키텍처이다. 이것의 가장 큰 특징은 아키텍처가 단일 애플리케이션으로 이뤄진다는 것이다. 다시 말해 모든 기능이 하나의 코드 안에 있으며, 대표적인 예로 3티어 아키텍처(3 tier architecture)를 들 수 있다. 3-tier-architecture 3 티어는 3개의 계층으로 구성된다.

  • 표현 계층(presentation tier) : 사용자와 직접 접촉하는 계층으로, 웹 애플리케이션의 사용자 인터페이스 요소가 이 계층에 포함된다.
  • 논리 계층(logic tier) : 웹 애플리케이션의 비즈니스 로직이 계속 실행되는 계층이다. 웹 브라우저로부터 사용자의 요청을 받아 처리하는 웹 애플리케이션 서버가 이 계층에 포함된다.
  • 데이터 계층(data tier) : 웹 애플리케이션의 데이터 저장소에 접근해 데이터를 불러오거나 저장하는 계층이다. 어느 데이터베이스에 접근해 데이터를 회수하고 저장할지 등의 데이터 접근 경로는 논리 계층에서 결정한다.

모놀리식 아키텍처의 단점

  • 높은 결합도 : 코드 내 모든 모듈이 서로 강하게 결합돼 있다. 따라서 한 모듈을 변경하면 전체 시스템에 영향을 미칠 수 있다.
  • 높은 복잡성 : 시스템의 크기가 커질수록 코드의 복잡도가 증가하며, 이는 웹 애프리케이션의 유지보수와 개발을 어렵게 만든다.
  • 단일 데이터베이스 : 하나의 데이터베이스를 사용해 모든 데이터를 처리한다. 이 경우 데이터베이스 스키마(데이터의 논리적인 저장 구조)를 변경하기 어렵다.
  • 개발 프로세스의 복잡성 : 모든 개발자가 하나의 코드를 공유하기 때문에 코드에 변경 사항이 생기면 모든 개발자와 공유하고 테스트해야 하는데, 이는 개발 프로세르를 복잡하게 만든다.

마이크로서비스 아키텍처

마이크로서비스 아키텍처(MSA, MicroService Architecture)는 모놀리식 아키텍처와 달리 웹 애플리케이션을 여러 개의 작은 서비스 단위로 분해해 각각의 서비스를 독립적으로 개발,배포,운영하는 방식이다. 즉, 하나의 큰 웹 애플리케이션을 여러 개의 작은 웹 애플리케이션으로 분해해 설계하는 것이다. MSA-img

마이크로서비스 아키텍처의 장점

  • 관심사 분리 : 각 서비스가 한 가지 기능을 수행하도록 설계 됐으므로 개발 및 유지,보수가 쉽게 확장성과 유연성이 뛰어나다. 서비스 단위로 관심사가 분리되기 때문이다.
  • 분산 데이터 관리 : 각 서비스는 자체 데이터베이스를 가지기 때문에 데이터 무결성과 안정성이 보장된다. 또한 데이터 베이스의 스키마 변경에도 매우 유연하게 대처할 수 있다.
  • 개발과 배포의 용이성 : 각 서비스를 독립적으로 개발해 배포할 수 있다. 각각의 마이크로 서비스는 서로의 동작에 아무런 영향을 주지 않는다. 또한 모놀리식 아키텍처가 모든 서비스에 대해 동일한 기술 스택을 적용하는 것과 달리 마이크로서비스 아키텍처는 각 서비스마다 최선의 기술 스택을 선택할 수 있다.
  • 높은 탄력성 : 하나의 서비스에 장애가 발생하더라도 다른 서비스가 정상적으로 작동한다.

서버리스 아키텍처

서버리스 아키텍처(serverless architecture)는 특정 서비스를 구현하기 위한 서버가 존재하지 않는 아키텍처를 말한다. 이는 실제 서버가 존재하지 않는 다는 의미가 아닌 개발자가 서버를 신경쓰지 않아도 된다는 것을 의미한다. 규모가 크지 않은 웹 애플리케이션을 개발하거나 백엔드 개발에 많은 노력을 기울일 수 없는 상황이라면 BaaS, FaaS와 같은 클라우드 기반의 서버리스 아키텍처를 사용할 수 있다.

BaaS

BaaS(Backend as a Service)는 클라우드 서비스 제공 업체가 관리하는 백엔드 서비스이다. 웹 애플리케이션 개발 시 요구되는 복잡한 백엔드의 기능을 개발자가 직접 구현하지 않고 클라우드 업체가 제공하는 서비스를 이용해 쉽게 구현할 수 있다. 업체는 서버 개발에 필요한 데이터베이스, 인증, 스토리지, 메시징 등의 기능을 제공하고, 개발자는 이러한 서비스를 활용해 웹 애플리케이션을 구축하는 것이다. 대표적인 BaaS는 파이어베이스(Firebase), AWS 앱싱크(AWS AppSync), 애저 코스모스DB(Azure Cosmos DB)등 이다.

개발자는 BaaS가 제공하는 API를 통해 서비스를 구현함으로써 BaaS를 이름 그대로 백엔드 서버처럼 사용할 수 있다. 또한 백엔드 구축에 필요한 인프라, 즉 서버의 사양이나 개수, 네트워크 선정 등의 기술적인 부분을 지원받을 수 있다. 그러나 BaaS로 구현할 수 있는 기능은 BaaS가 제공하는 API에 한정된다.

FaaS

FaaS(Function as a Service)는 개발 프로젝트를 여러 개의 함수로 쪼개(또는 하나의 함수로 만들기도 함)매우 거대하고 분산된 클라우드 컴퓨팅 환경에 미리 준비해둔 함수를 등록하고, 이러한 함수가 실행되는 횟수와 실행된 시간 만큼 비용을 내는 방식이다. 클라우드 서비스 업체가 제공하는 서버 기능을 단순하게 이용하는 것이 BaaS라면, FaaS는 개발자가 사용할 기능을 함수 단위로 나눠 구현해 등록하고 클라우드가 이를 서비스하는 형태이다 AWS 람다(AWS Lambda)는 FaaS의 대표적인 서비스 중 하나이다. FaaS는 서버가 항상 켜져있는(always-on)상태로 매번 각각의 API 요청에 응답을 반환하는 것이 아니라, 사용자가 등록해둔 함수가 특정 요인에 의해 실행돼 해당 함수가 백엔드 기능을 수행하게 한다.

This post is licensed under CC BY 4.0 by the author.

part6. 가상화와 컨테이너

part8. 테스트와 CI/CD