[정보] architecture와 design pattern, 뭔 차이일까?

2021. 12. 15. 22:39Information

카테고리에 Architecture와 Design Pattern, 나누어는 놨지만 뭐가 다른지 몰라 찾아봤다.

(사실 어디서 질문을 받았는데 답변을 제대로 못하기도 했고, 질문을 받고 나서 "정말 이게 뭔 차이인지 왜 생각을 안했을까?" 라는 생각이 들어 찾아보면서 자료를 모아봤다.)

Architecture

  • 구조적 조직의 관점에서 시스템 군을 정의함으로써 컴포넌트와 커넥터 유형의 어휘를 정의하고 이들이 결합되는 방식에 대한 제약 조건들 정의
  • 소프트웨어의 주요 특징들을 결정짓는 주요 설계구조
  • S/W의 구성 요소와 요소간의 인터페이스 그리고 동작방식 등의  특징들을 결정짓는 모든 설계 구조
  • 아키텍처 설계 시에 요구되는 비 기능 품질 요구사항을 달성할 수 있도록 해 놓은 문서

Design Pattern

  • 간단하고 재 활용이 가능한 프로그래밍 솔루션
  • 프로그래머들이 유용하다가 생각되는 경험을 활용하여 객체들간의 일반적인 상호작용 방법들을 모은 목록으로 Problem Domain의 최적화된 디자인
  • 프로그래머들이 유용하다고 생각되는 경험을 문제 유형별로 구체화하여 동일한 문제 유형에 대한 해결 방법의 일반화한 패턴

그렇다면 우리가 흔히 알고 있는 SOLID 원칙은 Architecture일까, Design Pattern일까?

위 내용을 기준으로 봤을 때 Design Pattern에 속한다.

 

왜냐하면 시스템 군을 정하지도 않았고, 이 원칙은 지키지 않아도 개발은 가능하기 때문이다.

단지, 여러명의 프로그래머들이 어떠한 문제에 직면했을 때 이런 방법으로 접근하니 풀리더라. 어떻더라. 를 써놓은 것이니 Design Pattern에 더 맞는 것 같다.

(그런 의미에서, Architecture 란에 써놓은 SOLID 원칙을 Design Pattern으로 옮겨야겠다.)

 

그렇다면, Architecture는 지키지 않으면 개발이 불가능한 것일까?

그건 아니다.

 

Architecture의 의미는 "뼈대" 라고 생각하면 될 것 같다.

예를 들어 내가 세금을 계산하는 로직을 만든다라고 했을 때 아래와 같이 분리할 수 있다.

- Model : SaleData

- Business Logic :  getTaxAmount(totalAmount: BigDecimal)

- Domain Layer : getSaleDataTotalAmount(saleData: List): BigDecimal

 

이런식으로 분리하는게 Architecture라고 생각이 든다.

Business Logic은 Model을 모르기 때문에, Model이 변경되어도 Business Logic에 영향이 없고,

Domain Layer에 속한 getSaleDataTotalAmount만 변경하면 된다.

 

만약 SaleData를 변경했다가 getTaxAmount 함수가 망가지게 되면 그건 올바른 아키텍쳐가 아니라고 생각된다.

(더 심각한 예로, SaleData 하나 변경했다고 Business Logic에 속하는 결제가 안된다면?..)

 

 

그럼, 두개의 목적과 효과는 무엇일까?

  Architecture Design Pattern
목적 전체 시스템의 구조나 설계모형 재사용 실제 구현 과정에서 해결방안으로 제시
조건 모든 종류의 시스템에 적용 가능 모든 구현 과정 중 일관된 문제에 적용
기댓값 - 구체적인 코드와 함께 요구변경이나 다른 제약 조건 등에 대한 대응 방안이 다름
- 구현경험 이해로 바람직한 아키텍처 설계 가능
- 구조도로써의 이해와 실제 설계작업 중 각 구현상 특징 별 구체적인 코딩방안까지 설계할 수 있어야 함.
- 유지보수의 용의성, 이해하기 쉬운 코드로 단순화 가능
-문제에 대한 패턴 인식하여, 일치하는 디자인 패턴을 찾아 프로젝트에 적용
-어플리케이션의 확장성 향상, 비즈니스 요구사항 변화에 적시대응
-어떤 문제점에 대한 해결안 찾는 시간과 개발기간 단축

 

즉 이해한 바로는 Architecture는 Design Pattern과 매우 유사한 성질을 갖고 있지만, Design Pattern의 폭 넓은 큰 틀이라고 생각하면 편할 것 같다.

'Information' 카테고리의 다른 글

[GraphQL] GraphQL이란?, REST API와 차이점  (0) 2021.12.16
[정보] Log4J 2.x 취약점 발생  (0) 2021.12.14