어 나 갱수.

[Spring] 클린 아키텍처 - 유지보수가 용이한 아키텍처 본문

Spring

[Spring] 클린 아키텍처 - 유지보수가 용이한 아키텍처

김경수 2024. 5. 20. 13:46
728x90

오늘은 클린 아키텍처에 대해 알아보겠습니다. 평소에 듣기로는 "유지보수에 편리한 아키텍처", "테스트하기 편리한 아키텍처" 정도로만 알고 있습니다. 오늘은 좀 더 자세히 알아보겠습니다.

 

Clean Architecture

'추상화 개념'으로써 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처입니다.

 

클린 아키텍처는 각 요소들을 분리하고 변화에 유연하게 대처할 수 있는 아키텍처 설계입니다.

클린 아키텍처를 적용함으로써 개발자는 비즈니스 로직과 외부 요인과의 결함도를 낮춤으로써, 테스트에 편리하고 유지보수에 효율적인

아키텍처를 구축할 수 있습니다. 이 요인은 장기적으로 봤을 때 애플리케이션의 유지보수 비용을 줄임과 동시에, 품질을 향상할 수 

있습니다.

 

사용하는 이유

  • 소스코드를 변경할 때 안정성이 높아집니다.
  • 코드의 가독성이 좋아집니다.
  • 유지보수성을 향상할 수 있습니다.

클린 아키텍처의 핵심을 다음과 같이 분리할 수 있습니다.

 

1. 구성 요소 분리

클린 아키텍처는 구성 요소를 분리하였기 때문에 유지보수 하기에 편리합니다.

 

2. 모듈화

클린 아키텍처를 구성할때는 모듈화 시켜서 설계하는 것을 권장합니다.

그 이유는 구성 요소를 모듈별로 하면 모듈별 테스트와 유지보수를 더 쉽게 할 수 있습니다.

 

3. 확장성

클린 아키텍처는 시스템 구축에 사용되는 요소들을 분리해서 변화에 유연하게 대처할 수 있도록 확장 가능한 설계를 제공합니다.

 

4. 재사용성

클린 아키텍처는 재사용 가능한 컴포넌트를 설계하는 것을 권장합니다.

 

클린 아키텍쳐는 4가지 구조가 존재합니다.

 

엔티티(Entities)

  • 핵심적인 데이터를 캡슐화합니다.
  • 메서드를 가지는 객체, 데이터 구조와 함수의 집합입니다.
  • 가장 고수준에 위치하는 구조입니다.
  • 외부로부터 가장 영향을 받지 않는 구역입니다.

유즈 케이스(Use Cases)

  • 애플리케이션에 대한 업무 규칙을 포함합니다.
  • 엔티티에 들어오고 나가는 데이터의 흐름을 조정하고 조작합니다.

인터페이스 / 어댑터 (Interface / Adapter)

  • 외부 인터페이스에서 들어오는 데이터들을 유즈 케이스와 엔티티에서 처리하기 쉬운 방법으로 변환하며, 유즈 케이스와 엔티티에서 나가는 데이터를 처리하기 쉽게 변환합니다.
  • Controller, GateWay 등이 여기에 속합니다.

프레임워크 / 드라이버 (Frameworks / Drivers)

  • 시스템의 핵심 업무와는 관련이 없습니다.
  • 데이터베이스, 프레임워크 등이 여기에 해당합니다.

 

 

클린 아키텍처는 다음과 같은 설계 규칙이 있습니다.

 

1. 원의 안쪽으로 갈 수록 변경사항이 적어야 한다.

이 말은 의존성 규칙을 따른다는 것입니다. 내부 계층이 외부 계층에 의존하면 안 된다는 말입니다.

좀 더 간단하게 말하면, 내부 계층에서는 외부 계층에 변화에 상관이 없어야 한다는 말입니다.

 

그래서 아키텍처를 설계할때 보통 변화가 많은 UI/DB 등이 제일 바깥쪽에 위치하고, 가장 변화가 적어야 하는 엔티티가 가장 안쪽에 위치하고 있습니다. 

 

2. 내부 계층은 외부 계층에 의존하면 안 된다.

위와 같은 방법으로 아키텍처를 설계하면 계층 간의 의존성이 낮아집니다. 그러므로 내부 계층의 코드는 외부에 변화에 영향을 받지 않게 되므로 유지보수 하기 편리한 아키텍처로 구축됩니다.

 

3. 프레임워크에 의존하지 않습니다.

프레임워크는 원형 제일 바깥쪽에 위치하고 있습니다. 

 

프레임워크로 개발을 하긴 하지만, 개발자가 코드를 짠 코드가 프레임워크에 의존하면 안 됩니다.

프레임워크가 바뀌었다는 이유로 내부 로직이 변경될 수 없습니다.

 

4. 유스케이스는 핵심이다.

클린 아키텍처에서 핵심이 되는 모듈은 usecase입니다.

usecase에서는 비즈니스 로직을 담당하므로 가장 중요한 부분이라고 말할 수 있습니다.

 

 

728x90