PHP 8.2: 새로운 기능은 무엇인가요?
PHP의 새 버전이 곧 출시됩니다. 새롭게 구현된 기능에는 어떤 것들이 있나요? 이 글을 통해 알아보세요!
소프트웨어 유지보수성, 테스트 가능성 및 적응성을 향상시키는 Hexagonal 아키텍처의 강력한 기능을 살펴보세요.
이 포괄적인 가이드에서는 다음과 같은 뉘앙스를 살펴봅니다. 육각형 아키텍처의 정의, 구성 요소 및 역사를 살펴봅니다. 다음 두 가지를 비교해 보겠습니다. 육각형 아키텍처 및 기타 인기 있는 아키텍처 패턴을 통해 고유한 강점을 강조합니다. 또한 현대의 세계에서 점점 더 중요해지고 있는 DDD(도메인 중심 디자인)와 마이크로서비스에서 중요한 역할을 하는 아키텍처에 대해서도 살펴봅니다. 소프트웨어 개발.
역동적인 환경 속에서 소프트웨어 아키텍처, 육각형 아키텍처포트 및 어댑터 패턴는 강력한 경쟁자로 부상하여 점차적으로 전통적인 계층형 아키텍처.
쉬운 테스트와 높은 유지보수성을 보장할 수 있는 아키텍처 설계의 필요성에 따라 추진되었습니다, 육각형 아키텍처 가 탄생했습니다. 미션: 강력한 소프트웨어 애플리케이션 외부 세계의 복잡함과 변덕스러움으로부터 자유로워집니다.
이 글에서는 다음과 같은 연대기 여행을 시작하겠습니다. 육각형 아키텍처 - 단순함과 강력함의 접점에 있는 아키텍처입니다. 그 역사, 구조, 원리를 알아보고 다른 아키텍처와 비교해 보겠습니다. 아키텍처 패턴. 소프트웨어 애플리케이션의 품질을 높이고 소프트웨어 산업을 괴롭히는 기술 부채의 증가를 줄일 수 있는 잠재력을 살펴봅니다.
그 핵심, 육각형 아키텍처또는 포트 및 어댑터 아키텍처는 관심사 분리를 기반으로 하는 디자인 패턴입니다. 애플리케이션을 내부와 외부의 두 가지 주요 섹션으로 분할합니다.
애플리케이션 코어라고도 하는 내부에는 다음이 들어 있습니다. 비즈니스 로직 및 도메인 객체 - 소프트웨어의 가치의 핵심입니다. 이 내부 성소는 외부의 영향으로부터 분리된 상태로 유지되므로 비즈니스 로직 및 도메인 모델.
반면에 외부는 외부 시스템의 영역입니다. 사용자 인터페이스 애플리케이션 코어와 상호 작용하는 데이터베이스 액세스까지. 이러한 상호 작용은 포트와 어댑터 메커니즘을 통해 관리되므로, 애플리케이션 코어와 애플리케이션 핵심 그리고 그 외부 행위자.
육각형 아키텍처 은 기존의 한계에 대한 대응책으로 이 개념을 처음 제시한 선구자 앨리스터 콕번의 아이디어입니다. 계층화된 아키텍처. 기술에 구애받지 않고 도메인 계층 코어를 격리하는 비즈니스 로직 와 같은 외부 영향으로부터 사용자 인터페이스 코드 및 데이터베이스 액세스.
전통적인 계층화된 아키텍처를 사용하면 한 레이어의 변경 사항이 다른 레이어로 파급되어 의도하지 않은 결과를 초래할 수 있습니다. 또한 레이어 간의 복잡한 종속성으로 인해 테스트가 복잡해졌습니다.
육각형 아키텍처 는 시스템의 한 부분의 변화가 다른 부분을 불안정하게 만들지 않는 모델을 제시하며 해결책으로 떠올랐습니다. 본질적으로, 이 모델은 비즈니스 로직 웹 인터페이스를 통해 액세스하는지 여부에 관계없이 REST API또는 명령줄.
육각형 아키텍처도식적 표현의 육각형 환영에서 이름을 따온 는 세 가지 핵심 구성 요소로 구성됩니다. 도메인 모델포트(기본 및 보조), 어댑터(기본 및 보조)를 사용할 수 있습니다.
그리고 도메인 모델 는 소프트웨어 애플리케이션의 핵심이며, 소프트웨어 애플리케이션의 핵심인 비즈니스 규칙 및 핵심 로직으로 구성됩니다. 이 모델에 있는 도메인 객체는 특정 비즈니스 가치와 규칙을 보유합니다.
다음으로, 포트, 도관, 그리고 도메인 모델 그리고 외부 세계. 기본 포트 애플리케이션의 비즈니스 로직애플리케이션 코어의 게이트웨이 역할을 합니다. 애플리케이션이 지원하는 사용 사례를 나타냅니다.
보조 포트는 외부를 향하고 있습니다. 지속성 계층이나 외부 서비스처럼 애플리케이션이 외부 세계에서 필요로 하는 인터페이스를 나타냅니다.
마지막으로, 어댑터가 있는데, 이 어댑터는 번역기 역할을 합니다. 도메인 모델 그리고 외부 세계. 다음에서 사용하는 형식에서 데이터를 변환합니다. 외부 시스템 에서 사용하는 형식으로 비즈니스 로직를 클릭하고 그 반대의 경우도 마찬가지입니다.
포트 및 어댑터 사이의 다리를 형성합니다. 애플리케이션 핵심 그리고 외부 액터. 기본 포트는 애플리케이션이 노출하는 비즈니스 사용 사례를 나타내며, 외부 액터가 애플리케이션과 상호 작용할 수 있도록 합니다. 이를 애플리케이션의 서비스 인터페이스라고 생각하면 됩니다. 비즈니스 계층.
반면에 보조 포트는 애플리케이션이 외부에서 필요로 하는 인터페이스입니다. 여기에는 데이터베이스 액세스, 웹 서비스 또는 시간 서비스와 같은 서비스가 포함될 수 있습니다. 이러한 포트는 기술이나 공급업체별 특성에 관계없이 애플리케이션에 필요한 것을 노출합니다.
어댑터는 이러한 포트의 물리적 표현입니다. 어댑터는 데이터를 사용하는 형식에서 비즈니스 로직 를 외부 액터가 사용하는 형식으로 변환하거나 그 반대로 변환할 수 있습니다. 이러한 어댑터는 REST API, SQL 데이터베이스 또는 메시징 시스템을 위한 기술별 어댑터 변환일 수도 있지만 배치 스크립트나 사용자 인터페이스 코드가 필요합니다. 어댑터는 애플리케이션의 경계를 형성하여 애플리케이션이 기술에 구애받지 않고 사용할 수 있도록 합니다.
기본 포트는 애플리케이션이 수행할 수 있는 작업, 즉 핵심 도메인이 수락할 수 있는 명령을 나타냅니다. 이러한 포트는 종종 다음과 같은 언어로 인터페이스로 구현됩니다. Java를 사용하여 애플리케이션이 제공하는 작업을 정의합니다.기본 어댑터는 특정 외부 행위자를 위한 이러한 인터페이스의 구현입니다.
반면에 보조 포트는 코어 도메인이 외부 세계와 상호 작용하는 데 사용하는 인터페이스입니다. 여기에는 도메인 개체를 유지하거나 알림을 전송하는 인터페이스가 포함될 수 있습니다. 보조 어댑터 는 이러한 인터페이스의 실제 구현입니다. SQL 데이터베이스 어댑터 또는 이메일 알림 어댑터 등을 예로 들 수 있습니다.
함께 기본 및 보조 포트 및 어댑터 애플리케이션 주위에 유연한 모듈식 경계를 형성하여 애플리케이션과 도메인 로직 기술적인 문제로부터 보호합니다. 이를 통해 책임이 명확하게 분리되고 시스템의 여러 부분이 독립적으로 발전할 수 있습니다.
종속성 규칙은 다음과 같은 기본 원칙입니다. 육각형 아키텍처 상태 종속성은 애플리케이션 코어를 향해야 합니다. 애플리케이션의 핵심은 특정 데이터베이스, UI 또는 기타 외부 기관에 의존하지 않습니다.
이 원칙은 다음과 밀접하게 연관되어 있습니다. 종속성 반전 원리 (DIP)는 객체 지향 설계의 SOLID 원칙 중 하나입니다. DIP는 상위 레벨 모듈(비즈니스 로직 또는 도메인 계층 는 데이터베이스 어댑터와 같은 저수준 모듈에 의존해서는 안 됩니다. 대신 둘 다 추상화에 의존해야 합니다. 이러한 종속성의 반전을 통해 상위 수준 모듈을 하위 수준 모듈의 변경 사항으로부터 격리하여 비즈니스 로직 가 전체 아키텍처를 주도합니다.
매핑은 다음 분야에서 필수적인 프로세스입니다. 육각형 아키텍처에서 사용하는 형식의 데이터를 기술별 어댑터가 변환합니다. 외부 시스템 를 도메인 계층 가 이해할 수 있습니다. 이 매핑은 애플리케이션의 내부 데이터 표현과 외부 데이터 표현 간의 변환을 용이하게 합니다.
예를 들어, 다음과 같은 외부 인터페이스에서 HTTP 요청이 애플리케이션으로 들어오는 경우 REST API를 사용하는 경우 요청 데이터를 JSON에서 애플리케이션이 사용할 수 있는 도메인 객체로 변환해야 합니다. 이 번역은 어댑터의 책임입니다.
반대로 애플리케이션이 응답을 보내야 하는 경우 어댑터는 도메인 객체를 다시 JSON으로 변환합니다. 이렇게 하면 핵심 애플리케이션이 외부 세계의 세부 사항을 알지 못해도 들어오는 데이터를 올바르게 해석하고 나가는 데이터의 형식을 지정할 수 있습니다.
육각형 아키텍처 는 소프트웨어 애플리케이션을 외부 요소와 분리하고 시스템의 여러 부분을 명확하게 구분할 수 있다는 점에서 많은 이점을 제공합니다.
근본적인 이점 중 하나는 우려 사항을 분리하여 코드 유지 관리와 가독성을 향상시킨다는 점입니다. 코어의 분리 비즈니스 로직 에서 외부 세계 를 사용하면 기술별 어댑터, 데이터베이스 및 사용자 인터페이스 코어를 변경하지 않고 비즈니스 로직.
육각형 아키텍처 는 테스트 가능성 영역에서도 탁월합니다. 외부 종속성을 격리하는 아키텍처 덕분에 개발자는 자동화된 회귀 테스트를 실행하고 다음을 작성할 수 있습니다. 자동화된 테스트 제품군 더 쉽게. 이러한 격리는 한 구성 요소의 변경이 다른 구성 요소에 악영향을 미치지 않으므로 애플리케이션의 복원력을 향상시킵니다.
또한 이 아키텍처는 동일한 포트에 대해 여러 개의 어댑터를 지원하므로 동일한 보조 포트에 대해 여러 개의 어댑터를 사용할 수 있습니다. 이러한 유연성 덕분에 애플리케이션이 다양한 유형의 데이터베이스와 상호 작용하거나 다양한 사용자 인터페이스 플랫폼.
소프트웨어 개발 영역에서 유지보수성은 종종 요구되는 특성이지만, 기존 아키텍처 스타일에서는 제공하기 어려울 수 있는 특성이기도 합니다. 육각형 아키텍처 는 유지보수에 중점을 둔 점이 돋보입니다.
우려 사항을 분리하는 데 집중합니다, 육각형 아키텍처 는 애플리케이션의 한 부분에서 변경한 내용이 다른 부분으로 파급되지 않도록 합니다. 이 특성은 코드를 이해하고 디버깅하는 데 소요되는 시간과 노력을 줄이는 데 도움이 됩니다.
또한 이 아키텍처는 코드 재사용을 장려합니다. 비즈니스 로직 는 애플리케이션을 구동하는 데 사용되는 특정 기술로부터 분리되어 있습니다. 이러한 분리를 통해 개발자는 애플리케이션을 교체, 업그레이드 또는 리팩터링할 수 있습니다. 외부 인터페이스 핵심 로직에 영향을 주지 않고도 버그가 발생할 위험을 줄일 수 있습니다.
소프트웨어 개발에서 중요한 문제인 기술 부채는 코드의 지름길과 해킹을 리팩토링하고 수정하는 데 드는 향후 비용을 의미합니다. 육각형 아키텍처 는 이러한 부채를 완화하기 위한 사전 예방적 접근 방식을 제공합니다.
코어와 코어 사이를 명확하게 분리하여 비즈니스 로직 그리고 외부 구성 요소, 육각형 아키텍처 는 유지 관리의 골칫거리와 복합적인 기술 부채를 유발할 수 있는 코드가 서로 얽혀 있을 가능성을 줄여줍니다. 아키텍처의 고유한 유지 관리 및 테스트 가능성 또한 버그의 유입을 방지하고 리팩토링 작업을 용이하게 하므로 기술 부채를 줄이는 데 한 몫을 합니다.
또한 육각형 아키텍처 인프라를 변경하지 않고도 인프라의 변경을 지원하기 위해 비즈니스 로직 는 기술 부채에 대한 보호 버퍼를 제공합니다. 이 기능을 통해 팀은 애플리케이션의 많은 부분을 다시 작성하지 않고도 요구 사항이나 기술의 변화에 적응할 수 있습니다.
실제로, 육각형 아키텍처 는 소프트웨어 개발에 구조화된 접근 방식을 제공합니다. 핵심 애플리케이션을 둘러싼 육각형 경계는 애플리케이션이 끝나는 지점과 애플리케이션이 시작되는 지점을 명확하게 구분합니다. 외부 세계 시작됩니다.
어댑터는 게이트키퍼 역할을 수행하여 외부 행위자의 요청을 핵심 애플리케이션이 이해할 수 있는 형태로 변환하고 그 반대의 경우도 마찬가지입니다. 이렇게 함으로써 핵심 애플리케이션이 데이터베이스, 웹 사이트 등 외부 세계의 특성에 구애받지 않도록 합니다. 외부 API또는 사용자 인터페이스.
DDD(도메인 중심 설계)는 핵심 비즈니스 개념 또는 핵심 비즈니스 개념에 우선 순위를 두는 소프트웨어 개발 방법론입니다. 도메인 로직를 디자인의 주요 원동력으로 삼았습니다. 이 방법론은 다음과 매우 잘 부합합니다. 육각형 아키텍처의 중요성을 강조하고 있습니다. 비즈니스 로직 및 도메인 모델 아키텍처에서
의 맥락에서 육각형 아키텍처와 같은 외부 요소로부터 애플리케이션의 상위 모듈(도메인 레이어)이 독립적임을 보장합니다. 사용자 인터페이스 또는 데이터베이스에 의존하지 않습니다. 이러한 독립성은 포트와 어댑터를 통해 보장되며, 이는 도메인 계층을 외부 시스템를 사용하여 도메인 로직 독립적으로 진화할 수 있습니다.
게다가, 육각형 아키텍처 는 바운디드 컨텍스트 개념을 포함한 DDD의 전략적 설계 원칙을 보완합니다. DDD의 각 바운드 컨텍스트는 다음과 같은 육각형으로 상상할 수 있습니다. 육각형 아키텍처를 핵심으로 하는 도메인 모델과 포트 및 어댑터 경계 역할을 합니다.
또 다른 현대적 아키텍처 스타일인 마이크로서비스는 다음과 같은 이점을 누릴 수 있습니다. 육각형 아키텍처. 각 서비스가 특정 비즈니스 기능을 캡슐화하는 마이크로서비스의 분산된 특성은 다음과 같은 캡슐화와 깔끔하게 일치합니다. 비즈니스 로직 육각형의 코어 안에 있습니다.
각 마이크로서비스가 다른 마이크로서비스와 느슨하게 결합되어야 하는 것처럼, 각 육각형은 육각형 아키텍처 는 다른 마이크로서비스와 격리되어 정의된 포트와 어댑터를 통해서만 통신합니다. 이를 통해 각 마이크로서비스는 고유한 육각형 아키텍처를 통해 자율적으로 느슨하게 결합된 서비스 모음을 만들 수 있습니다.
다음에서 제공하는 격리 육각형 아키텍처 는 마이크로서비스의 복잡성과 분산된 특성을 다룰 때 특히 유용할 수 있습니다. 마이크로서비스에서 핵심 비즈니스 로직 외부 세계로부터, 육각형 아키텍처 는 비즈니스 로직 는 다른 서비스 또는 외부 시스템.
소프트웨어가 설계되는 방식은 시간이 지남에 따라 진화하는 방식에 큰 영향을 미칠 수 있습니다. 비교하기 육각형 아키텍처 를 다른 아키텍처와 비교하면 그 장점과 잠재적인 장단점을 더 깊이 이해할 수 있습니다.
계층화된 아키텍처 는 전통적인 아키텍처 패턴 애플리케이션을 논리적 계층(주로 프레젠테이션, 비즈니스 및 데이터 액세스 계층)으로 구성합니다. 이 패턴의 가장 큰 단점은 레이어 간의 강한 종속성을 조장하여 한 레이어의 변경 사항이 전체 애플리케이션에 파급될 수 있는 상황을 초래한다는 점입니다.
반대로 육각형 아키텍처 는 이러한 종속성을 최소화합니다. 레이어 대신 애플리케이션 핵심 교체 가능한 어댑터로 둘러싸여 있습니다. 예를 들어 데이터베이스 서버의 변경 사항은 해당 어댑터에만 영향을 미치고 애플리케이션 핵심 및 기타 어댑터는 그대로 유지됩니다.
깨끗한 아키텍처, 또 다른 아키텍처 패턴와 많은 유사점을 공유합니다. 육각형 아키텍처. 둘 다 우려 사항의 분리를 강조하고 핵심을 분리하는 것을 목표로합니다. 비즈니스 규칙 외부 세부 정보로부터 종속성 반전 원리.
하지만, 육각형 아키텍처 는 애플리케이션이 애플리케이션과 외부 포트와 어댑터를 사용하는 반면 깨끗한 아키텍처 는 아키텍처의 내부 레이어에 대해 더 자세한 구조를 제공합니다. 다시 말해 깨끗한 아키텍처 의 상위 집합으로 볼 수 있습니다. 육각형 아키텍처를 참조하여 애플리케이션의 내부 구조를 구성하는 방법에 대한 추가 지침을 확인하세요.
양파 아키텍처 를 격리하는 것을 목표로 하는 또 다른 아키텍처 스타일입니다. 핵심 비즈니스 로직 에서 외부 인터페이스 및 인프라. 중앙에 도메인 모델이 있는 여러 개의 동심원 레이어가 있으며 각 레이어는 그 안의 레이어에만 의존할 수 있습니다.
공통의 목표를 공유하지만, 헥사곤과 양파 아키텍처 약간 다른 방식으로 달성할 수 있습니다. 양파 아키텍처 는 종속성의 방향에 중점을 두어 모든 종속성이 내부로 향하도록 합니다. 육각형 아키텍처와의 상호 작용에 더 중점을 두는 동시에 내부 종속성을 지지합니다. 외부 세계 포트와 어댑터를 통해 연결할 수 있습니다.
의 주요 강점 육각형 아키텍처 는 테스트 가능성에 중점을 두고 있습니다. 핵심 애플리케이션을 외부 세계 포트와 어댑터를 통해 헥사곤 아키텍처는 다음을 실행할 수 있습니다. 자동화된 테스트 소프트웨어의 안정성과 정확성에 대한 신뢰를 제공할 수 있습니다.
에서 육각형 아키텍처에서 기본 포트핵심을 캡슐화하는 비즈니스 규칙를 사용하면 외부 세계와 독립적으로 테스트할 수 있습니다. 예를 들어, 테스트 중에 실제 데이터베이스와 통신하는 대신 데이터베이스 어댑터 를 실제 데이터베이스의 동작을 시뮬레이션하는 테스트 더블로 교체할 수 있습니다. 이를 통해 개발자는 테스트에 집중할 수 있습니다. 비즈니스 규칙데이터베이스 상호 작용이 아닌
게다가, 자동화된 회귀 테스트 를 쉽게 구성하여 변경 시 시스템이 예상대로 작동하는지 검증할 수 있습니다. 이러한 수준의 테스트 가능성은 개발 프로세스 초기에 문제를 발견하고 수정하는 데 도움이 되므로 소프트웨어 유지 관리 및 업데이트에 있어 중요한 이점이 됩니다.
또한 육각형 아키텍처 는 통합 테스트도 지원합니다. 통합 테스트는 외부 구성 요소 (예: 데이터베이스 서버 또는 외부 API)를 사용하여 개발자는 테스트 더블을 통해 애플리케이션 핵심 는 실제 외부 시스템을 사용하지 않고도 이러한 구성 요소와 통합됩니다. 이를 통해 테스트의 속도와 안정성을 크게 향상시킬 수 있습니다.
육각형 아키텍처 는 방대한 소프트웨어 개발 전략에서 매력적인 솔루션으로 떠오르고 있습니다. 이 솔루션은 애플리케이션 핵심 를 외부 환경으로부터 분리하여 높은 수준의 유지보수성, 테스트 가능성 및 유연성을 보장합니다. 이러한 분리는 개발자가 핵심에 집중할 수 있도록 도와줍니다. 비즈니스 로직의 변경에 대한 소프트웨어의 복원력을 강화하면서 동시에 외부 시스템.
헥사곤 아키텍처에는 단점도 있지만, 다양한 이점이 있어 모든 개발자의 도구 상자에 매우 유용한 자산이 됩니다. 다음과 같은 영역에서 소프트웨어 아키텍처를 통해 육각형 모델이 계속해서 우위를 점하고 있습니다.
이 기사에는 다음과 같은 내용이 포함되어 있습니다. 코드 예제에 대한 철저한 이해를 제공하는 것을 목표로 합니다. 육각형 아키텍처 그리고 그 잠재적 이점에 대해 알아보세요. 효과적인 아키텍처의 비결은 패턴을 맹목적으로 고수하는 데 있는 것이 아니라 기본 원칙을 이해하고 특정 요구 사항을 충족하도록 신중하게 구현하는 데 있다는 점을 명심하세요.
헥사곤 아키텍처 영역에서 인터페이스는 애플리케이션 계층 및 데이터 계층 가 가장 중요합니다. 귀하가 소프트웨어 아키텍트 이 방법론의 도입을 고려하고 있거나 그 복잡성을 이해하고자 노력하는 개발자에게 이 아키텍처의 영향력이 계속 커지고 있는 것은 분명합니다. 이 아키텍처를 효과적으로 활용할 수 있는 다양한 방법을 보여줍니다. 예를 들어 뱅킹 애플리케이션에서 리포지토리 인터페이스 는 보조 어댑터로 작동하여 애플리케이션의 핵심 와 함께 외부 코드. 이러한 분리를 통해 유연하게 구체적인 구현 의 파일 시스템 또는 특정 기술에 영향을 주지 않고 애플리케이션 서비스에 영향을 미치지 않습니다.
그리고 개발 팀 는 이제 왼쪽 에 대한 걱정 없이 외부 요인를 통해 원활한 진행을 보장합니다. 이것으로 이번 탐험을 마무리합니다. 육각형 아키텍처는 소프트웨어 개발 환경 전반에 걸쳐 그 영향력을 계속 확장하고 있는 아키텍처 스타일입니다.