자격증/정보처리기사

[정보처리기사 실기 이론] 소프트웨어 아키텍처 패턴

꾸행일기 2025. 7. 2. 15:39

✅ 1. 계층화 패턴 (Layered Pattern)

설명

  • 기능을 계층별로 나눠서 각 계층이 자신의 역할만 담당하도록 구조화 시킨 패턴

쉽게 말하면

  • 학생 → 담임 선생님 → 교무실 → 행정실 순서로 일처리가 올라가고, 답도 역순으로 내려온다.

구조

    • 프레젠테이션 계층: 사용자와 직접 소통하는 부분 (예: 화면, 버튼)
    • 비즈니스 로직 계층: 규칙을 처리하는 곳 (예: 성적 계산)
    • 데이터 접근 계층: 데이터 저장/불러오는 곳 (예: 데이터베이스)

예제: 은행 앱

  • 사용자 인터페이스(UI): 계좌 조회 화면
  • 비즈니스 로직: 이체 가능 여부, 수수료 계산
  • 데이터 계층: 사용자 계좌 정보, 거래 내역 DB

✅ 2. 클라이언트-서버 패턴 (Client-Server Pattern)

  • 설명: 클라이언트가 요청하고, 서버가 응답하는 구조
  • 예제: 웹 브라우저와 웹사이트
    • 크롬(클라이언트)이 네이버에 접속하면, 서버가 홈페이지 HTML을 응답

✅ 3. 파이프-필터 패턴 (Pipe-Filter Pattern)

설명

  • 데이터를 단계별로 처리하는 구조 (필터들 사이에 파이프 연결)

쉽게 말해

  • 물이 필터를 거치면서 점점 깨끗해지는 것처럼, 데이터를 단계별로 처리한다.

구조

  • 필터(Filter): 데이터를 가공하는 작업 단위
  • 파이프(Pipe): 데이터를 다음 필터로 전달

예제: 음악 편집 소프트웨어

  • 잡음 제거 → 볼륨 조절 → 효과 추가 → 파일 저장

✅ 4. 브로커 패턴 (Broker Pattern)

설명

  • 클라이언트와 서버 사이에 중개자(브로커)가 있음

🔍 핵심 개념:

    • 말그대로 브로커 역할. "중간에서 연결해주는 중개인" 역할을 하는 구조
    • 클라이언트는 어떤 서비스를 원하고, 서버는 실제 일을 할 수 있는데, 서로 어디 있는지 몰라서 직접 연결할 수 없을 때, 브로커가 대신 연결해준다.

쉽게 말하면

  • 배달의 민족 같은 중개 앱을 생각해보면,
  • 고객(클라이언트)이 음식을 주문해
  • 가게(서버)는 음식을 만들지
  • 그런데 고객은 가게를 직접 찾거나 연결할 필요 없이,
    배달앱(브로커)이 알아서 중간에서 연결해줌
    • 보통 분산 시스템에서 많이 사용함.

🖧  왜 분산 시스템에 필요할까?

분산 시스템에서는 서버가 하나가 아니고 여러 개이다.
게다가 이 서버들은 다른 컴퓨터, 다른 지역에 흩어져 있을 수도 있다.
그런데 클라이언트가 매번 서버를 직접 찾거나 통신 방식까지 다 알아야 한다면? 너무 복잡하기 때문에 그래서!

 

브로커가 클라이언트와 서버 사이에서 이렇게 도와준다.

    • 서버 등록: "나 이 기능 할 수 있어!"
    • 클라이언트 요청: "이 기능 해줘!"
    • 연결 중개: "오키ㅋ 요청을 저 서버로 보내줄게!"

✅ 5. MVC 패턴 (Model-View-Controller)

  • 설명: 화면(View), 데이터(Model), 요청 처리(Controller)를 분리
  • 예제: 쇼핑몰 웹사이트
    • 상품 조회 → Controller가 요청 → Model에서 데이터 → View에 보여줌

✅ 6. 마스터-슬레이브 패턴 (Master-Slave Pattern)

  • 설명: 마스터가 전체 작업을 분할하고, 여러 슬레이브에게 나눠주어 처리시킴.
             슬레이브는 결과만 다시 마스터에게 보냄.
  • 예제: 데이터베이스 복제 시스템
    • Master DB: 데이터 입력, 변경 수행
    • Slave DB: 읽기 전용, 다수의 사용자 요청 처리에 활용
  • 예를 들어, 네이버 검색엔진이 수많은 사용자의 검색 요청을 슬레이브 DB에서 빠르게 응답함.

