N-Tier 아키텍처 란 무엇입니까?


193

최근에 "N-Tier 아키텍처에 대한 경험이 있어야합니다"또는 "N-Tier 앱을 개발할 수 있어야합니다"라는 문장이 포함 된 개발자 구인 게시가 상당히 많이있었습니다.

N-Tier 아키텍처 란 무엇입니까? 어떻게 경험을 쌓을 수 있습니까?


2
이 다른 게시물에서도 N-Tier 아키텍처가 무엇인지 묻고 있지만 그 대답은 완전히 다릅니다. stackoverflow.com/questions/7271165/... . 소프트웨어 용 N-Tier 아키텍처와 하드웨어 용 N-Tier 아키텍처가있는 것 같습니다.
Noremac

답변:


247

위키 백과 :

소프트웨어 엔지니어링에서 멀티 티어 아키텍처 (종종 n 티어 아키텍처라고 함)는 프리젠 테이션, 애플리케이션 처리 및 데이터 관리가 논리적으로 별개의 프로세스 인 클라이언트-서버 아키텍처입니다. 예를 들어 미들웨어를 사용하여 사용자와 데이터베이스 간의 데이터 요청을 처리하는 응용 프로그램은 다중 계층 아키텍처를 사용합니다. "멀티 티어 아키텍처"의 가장 널리 사용되는 것은 3 티어 아키텍처입니다.

"계층"으로 간주되는 것은 논란의 여지가 있지만 적어도 프로세스 경계를 ​​넘어서는 것이 필요합니다. 아니면 레이어라고합니다. 그러나 물리적으로 다른 시스템에있을 필요는 없습니다. 권장하지는 않지만 논리 계층과 데이터베이스를 같은 상자에 호스팅 할 수 있습니다 .

대체 텍스트

편집 : 한 가지 의미는 프레젠테이션 계층과 논리 계층 (때때로 비즈니스 논리 계층이라고 함)이 때때로 신뢰할 수 없거나 느리고 불안정한 네트워크를 통해 "전선을 가로 질러"경계를 넘어야한다는 것입니다. 이것은 데이터가 파일과 동일한 시스템에 있거나 데이터베이스를 직접 칠 수있는 웹 응용 프로그램과 같은 컴퓨터에있는 간단한 데스크톱 응용 프로그램과는 매우 다릅니다.

n 계층 프로그래밍의 경우 데이터를 "데이터 세트"라고하는 일종의 전송 가능한 형태로 패키지화하여 와이어로 전송해야합니다. .NET의 DataSet 클래스 또는 SOAP 와 같은 웹 서비스 프로토콜 은 와이어를 통해 객체를 비행하려는 시도가 거의 없습니다.


6
"3 계층"과 "N 계층"에 차이가 있습니까?
chakrit

7
"계층"(논리적, 물리적 등)을 계산하는 방법에 따라 다르지만 앱을 작성하기 위해 3 개 이상의 프로세스를 쉽게 수행 할 수 있습니다. UI (이클립스 RCP 같은) UI 플랫폼, 웹 서비스, BLL, DAL, 데이터베이스, 인증 서비스, 리포팅 서비스, 분석 서비스 ...
유진 요코타

6
@ chakrit : 내 시간 (나 늙었)에서 2 계층 (클라이언트 서버)이 자동으로 n 계층을 참조하는 것보다 많았습니다.
Eduardo Molteni

@EugeneYokota- 계층 은 아키텍처의 물리적 섹션 (예 : 클러스터에서 추가로 패티 닝되거나 안될 수 있음)을 나타내며 계층 은 애플리케이션 컴포넌트 의 논리적 그룹 을 참조합니다 .
Eliran Malka

나는 매우 유사 해 보이지만 계층이 프레젠테이션 계층-서비스 계층-통합 / 데이터 계층 인 것을 들었습니다. 위의 아키텍처와 동일한 단어 또는 다른 단어에 대해 다른 단어인지 아십니까? 내 지식이가는 한 그들은 똑같아 보이지만 확인하고 싶습니다.
KayleighArianna

