본문 바로가기
-----ETC2-----/고급 프로그래밍 기술

[고급 프로그래밍] Week 3: 분산 시스템의 개념과 장단점

by cogito21_python 2024. 6. 2.
반응형

Day 1: 분산 시스템 개요

  • 강의 내용:
    • 분산 시스템의 개념
      • 분산 시스템이란 무엇인가?
      • 분산 시스템의 기본 구조
    • 분산 시스템의 특징
      • 자원 공유, 병렬 처리, 확장성
    • 분산 시스템의 응용 분야
      • 클라우드 컴퓨팅, 분산 데이터베이스, P2P 네트워크
  • 실습:
    • 분산 시스템
    server_socket.listen()
    print("Server listening on port 65432...")
    conn, addr = server_socket.accept()
    with conn:
        print(f"Connected by {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

# 클라이언트 코드
def client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 65432))
    try:
        client_socket.sendall(b'Hello, server')
        data = client_socket.recv(1024)
        print(f"Received {data} from server")
    finally:
        client_socket.close()

# 서버와 클라이언트 실행
import multiprocessing

if __name__ == "__main__":
    server_process = multiprocessing.Process(target=server)
    client_process = multiprocessing.Process(target=client)
    server_process.start()
    client_process.start()
    client_process.join()
    server_process.terminate()

 

Day 2: 분산 시스템의 장점

  • 강의 내용:
    • 확장성 (Scalability)
      • 자원 확장 용이성
    • 신뢰성 (Reliability)
      • 장애 허용 (Fault Tolerance)
    • 성능 (Performance)
      • 병렬 처리로 인한 성능 향상
    • 자원 공유 (Resource Sharing)
      • 지리적으로 분산된 자원의 효율적 이용
  • 실습:
    • 분산 시스템의 확장성 및 성능 시뮬레이션
# 클러스터 시뮬레이션 예제: 여러 클라이언트가 서버에 접속
def client(client_id):
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('localhost', 65432))
    try:
        message = f'Hello from client {client_id}'.encode()
        client_socket.sendall(message)
        data = client_socket.recv(1024)
        print(f"Client {client_id} received: {data.decode()}")
    finally:
        client_socket.close()

if __name__ == "__main__":
    server_process = multiprocessing.Process(target=server)
    server_process.start()

    client_processes = [multiprocessing.Process(target=client, args=(i,)) for i in range(5)]
    for cp in client_processes:
        cp.start()

    for cp in client_processes:
        cp.join()

    server_process.terminate()

 

Day 3: 분산 시스템의 단점

  • 강의 내용:
    • 복잡성 (Complexity)
      • 분산 시스템의 설계 및 구현의 어려움
    • 보안 문제 (Security Issues)
      • 데이터 전송 중 보안 위협
    • 데이터 일관성 (Data Consistency)
      • 분산된 데이터의 일관성 유지 문제
    • 네트워크 지연 (Network Latency)
      • 통신 지연으로 인한 성능 저하
  • 실습:
    • 분산 시스템에서의 데이터 일관성 문제 시뮬레이션
import threading
import time

shared_data = 0
lock = threading.Lock()

def increment():
    global shared_data
    for _ in range(1000):
        time.sleep(0.001)
        with lock:
            shared_data += 1

def decrement():
    global shared_data
    for _ in range(1000):
        time.sleep(0.001)
        with lock:
            shared_data -= 1

if __name__ == "__main__":
    thread1 = threading.Thread(target=increment)
    thread2 = threading.Thread(target=decrement)

    thread1.start()
    thread2.start()

    thread1.join()
    thread2.join()

    print(f"Final shared data value: {shared_data}")  # Ideally should be 0

 

Day 4: 분산 시스템의 장단점 종합

  • 강의 내용:
    • 장단점 비교
      • 장점과 단점의 균형 잡기
    • 해결 방법
      • 복잡성 관리: 모듈화와 추상화
      • 보안 강화: 암호화 및 인증
      • 일관성 유지: 분산 데이터베이스 및 CAP 이론
      • 네트워크 최적화: 효율적 프로토콜 사용
  • 실습:
    • 분산 시스템에서의 성능 최적화 시뮬레이션
import asyncio

async def handle_client(reader, writer):
    data = await reader.read(100)
    message = data.decode()
    addr = writer.get_extra_info('peername')
    print(f"Received {message} from {addr}")
    writer.write(data)
    await writer.drain()
    writer.close()

async def main():
    server = await asyncio.start_server(handle_client, '127.0.0.1', 8888)
    async with server:
        await server.serve_forever()

asyncio.run(main())

 

Day 5: 분산 시스템 종합 연습

  • 강의 내용:
    • 종합 연습 문제 풀이
      • 분산 시스템의 장단점을 고려한 설계 문제 해결
    • 분산 시스템의 응용
      • 실생활 예제에서의 분산 시스템 활용
  • 실습:
    • 종합 연습 문제 해결 및 결과 분석
### 종합 연습 문제 예시
1. 분산 시스템의 장점과 단점을 비교하여 특정 애플리케이션에 적합한 분산 시스템을 설계하세요.
2. 분산 시스템에서 발생할 수 있는 보안 문제를 해결하는 방안을 제시하고 구현하세요.
3. 데이터 일관성을 유지하면서 분산 시스템의 성능을 최적화하는 방법을 시뮬레이션하세요.

 

Day 6: 프로젝트 준비

  • 강의 내용:
    • 프로젝트 주제 선정 및 요구사항 분석
      • 프로젝트 주제 및 요구사항 확정
      • 프로젝트 설계 및 계획 수립
    • 프로젝트 구현 준비
      • 데이터 구조 및 알고리즘 설계
      • 분산 시스템 관리 및 최적화 계획
  • 실습:
    • 프로젝트 주제 및 요구사항 분석
    • 프로젝트 설계 및 계획 수립
### 프로젝트 주제 예시
1. 분산 파일 시스템 개발
2. 분산 데이터베이스 관리 시스템 구축

### 프로젝트 요구사항 예시
1. 분산 파일 시스템:
   - 분산된 파일 저장 및 접근
   - 파일 일관성 유지 및 데이터 복구
   - 파일 시스템 성능 최적화

2. 분산 데이터베이스 관리 시스템:
   - 분산된 데이터베이스 관리
   - 데이터 일관성 및 가용성 보장
   - 쿼리 성능 최적화 및 보안 강화

### 프로젝트 설계 및 계획 예시
1. 데이터 입력 모듈 구현
2. 분산 시스템 알고리즘 구현
3. 데이터 출력 및 성능 분석 모듈 구현

 

 

 

반응형