본문 바로가기
CERT/정보처리기사

[정보처리기사] 소프트웨어 설계부 오답 개념 정리 -2

by DahnDellDev 2025. 7. 25.

 

💡 소프트웨어 설계와 분석의 핵심 개념 정리

개발자라면, 또 정처기 응시생이라면 반드시 이해하고 있어야 할 핵심 설계 원칙과 분석 기법, 그리고 설계 도구들을 한눈에 정리했습니다. 이 글은 소프트웨어 아키텍처와 설계에 입문하거나 복습하고자 하는 분들을 위한 정리글입니다.


📌 1. 자료 흐름도(DFD)의 4대 구성요소

**자료 흐름도 (Data Flow Diagram)**는 시스템의 데이터를 어떻게 입력 받고 처리하고 저장하고 출력하는지를 시각화한 도구입니다.

구성요소 기호 설명

처리 (Process) ⭕ 원 데이터를 처리하는 기능, 예: 주문 처리
자료 흐름 (Data Flow) ➡️ 화살표 데이터가 흐르는 방향을 표현
자료 저장소 (Data Store) = 두 평행선 데이터를 저장하는 공간, 예: DB, 파일
단말 (Terminator) ⬛ 사각형 외부 시스템 또는 사용자

🎯 2. 클래스 설계 5대 원칙 (SOLID)

객체지향 프로그래밍에서 유지보수성과 확장성을 높이기 위한 설계 원칙입니다.

  1. SRP (단일 책임 원칙, Single Responsibility Principle)
  2. 하나의 클래스는 오직 하나의 책임만 가져야 한다.
    ✅ 변경 이유가 하나뿐이어야 함.
  3. OCP (개방-폐쇄 원칙, Open-Closed Principle)
  4. 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.
    ✅ 기존 코드를 수정하지 않고 기능을 확장할 수 있도록.
  5. LSP (리스코프 치환 원칙, Liskov Substitution Principle)
  6. 자식 클래스는 부모 클래스의 기능을 대체할 수 있어야 한다.
    ✅ 다형성에 대한 안정성을 보장.
  7. ISP (인터페이스 분리 원칙, Interface Segregation Principle)
  8. 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
    ✅ 인터페이스는 작고 명확하게 분리.
  9. DIP (의존성 역전 원칙, Dependency Inversion Principle)
  10. 구현 클래스가 아닌 추상화에 의존해야 한다.
    ✅ 상위 모듈과 하위 모듈의 결합도를 낮춘다.

🏗️ 3. 아키텍처 설계 과정

시스템의 큰 그림을 설계할 때 따르는 단계입니다.

  1. 설계 목표 설정
    • 성능, 유지보수성, 확장성 등 정의
  2. 시스템 타입 결정
    • 웹, 모바일, 분산 시스템 등
  3. 아키텍처 패턴 적용
    • MVC, Layered, Microservices 등
  4. 서브시스템 구체화
    • 각 모듈의 책임 분배
  5. 설계 검토 및 보완
    • 전문가 리뷰, 성능 테스트 등

🧱 4. 디자인 패턴이란?

**디자인 패턴 (Design Pattern)**은 객체 지향 설계에서 자주 마주치는 문제들에 대한 반복 가능한 해결책입니다.

  • 예시: Singleton, Factory Method, Observer, Strategy 등
  • 장점: 코드 재사용, 설계 표준화, 유지보수성 향상

🔍 5. 대표적인 객체지향 분석 기법

✅ RumBaugh (럼바우 방법)

  • 객체 모델링 중심
  • 세 가지 모델: 객체 모델 / 동적 모델 / 기능 모델

✅ Booch (부치 방법)

  • 미시적/거시적 개발 모두 포함
  • 복잡한 시스템을 구조적으로 분석하고 클래스/객체를 식별

✅ Jacobson

  • Use Case 중심 분석
  • 사용자 요구를 중심으로 시스템을 정의

✅ Coad & Yourdon

  • ERD 기반 분석 기법
  • 개체 간 관계를 시각화하고 논리 모델링에 적합

✅ Wirfs-Brock

  • 고객 명세서 기반 설계
  • 유저 시나리오에 따라 분석 및 설계 진행

🔗 6. 시스템 용어 및 개념 정리

용어 설명

EAI (Enterprise Application Integration) 기업 내 여러 운영 프로그램들을 통합해 연동하는 기술
FEP (Front-End Processor) 입력 데이터를 사전 처리하거나 분산 제어하는 장치
GPL (General Public License) 소스코드 공개를 조건으로 배포되는 자유 소프트웨어 라이선스
Duplexing (이중화) 장애 발생 시 대비를 위해 동일한 구성 요소를 2개 이상 두는 방식

📝 마무리

소프트웨어 설계와 분석은 단순한 코드 작성 이상의 사고를 요구합니다.
자료 흐름, 객체지향 설계 원칙, 디자인 패턴, 그리고 분석 기법까지 숙지한다면 더욱 견고하고 유지보수 가능한 시스템을 설계할 수 있습니다. 궁금한 점은 언제든지 댓글이나 문의로 남겨 주세요! 😊