Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 이벤트캡처링
- MVMM
- 코딩테스트
- hig
- eventcapturing
- HTML
- 오공완
- 직장인인강
- 환급챌린지
- 이벤트버블링
- 패스트캠퍼스
- eventbubbling
- 패스트캠퍼스후기
- 연결리스트삭제
- 프로그래머스
- ios
- swift
- stopPropagation
- Components
- 사이드프로젝트10개기술스택으로구현하는풀스택서버리스프로젝트withReact
- 직장인자기계발
- 자료구조
- JavaScript
- 실패율
- 연결리스트삽입
- 스위프트
- 패캠챌린지
- 연결리스트생성
- 패캠인강후기
- 수강료0원챌린지
Archives
- Today
- Total
날쌘 개발자
프로젝트 설계(1) - 시스템설계가 필요한 이유 / 아키텍처 다이어그램 본문
728x90
패스트캠퍼스 환급챌린지
6일차 화이팅!
시스템 설계
- 시스템의 요구사항을 충족하기 위해 필요한 아키텍처, 인터페이스 및 데이터를 정의하는 과정
- 소프트웨어를 구성하는 요소들 (a.k.a 컴포넌트) 간의 관계와 동적 메커니즘을 표현하기 위한 구조체
설계가 왜 필요할까?
설계가 후순위가 되면 시스템을 개발하는 비용이 더 많이 들고, 일부 또는 전체 시스템에 변경을 가하는 일이 현실적으로 불가능 해진다. - 책 Clean Archictecture 중
- 설계도가 없는 건물을 본 적이 있나요?
- 설계도 없는 건물이 안전할까요?
인테리어나 확장 공사를 한다고 할 때 건드려도 될 것과 건드리면 안될 것을 모르므로 안전하지 않음. 소프트웨어도 마찬가지
- 설계도 없는 건물이 안전할까요?
- 개발이 진행된 이후에는 이미 개발된 전체 시스템의 구조를 수정하기 어렵기 때문에 미리 설계를 해야 함.
- 설계 과정이 있어야 확장성, 보안 등 시스템에 요구되는 다양한 요구사항을 잘 충족시킬 수 있음.
- 설계의 유무는 개발 과정에 큰 영향을 끼침.
- 개발자들 간에 중요하게 사용될 의사소통 수단
설계란, 문제를 해결하기 위한 다양한 선택지 속에서 최선의 방법 한가지를 선정하는 것.
그에 따른 특징과 한계가 명확해지기 떄문에, 왜 이렇게 설계했는지, 설명하고 팀원들을 납득시킬 수 있어야 함. 문서화도 필수
설계의 대상
관점에 따라서 어떤 것에 중점을 두느냐에 따라 설계 결과를 여러개가 될 수 있음.
- 소프트웨어를 구성하는 여러 시스템의 구조 설계 - 구성 요소들의 결합관계, 구조도
- 여러 시스템 간 동작하는 방식에 대한 설계 - 데이터의 흐름, 입/출력 순서, 처리 순서, 프로토콜 등 ..
설계 유형
- 아키텍처 설계: 소프트웨어의 전체 구조를 high-level에서 기술. 구성 요소를 정의하고 요소들 간의 관계를 정의
- 자료구조 설계: 소프트웨어의 요구사항을 충족시키기 위해 필요한 요소들을 자료구조로 변환하여 설계하는 과정
- 인터페이스 설계: 사용자와 소프트웨어 간, 소프트웨어를 구성하는 구성 요소 간 어떻게 통신하는지 프로토콜과 주고받을 데이터 내용등을 설계하는 과정
설계 과정
high-level에서 시작해 점점 low-level을 구체화 시켜나가는 것이 설계의 일반적인 과정
요구사항을 통해 추상화 된 아키텍처를 설계하고, 그 각 요소들의 디테일을 점점 설계해 나가는 과정
나올 수 있는 결과물
예시
- 소프트웨어 아키텍처 설계 -> Architecture diagram
- 데이터 베이스 설계 -> Database schema
- 시스템/객체 간 상호 작용 설계 -> Sequence diagram
- 상세 클래스 설계 -> Class diagram
아키텍처 다이어그램
(Architecture diagram)
아키텍처 다이어그램이란?
- 시스템의 전체 구조, 시스템 간의 상호 작용 및 의존성을 high-level에서 가시화 한 다이어그램
- 각 시스템이 어떻게 동작하는지, 이번 데이터를 어떻게 다루는지 등의 구체적인 상호작용 내용은 생략하고, 전체적인 맥락 관점에서 기술하는 것
왜 사용할까?
- 시스템이 어떤 순서로 요청을 처리하는지, 어떤 시스템과 소통을 하는지 쉽게 이해하기 위해 사용
- 코드 만을 보고 시스템의 흐름을 파악하기는 오랜 시간이 걸리고 효율적 X
- 소프트웨어의 큰 구조/그림을 한 눈에 파악하기 위해 사용
회사와 소프트웨어의 규모가 클 경우, 한 개발자가 모든 디테일을 알 수 없음. 팀마다 하나의 서비스를 운영 한다면, 내가 코드를 뜯어보고자 해도 접근 권한이 없을 수도 있고, 아예 다른 도메인이라 코드를 봐도 이해하기 어려울 수도 있음. - 이 다이어그램을 통해 나무 하나하나를 몰라도 전체 숲을 보는데 도움이 됨.
언제 사용할까?
- 요구사항이 수집되고, 초기 설계 단계에서 사용
- 새로운 팀원이 시스템 구조를 파악할 때
- 추가 요구사항이 수집되어, 시스템을 변경해야 할 때 참고용 및 업데이트용
- 소프트웨어의 규모가 크면 클수록 설계도의 중요도는 더 높아짐
어떻게 사용할까?
- 구성요소 나열
- 클라이언트
- 웹, 모바일 앱 등
- 서버/서비스
- 내부 서비스
- 외부 서비스
- 데이터베이스. 스토리지
- 클라이언트
- 구성 요소 간 상호 작용 표기
- 화살표로 나타낸다.
- A->B : 구성요소 A가 구성요소 B를 호출
- A<-B : 구성요소 B가 구성요소 A에게 응답
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
728x90
'web > 챌린지' 카테고리의 다른 글
프로젝트 설계(3) - 실전 시스템 설계 (0) | 2023.02.27 |
---|---|
프로젝트 설계(2) - 시퀀스 다이어그램, 클래스 다이어그램 (0) | 2023.02.26 |
프로젝트 기획(3) - 프로젝트 플래닝 (0) | 2023.02.24 |
프로젝트 기획(2) - 서비스 요구사항 / 디자인 기획 (0) | 2023.02.23 |
프로젝트 기획 (1) - 서비스 요구사항 (0) | 2023.02.22 |