Overview
전통적인 3tier 아키텍처는 애플리케이션을 프레젠테이션(클라이언트), 애플리케이션(비즈니스 로직), 데이터(데이터베이스) 계층으로 나누어 구성하는 고전적이면서도 여전히 강력한 설계 방식이다.
하지만 클라우드 기술과 다양한 웹 프레임워크의 발전으로 인해 오늘날에는 이들 계층 간의 구분이 명확하지 않거나, 하나로 통합되는 경우도 많다.
이번 글에서는 전통적인 3tier 아키텍처의 구성 요소와 역할을 살펴보고, 현대 웹 개발에서 이러한 구조가 어떻게 변화했는지, 웹 서버와 애플리케이션 서버의 차이점, 그리고 정적 콘텐츠와 동적 콘텐츠에 대한 이해를 통해 실전 웹 아키텍처에 대한 감각을 익혀본다.

📅 관련 글
2023.01.13 - [CS 지식] - [CS 지식1.] 웹 브라우저의 동작원리
2023.02.23 - [CS 지식] - [CS 지식2.] DNS의 동작원리(Domain Name System)
2023.03.06 - [CS 지식] - [CS 지식3.] HTTP / HTTPS 란?
2023.03.07 - [CS 지식] - [CS 지식4.] OSI 7계층 & TCP/IP 4계층이란?
2023.03.17 - [CS 지식] - [CS 지식5.] 가상화란?
2023.05.24 - [CS 지식] - [CS 지식6.] HTTP 메서드(Method)란? / HTTP Status Code
2023.12.05 - [CS 지식] - [CS 지식7.] Kubernetes 구성요소와 Pod 생성 방식이란?
2023.12.19 - [CS 지식] - [CS 지식8.] 프로세스(Process)와 스레드(Thread)란?
2023.12.30 - [CS 지식] - [CS 지식9.] 클라우드 컴퓨팅이란?(Public & Private Cloud / IaaS SaaS PaaS / Multitenancy)
2024.01.05 - [CS 지식] - [CS 지식10.] 웹1.0(Web1.0) vs 웹2.0(Web2.0) vs 웹3.0(Web3.0)
2024.02.02 - [CS 지식] - [CS 지식11.] NAT(Network Address Translation)란?
2024.05.22 - [CS 지식] - [CS 지식13.] 동기 및 비동기 처리란?
2024.05.23 - [CS 지식] - [CS 지식14.] 3tier 아키텍처란?
2024.08.28 - [CS 지식] - [CS 지식15.] SSR vs CSR vs ISR vs SSG
2024.11.09 - [CS 지식] - [CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러)
2024.11.11 - [CS 지식] - [CS 지식17.] IPsec vs SSL/TLS
2024.11.22 - [CS 지식] - [CS 지식18.] Quantum Computing(양자 컴퓨팅)
전통적인 3tier 아키텍처
- 프레젠테이션 계층(Client Tier): 애플리케이션의 사용자 인터페이스이다. 이는 사용자에게 애플리케이션을 제시하고, 모든 데이터에 대해 애플리케이션 계층과 통신하며, 결과를 사용자에게 다시 제공한다.
- 애플리케이션 계층(Business Logic/Logic Tier): 이 계층은 애플리케이션을 조정하고, 명령을 처리하고, 논리적인 결정과 평가를 내리고, 계산을 수행한다. 또한 두 개의 주변 레이어 간에 데이터를 이동하고 처리한다.
- 데이터 계층(Data Tier): 여기에는 데이터베이스 및 데이터 저장 시스템이 포함된다. 데이터 계층은 데이터의 물리적 저장 및 검색을 관리한다.
웹 개발의 최신 접근 방식
현대 웹 개발에서는 특히 클라우드 기술과 서비스의 출현으로 인해 웹과 애플리케이션 서버(WAS)의 구분이 모호해졌다.
- 웹 서버(Web): 전통적으로 HTTP 요청을 처리하고, 정적 콘텐츠를 제공하고, 동적 콘텐츠 요청을 애플리케이션 서버에 전달했습다.
- 애플리케이션 서버(WAS): 사용자 인터페이스와 데이터베이스 간의 비즈니스 로직 및 상호 작용을 처리한다. 애플리케이션을 실행하고 데이터베이스에서 반환된 데이터를 처리했다.
요즘에는 많은 웹 프레임워크에 정적 콘텐츠와 동적 콘텐츠를 모두 처리할 수 있는 내장 서버(예: Spring Boot의 Tomcat)가 함께 제공되므로 많은 시나리오에서 별도의 웹 서버와 애플리케이션 서버가 필요하지 않다.
전통적인 3tier 아키텍처와 현대의 웹 개발방식과의 비교
Aspect | Traditional 3-Tier Architecture | Modern Web Development |
Separation | Clear separation of concerns | Blurred lines, often combined layers |
Web Server (WS) | 정적 콘텐츠만 제공 | 정적 및 동적 콘텐츠를 제공 |
Application Server (WAS) |
비즈니스 로직을 독점적으로 처리 | 애플리케이션에 내장되어 모든 비즈니스 로직을 처리 |
Scalability | 더 많은 중간 계층 서버를 추가하여 확장 가능 | 마이크로서비스, 컨테이너 또는 서버리스 컴퓨팅으로 확장 가능 |
Deployment Complexity | 별도의 유지 관리 및 확장이 필요한 별도의 레이어로 인해 높음 | 통합 서비스 및 클라우드 제공업체로 인해 감소 |
Development and Maintenance | 상호의존성으로 인해 더욱 복잡해짐 | 내부적으로 종속성을 관리하는 프레임워크 및 서비스로 단순화됨 |
Example Technologies | Apache 웹 서버, Oracle WebLogic, IBM WebSphere | Node.js, Spring Boot, Django(Tomcat 또는 Gunicorn과 같은 내장 서버 사용) |
웹과 WAS의 차이점
웹 서버
- HTTP 요청을 처리
- HTML, CSS, 이미지와 같은 정적 콘텐츠를 제공
- 동적 콘텐츠에 대한 요청을 응용 프로그램 서버로 프록시할 수 있다.
애플리케이션 서버(WAS)
- 비즈니스 로직을 처리
- 동적 콘텐츠 요청을 처리
- 데이터베이스 및 기타 서비스와 상호 작용하여 데이터를 가져오고, 처리하고, 유지
정적 콘텐츠와 동적 콘텐츠란?
간단하게 한 문장으로 설명하면, 정적콘텐츠는 immutable(불변) 동적 콘텐츠는 mutable(변)이다.
따라서 웹 개발에서 콘텐츠는 생성되어 최종 사용자에게 전달되는 방식에 따라 정적 콘텐츠와 동적 콘텐츠로 분류될 수 있다. 두 가지 유형에 대한 분석은 다음과 같다.
정적 콘텐츠
정적 콘텐츠는 자주 변경되지 않고 저장된 그대로 제공되는 파일을 의미한다. 이 콘텐츠는 모든 사용자를 위해 미리 준비되고 수정되어 파일을 요청하는 모든 사람이 동일한 버전을 받게 된다. 정적 콘텐츠는 상호 작용이나 실시간 업데이트가 필요하지 않은 웹페이지 구성 요소에 주로 사용된다.
따라서 정적 콘텐츠 전달은 정적 파일을 빠르고 효율적으로 제공하도록 최적화된 Apache HTTP Server 또는 Nginx와 같은 웹 서버를 활용하는 경우가 많다. 또한 CDN(콘텐츠 전송 네트워크)은 대기 시간을 줄이기 위해 정적 콘텐츠를 사용자에게 더 가까이 배포하고 캐시하는 데 일반적으로 사용된다.
- 일관성: 웹 개발자가 명시적으로 업데이트하지 않는 한 콘텐츠는 동일하게 유지
- 속도: 콘텐츠를 동적으로 생성하기 위해 서버에서 처리할 필요가 없기 때문에 사용자에게 빠르게 제공될 수 있다.
- 예: HTML 파일, CSS 스타일시트, JavaScript 파일(서버 요청을 하지 않음), 이미지, 비디오 및 PDF와 같은 다운로드 가능한 파일
동적 콘텐츠
반면 동적 콘텐츠는 사용자 요청, 상호 작용 또는 기타 조건을 기반으로 실시간으로 생성된다. 이는 정적 파일로 미리 저장되지 않지만 클라이언트 또는 서버 측 조건의 입력을 기반으로 서버에서 즉시 생성된다. 이 콘텐츠는 개별 사용자에게 맞춤화되어 사용자별 인터페이스와 경험에 적합하다.
동적 콘텐츠 생성에는 Apache Tomcat과 같은 애플리케이션 서버, Microsoft의 IIS(ASP.NET 포함) 또는 Python용 Django, Ruby용 Rails와 같은 프로그래밍 프레임워크가 포함되어 콘텐츠를 동적으로 생성하는 데 필요한 논리를 처리한다. 이러한 도구는 사용자 요청을 처리하고, 데이터베이스 액세스와 같은 서버에서 작업을 수행하고, 클라이언트에 보낼 HTML, JSON 또는 기타 형식을 동적으로 생성한다.
- 개인화: 개별 사용자의 필요나 선호도에 맞춰 개인화된 정보를 표시할 수 있다.
- 상호작용성: 동적 요소는 사용자 입력에 반응하여 사용자가 취한 작업에 따라 콘텐츠를 변경하는 경우가 많다.
- 서버 측 처리: 동적 콘텐츠 생성에는 데이터베이스 쿼리, 데이터 처리, 클라이언트에 보내기 전에 HTML 형식 지정이 포함되는 경우가 많다.
- 예: 사용자 프로필, 대시보드, 데이터베이스 쿼리 결과, 현재 시간, 날씨 업데이트 또는 주식 시장 동향을 표시하는 페이지(Instagram, Neflix.. etc)
정적 콘텐츠 vs 동적 콘텐츠 비교표
항목 | 정적 콘텐츠 | 동적 콘텐츠 |
생성 시점 | 미리 생성되어 저장됨 | 요청 시마다 실시간 생성 |
서버 부하 | 낮음 (파일 서빙만) | 높음 (DB 조회, 연산 필요) |
응답 속도 | 빠름 (CDN 캐싱 가능) | 상대적으로 느림 |
맞춤화 | 불가능 (모두에게 동일) | 가능 (사용자 기반 출력) |
예시 | 이미지, JS, CSS, HTML | 대시보드, 사용자 정보, 장바구니 등 |
정적 콘텐츠는 빠르고 저렴하며, 동적 콘텐츠는 유연성과 개인화를 제공함.
정적 콘텐츠 최적화 사례
전략 | 설명 |
CDN 활용 | 정적 자산을 글로벌 엣지 서버에 캐싱하여 지연 최소화 |
브라우저 캐시 정책 설정 | CSS, JS 등에 Cache-Control 헤더를 설정해 반복 요청 방지 |
HTTP/2 지원 | 멀티플렉싱, 헤더 압축으로 자원 병렬 다운로드 성능 향상 |
이미지 최적화 | WebP/AVIF 포맷 사용, lazy loading 적용 |
Build-time 정적화 | Next.js의 getStaticProps 등으로 요청 전 빌드 시 콘텐츠 생성 |
정적 콘텐츠는 최대한 CDN + 캐시 + 최적 포맷으로 구성하면 성능 극대화 가능!
3tier 아키텍처, 더 깊이 들어가보자
3tier 구조 도식 설명
전통적인 3tier 아키텍처는 다음과 같은 구성으로 직관적으로 이해할 수 있다.
[Client Tier]
⬇
[Web Server (WS)] – 정적 파일 처리
⬇
[Application Server (WAS)] – 비즈니스 로직, 동적 콘텐츠 생성
⬇
[Database] – 데이터 저장 및 조회
- 웹 서버는 HTTP 요청을 받아 정적 콘텐츠를 반환하거나 WAS로 전달
- WAS는 비즈니스 로직을 처리하고 DB와 연동하여 결과 생성 후 응답
현대 구조와의 비교 (Spring Boot, Django, Node.js)
현대 웹 프레임워크는 웹 서버와 애플리케이션 서버의 경계를 통합하거나 흐리게 만든다.
- Spring Boot: 내장 Tomcat 포함 (웹 + WAS 일체형)
- Django + Gunicorn: Python 기반 서버에서 정적/동적 모두 처리 가능
- Node.js: 단일 런타임으로 HTTP 요청, 비즈니스 로직, DB 연동까지 처리
즉, 단일 프로세스 혹은 컨테이너 안에서 3tier의 역할을 전부 수행하는 구조가 많아졌다.
WAS 없이 서비스 가능한 예시
웹 서버(WAS) 없이도 다음과 같은 서비스가 가능하다.
- 정적 웹사이트: HTML + JS + CSS만으로 구성 (개인 블로그, 포트폴리오 등)
- Jamstack 기반 사이트: Next.js, Gatsby, Hugo 등으로 빌드된 정적 사이트 + API 호출 방식
- GitHub Pages + Netlify: 빌드된 정적 결과만 배포하여 비용 없이 고성능 제공 가능
3tier 아키텍처 vs MSA vs Serverless
현대 웹 아키텍처에서는 3tier 외에도 마이크로서비스(MSA), 서버리스(Serverless)와 같은 다양한 구조가 존재한다.
각 아키텍처는 규모, 유지보수성, 확장성, 팀 구조에 따라 선택 기준이 달라진다.
항목 | 3tier 아키텍처 | MSA (마이크로서비스) | Serverless (서버리스) |
구조 | 계층 기반 (UI-WAS-DB) | 도메인 기반의 서비스 분할 | 함수 또는 이벤트 기반 |
배포 단위 | 통합 애플리케이션 | 독립된 서비스별 배포 | 개별 함수 또는 API 엔드포인트 |
확장성 | WAS 수평 확장 위주 | 서비스 단위 개별 확장 | 트래픽 기반 자동 확장 |
팀 협업 | 단일 코드베이스 중심 | 팀별 독립 서비스 관리 가능 | 소규모 서비스에 적합 |
유지보수 | 한 서비스 수정 시 전체 빌드 필요 | 버전 및 의존성 관리 중요 | 벤더 의존도 존재 (AWS, GCP 등) |
기술 스택 | 일관된 스택 선호 | 서비스별 다양한 언어 가능 | 플랫폼에서 지원하는 런타임 활용 |
사용 예시 | 전통적인 웹 포털, 내부 시스템 | 이커머스, 플랫폼, B2B SaaS | 알림 시스템, 예약 트리거, 이미지 처리 |
실무 적용 시 고려사항
- MSA는 팀 규모가 크고, 서비스 간 책임이 명확할 때 이상적이지만, 배포/모니터링/트랜잭션 추적 등 운영 복잡도 ↑
- Serverless는 초기 진입이 쉽고 비용도 낮지만, Cold Start, 벤더 락인, 모놀리식 DB와의 충돌 같은 고려사항이 있음
- 3tier는 여전히 단일 서비스 또는 내부 시스템에 안정적이고 예측 가능한 아키텍처 패턴으로 많이 사용됨
구조 시각화 요약
[ 3tier ]
Client ⇄ Web Server ⇄ Application Server ⇄ DB
[ MSA ]
Client ⇄ API Gateway ⇄ Service A ⇄ DB A
⇄ Service B ⇄ DB B
⇄ Service C ⇄ DB C
[ Serverless ]
Event ⇨ Function A ⇨ (DB or API)
⇨ Function B ⇨ (DB or API)
마무리
3tier 아키텍처는 오늘날에도 여전히 많은 시스템 구조의 기반이 되는 아키텍처 패턴이다.
프레젠테이션, 애플리케이션, 데이터 계층의 역할을 명확히 분리함으로써 유지보수성, 확장성, 재사용성을 확보할 수 있으며,
클라우드 환경에서도 이 패턴은 다양한 형태로 발전해 마이크로서비스, 서버리스, 컨테이너 기반 아키텍처로 확장되고 있다.
특히 정적 콘텐츠와 동적 콘텐츠의 구분은 웹 성능 최적화와 CDN 전략 수립에서도 중요한 기준이 된다.
현대 웹 개발에서는 프론트엔드 프레임워크의 등장, 통합 서버 구조, SPA(단일 페이지 앱)의 확산으로 인해 과거의 명확한 구분이 사라졌지만,
그 개념을 이해하고 응용하는 것은 여전히 유효하며, 백엔드/인프라 설계에서도 강력한 도구가 된다.
Reference
https://www.wix.com/blog/static-vs-dynamic-website
https://gcore.com/learning/static-vs-dynamic-content-understanding-the-difference/
'CS 지식' 카테고리의 다른 글
[CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러) (0) | 2024.11.09 |
---|---|
[CS 지식15.] SSR vs CSR vs ISR vs SSG (6) | 2024.09.05 |
[CS 지식13.] 동기 및 비동기 처리란? (0) | 2024.06.06 |
[CS 지식12.] SSO(Single Sign-On)란? (With OAuth SAML OIDC) (0) | 2024.03.23 |
[CS 지식11.] NAT(Network Address Translation)란? (0) | 2024.02.21 |