본문 바로가기
Base/Architecture

도메인과 SW아키텍처

by yoon_seon 2023. 3. 21.

도메인과 아키텍처

 

도메인 이란?

  • 소프트웨어로 해결하고자 하는 문제 영역을 도메인 이라고 부른다.
    • 우리가 프로그래밍을 하면서 가장 신경써줘야할 곳. 
    • 우리가 문제에 대해 맞닥들이는 곳. 
    • 문제에 대해 풀어 나아가며 해결해야할 곳. 
    • 도메인은 하나일 수 있지만, 하나의 도메인으로인해 점점 파생될 수 있다
어떤 문제를 해결하고 싶은지 정확히 파악해야 어떤 해결책이 좋을지 생각할 수 있다.
누구의 문제인지, 어떤것이 문제인지, 왜 문제인지 생각해야한다.
문제를 어떻게 바라보는지에 따라 해결책이 달라질 수 있다.
따라서 우리가 문제를 해결하기 위해서 도메인을 잘 알아야할 필요가 있다.

 

반 버논의 도메인 종류

메인 도메인

        비즈니스의 전체 도메인

서브 도메인

        전체 도메인을 여러 부분 도메인으로 나눈 것. 즉, 메인에서 파생되는 하위 도메인

        1. 핵심 도메인

            - 서브 도메인 중 가장 중요한 비즈니스가 될 도메인

        2. 지원 서브 도메인

            - 서브 도메인 중 필수적이지만 핵심 도메인이 아닌 도메인. 즉, 비즈니스 적으로 연관이 되어야하는 도메인

            - 핵심 도메인 만큼은 차별화를 가져야 되는 영역은 아니지만, 프로젝트를 성공하기 위해 필요한 도메인

        3. 범용 서브 도메인(=일반 서브 도메인)

            - 필수적이지는 않지만, 전체 비즈니스에서 필요한 도메인.

            - 제일 투자 영역이 적은 도메인

 

도메인을 어떠한 관점에서 보는지에 다라 다르게 해설할 수 있다.

 

SW아키텍처 란?

복잡한 시스템을 지적으로 파악할 수 있는 추상화

소프트웨어는 여러가지 기능들로 구성되어있다.
예를들어 포토샵만 봐도 도형그리기, 색칠하기, 저장하기, 글씨쓰기 등 다양한 기능들이 존재한다.
그래서 이렇게 수많은 기능 하나하나의 부품들을 어떻게 연결시켜 관계를 맺었는지 각각의 요소들간의 관계를 표현하는 것 각 부품의 기능들을 쭉 뽑아서 이해 관계자들이 모여서 이런이런 기능들을 어떻게 배치할지 얘기해서 결정한다.
하나의 의사소통 도구로 활용 되는 것이다.

참고 : https://moo-you.tistory.com/218

 

모듈 : 소프트웨어를 구성하고 있는 작은 기능 하나하나의 단위

컴포넌트 : 모듈을 기능별로 묶어 놓은 집합

라이브러리 : 모듈과 컴포넌트의 전체.

라이브러리 > 컴포넌트 > 모듈

 

아키텍처의 종류

모놀리식 아키텍처

  • Layered Architecture
  • Clean Architecture
  • Hexagonal Architecture

분산형 아키텍처

  • Service Oriented Architecture
  • Event-based Architecture
  • MicroService Architecture

 

모놀리식 아키텍처란?

전체 코드를 단일 단위로 배포가능

장점

- 소규모 트래픽 처리에 용이하다.

- 단일 단위로 배포하기 때문에 배포가 편리하다.

 

단점 

- 장애가 발생하면 다른 기능에도 장애가 발생하여 영향이 생긴다.

- 대규모 트래픽을 받기에 한정적이다.

- 배포가 편리하지만 하나의 도메인이 변경됨에 따라 전체를 배포해야한다.

 

분산형 아키텍처란?

모놀로식 아키텍처와 같이 단일시스템으로 관리하지 않고 여러 기능을 여러 서버로 나누어 관리.

장점

- 장애가 발생하더라도 직접적인 관계가 있는 서비스를 제외한 다른 서비스에 영향이 없다.

- 전체 배포가 아닌 각 서버에 대한 배포가 가능하여 편리하다.

- 폴리글랏 프로래밍을 할 수 있다.

* 폴리글랏 프로그래밍 : 단일 언어로 제공되지 않는 추가 기능과 효율성을 극대화 하기 위해 여러 언어로 코드를 작성하는 것

 

단점

- 프로젝트가 많아짐에 따라 관리가 필요하다.

- 각각의 서버에 대한 트랜젝션 처리등 오류 트래킹에 있어서 하나의 서버가 아닌 여러 서버를 제어해야하기 때문에 관리의 시간이 오래걸린다.

 

아키텍처 선택을 하려면?

아키텍처 무관선택

  • 아키텍처에 거의 관심을 기울이지 않는다. 시스템은 큰 진흙 뭉치가 될 수도 있고, 의식적인 선택 없이 뚜렷한 아키텍처가 나타날 수도 있고, 도메인 규범에 따라 자연스럽게 추정 아키텍처가 선택될 수도 있다(대중적인 아키텍처를 선택하는것도 포함)

아키텍처 집중선택

  • 의도적으로 소프트웨어 아키텍처를 선택한다. 기능 및 품질 속성을 포함하여 목표를 달성하는 데 적합한 아키텍처를 설계한다.

아키텍처 상향선택

  • 아키텍처 집중 설계의 일종으로, 개발자가 시스템의 목표나 속성을 보장할 목적으로 아키텍처를 설계한다. 목표나 속성을 아키텍처에 포함하면 개발자는 이를 달성하는 추가 코드를 작성할 필요가 없다.
아키텍처가 시스템의 골격 역할을 하고, 품질 속성에 영향을 미치며, 시스템을 제한하기 때문에 소프트웨어 아키텍처 선택은 중요하다.

 

구조가 잡히지 않은 프로그램의 특징

  • 하나의 요구사항이라도 적용하는데 시간이 오래걸린다.
  • 변경이 느리거나 못할 수도 있다.
  • 버그에 대해서 대응이 느리다.
  • 확장성이 좋지 않다.

 

구조가 잘 잡힌 프로그램의 특징

  • 요구사항을 빠르게 적용한다.
  • 오류에 대해서 대응이 빠르다
  • 변경에 빠르다
  • 확장성이 좋다
  • 대체적으로 좋은 아키텍처 구조를 가지고 있다. (경계가 뚜렷함)

 

좋은 아키텍처를 만드려면?

  • 구조를 잘 잡아야한다
  • 도메인에 매우 많은 시간을 써야한다
  • 팀원들과의 컨텍스트를 맞추어 공통의 룰을 만들어야한다
  • 문서화를 잘해야한다.

 

 

고객은 빠른 기능을 원한다. 하지만 우리는 시간이 부족할 때가 많다.
아키텍처를 잘 설계하는 것은 성장, 도전, 기회를 잡기위한 행동이며
좋은 아키텍처를 만들기 위하여 끊임없이 노력해야한다.

 

 

'Base > Architecture' 카테고리의 다른 글

Layered 아키텍처와 SOLID 원칙  (0) 2023.03.21

댓글