01 이 책에서 말하는 시스템 설계의 정리 방법
이 책에서는 프로세스를 구분하는 대신에 단순히 '설계할 내용'을 설명하는 형태로 진행한다.
대규모 시스템에서 문제 없이 진행하려면 관리 부분도 신경을 써야 한다.
실제 업무에서는 시스템 설계 이외에도 다양한 요소가 필요하다는 점을 의식해야 한다.
시스템을 설계한다는 것은 하드웨어를 원하는 대로 조작하는 소프트웨어를 만드는 일이다.
시스템 설계란 요구사항을 실현하기 위해 적절히 제품과 기능을 선택하고 미리 준비된 조작 방식을 사용해서 어떻게 설정하면 제대로 작동할지 방법을 고민하는 것이다.
시스템 설계의 기본 흐름
- 넓은 시점의 설계 -> 공통 부분 설계 -> 개별 설계(개념적/논리적 설계 : 큰 관점 -> 구체적인 내용)
따로 설계하면 낭비가 발생하거나 전체적인 요구사항을 만족시키지 못할 수 있기 때문에 시스템 전체를 어떻게 구성할지 방침과 개념, 기능 배치 방법, 설계 규칙 같은 '전체 설계'를 실시해야 한다.
이 책은 전체 설계, 입출력 설계, 데이터베이스 설계, 로직 설계, 네트워크 설계, 서버 설계 단위로 설명한다.
02 설계서를 작성하는 이유
설계서는 무엇을 설계해야 하는지, 부족한 부분은 없는지, 전체적으로 앞뒤가 맞지 않는 부분은 없는지 판단해준다.
설계서가 있으면 요구사항 정의 담당자, 시스템 개발자, 사용자 등 관계자끼리 내용을 공유하고 이해를 일치시킬 수 있다.
시스템 릴리스 이후에도 유지보수, 운영 작업이 필요하기 때문에 설계서를 작성해야 한다.
03 설계서의 종류
설계서를 작성하는 데는 어떤 목적이 있어야 한다.
목적을 알면 그 설계서가 왜 필요한지, 설계서에 넣어야 할 내용이 무엇인지 이해하기 쉽다.
이 책에서는 설계 종류를 관리계, 전체 파악계, 개별계 세 가지로 정리한다.
- 관리계 : 무엇이 있는지 관리하기 위해 작성 ex) 화면 목록, 테이블 목록
- 전체 파악계 : 시스템의 전체 모습을 표현할 때 작성 ex) 시스템의 전체 모습(아키텍처), 네트워크 전체 구성도
- 개별계 : 관리계와 전체 파악계를 제외한 모든 것 ex) 처리 로직, 화면 레이아웃, 테이블 레이아웃
04 전체 설계 개요
전체 설계의 완성도가 유지보수, 운영을 포함한 시스템의 성공과 실패를 좌우한다.
전체 설계는 그 외의 설계 분류의 개별 설계에 필요한 역할 분담, 설계 방침, 규칙을 결정한다.
설계 내용은 시스템 아키텍처에서 선택한 제품에 따라, 시스템 규모에 따라 크게 달라진다.
- 전체 설계 : 시스템 아키텍처 설계, 설계 규칙, 전체적인 방식 설계
- 개별 설계 : 입출력 설계, 데이터베이스 설계, 로직 설계, 네트워크 설계, 서버 설계
05 입출력 설계 개요
시스템 입출력은 사람용, 시스템용의 두 종류로 나뉜다.
화면이나 장표는 사람을 위한 것이고, 시스템 간 데이터를 연계하는 데이터 파일은 시스템을 위한 것이다.
어떤 형태로 입력할지 어떤 형태로 출력할지에 대한 설계를 하는 작업이 입출력 설계 이다.
- 어떤 값을 화면에 입력할 수 있는지
- 자유 입력인지 풀다운 메뉴인지 체크박스인지
- 기타 항목을 선택했을 때만 입력할 수 있는지
06 데이터베이스 설계 개요
시스템 설계, 특히 애플리케이션에서 핵심은 바로 데이터베이스 설계이다.
데이터베이스 설계 품질은 프로그래밍 난이도, 성능, 유지보수, 운영까지 광범위하게 영향을 미친다.
데이터를 어떻게 저장할지 생각하는 것이 데이터베이스 설계이다.
저장 형식은 크게 관계형 데이터베이스(RDB)와 NoSQL로 나뉜다.
각자 특성을 이해하고 각각에 어울리는 방식으로 데이터 배치 방법을 설계해야 한다.
핵심 | 관계형 데이터베이스 (RDBS) | NoSQL (Not Only SQL) |
장점 | 데이터 무결성을 관리할 수 있고, 고급 검색이 가능하다. |
대용량 데이터 처리에 적합하고 구조화되지 않은 데이터도 처리할 수 있다. 확장성이 뛰어나다. |
단점 | 확장성이 낮고 대용량 데이터 처리가 느리다. 구조화된 데이터가 필요하다. |
데이터 무결성을 보장하기 어렵고 고급 검색이 어렵다. |
데이터 구조 | 행과 열의 2차원 구조 | 형태가 다양하다. 키밸류형, 와이드 컬럼 스토어형, 문서형, 그래프형 |
유명 제품 | MySQL, PostgreSQL, Oracle Database 등 | Amazon DynamoDB, Big Table, MongoDB, Neo4j 등 |
사용 예시 | 업무 데이터 전반 (EC 사이트, 금융 등 무결성이 중요한 경우) |
데이터 분석용 데이터, 생체 인증 같은 비구조 데이터, 시계열순으로 등록되는 대량의 로그 계통의 데이터 |
보충 설명 | 전통적인 데이터 관리 방법으로 큰 문제가 없다면 우선적으로 사용 |
RDB에 비해 비교적 최신 방식이다. RDB가 처리하기 힘든 부분을 해결하기 위해 다양한 형식이 있다. |
07 로직 설계 개요
로직 설계에서는 어떤 범위를 해당 프로그램에서 처리할지 정하고 각각의 프로그램 처리 내용을 설계한다.
전체 설계의 시스템 아키텍처 설계에서 전체 구조를 설계하고, 로직 설계에서 구체적인 내용을 설계한다.
또한 작업 처리 방식으로 실시간으로 처리를 끝내는 온라인 형식과 정해진 시간에 실행해서 처리하는 배치 형식이 있다.
08 네트워크 설계 개요
서버와 클라이언트를 연결하는 배관이 바로 네트워크이다.
네트워크는 나중에 변경하려면 다른 설계에 미치는 영향 범위가 무척 크기 때문에 신중히 설계해야 한다.
비기능 요구사항에 따라 설계 작업량이 크게 늘어난다.
비기능 요구사항 중에서도 특히 가용성, 성능/확장성, 운영/유지보수성, 보안에 크게 영향을 받는다.
비기능 요구사항 | 요구사항 (예) | 대책 (예) |
가용성 | 장비 고장 시에도 시스템을 계속 사용할 수 있어야 한다. | 네트워크 장비 고장에 대비해서 장비(라우터 등)을 다중화한다. 다중화에 함께 장비 장애 시 감지 방법 및 자동으로 회선을 전환, 복구 후 복원 같은 것을 설계한다. |
성능/확장성 | 서버 한 대로 모두 처리할 수 없으므로 스케일 아웃 구성(동일한 처리가 가능한 서버를 여러 대 준비해서 처리를 분산)을 실현한다. | 로드 밸런서(처리 요청을 받아서 여러 서버에 분산하는 기능)을 도입한다. |
운영/유지보수성 | 전체 시스템이 24시간 365일 쉬지 않고 가동할 수 있도록 한다. | 네트워크 장비 보수 시간을 확보할 수 있게장비 구성을 다중화한다. |
보안 | 웹사이트의 악의적인 요청(애플리케이션 버그 악용, 데이터베이스 정보 부정 취득 등)을 즉시 차단할 수 있어야 한다. | WAF(Wep Application Firewall) 도입으로 의심스러운 요청을 감지, 차단 하도록 설정한다. |
09 서버 설계 개요
서버는 애플리케이션을 작동하기 위한 환경이다.
OS뿐만 아니라 데이터베이스와 웹 서버와 같은 사용하는 제품의 설치 및 설정, 장애 발생 시 하드웨어 설정 등도 필요하다.
온프레미스나 클라우드에서나 서버와 네트워크는 물리적인 장비이다.
따라서 프로덕션 환경 이외에도 개발 및 테스트용 환경이 필요하고, 성능 확인 환경이나 업무 훈련 환경이 필요할 수도 있다.
- 프로덕션 환경
- 최대 사양
- 모든 장비를 다중화한다.
- 업무 훈련 환경
- 최소한의 서버만 사용한다.
- 애플리케이션은 모두 작동 가능하도록 한다.
- 성능 확인 환경
- 애플리케이션 성능을 측정하는 환경
- 각 서버 사양은 프로덕션 환경과 동일하다.
- 단, 스케일 아웃 규모는 최소(2대)로 한다.
- 개발, 테스트 환경
- 모든 기능을 서버 1대에 집약한다.
- 개발팀 수만큼 준비해서 각자 필요한 최소한의 설정만 반영한다.
'Book' 카테고리의 다른 글
[소프트웨어 스펙의 모든 것] 3장 스펙 작성의 현주소, 현실과 관행 (1) | 2025.06.23 |
---|---|
[그림으로 이해하는 시스템 설계] 3장 시스템 설계에 영향을 주는 개념 (2) | 2025.06.23 |
[소프트웨어 스펙의 모든 것] 2장 SRS (2) | 2025.06.16 |
[소프트웨어 스펙의 모든 것] 1장 소프트웨어 스펙의 개요 (0) | 2025.06.16 |
[그림으로 이해하는 시스템 설계] 1장 시스템 설계가 차지하는 위치 (0) | 2025.06.15 |