본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

마스터-슬레이브 패턴(Master-Slave Pattern)은 마스터 컴포넌트가 작업을 같은 성격의 하위 작업으로 나눠 여러 슬레이브에 맡기고, 슬레이브들이 각자 계산해 돌려준 결과를 마스터가 합쳐 최종 결과를 만드는 아키텍처 패턴이다.

부시먼(Frank Buschmann) 등이 『Pattern-Oriented Software Architecture』(POSA, 1996) 1권에서 분산·병렬 처리를 위한 패턴으로 정리했다. 구현 단계는 작업을 비슷한 크기의 하위 작업으로 나누는 방법 정하기, 하위 결과를 합치는 방법 정하기, 마스터와 슬레이브의 협력 방식 정하기, 슬레이브 구현, 마스터 구현의 순서이다. 슬레이브를 별도 프로세스로 둘지 스레드로 둘지도 이때 정한다.[1] 오늘날에는 마스터-워커(Master-Worker)라는 이름으로도 부른다. 마스터가 작업을 여러 워커에 나눠 주고 워커가 병렬로 실행해 결과를 보고하면 마스터가 결과를 모아 처리량과 확장성을 높인다.[2]

참여자 역할
클라이언트 마스터에게 서비스를 요청하고 최종 결과만 받는다. 작업이 나뉘는 줄 모른다
마스터 작업을 분할(split)하고, 슬레이브에 배분하고, 결과를 병합(merge)해 돌려준다
슬레이브 같은 인터페이스로 하위 작업 하나를 독립적으로 계산해 결과를 돌려준다

시퀀스 다이어그램으로 그리면 다음 흐름이 된다. 클라이언트가 service(data)를 호출하면 마스터가 자기 메시지로 split(data)를 실행해 data1, data2로 나눈다. 이어 병렬 결합 프래그먼트(par) 안에서 두 슬레이브에게 do(data1), do(data2)를 동시에 보내 각각 subResult1, subResult2를 받는다. 마지막으로 자기 메시지 merge(subResult1, subResult2)로 결과를 합쳐 클라이언트에 반환한다. 분할, 병렬 위임, 병합의 세 단계가 보이면 마스터-슬레이브 패턴이다.

자바의 포크/조인 프레임워크는 같은 생각을 재귀로 구현한다. 작업이 충분히 작으면 직접 계산하고, 아니면 둘로 나눠(fork) 각각 맡긴 뒤 결과를 기다려 합친다(join).[3]

쓰임과 장단점

편집 원본 편집
  • 쓰임 - 대용량 데이터의 병렬 계산, 같은 계산을 여러 슬레이브에 시켜 다수결로 결과를 고르는 결함 허용(fault tolerance), 여러 알고리즘을 동시에 돌려 가장 좋은 결과를 고르는 경우. 데이터베이스 복제에서 쓰기는 마스터가, 읽기는 복제본이 맡는 구성도 같은 이름을 쓴다.
  • 장점 - 슬레이브를 늘려 처리 시간을 줄일 수 있고, 클라이언트는 분할 방식을 몰라도 된다. 슬레이브를 교체하거나 늘리기 쉽다.
  • 단점 - 작업이 독립적으로 나뉘지 않으면 쓸 수 없다. 분할·병합·통신 비용이 계산 이득보다 크면 오히려 느려진다. 마스터가 단일 장애점이 된다.

비슷한 패턴과 구별하기

편집 원본 편집
패턴 작업 흐름 구별 포인트
마스터-슬레이브 마스터가 분할 → 슬레이브 병렬 처리 → 마스터가 병합 같은 종류 작업을 병렬로 나눠 맡긴다
파이프 앤 필터 필터1 → 필터2 → 필터3 순서로 데이터가 흐른다 서로 다른 처리 단계를 순차로 잇는다. 분할·병합 단계가 없다
프론트 컨트롤러 모든 웹 요청을 한 진입점이 받아 처리기·뷰로 보낸다 요청 라우팅 패턴이다. 결과를 합치지 않는다
MVC 컨트롤러가 입력을 받아 모델을 바꾸고 뷰가 표시한다 화면·로직 분리 패턴이다
  1. ↑ Frank Buschmann 외, 『Pattern-Oriented Software Architecture, Volume 1: A System of Patterns』, Wiley, 1996, Master-Slave, https://www.oreilly.com/library/view/pattern-oriented-software-architecture/9781119963998/, 확인일: 2026-11-04.
  2. ↑ 「Master-Worker Pattern in Java」, Java Design Patterns, https://www.java-design-patterns.com/patterns/master-worker, 확인일: 2026-11-04.
  3. ↑ 「Fork/Join」, The Java Tutorials, Oracle, https://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html, 확인일: 2026-11-04.