카테고리 없음

[아키텍처] 헥사고날 패턴: 모듈식 설계 가이드

까망수염 2023. 2. 12. 23:38
728x90

소프트웨어 개발에서 아키텍처는 유지 관리 및 확장 가능한 시스템을 만드는 데 중요합니다.
최근 몇 년 동안 인기를 얻은 아키텍처 패턴 중 하나는 포트 및 어댑터 아키텍처라고도 하는 육각형 아키텍처입니다.
이 아키텍처 패턴은 응용 프로그램의 내부 부분을 외부 상호 작용과 분리하여 보다 유연하고 확장 가능한 디자인을 만드는 것을 목표로 합니다.


육각형 아키텍처란 무엇입니까?

Hexagonal Architecture는 소프트웨어 시스템의 핵심을 외부 상호 작용과 분리하는 디자인 패턴입니다.
그것은 육각형 모양으로 표현되며 시스템의 핵심은 육각형으로 표시되고 시스템을 외부 세계에 연결하는 다양한 어댑터는 외부로 표시됩니다.

육각형 아키텍처의 이점

Hexagonal Architecture 사용의 주요 이점 중 하나는 테스트 용이성과 유지 관리 용이성을 촉진하는 것입니다.
시스템의 내부 작업을 외부 상호 작용과 분리하면 시스템을 격리된 상태에서 테스트하기가 훨씬 쉬워져 문제를 더 쉽게 식별하고 수정할 수 있습니다.
Hexagonal Architecture의 또 다른 장점은 시스템의 내부 작동에 영향을 주지 않고 외부 구성 요소를 변경하거나 교체할 수 있다는 것입니다.
이러한 유연성 덕분에 코드베이스를 크게 변경하지 않고도 변화하는 요구 사항에 맞게 시스템을 조정할 수 있습니다.

육각 구조의 구현

Hexagonal Architecture는 높은 수준의 구성 요소가 구체적인 구현이 아닌 추상화에 의존해야 한다는 종속성 역전 원칙을 사용하여 구현되는 경우가 많습니다.
이를 통해 시스템의 유연성이 향상되고 필요에 따라 구성 요소를 변경하거나 교체할 수 있습니다.
아래는 코틀린의 한 예시 입니다.

interface UseCase {
    fun execute()
}

class AuthenticateUseCase(private val repository: AuthenticationRepository, private val presenter: AuthenticationPresenter): UseCase {
    override fun execute() {
        val authenticationResult = repository.authenticate()
        presenter.present(authenticationResult)
    }
}

interface AuthenticationRepository {
    fun authenticate(): AuthenticationResult
}

class DatabaseAuthenticationRepository: AuthenticationRepository {
    override fun authenticate(): AuthenticationResult {
        // logic for authentication against database
        return AuthenticationResult(true, "Successful authentication")
    }
}

interface AuthenticationPresenter {
    fun present(authenticationResult: AuthenticationResult)
}

class ConsoleAuthenticationPresenter: AuthenticationPresenter {
    override fun present(authenticationResult: AuthenticationResult) {
        if (authenticationResult.success) {
            println("Authentication successful: ${authenticationResult.message}")
        } else {
            println("Authentication failed: ${authenticationResult.message}")
        }
    }
}

data class AuthenticationResult(val success: Boolean, val message: String)

이 예에서, AuthenticateUseCase는 육각형 아키텍처의 육각형으로 대표되는 시스템의 핵심이다. 
AuthenticationRepository와 AuthenticationPresenter는 시스템을 외부 세계에 연결하는 어댑터입니다. 
UseCase 인터페이스는 AuthenticateUseCase가 의존하는 추상화를 나타내는 반면, DatabaseAuthenticationRepository와 ConsoleAuthenticationPresenter는 각각 AuthenticationRepository와 AuthenticationPresenter 인터페이스의 구체적인 구현입니다.

육각형 아키텍처 패턴을 따르면, 시스템의 내부 작동(AuthenticateUseCase)은 외부 상호 작용(AuthentiticRepository 및 AuthenticationPresenter)과 분리되어 더 유연하고 확장 가능합니다.

결론

결론적으로 Hexagonal Architecture는 유연하고 확장 가능한 소프트웨어 시스템을 만드는 데 유용한 디자인 패턴입니다.
응용 프로그램의 내부 부분을 외부 상호 작용과 분리함으로써 테스트 가능성, 유지 관리 용이성 및 시스템의 핵심에 영향을 주지 않고 구성 요소를 변경하거나 교체할 수 있는 기능을 촉진합니다.
소프트웨어 시스템의 디자인을 개선하려는 경우 Hexagonal Architecture 구현을 고려하십시오.


- 오늘의 한 줄 -
의존성을 줄이면 좀더 유연하고 관리가 용이하다


공감구독은 저에게 크나큰 힘이 됩니다♡

728x90