본문 바로가기
Network

3tier 아키텍처

by Ahngyuho 2024. 12. 1.

오늘은 3tier 아키텍처에 대해서 알아보려고 합니다.

3tier 아키텍처란?

3tier 아키텍처는 소프트웨어 애플리케이션의 구성요소를 Presentation tier, Application tier, Data tier3개의 tier으로 분리하는 소프트웨어 아키텍처 입니다.

tier 와 layer의 차이점

처음엔 저도 layer 라고 정리하려고 했었는데 찾아보니 tier 와 layer는 엄연히 구분되어야 하는 개념인 것을 깨닫고 관련 정보를 찾아보았습니다.

tier란?

tier는 애플리케이션의 구성요소를 구분된 인프라에서 실행하는 것을 의미합니다.

즉 Presentation, Application, Data 라는 각 애플리케이션 구성요소를 네트워크를 통해 분리하는 것입니다.

layer란?

소프트웨어의 논리적인 계층으로 특정 역할을 수행하는 소프트웨어 구성요소 집합입니다.

Controller - Service - Repository 가 가장 대표적인 3-Layer Architecture 입니다.

각 계층에 역할을 부여하여 클래스들을 논리적으로 분류, 분리한 것이고, 실제로는 하나의 컴퓨터의 메모리에 상주하는 것들입니다.

두 개념의 핵심 차이는 물리적인 것 vs 논리적인 것 입니다.

tier는 물리적으로 각 계층이 분리된 것이고, layer는 애플리케이션 내에서 논리적으로 계층이 분리된 것을 표현할 때 사용됩니다.

이제 3tier의 각 tier의 역할에 대해서 알아봅시다.

Presentation tier

역할 : 사용자 인터페이스 제공

사용자가 애플리케이션과 상호작용 할 수 있도록 사용자 인터페이스를 제공하는 역할을 수행합니다.

브라우저에서 웹 페이지를 요청하면 프레젠테이션 계층은 요청받은 웹 페이지를 브라우저로 전송해주는 역할을 수행합니다.

그렇기 때문에 이 계층은 주로 HTML, CSS, JS 로 개발되고 프론트 엔드 개발자들이 개발한 코드가 이 계층에서 동작합니다.

Application tier

역할 : 비즈니스 로직 처리

실제 사용자가 애플리케이션에 기대하는 요청을 처리하는 계층으로 API를 통해 데이터베이스와 통신하고, 프레젠테이션 계층에서 넘어온 데이터를 처리하여 응답으로 넘겨주는 역할을 수행합니다.

Data tier

역할 : 데이터를 저장하고 관리

 

각 계층은 서로 분리되어 각자의 역할을 수행할 수 있으므로 이 부분에서 따라오는 장점이 있습니다.

장점

  • 확장성(Scalability):각 계층이 독립적이므로, 필요에 따라 특정 계층만 확장(Scale-out) 가능.
    • 예: 트래픽 증가 시 Application Layer의 WAS를 수평적으로 확장.
  • 유지보수성(Maintainability):계층별로 역할이 명확히 분리되어 있어 수정이나 기능 추가가 쉬움.
  • 보안(Security):Presentation tier와 Data tier사이에 Application tier가 있으므로, 직접적인 데이터 접근을 방지.
  • 재사용성(Reusability):Application tier의 비즈니스 로직은 다른 Presentation tier(예: 모바일 앱)에서도 재사용 가능.

단점

  • 복잡성 증가:구조가 복잡해져 초기 설계와 개발 시간이 오래 걸릴 수 있음.
  • 네트워크 부하:각 계층 간 통신으로 인해 네트워크 대역폭 사용이 늘어날 수 있음.
  • 고가용성 유지 어려움:각 계층에 장애가 발생할 경우 서비스가 중단될 위험이 있음. 이를 방지하려면 별도의 HA(High Availability) 구성이 필요.

 

 

이제 이 글을 조금 더 이해하기 쉽게 그림으로 표현해보겠습니다.

그리고 일반적으로 3tier 아키텍처는 어떻게 동작하는지도 살펴보겠습니다.

 

 

가장 처음은 사용자가 웹 사이트의 페이지를 웹 서버로 부터 내려받는 것입니다.

 

 

브라우저에는 다음과 같은 응답 결과가 내려오는 것입니다.

....

  <script>
   export default {
   	name: "A-Test",
    methods: {
    	getData(){
        this.$axios
        .get('/api/test/a')
        .then((...))
        ....
    }
   }
  </script>

....

 

이렇게 내려받은 HTML , CSS , JS 파일을 브라우저가 렌더링해서 화면에 띄워주는 것입니다.

 

이제 사용자가 웹 페이지의 어떤 링크하나를 클릭했다고 가정하고 이때의 흐름을 순서대로 살펴봅시다.

  1. 사용자가 렌더링된 웹 페이지에서 링크 하나를 클릭합니다.
  2. 이 요청이 웹 서버에 도착하고 웹 서버의 설정에 따라 이 요청을 웹 애플리케이션 서버(WAS)로 전달합니다.
  3. 전달받은 요청을 WAS 가 DB와 통신하여 적절히 데이터를 저장 및 처리하고 결과를 Nginx 웹 서버에 전달합니다.

 

'Network' 카테고리의 다른 글

포트 포워딩  (0) 2024.11.30
HTTP 메시지  (0) 2024.10.11
Network 개요  (0) 2024.07.14