아키텍처는 건축 분야에서 유래된 용어로, 청사진과 같은 역할을 한다. 건축물의 조감도를 생각하면 이해가 쉬울 것이다.
위 사진은 어느 아파트의 조감도이다. 이 아파트를 짓기 위해서는 건축가와 시공사 등 많은 사람들이 만나 논의를 할 것이다.
어떤 건물이나 구조물에 대한 컨셉을 잡는 것부터 시작한다. 대략적인 컨셉을 잡았다면, 구체적인 설계와 시공에 들어간다.
컴퓨터 시스템에서의 아키텍처
컴퓨터 시스템에서의 아키텍처 역시, 어떠한 시스템을 구축하는데 있어 해당 시스템의 비즈니스적 요구 사항을 만족하는 전체 시스템 구조를 정의한다. 이해 당사자들이 시스템 구조를 이해할 수 있게 이미지나 도형 등을 많이 사용한다.
아키텍처는 너무 복잡하면 안된다. 거대하고 방대한 시스템인 경우, 어느 정도의 복잡함이 표현될 수 밖에 없겠지만 최대한 심플함을 유지하는 것이 좋다.
시스템 아키텍처는 하드웨어와 소프트웨어를 모두 포함하는 어떤 시스템의 전체적인 구성을 표현한 것이다. 기본적으로 해당 시스템이 어떤 하드웨어로 구성되며 어떤 소프트웨어를 사용하는지를 대략적으로 알 수 있다.
또한, 시스템 구성 요소들 간의 상호작용이 어떻게 이루어지는지 등 시스템이 정상 동작하기 위한 동작 원리 등이 시스템 아키텍처 내에 포현되면 이해 당사자들이 아키텍처를 이해하는데 도움이 된다.
소프트웨어 아키텍처
소프트웨어의 구성을 표현한 것이 소프트웨어 아키텍처이다. 소프트웨어 아키텍처의 대표적인 사례는 Java 플랫폼 아키텍처이다.
위 그림은 Java 플랫폼을 표현한 아키텍처이다. 이 아키텍처를 통해 우리는 Java가 어떤 기술들을 지원하고, Java를 통해 어떤 기능들을 사용할 수 있는지 등을 알 수 있다.
애플리케이션 아키텍처
애플리케이션은 소프트웨어 종류 중 하나로, 데스크탑이나 스마트폰에서 사용하는 응용 프로그램을 말한다. 넓게는 클라이언트의 요청을 처리하는 서버 애플리케이션을 의미한다.
애플리케이션 아키텍처는 다양한 유형이 있는데, 계층형 아키텍처(N-티어)에 대해 살펴보자.
API 계층
API 계층은 클라이언트의 요청을 받아들이는 계층이다. 일반적으로 표현 계층이라 불리지만, REST API를 제공하는 애플리케이션의 경우 API 계층이라고 표현한다.
서비스 계층
서비스 계층은 API 계층에서 전달받은 요청을 업무 도메인의 요구사항에 맞게 비즈니스적으로 처리하는 계층이다. 애플리케이션의 핵심 로직은 서비스 계층에 포함되어 있다 해도 과언이 아닐만큼 핵심이 되는 계층이다.
데이터 액세스 계층
데이터 액세스 계층은 비즈니스 계층에서 처리된 데이터를 데이터베이스 등의 데이터 저장소에 저장하기 위한 계층이다.
위 그림은 Spring Framework에서 지원하는 모듈들을 아키텍처로 표현한 것이다.
여기서 모듈이란, Java에서는 지원되는 여러 기능들을 목적에 맞게 그룹화해 묶어 놓은 것이다. 일반적으로 모듈은 재사용이 가능하도록 라이브러리 형태로 제공되는 경우가 많다.
먼저 Spring Framework는 엔터프라이즈 애플리케이션을 개발하기 위한 핵심 기능을 제공하는 Spring Project 중 하나다.
Spring Framework의 편리함에도 불구하고 Spring 설정의 복잡함으로 인해 Spring 기반 애플리케이션 개발을 시작하기도 전에 어려움을 겪는 문제점을 해결하기 위해 Spring Boot가 생겨났다.
XML 기반의 복잡한 설계 방식 지양
Spring Boot 이전의 Spring 애플리케이션 개발을 위한 설정을 굉장히 복잡했는데, Spring Boot으로 인해 Spring의 복잡한 설정에 대한 어려움에서 벗어날 수 있게 되었다.
의존 라이브러리의 자동 관리
이전에는 애플리케이션에서 필요한 라이브러리를 사용하기 위해 필요한 라이브러리의 이름과 버전을 일일이 추가해야 했었다. 하지만 Spring Boot의 starter(스타터) 모듈 구성 기능을 통해 의존 라이브러리를 수동으로 설정해야 하는 불편함이 사라졌다.
Spring Boot을 사용하면 의존 라이브러리를 직접 관리해야 하는 부담에서 벗어날 수 있다.
애플리케이션 설정의 자동 구성
Spring Boot는 스타터 모듈을 통해 설치되는 의존 라이브러리를 기반으로 애플리케이션 설정을 자동으로 구성한다.
내장된 WAS를 통한 손쉬운 배포
Spring Boot는 Apache Tomcat이라는 WAS를 내장하고 있어 별도의 WAS를 구축할 필요가 없다. Spring Boot를 통해 빌드된 jar 파일을 이용해 명령어를 한 줄만 입력하면 서비스가 가능한 웹 애플리케이션을 실행할 수 있다.
System Architecture – Detailed Explanation
10 Common Software Architectural Patterns in a nutshell
J2SETM Platform at a Glance
Part I. Overview of Spring Framework