분산 시스템에서는 사용자가 시스템이 분산되어 있다는 사실을 인식하지 못하도록 해야 한다. 이를 위해 여러 형태의 **“투명성 (Transparency)”**이 필요하다. 각 투명성의 개념과 역할을 설명하라.
분산 시스템은 여러 대의 컴퓨터가 하나처럼 동작하게 해야 하므로, 위치, 접근, 이주, 복제, 병행, 고장, 성능, 확장 등 총 8가지 투명성을 제공해야 한다. 이를 통해 사용자와 개발자는 시스템이 분산되어 있다는 사실을 인식하지 않아도 된다.
| 종류 | 이름 (한글) | 설명 | 예시 |
|---|---|---|---|
| 1 | 접근 투명성 (Access Transparency) | 리소스에 접근하는 방법이 동일하게 보이도록 함 (로컬이든 원격이든 상관없음) | local 파일 read()와 remote 파일 read()가 같은 인터페이스 |
| 2 | 위치 투명성 (Location Transparency) | 리소스가 어디에 있는지 사용자가 알 필요 없도록 함 | 프린터가 어디에 있어도 //printer/1으로 출력 |
| 3 | 이주 투명성 (Migration Transparency) | 리소스나 프로세스가 다른 위치로 옮겨져도 사용자에겐 영향 없음 | 프로세스가 서버 간 이동해도 중단 없이 서비스됨 |
| 4 | 복제 투명성 (Replication Transparency) | 복제된 리소스 중 어느 것을 사용하든 사용자는 구분하지 못함 | 웹 서버가 여러 대 있어도 www.example.com 하나로 접속 |
| 5 | 병행 투명성 (Concurrency Transparency) | 여러 사용자가 동시에 같은 리소스를 사용해도 충돌 없이 동작함 | 여러 사용자가 동시에 데이터베이스에 접근해도 오류 없음 |
| 6 | 고장 투명성 (Failure Transparency) | 일부 시스템이 실패해도 전체 서비스는 계속 동작함 | 서버 하나가 죽어도 로드밸런서가 자동으로 다른 서버로 연결 |
| 7 | 성능 투명성 (Performance Transparency) | 시스템 부하에 따라 성능 조절이 자동으로 이루어짐 | 부하가 많을 때 서버를 자동으로 더 투입 (Auto Scaling) |
| 8 | 확장 투명성 (Scalability Transparency) | 시스템에 새로운 자원을 추가해도 사용자에겐 영향 없음 | 노드를 10개에서 100개로 늘려도 서비스 방식은 동일 |
[사용자]
↓
[응용 프로그램 인터페이스]
↓ ← 접근, 위치, 복제, 병행 투명성
[미들웨어/운영체제]
↓ ← 이주, 고장, 성능, 확장 투명성
[물리적 리소스]
| 목적 | 설명 |
|---|---|
| 사용자 편의성 제공 | 복잡한 분산 구조를 숨겨 사용자에게 단일 시스템처럼 보이게 함 |
| 시스템의 신뢰성 향상 | 장애에 강하고 성능 유연한 구조 제공 |
| 개발 생산성 향상 | 프로그래머가 위치, 접근 방식 등을 신경 쓰지 않고 개발 가능 |
| 유지보수/확장성 확보 | 시스템 구조 변경에도 서비스 일관성 유지 가능 |
“분산 시스템은 컴퓨터 여러 대가 같이 일하는데, 사람들은 그걸 하나처럼 느껴야 해요!
그래서 컴퓨터가 어디 있든, 몇 대든, 옮기든, 고장 나든 티 안 나게 만들어주는 걸 ‘투명성’이라고 해요!”