20

핵심 비즈니스 로직 및 데이터 액세스와 프레젠테이션 계층을 분리하는 방법을 기반으로합니다 ( Wikipedia )

  • 3 계층 은 프리젠 테이션 계층 + 컴포넌트 계층 + 데이터 액세스 계층을 의미합니다.
  • N 계층은 일반적으로 추가 모듈성, 구성 성 또는 다른 시스템과의 상호 운용성을 위해 추가 계층을 추가 할 때입니다.

12
실제로 이러한 계층 중 하나가 원격 프로세서 (예 : 지불 프로세서)에 의해 호스팅되는 경우 해당 계층은 "불필요"하지 않을 수 있습니다.
Zak

1
흠. '계층'과 '서비스'에는 큰 차이가 있습니다. N-Tier는 일반적으로 주어진 계층에 대해 하위 계층 서비스를 액세스하기 위해 계층을 통과해야 함을 나타내는 데 사용됩니다. 그것들이 병렬이면 계층보다는 서비스라고 부릅니다.
Dak

일반적인 MCV (3 계층 아키텍처)를 구성 할 때 이중 데크 인터페이스로 MCV를 구현하기로 결정할 수 있으므로 실제로 한 줄의 코드 만 수정하지 않고도 특정 계층을 대체 할 수 있습니다. 예를 들어 둘 이상의 데이터베이스를 사용할 수있는 시나리오 (컨트롤과 데이터 계층 사이에 이중 인터페이스가있는 시나리오)와 같은 이점이 종종 있습니다. View-layer (프레젠테이션)에 배치하면 USER 인터페이스를 다른 시스템으로 교체 (대기 할 수 있음)하여 REAL 입력을 자동화 할 수 있습니다 (!!!)
David Svarrer

15

Javascript-ASP.Net-Middleware-Database 레이어와 같은 일반적인 웹 아키텍처와 같은 것을 나타내는 용어입니다. 이들 각각은 "계층"입니다.


4

N 계층 데이터 애플리케이션은 여러 계층으로 분리 된 데이터 애플리케이션입니다. "분산 응용 프로그램"및 "멀티 티어 응용 프로그램"이라고도하는 n- 티어 응용 프로그램은 처리를 클라이언트와 서버간에 분산 된 개별 계층으로 분리합니다. 데이터에 액세스하는 응용 프로그램을 개발할 때는 응용 프로그램을 구성하는 다양한 계층을 명확하게 구분해야합니다.

일반적인 n 계층 응용 프로그램에는 프레젠테이션 계층, 중간 계층 및 데이터 계층이 포함됩니다. n 계층 응용 프로그램에서 다양한 계층을 분리하는 가장 쉬운 방법은 응용 프로그램에 포함하려는 각 계층에 대한 개별 프로젝트를 만드는 것입니다. 예를 들어 프레젠테이션 계층은 Windows Forms 응용 프로그램 인 반면 데이터 액세스 논리는 중간 계층에있는 클래스 라이브러리 일 수 있습니다. 또한, 프리젠 테이션 계층은 서비스와 같은 서비스를 통해 중간 계층의 데이터 액세스 로직과 통신 할 수있다. 응용 프로그램 구성 요소를 별도의 계층으로 분리하면 응용 프로그램의 유지 관리 성과 확장 성이 향상됩니다. 전체 솔루션을 재 설계 할 필요없이 단일 계층에 적용 할 수있는 새로운 기술을보다 쉽게 ​​채택 할 수 있습니다. 게다가,

Microsoft 웹 사이트 에서 가져 왔습니다 .


4

질문을 이해하면 질문자가 실제로 "OK, 3 계층은 잘 이해하고있는 것 같습니다. 그러나 4 계층 또는 일반화, N 계층 아키텍처 란 의미는 ......... 널리 이해되고 동의 된 N 계층의 정의는 무엇입니까? "

실제로 상당히 깊은 질문이며 이유를 설명하기 위해 조금 더 깊이 들어가야합니다. 나와 함께 참아

