3-tier 웹 애플리케이션의 정의 및 장단점
3-tier 웹 애플리케이션이란?
3-tier 웹 애플리케이션은 Presentation Layer(표현 계층), Business Logic Layer(비즈니스 로직 계층), Data Layer(데이터 계층)로 구성된 소프트웨어 아키텍처로, 각 계층이 분리되어 자체 인프라에서 실행되기 때문에 동시에 개발이 가능하며 다른 계층에 영향을 주지 않으면서 확장이나 업데이트가 가능하다. 이미지 출처
Presentation 계층 - 웹 서버
단어에서 알 수 있 듯, 사용자에게 정보를 보여주고 인터페이스를 통해 상호작용을 하는 계층이다. 주로 웹 브라우저와 같은 클라이언트에서 동작하며, HTML, css, javascript 등을 사용하여 사용자가 입력한 데이터를 처리하여 비즈니스 로직 계층으로 전달한다.
Business Logic 계층 - 애플리케이션 서버
애플리케이션의 핵심 로직이 실행되는 계층으로, API 통신을 통해 입력된 데이터를 처리하고 그 결과를 데이터 계층에 전달하거나 데이터 계층에서 데이터를 가져와 클라이언트로 돌려준다. 이 계층은 대부분 서버 측에서 작동하며, java, python, node.js 등의 서버 언어가 사용된다.
Data 계층 - 데이터베이스 서버
애플리케이션에서 사용하는 데이터를 저장하고 관리하는 계층이다. 주로 데이터베이스가 이 계층을 담당하며, 관계형 데이터베이스 관리 시스템(PostgreSQL, MySQL, Oracle, MariaDB 등) 또는 NoSQL(Cassandra, MongoDB 등) 데이터베이스가 사용된다.
[참고]계층 vs 레이어
레이어와 계층을 혼동하여 사용하는데, 두 개는 동일하지 않다. ‘레이어’는 소프트웨어의 기능적 분할을 의미하지만, ‘계층’은 다른 분할과 구분된 인프라에서 실행되는 분할을 의미한다.
장점
- 모듈화와 유지보수성: 각 계층이 분리되어 있어, 각 계층을 독립적으로 업데이트하거나 확장할 수 있어 유지보수와 확장성이 좋다.
- 재사용성: 비즈니스 로직과 데이터 계층을 여러 클라이언트 애플리케이션에서 재사용할 수 있다.
- 보안성 향상: 중요한 비즈니스 로직과 데이터는 클라이언트가 아닌 서버 측에 위치하므로, 보안 관점에서 유리하다.
단점
- 복잡성 증가: 계층이 늘어나면서 애플리케이션의 설계와 구현이 복잡해질 수 있다.
- 성능 저하: 각 계층 간 통신이 빈번해질 경우, 네트워크 지연 등으로 성능이 저하될 수 있다.
- 비용 증가: 각 계층에 필요한 인프라가 분리되기 때문에 비용이 더 많이 들 수 있다.
- 과도한 의존성: 계층형 아키텍처의 주요 문제점 중 하나는 하위 계층에 대한 과도한 의존성이다. 특히 데이터 계층에 대한 의존성이 높을 경우, 데이터 스키마의 변경이 비즈니스 로직 계층에 큰 영향을 미칠 수 있다. 왜냐하면 데이터 계층의 변경은 비즈니스 로직 계층의 수정을 필요로 하며, 이는 전체 시스템의 안정성에 영향을 줄 수 있기 때문이다. 따라서, 계층 간의 결합도를 낮추는 것이 중요한데, 이를 해결하기 위한 방법 중 하나는 의존성 역전 원칙(Dependency Inversion Principle)을 적용하는 것이다.
이 원칙은 상위 계층이 하위 계층의 구현이 아닌 추상화에 의존해야 한다고 주장한다. 예를 들어, 데이터 액세스 인터페이스를 정의하고, 비즈니스 로직 계층이 이 인터페이스에 의존하도록 함으로써, 데이터 계층의 변경이 비즈니스 로직 계층에 미치는 영향을 최소화할 수 있다. 또한, 각 계층의 책임을 명확히 하고, 계층 간의 인터페이스를 통해서만 데이터를 교환하도록 함으로써, 시스템의 유연성과 확장성을 높일 수 있다.
하지만, 이러한 접근 방식은 추가적인 설계와 구현의 복잡성을 초래할 수 있으므로 프로젝트의 요구사항과 팀의 역량을 고려하여 적절히 적용해야 한다.
대안: 마이크로서비스 아키텍처(Micro Service Architecture: MSA)
MSA는 애플리케이션을 작고 독립적인 서비스의 집합으로 구성한다. 각 마이크로서비스는 독립적으로 배포되고, 서로 다른 기술 스택을 사용할 수 있으며, 팀 간의 협업을 용이하게 하기 때문이다. 이는 계층형 아키텍처에서 발생할 수 있는 의존성 문제를 해결한다.
MSA는 각 서비스가 특정 비즈니스 기능에 집중할 수 있도록 하여, 시스템의 유연성과 확장성을 향상시킨다. 또한, 서비스 간 느슨한 결합을 통해 유지보수성을 높인다. 하지만, MSA는 서비스 간의 통신, 데이터 일관성 유지, 서비스 관리 등의 새로운 도전을 제시하기 때문에, 이에 대한 전략이 필요하다.
더 읽어보기 → 마이크로서비스아키텍처(MSA)란?
참고
3계층 아키텍처란?
[AWS] Web Application 3Tier-Architecture
계층형 아키텍처의 이해와 적용