CS/Software Engineering

[소프트웨어공학/Software Engineering] 시스템 설계와 구조 - system design and architecture

binaryroot 2026. 6. 2. 18:58
728x90

이번 글에서는 시스템 설계와 구조에 대해서 글을 작성해보고자 한다.

 

소프트웨어 아키텍처(software architeture)

  • 서브시스템과 컴포넌트를 찾아서 이들 사이의 관계(인터페이스)를 정의해야 한다.
  • 서브시스템을 나누었을 때의 장점
    • 독립적인 개발 단위가 줄어들고, complexity가 작아진다.
      (재사용성이 높아지고, 유지보수에 용이하며, 이식성이 높아진다.)
    • 서브시스템은 Layering & Partitioning 과 MVC 두 가지 방법으로 나뉜다.

Layering & Partitioning

  • Layering : 서브시스템을 수직으로 나누는 것
  • Partitioning : 같은 레이어 안에서 기능별로 서브시스템을 나누는 것

Layering은 두 가지로 또 나뉘는데

  • closed architecture
    인접한 레이어에 메세지 전달
    • 장점 : encapsulation 유지
    • 단점 : 시스템 성능은 안 좋아질 수 있음
  • open architecture
    어떤 레이어든 전달 가능
    • 장점 : 시스템 성능 향상 가능
    • 단점 : encapsulation 구조 파괴

cf. OSI 7 계층이 encapsulation의 완벽한 예시이다.

728x90

Model - View - Controller (MVC)

Model

  • 어플리케이션의 핵심 기능을 제공한다.
  • 자신이 의존하는 View, Controller를 알고 있다.
  • 별도의 데이터베이스가 없다면 Model이 데이터를 갖는다.
  • 자신의 데이터가 변경되면 자신이 알고 있는 View와 Controller에 알려주고 업데이트 한다.

View

  • 데이터를 사용자에게 보여주는 역할
  • 이때 데이터는 model로부터 받는다. 모델의 데이터가 수정되면 View에서 보여지는 데이터도 함께 수정된다.
  • View는 자신과 관련된 Controller를 생성한다.
  • 하나의 윈도우에 대해서는 하나의 뷰와 컨트롤러가 쌍으로 존재한다.

Controller

  • 사용자의 입력을 event 형태로 받는다.
  • 이벤트에 따라 model에서 제공하는 기능을 트리거하는 역할을 수행한다.
728x90