✅ 7. 피어 투 피어 패턴 (Peer-to-Peer Pattern)

  • 설명: 모든 컴퓨터가 동등한 위치에서 서로 데이터를 주고받음 (서버가 따로 없음)
  • 예제: 토렌트 다운로드 시스템
    • 누군가 파일을 가지고 있으면, 여러 사용자에게 동시에 전송 가능
    • 각각이 서버이자 클라이언트 역할을 동시에 함

✅ 8. 이벤트 버스 패턴 (Event-Bus Pattern)

  • 설명: 여러 컴포넌트가 이벤트를 주고받을 수 있도록 **중앙 통신 시스템(Event Bus)**을 둠
    송신자는 수신자를 몰라도 됨 (느슨한 결합)
  • 예제: Android 앱의 이벤트 처리
    • 버튼 클릭 → 이벤트 발생 → Event Bus가 리스너에게 전달
    • 대표 라이브러리: EventBus, RxJava

🔍 핵심 개념: ‘어디선가 이벤트가 발생하면, 그걸 듣고 있던 부품들이 알아서 반응하는 구조

 

💡 쉽게 말하면:

  • 학교에서 **교내 방송(이벤트)**을 틀었더니,
  • 어떤 반은 조용히 듣고,
  • 어떤 반은 조용히 앉고,
  • 어떤 반은 방송을 무시함 😅

즉, 방송을 모두가 듣고 있고,
필요한 애들만 필요한 반응을 하는 것.

 

앱 예시 : 카카오톡 메시지 수신 처리

  • 메시지가 도착했다는 이벤트가 발생하면,
    • 📱채팅창은 새 메시지를 화면에 보여주고
    • 🔔알림 센터는 푸시 알림을 띄우고
    • 📥저장 모듈은 메시지를 DB에 저장함

각각의 기능이 이벤트 버스를 통해 알림을 받아따로따로 처리하는 것이다.


✅ 9. 블랙보드 패턴 (Blackboard Pattern)

  • 설명: **여러 컴포넌트(전문가)**들이 하나의 공통 공간(블랙보드)에 접근하여 문제를 해결함
  • 예제: 각 컴포넌트는 블랙보드 상태를 보며 필요한 때에 동작함
  • 음성 인식 시스템
    • 음향 분석, 문맥 분석, 언어 처리 모듈이 각자 블랙보드에서 정보를 가져와 협업
  • 또 다른 예: AI 진단 시스템

🔍 핵심 개념:

 ‘모든 지식을 칠판(블랙보드)에 쓰고, 여러 전문가들이 거기서 정보를 가져와서 각자 해석하고 업데이트하는 구조’

 

💡 쉽게 말하면:

수학 문제를 칠판에 써놓고,

  • 한 학생은 문제를 읽고 숫자를 정리하고,
  • 다른 학생은 공식에 대입하고,
  • 또 다른 학생은 그래프를 그림
    → 결과를 다시 칠판에 써서 다음 사람이 이어받아 작업함

즉, 하나의 공간에 정보가 공유되고, 여러 모듈이 협력적으로 문제 해결을 해나가는 구조이다.

 

🧠 실제 예시:

음성 인식 시스템

  1. 🎤 마이크로 입력된 음성을 블랙보드에 올림
  2. 🔍 모듈1: 음성 → 단어 분리
  3. 🧠 모듈2: 단어 → 문장 해석
  4. 📄 모듈3: 문장 → 의미 분석
  5. 💬 최종 결과 출력

이런 시스템은 모듈끼리 직접 대화하지 않고, 블랙보드라는 공유 공간을 보고, 쓰고, 읽으면서 협력하는 방식이다.


✅ 10. 인터프리터 패턴 (Interpreter Pattern)

  • 설명: 언어나 문법 규칙을 가진 코드를 해석하고 실행하는 구조
  • 예제
  • SQL 파서
    • SELECT * FROM table WHERE age > 20; 이 문장을 해석하고 실행함
  • 정규표현식 엔진
    • 입력된 패턴을 해석해서 해당 문자열을 찾아줌