고전적인 3 계층 아키텍처 : 데이터베이스, "비즈니스 로직"및 프리젠 테이션은 우려 분리 원칙을 존중하는 방법을 명확히하는 좋은 방법입니다. 즉, "비즈니스"가 고객에게 서비스를 제공하는 방식을 변경하려면 전체 시스템을 조사하여이를 수행하는 방법을 파악할 필요가 없으며 특히 비즈니스 문제가 흩어져서는 안되는 결정을해야합니다. 코드를 통해 willy-nilly.

이제이 모델은 수십 년 동안 잘 작동했으며 이는 전형적인 '클라이언트 서버'모델입니다. 웹 브라우저는 광범위하고 물리적으로 분산 된 사용자 집합을위한 사용자 인터페이스이며, 일반적으로 클래식 3 계층 아키텍처의 일부가 아닌 콘텐츠 배포 서비스를 추가해야하는 클라우드 오퍼링 자체적으로 관리해야합니다).

이 개념은 서비스, 마이크로 서비스, 데이터 및 계산 배포 방법 등에 관한 일반화입니다. 어떤 계층이 '계층'인지 여부는 계층이 계층 뒤에있는 (또는 아래에있는) 서비스에 인터페이스 및 배포 모델을 제공하는지 여부에 따라 크게 달라집니다. 따라서 콘텐츠 배포 네트워크는 계층이지만 인증 서비스는 그렇지 않습니다.

이제이 개념을 염두에두고 N 계층 아키텍처의 예에 대한 다른 설명을 읽으면 문제를 이해하기 시작할 것입니다. 다른 관점으로는 벤더 기반 접근 방식 (예 : NGINX), 컨텐츠 인식로드 밸런서, 데이터 격리 및 보안 서비스 (예 : IBM Datapower)가 있으며,이 모두 는 주어진 아키텍처, 배치 및 사용 사례 에 가치부가하거나 부여 하지 않을 수 있습니다 .


3

N-Tier가 별도의 물리적 시스템을 사용하여 비즈니스 로직, 클라이언트 액세스 및 데이터를 서로 분리한다는 것을 이해하고 있습니다. 이론 중 하나는 다른 하나와 독립적으로 업데이트 할 수 있다는 것입니다.


3

N 계층 데이터 애플리케이션은 여러 계층으로 분리 된 데이터 애플리케이션입니다. "분산 응용 프로그램"및 "멀티 티어 응용 프로그램"이라고도하는 n- 티어 응용 프로그램은 처리를 클라이언트와 서버간에 분산 된 개별 계층으로 분리합니다. 데이터에 액세스하는 응용 프로그램을 개발할 때는 응용 프로그램을 구성하는 다양한 계층을 명확하게 구분해야합니다.

http://msdn.microsoft.com/en-us/library/bb384398.aspx 등에서


3

일반적인 MCV (3 계층 아키텍처)를 구성 할 때 이중 데크 인터페이스로 MCV를 구현하기로 결정할 수 있으므로 실제로 한 줄의 코드 만 수정하지 않고도 특정 계층을 대체 할 수 있습니다.

예를 들어 둘 이상의 데이터베이스를 사용할 수있는 시나리오 (이 경우 컨트롤과 데이터 계층 사이에 이중 인터페이스가있는 시나리오) 에서이 기능의 이점을 종종 볼 수 있습니다.

View-layer (프레젠테이션)에 배치하면 USER 인터페이스를 다른 시스템으로 교체 (대기 할 수 있음)하여 REAL 입력 (!!!)을 자동화 할 수 있습니다. 사용자가 동일한 항목을 반복해서 다시 탭하고 다시 탭하고 다시 다시 탭하지 않아도됩니다.

일부는 1 계층 또는 2 계층 이중 인터페이스를 가진 4 계층 또는 5 계층 아키텍처 와 같은 3 계층 아키텍처 를 설명 하며 이중 인터페이스를 암시 적으로 암시합니다.

