시스템 분석 설계 1장

박지성 ·2025년 9월 4일

학교 수업을 들으면서 정리

UML 모델링 객체지향 분석 및 설계 책을 기반으로 공부하고 싶은 부분을 정리합니다.

UML

UML(Unified Modeling Language)은 소프트웨어 시스템을 시각적으로 표현하기 위해 사용하는 표준화된 모델링 언어

시스템의 구조와 동작을 이해하기 쉽게 '설계도'로 그리는 규칙!!!
프로그래밍 언어 아님. 그림 언어? 그런거임

클래스 다이어그램, 유스케이스 다이어그램, 스퀀스 다이어그램이 있다.

소프트웨어 공학

소프트웨어 + 공학의 합성어

먼저 소프트웨어와 프로그램의 차이를 먼저 이해 해야겠다.

프로그램 : 단일 명령어 집합
소프트웨어 : 프로그램을 포함하여 만든 완전한 제품 (프로그램 + 문서 + 데이터(정보))

소프트웨어 특징

하드웨어와 비교를 바탕으로 특징을 알아보겠습니다 (명심.)
비가시성 : 소프트웨어 구조는 코드에 있어서 전체적인 윤곽을 파악하기 어려움 (유튜브 코드를 볼 수 없음)
복잡성 : 소프트웨어는 규칙적이고 정형화된 구조가 없어 이해하고 관리하는데 어렵 (자동차는 엔진이 앞에 있고 뭐 그런 구조가 있지만 소프트웨어는 없따.)
순응성 : 코드 딸깍으로 바꿀 수 있어서 좋다. (자동차 엔진 위치 바꾸기보다 21231배 쉽다)
비제조성 : 소프트웨어는 개발, 하드웨어는 제조 (소프트웨어는 공장이 필요없다. 책상만 있으면 된다)
비마모성 : 코드는 마모가 안된다. (물론 품질 저하는 있을 수도 있지만. 자동차 처럼 고장은 안나니까..)
비조립성 : 뭐 요즘은 컴포넌트 기반으로 조립한다고 하지만, 하드웨어에 비해서는 조립보다는 주문 제작 개발이니까..

그렇다. 하드웨어(자동차)랑 비교하면서 이해해봤다.

소프트웨어 분류

데이터 수집 소프트웨어, 분석 소프트웨어, 임베디드 소프트웨어, 지능 소프트웨어, 경영정보 소프트웨어 등등등.....

하지만 크게 분류하면 응용 소프트웨어시스템 소프트웨어로 분류 할 수 있다.

우리가 만드는 소프트웨어는 대부분 응용 소프트웨어이고 앞에 말했던 소프트웨어도 응용 소프트웨어로 볼 수 있다.

응용 소프트웨어 : 사용자 중심 소프트웨어로 게임, PPT, 한글 같은 특정 작업을 컴퓨터가 대신해주는 그런 소프트웨어를 말한다

시스템 소프트웨어 : 응용 소프트웨어를 만드는 개발자를 위한 소프트웨어이다. 하드웨어와 상호작용을 다루고 응용 소프트웨어와 하드웨어 사이에 위치한다. 운영체제, 장치 드라이버등이 해당한다

소프트웨어 위기

1960~1970년에 소프트웨어 개발과 관련해서 발생한 문제를 극복하기 위해 탄생되었다.
이때 발생한 문제들을 소프트웨어 위기라고 한다

왜 문제가 발생했을까
초창기 소프트웨어는 너무나도 간단해서 (a+b) 컴퓨터 속도를 올리는 것만 집중했다
하드웨어에만 집중했다.

오잉? 시대가 지나면서 하드웨어는 좋아졌고, 소프트웨어가 점점 복잡해지고, 요구 사항도 많아졌음.
회사는 -> 정해진 돈으로 일정안에 완료해야함.
규칙도 없어서 코드는 개판 (핀볼이 사라진 이유) 이런 느낌 아닐까..?

