정보처리기사 필기 1과목 소프트웨어 설계는 전체 100문항 중 20문항을 차지합니다. 요구사항 분석부터 UML, 아키텍처 패턴, 객체지향 설계 원칙까지 범위가 넓지만 출제 패턴이 어느 정도 정해져 있어요. 자주 나오는 개념만 제대로 익혀두면 충분히 고득점이 가능한 과목입니다.
1. 요구사항 분석
요구사항의 분류
| 종류 | 설명 | 예시 |
|---|---|---|
| 기능적 요구사항 | 시스템이 반드시 수행해야 하는 기능·서비스 | "사용자는 아이디/비밀번호로 로그인할 수 있어야 한다" |
| 비기능적 요구사항 | 시스템의 품질·성능·제약 조건 | "로그인 응답 시간은 2초 이내여야 한다" |
요구사항 개발 프로세스
| 단계 | 활동 |
|---|---|
| 도출(Elicitation) | 인터뷰, 설문, 워크숍, 관찰 등으로 이해관계자에게 요구사항 수집 |
| 분석(Analysis) | 수집된 요구사항의 충돌 해결, 우선순위 결정, 실현 가능성 검토 |
| 명세(Specification) | 요구사항을 문서화. SRS(소프트웨어 요구사항 명세서) 작성 |
| 검증(Validation) | 요구사항이 완전·일관·검증 가능한지 확인. 리뷰, 프로토타입으로 검증 |
🎯 자주 나오는 시험 포인트
✔ 요구사항 개발 순서: 도출 → 분석 → 명세 → 검증
✔ "시스템이 '무엇을' 해야 하는가" → 기능적 / "얼마나 잘 해야 하는가" → 비기능적
✔ 요구사항 명세 문서 = SRS(Software Requirements Specification)
✔ 요구사항 개발 순서: 도출 → 분석 → 명세 → 검증
✔ "시스템이 '무엇을' 해야 하는가" → 기능적 / "얼마나 잘 해야 하는가" → 비기능적
✔ 요구사항 명세 문서 = SRS(Software Requirements Specification)
요구사항 확인 기법
| 기법 | 설명 |
|---|---|
| 요구사항 검토(리뷰) | 여러 검토자가 문서를 읽고 오류·모순을 찾는 동료 검토 |
| 프로토타이핑 | 시제품을 만들어 사용자에게 보여주고 피드백 수집 |
| 테스트 케이스 작성 | 요구사항을 테스트 케이스로 작성해 검증 가능성 확인 |
| CASE 도구 | 소프트웨어 개발을 지원하는 자동화 도구로 요구사항 추적·분석 |
2. UML과 다이어그램
필기에서 UML은 다이어그램의 종류와 특징을 묻는 문제가 핵심입니다. 실기 소프트웨어 공학 글에서 자세히 다뤘으니 여기서는 필기 출제 포인트만 요약합니다.
| 분류 | 다이어그램 | 핵심 키워드 |
|---|---|---|
| 구조 (정적) | 클래스 | 속성·메서드·관계. 가장 자주 출제 |
| 객체 | 클래스의 인스턴스, 특정 시점의 스냅샷 | |
| 컴포넌트 | 독립 실행 가능한 소프트웨어 단위 | |
| 배치 | 하드웨어 노드에 컴포넌트 배치, 물리적 구조 | |
| 패키지 | 관련 요소를 그룹화 | |
| 행위 (동적) | 유스케이스 | Actor, include, extend 관계 |
| 시퀀스 | 시간 흐름, 생명선(Lifeline), 메시지 순서 | |
| 커뮤니케이션 | 시퀀스와 동일 정보, 공간 배치 강조, 메시지 번호 | |
| 상태 | 객체의 상태 변화·전이 조건 | |
| 활동 | 업무 흐름, 병렬 처리, swimlane으로 역할 구분 |
🎯 필기 UML 빈출 문제
✔ "사용자(Actor)와 시스템 간 상호작용을 표현하는 다이어그램은?" → 유스케이스 다이어그램
✔ "객체 간 메시지 교환 순서를 시간 흐름으로 표현하는 다이어그램은?" → 시퀀스 다이어그램
✔ "include는 반드시 포함, extend는 조건부 확장" — 이 두 가지 관계는 매우 자주 출제
✔ "사용자(Actor)와 시스템 간 상호작용을 표현하는 다이어그램은?" → 유스케이스 다이어그램
✔ "객체 간 메시지 교환 순서를 시간 흐름으로 표현하는 다이어그램은?" → 시퀀스 다이어그램
✔ "include는 반드시 포함, extend는 조건부 확장" — 이 두 가지 관계는 매우 자주 출제
3. 소프트웨어 아키텍처 패턴
아키텍처 패턴은 시스템 전체 구조를 설계하는 검증된 방식입니다. 각 패턴의 이름과 특징을 서술형·객관식 모두에 대비해 익혀두세요.
| 패턴 | 구조 | 대표 예시 |
|---|---|---|
| 계층화(Layered) | 시스템을 계층으로 나누어 상위 계층이 하위 계층 서비스를 사용. 각 계층은 인접 계층과만 통신 | OSI 7계층, MVC 패턴, TCP/IP |
| 클라이언트-서버 | 클라이언트가 서버에 서비스를 요청하고 서버가 응답. 역할이 명확히 분리 | 웹 브라우저-웹 서버, 이메일 클라이언트 |
| 파이프-필터 | 데이터가 파이프를 통해 필터(처리 단계)를 순서대로 통과하며 변환 | Unix 명령어 파이프(|), 컴파일러 처리 단계 |
| MVC | Model(데이터)·View(화면)·Controller(논리)로 분리. 관심사 분리 원칙 | Spring MVC, Django, Ruby on Rails |
| 마스터-슬레이브 | 마스터가 작업을 슬레이브에 분배하고 결과를 수집·통합 | DB 이중화, 병렬 처리, 임베디드 시스템 |
| 브로커(Broker) | 분산 컴포넌트 간 통신을 브로커가 중재. 클라이언트는 브로커에만 요청 | CORBA, RPC, 메시지 미들웨어 |
| 이벤트 버스 | 이벤트 발행자가 버스에 이벤트를 게시하면 구독자가 수신하여 처리 | GUI 이벤트 처리, IoT 시스템 |
🎯 아키텍처 패턴 빈출 포인트
✔ "Unix 파이프(|)처럼 데이터가 단계적으로 처리되는 패턴은?" → 파이프-필터
✔ "Model·View·Controller로 관심사를 분리하는 패턴은?" → MVC
✔ "분산 환경에서 컴포넌트 간 통신을 중재하는 패턴은?" → 브로커
✔ "Unix 파이프(|)처럼 데이터가 단계적으로 처리되는 패턴은?" → 파이프-필터
✔ "Model·View·Controller로 관심사를 분리하는 패턴은?" → MVC
✔ "분산 환경에서 컴포넌트 간 통신을 중재하는 패턴은?" → 브로커
4. 객체지향 설계 원칙 — SOLID
SOLID는 로버트 마틴이 정리한 객체지향 설계 5대 원칙입니다. 필기에서는 각 원칙의 이름(영문 포함)과 설명을 연결하는 문제가 자주 나옵니다.
S — 단일 책임 원칙
Single Responsibility Principle (SRP)
클래스는 변경해야 할 이유가 하나여야 한다. 하나의 클래스는 하나의 책임만 가져야 한다.
O — 개방-폐쇄 원칙
Open-Closed Principle (OCP)
소프트웨어 요소는 확장에는 열려 있고 수정에는 닫혀 있어야 한다.
L — 리스코프 치환 원칙
Liskov Substitution Principle (LSP)
서브타입(자식 클래스)은 언제나 기반 타입(부모 클래스)으로 교체 가능해야 한다.
I — 인터페이스 분리 원칙
Interface Segregation Principle (ISP)
클라이언트는 자신이 사용하지 않는 메서드에 의존하면 안 된다. 인터페이스를 작게 분리하라.
D — 의존 역전 원칙
Dependency Inversion Principle (DIP)
고수준 모듈은 저수준 모듈에 의존하지 않아야 한다. 둘 다 추상화에 의존해야 한다.
💡 SOLID 암기법
Single — 책임 하나
Open/Closed — 확장 열림, 수정 닫힘
Liskov — 자식이 부모 대신 들어갈 수 있어야 함
Interface — 인터페이스는 잘게 쪼개라
Dependency — 구체보다 추상에 의존하라
Single — 책임 하나
Open/Closed — 확장 열림, 수정 닫힘
Liskov — 자식이 부모 대신 들어갈 수 있어야 함
Interface — 인터페이스는 잘게 쪼개라
Dependency — 구체보다 추상에 의존하라
5. 결합도(Coupling)와 응집도(Cohesion)
좋은 설계의 기준입니다. 결합도는 낮을수록, 응집도는 높을수록 좋은 설계입니다. 강도 순서를 외워두면 "다음 중 결합도가 가장 낮은 것은?" 문제에 바로 답할 수 있습니다.
결합도 — 낮을수록 좋음 (약함 → 강함)
| 종류 | 설명 | 강도 |
|---|---|---|
| 자료(Data) 결합도 | 모듈 간 단순 자료(값)만 파라미터로 전달 | ★☆☆☆☆ (가장 낮음 = 좋음) |
| 스탬프(Stamp) 결합도 | 자료구조(레코드) 전체를 파라미터로 전달 | ★★☆☆☆ |
| 제어(Control) 결합도 | 제어 신호(플래그)를 파라미터로 전달해 흐름 제어 | ★★★☆☆ |
| 외부(External) 결합도 | 외부 환경·데이터 형식·프로토콜을 공유 | ★★★★☆ |
| 공통(Common) 결합도 | 전역 변수를 여러 모듈이 공유 | ★★★★☆ |
| 내용(Content) 결합도 | 한 모듈이 다른 모듈의 내부 데이터를 직접 참조·수정 | ★★★★★ (가장 높음 = 나쁨) |
응집도 — 높을수록 좋음 (강함 → 약함)
| 종류 | 설명 | 강도 |
|---|---|---|
| 기능적(Functional) 응집도 | 모듈의 모든 요소가 단 하나의 기능을 위해 존재 | ★★★★★ (가장 높음 = 좋음) |
| 순차적(Sequential) 응집도 | 한 요소의 출력이 다음 요소의 입력으로 사용 | ★★★★☆ |
| 통신적(Communicational) 응집도 | 동일한 데이터를 사용하는 요소들이 모여 있음 | ★★★☆☆ |
| 절차적(Procedural) 응집도 | 요소들이 특정 순서로 수행되어야 하는 경우 | ★★★☆☆ |
| 시간적(Temporal) 응집도 | 같은 시점에 실행되는 요소들이 모여 있음 (초기화 루틴) | ★★☆☆☆ |
| 논리적(Logical) 응집도 | 논리적으로 비슷한 기능을 하나의 모듈에 묶음 | ★★☆☆☆ |
| 우연적(Coincidental) 응집도 | 관련 없는 요소들이 우연히 한 모듈에 묶임 | ★☆☆☆☆ (가장 낮음 = 나쁨) |
🎯 결합도·응집도 핵심 암기
결합도 낮은 순: 자·스·제·외·공·내 (자스제외공내)
응집도 높은 순: 기·순·통·절·시·논·우 (기순통절시논우)
✔ "결합도가 가장 낮은(좋은) 것은?" → 자료 결합도
✔ "응집도가 가장 높은(좋은) 것은?" → 기능적 응집도
결합도 낮은 순: 자·스·제·외·공·내 (자스제외공내)
응집도 높은 순: 기·순·통·절·시·논·우 (기순통절시논우)
✔ "결합도가 가장 낮은(좋은) 것은?" → 자료 결합도
✔ "응집도가 가장 높은(좋은) 것은?" → 기능적 응집도
6. 인터페이스 설계
시스템 인터페이스 방식
| 방식 | 설명 | 특징 |
|---|---|---|
| 데이터베이스 연계 | DB 링크, DB 뷰 등을 통해 직접 데이터 공유 | 실시간 연동 가능. 긴밀한 결합 |
| 파일 전송 | CSV, XML 등 파일로 주기적 데이터 교환 | 구현 단순. 실시간성 낮음 |
| 웹 서비스(API) | HTTP 기반 REST API, SOAP 방식으로 데이터 교환 | 표준화, 느슨한 결합, 범용성 높음 |
| 메시지 큐 | MQ(Message Queue)를 통해 비동기 메시지 전달 | 시스템 간 의존도 낮음, 장애 격리 |
REST API 특징 — 필기 출제 포인트
| 특성 | 설명 |
|---|---|
| 무상태성(Stateless) | 각 요청은 독립적이며 서버는 클라이언트 상태를 저장하지 않음 |
| 균일한 인터페이스 | HTTP 메서드(GET·POST·PUT·DELETE)로 자원을 처리 |
| 캐시 가능 | 응답을 캐시하여 성능 향상 가능 |
| 계층화 시스템 | 클라이언트는 서버와 직접 연결인지 중간 서버와 연결인지 알 수 없음 |
💡 HTTP 메서드와 CRUD 대응
GET → Read(조회) | POST → Create(생성)
PUT → Update(전체 수정) | PATCH → Update(부분 수정) | DELETE → Delete(삭제)
GET → Read(조회) | POST → Create(생성)
PUT → Update(전체 수정) | PATCH → Update(부분 수정) | DELETE → Delete(삭제)
📚 1과목 필기 고득점 전략
① 요구사항 개발 4단계 순서(도출→분석→명세→검증)와 각 단계 활동을 외우세요. 순서를 바꾸어 출제하는 문제가 자주 나옵니다.
② 결합도·응집도는 표를 보지 않고 순서를 쓸 수 있을 때까지 반복하세요. "자스제외공내"와 "기순통절시논우"를 소리 내어 외우는 것이 효과적입니다.
③ SOLID 원칙은 영문 약자와 한국어 설명을 세트로 외우세요. "OCP는 확장 열림·수정 닫힘"처럼 짝을 지어 기억하면 됩니다.
④ 아키텍처 패턴은 대표 예시(파이프-필터=Unix 파이프, MVC=Spring)와 함께 외우면 쉽게 정착됩니다.
① 요구사항 개발 4단계 순서(도출→분석→명세→검증)와 각 단계 활동을 외우세요. 순서를 바꾸어 출제하는 문제가 자주 나옵니다.
② 결합도·응집도는 표를 보지 않고 순서를 쓸 수 있을 때까지 반복하세요. "자스제외공내"와 "기순통절시논우"를 소리 내어 외우는 것이 효과적입니다.
③ SOLID 원칙은 영문 약자와 한국어 설명을 세트로 외우세요. "OCP는 확장 열림·수정 닫힘"처럼 짝을 지어 기억하면 됩니다.
④ 아키텍처 패턴은 대표 예시(파이프-필터=Unix 파이프, MVC=Spring)와 함께 외우면 쉽게 정착됩니다.