다른 경우로는 여러분이 반 또는 완전히 복제 된 데이터베이스 시스템의 경우 실제로 데이터베이스 중 하나를 "마스터"로 간주 할 수 있으므로 계층이있을 수 있다는 사실을 포함하지만 이에 국한되지는 않습니다. 마스터로 구성되고 슬레이브 데이터베이스로 구성됩니다.

모바일 예

따라서 멀티 티어 또는 N 티어 는 실제로 약간의 해석을하는 반면, 필자는 티어 스왑을 가능하게하기 위해 사이에 얽힌 얇은 인터페이스 디스크로 구성된 3 티어 + 추가 티어를 고수 할 것입니다. 제어 로직이 실제 사용자 태핑과 구별 할 수없는 방식으로 사용자 태핑시뮬레이트 함으로써 실제 모바일 소프트웨어에서 테스트를 수행 할 수 있습니다 . 이는 실제 사용자 테스트 시뮬레이션 에서 가장 중요 합니다. 사용자 OTA의 모든 입력을 기록한 다음 회귀 테스트를 수행 할 때 동일한 입력을 재사용 할 수 있습니다.


2

계층에 대해 이야기 할 때 일반적으로 실제 프로세스 (메모리 공간이 다름)에 대해 이야기합니다.

따라서 응용 프로그램의 계층이 다른 프로세스에 배포 된 경우 이러한 다른 프로세스는 다른 계층이됩니다.

예를 들어, 3 계층 응용 프로그램에서 비즈니스 계층은 메인 프레임 (별도의 프로세스)과보고 서비스 (별도의 프로세스)와 대화 한 다음 해당 응용 프로그램은 5 계층이됩니다.

따라서 일반 이름은 n- 계층입니다.


2

에서 https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

N- 계층 아키텍처는 애플리케이션 타이어논리 타이어물리 계층으로 주로 나누고 하위 부품으로 나눕니다. 여기에 이미지 설명을 입력하십시오

계층은 책임을 분리하고 종속성을 관리하는 방법입니다. 각 계층에는 특정 책임이 있습니다. 상위 계층은 하위 계층에서 서비스를 사용할 수 있지만 다른 방법으로는 사용할 수 없습니다.

계층은 물리적으로 분리되어 별도의 시스템에서 실행됩니다. 계층은 다른 계층을 직접 호출하거나 비동기 메시징 (메시지 큐)을 사용할 수 있습니다. 각 계층이 자체 계층으로 호스팅 될 수 있지만 반드시 그럴 필요는 없습니다. 여러 계층이 동일한 계층에서 호스팅 될 수 있습니다. 계층을 물리적으로 분리하면 확장 성과 복원력이 향상되지만 추가 네트워크 통신의 대기 시간이 추가됩니다.

기존의 3 계층 응용 프로그램에는 프레젠테이션 계층, 중간 계층 및 데이터베이스 계층이 있습니다. 중간 계층은 선택 사항입니다. 더 복잡한 응용 프로그램은 3 개 이상의 계층을 가질 수 있습니다. 위의 다이어그램은 서로 다른 기능 영역을 캡슐화하는 두 개의 중간 계층이있는 응용 프로그램을 보여줍니다.

N 계층 응용 프로그램에는 닫힌 계층 아키텍처 또는 열린 계층 아키텍처가있을 수 있습니다.

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

닫힌 레이어 아키텍처는 레이어 간의 종속성을 제한합니다. 그러나 한 계층이 단순히 요청을 다음 계층으로 전달하면 불필요한 네트워크 트래픽이 발생할 수 있습니다.


1

N 계층 응용 프로그램은 3 개 이상의 구성 요소가 포함 된 응용 프로그램입니다. 그 구성 요소는 무엇입니까?

  • 은닉처
  • 비동기 동작을위한 메시지 큐
  • 로드 밸런서
  • 방대한 양의 데이터를 검색하기위한 검색 서버
  • 방대한 양의 데이터 처리와 관련된 구성 요소
  • 일반적으로 웹 서비스 등으로 알려진 이기종 기술을 실행하는 구성 요소

