본문 바로가기

전체 글40

[만들면서 배우는 클린 아키텍처] 12. 아키텍처 스타일 결정하기 언제 실제로 육각형 아키텍처 스타일을 사용해야 할까?도메인이 왕이다육각형 아키텍처는 외부의 영향을 받지 않고 도메인 코드를 자유롭게 발전시킬 수 있다.도메인을 중심에 두는 아키텍처 없이, 도메인 코드를 향한 의존성을 역전시키지 않고서는 DDD를 제대로 할 수 없다. 만약 도메인 코드가 애플리케이션에서 가장 중요한 것이 아니라면 이 아키텍처 스타일은 필요하지 않을 것이다.경험이 여왕이다습관이 저절로 결정을 내리게 된다. 과거에 자주 계층형 아키텍처 스타일로 애플리케이션을 만들어 왔다.아키텍처 스타일에 대해서 괜찮은 결정을 내리는 방법은 다른 아키텍처 스타일을 경험해 보는 것이다. 작은 모듈에 먼저 적용해보고 개념과 스타일에 익숙해지면 이 경험이 다음 아키텍처 결정을 이끌어 줄 것이다.그때그때 다르다어떤 아.. 2024. 10. 20.
[만들면서 배우는 클린 아키텍처] 11. 의식적으로 지름길 사용하기 지름길을 방지하기 위해서는 먼저 지름길 자체를 파악해야 한다. 우발적으로 사용되는 지름길을 인식하고 수정할 수 있고 정당한 지름길이라면 지름길의 효과를 의식적으로 선택할 수 있다.왜 지름길은 깨진 창문 같을까?깨진 창문 이론이 코드 작업에 적용 될 때의 의미- 품질이 떨어진 코드에서 작업할 때 더 낮은 품질의 코드를 추가하기가 쉽다.- 코딩 규칙을 많이 어긴 코드에서 작업할 때 또 다른 규칙을 어기기도 쉽다.- 지름길을 많이 사용한 코드에서 작업할 때 또 다른 지름길을 추가하기도 쉽다.깨끗한 상태로 시작할 책임가능한 한 지름길을 거의 쓰지 않고 기술 부채를 지지 않은 채로 프로젝트를 깨끗하게 시작하는 것이 중요하다. 지름길이 몰래 스며드는 순간 더 많은 지름길을 끌어들이기 때문이다. 프로토타이핑 작업 중.. 2024. 10. 19.
[만들면서 배우는 클린 아키텍처] 10. 아키텍처 경계 강제하기 경계와 의존성             경계를 강제한다는 것은 의존성이 올바른 방향을 향하도록 강제하는 것을 의미한다.점선 화살표: 잘못된 방향을 가리키는 의존성 접근 제한자public, protected, prifate, package-private(default) 제한자가 있다.package-private 제한자는 자바 패키지를 통해 클래스들을 모듈로 만들어준다. 패키지 내에 있는 클래스들은 서로 접근 가능하지만 바깥에서는 접근할 수 없다. 모듈 진입점으로 활용될 클래스들만 public으로 만들면 의존성이 잘못된 방향을 가리킬 위험이 줄어든다.O 표시: private-package Class+ 표시: public Class 영속성 어댑터는 자신이 구현하는 아웃고잉 포트를 통해 접근되므로 private-p.. 2024. 10. 18.
[만들면서 배우는 클린 아키텍처] 09. 애플리케이션 조립하기 왜 조립까지 신경 써야 할까?코드의 의존성이 올바른 방향을 가리키게 하기 위해서 유스케이스와 어댑터를 그냥 필요할 때 인스턴스화하면 안된다.유스케이스가 영속성 어댑터를 호출하고 스스로 인스턴스화 한다면 코드 의존성이 잘못된 방향으로 만들어진 것이다. 이것이 아웃고잉 포트 인터페이스를 생성한 이유다. 유스케이스는 인터페이스만 알아야 하고, 런타임에 이 인터페이스의 구현을 제공받아야 한다. 객체 인스턴스를 생성할 책임은 누구에게 있을까? 그리고 어떻게 의존성 규칙을 어기지 않으면서 그렇게 할 수 있을까? 설정 컴포넌트(configuration component)아키텍처에 대해 중립적이고 인스턴스 생성을 위해 모든 클래스에 대한 의존성을 가지는 컴포넌트 역할- 웹 어댑터 인스턴스 생성- HTTP 요청이 실제로.. 2024. 10. 17.
[만들면서 배우는 클린 아키텍처] 08. 경계 간 매핑하기 '매핑하지 않기' 전략웹 계층, 애플리케이션 계층, 영속성 계층 모두 Account 클래스에 접근하여 같은 모델을 사용한다.웹 계층과 영속성 계층은 모델에 대해 특별한 요구사항이 있을 수 있다. 도메인과 애플리케이션 계층은 특수한 요구사항에 관심이 없음에도 불구하고 Account 도메인 모델 클래스는 이런 모든 요구사항을 다뤄야 한다. 이는 단일 책임 원칙을 위반한다.기술적인 요구사항이 아니더라도 각 계층이 특정 커스텀 필드를 두도록 요구할 수 있다. 모든 계층이 정확히 같은 구조의 같은 정보를 필요로 한다면 이 전략은 완벽한 선택지다.그러나 애플리케이션 계층이나 도메인 계층에서 웹과 영속성 문제를 다루게 되면 곧바로 다른 전략을 취해야 한다. 어떤 매핑 전략을 선택했더라도 나중에 언제든 바꿀 수 있다... 2024. 10. 16.
[만들면서 배우는 클린 아키텍처] 07. 아키텍처 요소 테스트하기 육각형 아키텍처의 테스트 전략테스트 피라미드비용이 많이 드는 테스트는 지양하고 비용이 적게 드는 테스트를 많이 만들어야 한다. 이 테스트는 하나의 단위(일반적으로 하나의 클래스)가 제대로 동작하는지 확인할 수 있는 단위 테스트들이다. 테스트 피라미드는 테스트가 비싸질수록 테스트의 커버리지 목표는 낮게 잡아야 한다는 것을 보여준다. 그러지 않으면 기능을 만드는 것보다 테스트를 만드는 데 시간을 더 쓰게 되기 때문이다.   단위 테스트피라미드의 토대. 일반적으로 하나의 클래스를 인스턴스화하고 해당 클래스의 인터페이스를 통해 기능들을 테스트한다. 만약 다른 클래스에 의존한다면 의존되는 클래스들은 인스턴스화하지 않고 테스트하는 동안 목(mock)으로 대체한다.통합 테스트연결된 여러 유닛을 인스턴스화하고 시작점이.. 2024. 10. 15.
728x90
반응형