VPC에서 네트워크를 격리하면 프라이빗 협업을 활성화하고 민감한 정보를 적절하게 저장하는 등 주요 보안 이점이 있습니다.
개발 측면에서는 네트워크 격리를 통해 다중 계층 웹 응용 프로그램을 배포할 수도 있습니다. 앱을 계층화하면 공용 인터넷 액세스 유무에 관계없이 레이어를 분할할 수 있습니다. 이는 공용 인터넷에서 데이터베이스 계층을 격리하는 동시에 공용 인터넷 대신 최상위 계층에서 패치 및 소프트웨어 업데이트를 직접 가져올 수 있도록 하는 데 자주 사용됩니다. 공격 노출 영역을 줄이는 것 외에도 다중 지역 배포를 사용하도록 설정할 수 있습니다.
여러 계층을 실행하는 방법에는 여러 가지가 있지만 일반적으로 확장성, 보안 및 안정성을 최대화하는 몇 가지 기본 양식을 사용할 수 있습니다. 가장 일반적인 디자인 중 하나는 클라우드 기반 환경에서 특히 널리 사용되는 3계층 아키텍처입니다.
3계층 응용 프로그램은 서로 다른 서버에 상주하는 세 개의 서로 다른 계층으로 구성되며 높은 수준의 독립성을 가지고 개발 및 관리할 수 있습니다. 이러한 부분은 다음과 같습니다.
- 프레젠테이션: 사용자와 애플리케이션 간의 통신을 관리하는 외부 인터페이스로, 일반적으로 HTML이 포함된 웹 서버와 함께 제공되는 웹 개발 코드로 구성됩니다.
- 응용 프로그램: 필요한 비즈니스 논리를 제공하고 응용 프로그램을 함께 연결하는 사용자 지정 응용 프로그램입니다.
- 데이터: 응용 프로그램에 사용되는 데이터를 저장하고 검색하기 위한 데이터베이스 시스템입니다.
이 세 계층은 네트워크 기반 API를 통해 통신하는 별도의 서비스로 사용됩니다. 보안 및 성능 문제로 인해 응용 프로그램 및 데이터 계층이 공통 방화벽 뒤의 동일한 로컬 네트워크 내에 있어야 하는 경우가 많지만 각 계층을 분리하면 각 구성 요소를 서로 다른 하드웨어 또는 다른 물리적 위치에 배포할 수 있습니다. 여기서 유연성은 응용 프로그램의 요구 사항에 따라 크게 달라집니다.
아래 다이어그램은 기본 3계층 웹 응용 프로그램의 실제 보기를 보여 줍니다. 프레젠테이션 계층의 웹 서버는 브라우저 창에서 작업하는 사용자에게 인터페이스를 제공합니다. 반대로 데이터 계층은 단일 시스템 또는 단일 엔터티로 네트워크에 제공되는 클러스터일 수 있는 데이터베이스 형식을 취합니다. 데이터베이스 계층에 대한 인기있는 오픈 소스 옵션에는 MySQL, MariaDB 및 PostgreSQL for SQL과 MongoDB 및 Cassandra for NoSQL이 포함됩니다.
![](https://www.linode.com/wp-content/uploads/2022/11/Diagram-1-1064x451.png)
웹 서버와 데이터베이스 사이에는 응용 프로그램 계층이 있으며, 여기서 대부분의 코딩 시간을 소비하게 될 것입니다. 응용 프로그램 계층에는 응용 프로그램이 목표를 달성하는 데 필요한 사용자 지정 코드와 비즈니스 논리가 포함되어 있습니다. 프런트 엔드에서 웹 서버는 응용 프로그램 계층에 쿼리를 보냅니다. 응용 프로그램 계층은 웹 서버에 응답하고 웹 서버는 데이터의 서식을 지정하여 사용자에게 제공합니다. 백 엔드에서 응용 프로그램 계층은 데이터베이스를 쿼리하고 데이터를 받은 다음 데이터를 처리하여 사용자에 대한 인텔리전스와 인사이트를 추가합니다.
매우 간단한 예로, 데이터베이스는 회사의 판매 레코드를 저장할 수 있습니다. 사용자는 특정 시간 간격 동안 특정 위치에서 특정 제품에 대한 평균 일일 판매를 수신하기 위한 요청을 입력합니다. 웹 서버는 응용 프로그램 계층에 요청을 보냅니다. 응용 프로그램 계층은 데이터베이스에 대한 쿼리를 작성하고 원시 데이터를 받아 필요한 계산을 수행한 다음 웹 서버에 응답을 다시 보냅니다.
![](https://www.linode.com/wp-content/uploads/2022/11/Diagram-2-1064x417.png)
응용 프로그램 계층에 대한 편리한 드롭 인 솔루션은 없습니다. Apache 프레젠테이션 계층의 경우 웹 서버 또는 데이터 계층의 경우 MongoDB 데이터베이스입니다. 대신 사용자 지정 코드는 일반적으로 Python, PHP 또는 응용 프로그램 계층의 경우 Ruby입니다. 그러나 Django를 포함하여 코드를보다 효율적으로 작성하는 데 유리한 출발을 할 수있는 일부 프로그래밍 프레임 워크가 있습니다. Python), 레일 (루비 용) 및 심포니 (PHP 용).
이론적으로 응용 프로그램 계층은 데이터베이스에 대한 직접 쿼리에 필요한 코드를 웹 서버에 제공하여 프레젠테이션 계층과 결합될 수 있지만 이는 대부분의 복잡한 비즈니스 논리에는 실용적이지 않으며 응용 프로그램 분할의 많은 이점을 무효화합니다.
이러한 이점 중 가장 중요한 것 중 하나는 더 작은 공격 표면으로 보안을 강화하는 것입니다. 그림 1에서 볼 수 있듯이 3계층 솔루션은 방화벽 앞에 위치해야 하는 애플리케이션의 부분을 최소화합니다. 웹 서버는 안전한 API. 나머지 활동은 방화벽 뒤에 있으며, 중요한 것은 인터넷에서 액세스할 수 없는 비공개 주소 공간에서 이루어집니다. 특히 SQL 인젝션은 가장 흔한 취약점 중 하나이며 가장 파괴적인 취약점 중 하나입니다. 데이터베이스와의 모든 직접 통신을 격리하고 보호하면 이를 방지할 수 있습니다.
3계층 응용 프로그램의 또 다른 이점은 안정성입니다. 한 계층의 중단은 각 계층이 별도의 서버에서 실행되거나 다른 하드웨어 또는 다른 데이터 센터로 완전히 분리될 때 다른 계층에 영향을 줄 가능성이 적습니다. 이것은 또한 우리에게 확장 가능성에 대한 잠재력을 제공합니다. 구성 요소가 독립적으로 작동하기 때문에 독립적으로 성장할 수 있습니다. 예를 들어 데이터베이스 액세스에 성능 병목 현상이 있는 경우 전체 작업의 중단을 최소화하면서 데이터베이스 클러스터에 노드를 추가할 수 있습니다.
3계층 접근 방식도 개발 프로세스를 최적화 할 수 있습니다. 계층을 연결하는 API는 분업의 효율성을 지원하는 방식으로 구성 요소를 분리합니다. 웹 개발자와 관리자는 웹 서버를 운영하고 유지 관리할 수 있으며 데이터베이스 개발자와 관리자는 데이터베이스 시스템을 실행할 수 있습니다. 그 사이에 응용 프로그램 계층에 사용하는 프레임워크의 전문가는 응용 프로그램 코드에 집중할 수 있습니다. 예를 들어 DevOps 시나리오에서 애플리케이션 개발자는 새 버전의 애플리케이션 코드를 오프라인으로 빌드하고 테스트하여 운영에 미치는 영향을 최소화하면서 쉽게 변경할 수 있습니다.
웹 응용 프로그램을 빌드하기 시작하는 경우 3계층 아키텍처를 고려합니다. 오늘날의 컨테이너 및 클라우드 환경에서는 서로 다른 시스템의 구성 요소를 쉽게 분리할 수 있으며 보다 안정적이고 안전하며 확장 가능한 애플리케이션으로 노력에 대한 보상을 받을 수 있습니다.
지금 바로 Linode를 시작하여 애플리케이션 계층을 구축하십시오.
리소스: VLAN | 시작하기 데이터 센터 간 응용 프로그램
리노드 솔루션: VLAN | 관리되는 데이터베이스
댓글 (1)
You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.