네트워크/공부
3계층 구조 [3-Tier Architecture]
코딩하는 도람쥐
2024. 10. 2. 02:49
728x90
반응형
3계층 구조(3 tier architecture)란?
✔ 3계층 구조 (3tier architecture)
클라이언트-애플리케이션-데이터 서버
기존의 클라이언트-서버 애플리케이션을 애플리케이션을 3개의 논리적 및 물리적 계층으로 분리해 운영하는 아키텍처 패턴
다중 계층 아키텍처 패턴에서 가장 널리 사용된다.
1. 클라이언트-서버 계층
클라이언트-서버 모델은 애플리케이션의 처리를 두 개의 주된 역할, 즉 클라이언트와 서버로 나누어 실행하는 방식입니다.
1-1. 서버와 클라이언트
서버:
- 서버는 클라이언트 요청을 처리하고 데이터 및 리소스를 제공합니다.
- 데이터베이스, 웹서버, 애플리케이션 서버 등이 서버 역할을 수행합니다.
- 서버는 클라이언트로부터 오는 요청을 받고 이를 처리한 후, 그 결과를 다시 클라이언트에게 반환합니다.
클라이언트:
- 클라이언트는 사용자 인터페이스를 제공하고, 사용자로부터 입력을 받아 서버에 요청을 보냅니다.
- 브라우저, 모바일 애플리케이션, 데스크탑 애플리케이션 등이 클라이언트 역할을 수행합니다.
- 클라이언트는 서버의 데이터를 가져오거나 서버에 데이터를 저장하는 등 여러 기능을 수행할 수 있습니다.
1-2. 구조
- 2-tier 구조 (2계층 구조):
- 구성: 클라이언트와 서버의 두 계층으로 구성됩니다.
- 특징: 클라이언트는 사용자 인터페이스와 애플리케이션 로직을 처리하고, 서버는 데이터베이스 역할을 하여 데이터를 저장 및 관리합니다.
- 장점: 구조가 단순하고 소규모 애플리케이션에 적합합니다.
- 단점: 확장성이 제한적이며, 클라이언트가 직접 데이터베이스와 상호작용하기 때문에 보안 및 성능 문제가 발생할 수 있습니다.
- 3-tier 구조 (3계층 구조):
- 구성: 클라이언트, 애플리케이션 서버, 데이터베이스 서버로 세 계층으로 구성됩니다.
- 특징:
- 프레젠테이션 계층(클라이언트): 사용자의 입력을 받아 애플리케이션 서버로 전달하고, 서버의 응답을 사용자에게 보여줍니다.
- 애플리케이션 계층(애플리케이션 서버): 비즈니스 로직을 처리하며, 클라이언트로부터 받은 요청을 데이터베이스에 전달하고, 처리 결과를 클라이언트에게 반환합니다.
- 데이터 계층(데이터베이스 서버): 데이터를 저장하고 관리하며, 애플리케이션 서버의 요청에 따라 데이터를 제공합니다.
- 장점:
- 확장성 및 유연성이 뛰어나며, 애플리케이션 서버와 데이터베이스 서버가 분리되어 보안과 성능을 강화할 수 있습니다.
- 각 계층은 독립적으로 확장 및 관리할 수 있습니다.
- 단점: 구조가 복잡해지며 초기 구축 비용이 증가할 수 있습니다.
1-3. 2-tier와 3-tier 구조의 차이점
- 2-tier 구조:
- 클라이언트와 서버로만 이루어진 단순한 구조.
- 클라이언트가 서버(데이터베이스)에 직접적으로 연결하여 데이터를 주고받습니다.
- 데이터베이스와 직접 상호작용하기 때문에 보안 및 성능 이슈가 있을 수 있습니다.
- 확장성이 부족하며 대규모 애플리케이션에 적합하지 않습니다.
- 3-tier 구조:
- 클라이언트, 애플리케이션 서버, 데이터베이스 서버로 구성된 다계층 구조.
- 클라이언트는 애플리케이션 서버를 통해 데이터베이스에 접근하며, 비즈니스 로직이 애플리케이션 서버에 있어 보안과 성능이 향상됩니다.
- 더 많은 유연성과 확장성을 제공하며, 대규모 애플리케이션에 적합합니다.
결론
- 2-tier 구조: 클라이언트가 데이터베이스 서버와 직접 연결하는 구조로, 소규모 애플리케이션에 적합합니다. 그러나 확장성이 부족하고, 보안 및 성능 문제를 겪을 수 있습니다.
- 3-tier 구조: 클라이언트, 애플리케이션 서버, 데이터베이스 서버로 명확하게 분리된 구조입니다. 확장성, 유연성, 보안성이 높으며, 대규모 애플리케이션에 적합합니다.
2. 3-tier 구조
2-1. 프레젠테이션 계층 (Presentation Layer):
- 역할: 사용자와 상호작용하며, 애플리케이션의 UI(사용자 인터페이스)를 제공합니다.
- 구성 요소: 웹 브라우저, 모바일 앱, 데스크톱 애플리케이션 등.
- 책임: 사용자 입력을 수집하고, 애플리케이션 서버에 요청을 전달하며, 서버로부터 받은 데이터를 사용자에게 표시합니다.
- Presentation Tier(Client)
일반 사용자가 직접 액세스 할 수 있는 계층
이 계층은 사용자 인터페이스와 관련된 부분으로, 사용자와 애플리케이션이 상호 작용하는 부분이다.
이 계층은 GUI 또는 프런트엔드(front-end)라고도 부른다. 그러므로 이 계층에서는 사용자 인터페이스와 관계없는 데이터를 처리하는 로직은 포함하지 않는다. (HTML, Javascript, CSS)
관련개념:
1) MVC 패턴의 View
2) GUI (Graphical User Interface)
2-2. 애플리케이션 계층 (Application Layer) 또는 비즈니스 로직 계층:
- 역할: 비즈니스 로직을 처리하고, 프레젠테이션 계층과 데이터 계층 간의 인터페이스 역할을 합니다.
- 구성 요소: 웹 서버, 애플리케이션 서버, API 서버 등.
- 책임: 클라이언트로부터 받은 요청을 처리하고, 비즈니스 규칙을 적용하며, 데이터 계층과 상호작용하여 필요한 데이터를 조회하거나 저장합니다.
- Logic Tier(Application)
비즈니스 로직을 처리하는 부분으로, 전반적인 프로세스제어와 데이터 처리를 담당한다. 비즈니스 계층 또는 트랜잭션 계층이라고도 한다. 주로 서버 사이드에서 작동하며, 서버 프로그램 또는 API 서비스로 구현된다. 프레젠테이션 계층에겐 응답하고, 데이터 계층에겐 요청한다.
이 계층은 미들웨어(Middleware) 또는 백엔드(back-end)라고도 불린다. (PHP, Java 등)
관련개념:
1) 서비스 지향 아키텍처 (SOA)
2) 마이크로서비스 아키텍처
2-3. 데이터 계층 (Data Layer):
- 역할: 데이터의 저장과 관리를 담당합니다.
- 구성 요소: 데이터베이스 서버, 파일 시스템 등.
- 책임: 데이터의 저장, 조회, 업데이트, 삭제 등을 수행합니다. 데이터베이스 쿼리와 같은 작업을 처리합니다.
- Data Tier(Database)
데이터 베이스와 관련된 부분으로 데이터를 저장, 검색, 수정 및 삭제하는 기능을 담당한다.
주로 DBMS (Database Management System)이 이 계층에 해당된다. 데이터 계층 또한 백엔드(back-end)라고도 부른다. (MySQL, Oracle, MongoDB 등) - 관련 개념:
- DBMS (Database Management System): 데이터베이스를 관리하는 시스템(MySQL, Oracle, MongoDB 등).
3-tier 구조의 장점
3-1. 모듈화와 유지보수성
- 장점: 각 계층이 독립적으로 운영되어 유지보수가 용이.
- 예시: 데이터베이스 시스템을 변경해도 비즈니스 로직과 UI는 영향을 받지 않음.
- 구현: 의존성 주입(Dependency Injection)으로 계층 간 결합도를 낮춤.
3-2. 확장성
- 장점: 각 계층을 독립적으로 확장 가능.
- 예시: 비즈니스 로직 서버를 수평 확장하여 처리량 증가.
- 구현: 로드 밸런서와 마이크로서비스 아키텍처를 통해 확장성 확보.
3-3. 재사용성
- 장점: 동일한 비즈니스 로직이나 데이터 접근 계층을 여러 애플리케이션에서 재사용 가능.
- 예시: 웹 애플리케이션과 모바일 앱이 동일한 데이터 접근 계층을 공유.
- 구현: RESTful API 또는 gRPC를 통해 서비스를 표준화.
3-4. 보안 강화
- 장점: 데이터 계층을 직접 노출하지 않아 보안을 강화.
- 예시: 비즈니스 로직 계층에서 사용자 인증과 권한 검사를 수행.
- 구현: JWT(JSON Web Tokens) 또는 OAuth2를 사용한 인증 시스템 구축.
3-tier 구조의 단점
3-1. 성능 오버헤드
- 단점: 계층 간 통신으로 인한 지연 발생.
- 예시: 단순 데이터 조회도 여러 계층을 거쳐야 함.
- 해결: Redis와 같은 캐싱 전략을 도입.
3-2. 복잡성 증가
- 단점: 간단한 애플리케이션에도 과도한 구조 적용 가능성.
- 예시: 간단한 CRUD 작업에도 3-tier 구조를 적용하는 경우.
- 해결: Express.js 같은 경량 프레임워크 활용.
3-3. 개발 시간 증가
- 단점: 초기 설계 및 구현에 많은 시간 소요.
- 예시: 각 계층별 인터페이스 정의와 구현에 추가 시간이 필요.
- 해결: Swagger를 활용한 API 문서 및 코드 자동 생성 도구 사용.
3-4. 데이터 일관성 유지의 어려움
- 단점: 분산된 환경에서 데이터 일관성을 유지하기 어려움.
- 예시: 여러 트랜잭션이 동시에 발생할 때 데이터 불일치 발생.
- 해결: 2단계 커밋 프로토콜, 사가 패턴 등을 통해 분산 트랜잭션 관리.
728x90
반응형