프로그래밍 설계

장준휴·2023년 11월 9일
0

잡지식

목록 보기
3/4

소프트웨어 구조

정의
1. 설계 결정의 집합
2. 소프트웨어 시스템의 청사진

소프트웨어 구조는 만들고자 하는 프로그램을 어떠한 방식으로 작동하는지에 대한 것이다.

예를 들어 운영체제와 같은 단단하고 철저한 보안이 필요한 프로그램은 '계층 아키텍쳐'와 같은 방식의 SA(Software Architecture)를 사용하는 것이 유리하고, 안드로이드 앱과 같은 경우는 부품이 되는 모듈을 먼저 만들어서 서로 연결하는 '컴포넌트 아키텍쳐'가 유리하다.

분석에서 설계로 가는것은 창의성의 문제이기 때문에 매우 어렵다.

특징

  • 소프트웨어 시스템에서 구성요소와 해당 커넥터의 증요성을 강조
  • 소프트웨어 시스템의 설계, 개발 및 진화를 제어하는데 도움이 됨
  • 기능적 요구사항과 비 기능적 요구사항 모두의 영향을 받음

개발자가 프로그램을 개발할때 각자 특성에 맞게 설계를 해야할 것이다.

우선, '성능' 측면에서 장점을 보이려면 성능에 가장 중요한 기능들을 하나로 모아야한다.(현지화) 그리고 여러개의 모듈 간의 커뮤니케이션을 줄이는 설계를 한다면 성능적으로 뛰어난 프로그램이 된다.

보안에 집중을 하려면 레이어드 아키텍쳐를 사용해서 중요한 기능을 더 안쪽에 배치한다면 보안이 뛰어난 프로그램이 될 것이다.

'안정성'에 집중을 하고자 한다면 안전 검증을 자주 하고 비용을 줄여야하기 때문에 소수의 하위 시스템에서 안전에 중요한 기능을 모아야한다.

'이용'에 편리하게 하고싶다면 모듈을 중복해서 두어야한다.

'유지보수'에 집중을 한다면 쉽게 수정이 되어야하기 때문에 모듈화를 더 작고 간단하게 해야한다.


대표적인 아키텍쳐 6가지를 알려줄 것이다.
  1. Layered Architecture(계층 아키텍쳐)
  • 계층적으로 프로그램을 설계하고 각 게층에 연관된 기능을 배치한다.
  • 각 계층은 그 위 계층에 서비스를 제공하고 가장 아래 계층은 핵심 서비스를 표현한다.
  • 이미 있는 시스템 위에 새로운 기능을 쌓을 때, 여러 팀들이 각 기능 계층을 하나씩 맡아 개발할 때, 보안성이 요구되는 경우에 자주 사용된다.
  • EX) 윈도우, 리눅스, 안드로이드 플랫폼 등에서 사용된다.

  1. Client-Server Architecture
  • 주로 웹 서비스에 사용되며, 서버와 클라이언트간 조합이 자유롭다
  • 여러 지역에서 공유 데이터베이스를 사용할때, 시스템 부하가 가변적이고 복제 서버를 둘 수 있을때 주로 사용한다.
  • 네트워크로 서버들을 분산 배치할 수 있다는 것이 주요 장점이다.
  1. MODEL-VIEW-CONTROLLER(MVC)
  • 가장 간단한 아키텍쳐
  • 데이터와 VIEW를 분리한 것이 특징이며 모든 ui에 적용된다.
  • 계산기 서비스를 생각하면 편하다.
  • 모델 : 데이터 처리 담당
  • 뷰 : 데이터 보여주기 담당
  • 컨트롤러 : 모델과 뷰를 조합하여 사용자의 입력을 처리
  • 데이터 처리와 데이터 보여주는 방법을 각자 쉽게 변경이 가능하다.
  1. Event-driven Control
  • Iot, 아파트 제어 시스템을 생각하면 편하다
  • 중앙 제어 모델은 시스템 상태 변수 값에 따라 제어된다.
  • 방송 모델을 통해 네트워크 상에서 서로 다른 컴퓨터에 분산된 컴포넌트들을 통합하는데 효과적이다.
  • 각 컴포넌트들은 서로 연관이 없다.
  1. Repository Architecture
  • eclips, vscode등 에서 사용된다.
  • 시스템의 모든 데이터를 중앙저장소에서 관리하고 모든 컴포넌트들을 접근하도록 한다.
  • 컴포넌트들은 서로 직접 데이터를 교환하지 않고 이 저장소를 통한다.
  • 큰 용량의 정보를 만들어 오래 저장하는 유형의 시스템, 새로운 데이터를 중앙 저장소에 추가하면 어떤 액션 도구나 도구를 실행하는 데이터 구동 시스템에서 사용된다.
  1. Pipe and Filter Architecture
  • 주로 컴파일러에서 사용된다.
  • 각 데이터 처리 컴포넌트는 명확히 구분되어 있고 한가지 유형의 데이터 변환을 담당한다.
  • 한 컴포넌트가 출력한 데이터를 다른 컴포넌트로 입력하는 형태로 처리한다.
  • 이해하기 쉽고, 변환 필더 재사용이 쉽다.
  • 비즈니스 처리 구조에 적합한 아키텍쳐
profile
나는야 토마토

0개의 댓글