오늘은 3tier 아키텍처에 대해서 알아보려고 합니다.
3tier 아키텍처란?
3tier 아키텍처는 소프트웨어 애플리케이션의 구성요소를 Presentation tier, Application tier, Data tier이 3개의 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 파일을 브라우저가 렌더링해서 화면에 띄워주는 것입니다.
이제 사용자가 웹 페이지의 어떤 링크하나를 클릭했다고 가정하고 이때의 흐름을 순서대로 살펴봅시다.
- 사용자가 렌더링된 웹 페이지에서 링크 하나를 클릭합니다.
- 이 요청이 웹 서버에 도착하고 웹 서버의 설정에 따라 이 요청을 웹 애플리케이션 서버(WAS)로 전달합니다.
- 전달받은 요청을 WAS 가 DB와 통신하여 적절히 데이터를 저장 및 처리하고 결과를 Nginx 웹 서버에 전달합니다.
'Network' 카테고리의 다른 글
포트 포워딩 (0) | 2024.11.30 |
---|---|
HTTP 메시지 (0) | 2024.10.11 |
Network 개요 (0) | 2024.07.14 |