728x90
이번 글에서는 시스템 설계와 구조에 대해서 글을 작성해보고자 한다.
소프트웨어 아키텍처(software architeture)
- 서브시스템과 컴포넌트를 찾아서 이들 사이의 관계(인터페이스)를 정의해야 한다.
- 서브시스템을 나누었을 때의 장점
- 독립적인 개발 단위가 줄어들고, complexity가 작아진다.
(재사용성이 높아지고, 유지보수에 용이하며, 이식성이 높아진다.) - 서브시스템은 Layering & Partitioning 과 MVC 두 가지 방법으로 나뉜다.
- 독립적인 개발 단위가 줄어들고, complexity가 작아진다.
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
'CS > Software Engineering' 카테고리의 다른 글
| [소프트웨어공학/Software Engineering] 형상 관리(CM: Configuration Management)란? (0) | 2026.04.15 |
|---|---|
| [소프트웨어공학/Software Engineering] 객체지향과 인터페이스 (0) | 2026.04.10 |
| [소프트웨어공학/Software Engineering] Polymorphism 다형성 (0) | 2026.04.10 |
| [소프트웨어공학/Software Engineering] 객체 지향이란? (2) | 2026.04.09 |
| [소프트웨어공학/Software Engineering] 애자일 소프트웨어 개발 (0) | 2026.04.07 |