클린아키텍쳐14 27. '크고 작은 모든' 서비스들 서비스 지향 아키텍처와 마이크로서비스 아키텍처는 최근에 큰 인기를 끌었다. 그 이유는 서비스를 사용하면 상호 결합이 철저하게 분리되는 것처럼 보인다. 서비스를 사용하면 개발과 배포 독립성을 지원하는 것처럼 보인다. 하지만 두 전재는 일부만 맞는 말이다. 서비스 아키텍쳐? 서비스를 사용한다는 것은 본질적으로 아키텍쳐에 해당하지 않는다. 시스템에서의 아키텍처란 의존성 규칙을 준수하고 고수준의 정책을 저수준의 세부사항으로부터 분리하는 경계에 의해 정의된다. 따라서 애플리케이션의 행위를 분리할 뿐인 서비스라면 아키텍쳐 관점에서 중요하진 않다. 서비스는 프로세스나 플랫폼 경계를 가로지르CCC...?는 함수 호출에 지나지 않는다. 서비스의 이점? 이거 진짜 이점 있는 겁니까? 결합 분리의 오류 서비스는 서로 다른 .. 2021. 3. 29. 26. 메인 컴포넌트 모든 시스템에는 나머지 컴포넌트를 관리하는 메인 컴포넌트가 존재한다. 궁극적인 세부사항 메인 컴포넌트는 궁극적인 세부사항으로 가장 낮은 수준의 정책이다. 모든 Factory와 Strategy, 시스템 전반을 담당하는 기반 설비를 생성한 후, 더 높은 수준을 담당하는 부분으로 제어권을 넘기는 역할을 한다. 의존성 주입은 메인컴포넌트에서 한다. DI후 DI프레임워크를 사용하지 않고도 일반적인 방식으로 의존성을 분배할 수 있어야 한다. 따라서 가장 지저분한 코드가 될 것... 결론 메인을 애플리케이션의 플러그인이라고 생각하자. 조건과 설정을 구성하고 외부자원을 모두 수집한 후 제어권을 애플리케이션의 고수준 정책으로 넘기는 플러그인이다. 2021. 3. 29. 25. 계층과 경계 게임이 하나 있고 다양한 언어로 발매되어야한다. 저장소는 메모리, 클라우드, ram등 다양한 저장소를 사용할 수 있다. 어떤 경우라도 게임 규칠이 이러한 세부사항을 알지 말아야 한다. 클린 아키텍쳐 UI에서 언어가 유일한 변경의 축은 아니다. 이 밖에도 텍스트(shell, message, chatting...)를 주고받는 메커니즘을 다양하게 만들고 싶을 수도 있다. 이렇게 다양한 가능성이 존재한다. 점선으로 된 테두리는 api를 정의하는 추상 컴포넌트들이며 해당 api는 추상 컴포넌트 위나 아래의 컴포넌트가 구현한다. 위의 다이어그램에서 변형들을 제거하고 순전히 api컴포넌트만 집중하면 game rules의 api는 language, data storage, text delivery만 남게 된다. 모든 .. 2021. 3. 29. 12. 컴포넌트 컴포넌트는 배포할 수 있는 가장 작은 단위다. 여러 컴포넌트들을 서로 링크하여 실행 가능한 단일 파일로 생성할 수 있다. 컴포넌트의 간략한 역사아아주 옛날에는 코드 작성 맨 윗줄에 메모리 주소를 작성하여 코드가 올라갈 곳을 지정해주곤 했었다. 이때는 라이브러리를 소스코드와 같은 레벨로 븥여놨었다. 하지만 메모리도 비싸고 자원이 한정적이어서 효율적인 방법은 아니었다. 그래서 소스코드와 라이브러리를 분리했다. 라이브러리를 별도로 컴파일하도 맨 윗줄에 *2000과 같은 주소를 할당해 올려두었고 0-1777에는 소스코드를 올려두었다. 하지만 소스코드가 1777이 넘게 되었고 결국 라이브러리 앞 뒤 메모리에 붙게되는 참사가... 재배치성이 참사를 해결하기위해 지능적인 로더를 사용해서 메모리에 재배치할 수 있는 형.. 2021. 3. 5. 이전 1 2 3 4 다음