Instagram, Facebook, Uber, Airbnb와 같은 대규모 산업 서비스, Pokemon Go와 같은 온라인 대규모 멀티 플레이어 게임과 같은 모든 소셜 응용 프로그램, 멋진 기능을 갖춘 응용 프로그램은 n 계층 응용 프로그램입니다.


0

마틴 파울러 (Martin Fowler)

레이어링은 소프트웨어 설계자가 복잡한 소프트웨어 시스템을 분해하기 위해 사용하는 가장 일반적인 기술 중 하나입니다. 머신 아키텍처에서 계층은 운영 체제 호출이 장치 드라이버와 CPU 명령 세트 및 칩 내부의 논리 게이트로 프로그래밍 언어에서 내려 오는 프로그래밍 언어에서 유래합니다. 네트워킹은 TCP 위에 계층화되어 있으며 TCP 위에는 IP 위에 있고 이더넷 위에 있습니다.

계층 측면에서 시스템을 생각할 때 각 계층이 하위 계층에있는 일부 형태의 계층 케이크로 배열 된 소프트웨어의 주요 하위 시스템을 상상할 수 있습니다. 이 방식에서 상위 계층은 하위 계층에 의해 정의 된 다양한 서비스를 사용하지만 하위 계층은 상위 계층을 인식하지 못합니다. 또한 각 레이어는 일반적으로 위의 레이어에서 하위 레이어를 숨기므로 레이어 4는 레이어 2의 서비스를 사용하는 레이어 3의 서비스를 사용하지만 레이어 4는 레이어 2를 인식하지 못합니다 (모든 레이어 아키텍처가 이와 같이 불투명 한 것은 아닙니다) 하지만 대부분은 대부분 불투명합니다.)

시스템을 여러 계층으로 분류하면 여러 가지 중요한 이점이 있습니다.

• 다른 레이어에 대해 많이 몰라도 단일 레이어를 일관된 전체 레이어로 이해할 수 있습니다. 이더넷의 작동 방식에 대한 세부 사항을 모르고 TCP 위에 FTP 서비스를 빌드하는 방법을 이해할 수 있습니다.

• 동일한 기본 서비스의 대체 구현으로 계층을 대체 할 수 있습니다. FTP 서비스는 이더넷, PPP 또는 케이블 회사가 사용하는 모든 것을 통해 변경하지 않고 실행할 수 있습니다.

• 레이어 간의 종속성을 최소화합니다. 케이블 회사가 물리적 전송 시스템을 변경하여 IP를 작동시키는 경우 FTP 서비스를 변경할 필요가 없습니다.

• 레이어는 표준화하기에 좋은 장소를 만듭니다. TCP와 IP는 계층 작동 방식을 정의하기 때문에 표준입니다.

• 계층을 만든 후에는 많은 고급 서비스에 사용할 수 있습니다. 따라서 TCP / IP는 FTP, 텔넷, SSH 및 HTTP에서 사용됩니다. 그렇지 않으면,이 모든 상위 레벨 프로토콜은 자체 하위 레벨 프로토콜을 작성해야합니다. Kyle Geoffrey Passarelli 도서관에서

레이어링은 중요한 기술이지만 단점이 있습니다.

• 레이어는 전부는 아니지만 일부를 잘 캡슐화합니다. 결과적으로 때때로 계단식 변경이 발생합니다. 계층화 된 엔터프라이즈 응용 프로그램 에서이 전형적인 예는 UI에 표시 해야하는 필드를 추가하는 것입니다. 데이터베이스에 있어야하므로 사이에있는 모든 계층에 추가해야합니다.

• 여분의 레이어는 성능을 저하시킬 수 있습니다. 모든 레이어에서 사물은 일반적으로 한 표현에서 다른 표현으로 변환되어야합니다. 그러나 기본 함수의 캡슐화는 종종 보상 이상의 효율성 향상을 제공합니다. 트랜잭션을 제어하는 ​​계층을 최적화하면 모든 것이 더 빨라집니다. 그러나 계층 구조에서 가장 어려운 부분은 어떤 계층을 가지고 있고 각 계층의 책임은 무엇인지 결정하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.