소프트웨어 공학 정의

공학이 뭘까
우선 공학과 과학의 차이를 이해 해보자

과학 : 자연 현상의 이해와 설명, 근본 원리를 탐구
공학 : 문제를 해결 실질적인 것을 창조

IEEE에서는 소프트웨어 공학을 세가지 단어로 간결하게 정의한다

소프트웨어의 개발, 운영, 유지보수를 위해 체계적 통제적, 정량적 접근 방법을 적용한 것

엇!?!
이것은 개발자 이력서 특강을 듣다보면 나오는 말이다!
개발자는 엔지니어링 문제를 해결하는 사람이고 수치적 즉 정량적으로 자신의 결과를 나타낼 수 있어야한다!
오호... 꼭 이력서를 쓸 땐, 참고하도록 하자. 정성적인 말은 놉!

소프트웨어 공학 VS 시스템 공학

소프트웨어 공학 : 소프트웨어 개발에 중점을 둔다.
시스템 공학 : 소프트웨어를 포함해서 하드웨어, 네트워크, 사용자 상호작용등 주변 환경을 고려하여 시스템 전체 구조를 설계 하는 것.

따라서 소프트웨어 공학은 시스템 공학에 포함된 개념으로 볼 수 있다.

소프트웨어 공학의 기술 발전


얍~

  • OOA (분석): "어떤 집을 지을까?" (요구사항 분석)
  • OOD (설계): "그 집의 설계도는 어떻게 그릴까?" (설계)
  • OOP (프로그래밍): "설계도대로 벽돌을 쌓아 집을 짓자!" (구현)
  • OOSE (공학): 이 모든 과정(분석, 설계, 구현, 테스트)을 체계적으로 관리하는 방법론 전체.

소프트웨어 공학 3가지 주제

프로세스 방법 도구 3가지가 매우 중요하다

프로세스

어떤 제품을 만드는 과정, 수행되는 활동 순서

프로세스가 중요한 이유는..

  • 개발에 일관된 구조를 제공한다는 점.
  • 프로젝트 관리를 위한 하부 구조를 제공하여 관리가 용이하고.
  • 용어를 표준화 할 수 있다.

잠깐!!
컴퓨터에 프로세스랑 뭐가 다르지?

프로세스 : 앞으로 나아가 목표를 달성하는 일련의 과정

우리가 배우는 프로세스는 '소프트웨어를 만드는 방법론'
컴퓨터 프로세스는 '컴퓨터가 프로그램을 실행하는 단위'
다른 의미니까 혼동하지 말자 >_

프로세스 주요 활동

을 간단하게 알아보자

방법

구조적 방법론, 정보공학 방법론, 객체지향 방법론, 애자일 방법론, 컴포넌트 기반 방법론 등이 있다

아!

그리고 방법이랑 방법론을 구분해야한다
방법 : 단일 활동에 적용
방법론 : 여러 활동에 적용되거나 프로세스 전반에 걸쳐 적용

방법론은 패러다임으로 볼 수도 있다

도구

프로젝트 관리 및 이슈 추적: Jira, Trello, Asana
문서화 및 협업: Confluence, Notion, Slack
프로토타이핑 및 UI/UX 설계: Figma, Sketch
UML 모델링: StarUML, Lucidchart
API 설계 및 테스트: Postman, Swagger(OpenAPI)
통합 개발 환경 (IDE): Visual Studio Code, IntelliJ IDEA, Eclipse
버전 관리 시스템 (VCS): Git
코드 저장소 및 협업 플랫폼: GitHub, GitLab
단위 테스트 프레임워크: JUnit(Java), PyTest(Python)
UI 자동화 테스트: Selenium
성능 테스트: JMeter
CI/CD (지속적 통합/배포): Jenkins, GitHub Actions
컨테이너화: Docker
컨테이너 오케스트레이션: Kubernetes

끝~

profile
개발 블로그 맞음.

0개의 댓글