CS


분산 시스템에서의 동기화(Synchronization)의 필요성일관성 유지: 여러 대의 컴퓨터가 네트워크를 통해 상호 작용하는 분산 시스템에서는 데이터의 일관성을 유지하는 것이 중요하다.트랜잭션 처리: 분산 데이터베이스나 분산 시스템에서 트랜잭션을 일관성 있게 처리하려면 서로 다른 노드 간에 동기화된 타임스탬프나 논리적인 순서가 필요하다.분산 시스템 성능 향상: 동기화를 통해 병렬처리를 효과적으로 수행함으로써 성능을 향상시킬 수 있다.상태 공유: 여러 컴퓨터가 상태를 공유하고 특정 이벤트에 대한 조율을 필요로 할 때 동기화를 통해 상태 일관성을 유지하게 한다. RPC나 Apache Kafka를 비롯한 Message Broker가 해당 역할을 할 수 있다. Message Broker은 메시지 기반의 비동기..


Communication분산 시스템에서 공통적으로 접근하는 Shared Data에 대한 동기화(Synchronization)를 위해서 필요하다.이를 위해서 분산 시스템 간의 의사소통이 필요하기 때문에 Communication의 방법론들이 탄생하게 되었다. 두 가지 Communitcation 방법Shared Memory : 직접 메모리 엑세스(스레드), 매핑된 메모리(프로세스)물리적으로 메모리를 공유할 수는 없음Message : OS의 IPC, 네트워크를 통한 통신Latency(지연 시간) 발생Failure 확률 상승Heterogeneity로 인한 비호환성 발생 가능 분산시스템의 Communication 종류1. Message-oriented Communication2. RPC (Remote Proced..


1. 프로세스의 개념프로그램 : 저장장치에 저장되어 있는 정적인 상태프로세스 : 실행을 위해 메모리에 올라온 동적인 상태 2. 프로세스 상태프로세스 상태new(생성) : 프로세스가 메모리에 올라와 실행 준비 완료. 메모리 할당, PCB 생성ready(준비) : 생성된 프로세스가 CPU를 얻을 때 까지 기다리는 상태. PCB는 Ready Queue에서 대기. CPU 스케줄러에 의해서 관리runnng(실행) : 준비 상태에 있는 프로세스가 CPU를 얻어 실제 작업을 수행. 타임 슬라이스 동안 작업terminated(완료) : 실행 상태의 프로세스가 주어진 타임 슬라이스 내에 작업을 마침. 프로세스 종료, PCB 폐기waiting(대기) : 실행 상태의 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 ..


MVC Pattern 비즈니스 로직 및 데이터와 보이는 부분을 분리하는 디자인 패턴.사용자 인터페이스 로직이 비즈니스 로직보다 더 자주 바뀐다면 MVC를 사용하는 것이 바람직하다.화면을 포함하는 사용자 인터페이스와 업무 처리 부분을 분리해서 동작할 수 있도록 한다.MVC는 원래 Smalltalk 언어에서부터 시작되었으나 현재 GUI를 지원하는 프로그램과 웹 프레임워크에서 많이 사용됨 모델(Model) : Application의 데이터를 관리하는 부분 또는 로직뷰(View) : 데이터가 화면에 보이는 부분을 관리컨트롤러(Controller) : 사용자의 입력을 처리하고, Model과 View 사이에서 상호작용 할 수 있도록 지원 MVC와 웹 모델(Model)데이터와 비즈니스 로직을 관리하는 부분. 데..


Composite Pattern Composite Pattern은 객체들을 트리 구조로 구성하여 단일 객체처럼 다룰 수 있도록 하는 디자인 패턴이다.이 패턴은 개별 객체와 복합 객체를 동일한 방식으로 처리하여, 클라이언트 코드에서 객체를 일관된 방법으로 다룰 수 있습니다. 예제 : 도형과 도형 그룹 Componentpublic interface Shape { void draw();} 모든 도형의 공통 인터페이스를 나타낸다. 이를 Component로서 사용한다. Leafpublic class Circle implements Shape{ @Override public void draw() { System.out.println("원 그리기"); }}public clas..


Template Method Pattern 템플릿 메서드 패턴은 알고리즘의 구조를 정의하면서 일부 단계를 서브클래스로 미루는 패턴이다. 알고리즘의 뼈대를 상위 클래스에서 정의하고, 일부 단계를 서브클래스에서 구현하도록 한다. 이렇게 함으로써 알고리즘의 구조를 재사용할 수 있으면서도 일부 단계를 서브클래스에서 변경할 수 있게 한다. 음료수 템플릿 메서드 // AbstractClassabstract class BeverageTemplate { // 템플릿 메소드 final void prepareBeverage() { boilWater(); brew(); pourInCup(); addCondiments(); } abstract void..


Command Pattern 요구사항(요청, 명령)을 객체로 캡슐화시키는 디자인 패턴. 이를 이용해서 다른 요구사항을 지닌 클라이언트를 매개변수화 시킬 수 있고, 요구사항을 큐에 넣거나 로그로 남길 수 있으며 작업 취소(undo) 기능을 지원할 수도 있다. Command: Receiver를 알고 있고, Receiver의 메소드를 호출, Receiver의 메소드에서 사용되는 파라미터들은 Command에 저장됨 Receiver: 실제 명령(command)을 수행한다.Invoker: 요청을 받아서, 요청을 실행하기 위해 Command 인터페이스 연결, Command 가 실제 어떻게 실행되는지 모른다.Client: 무엇을 요청할지 결정하고, 요청 Command를 Invoker에 넘긴다. STEP 1 : ..


State Pattern State Pattern(상태 패턴)은 객체의 내부 상태가 변경될 때 객체의 행동을 변경할 수 있도록 하는 디자인 패턴. 객체의 행동이 그 객체의 상태에 따라 다르게 변하게 하기 위해 사용된다. 주로 상태 전이가 복잡하고 상태에 따른 행동이 많은 경우에 적합할 수 있다. Context : 상태를 가지고 있는 객체로, 상태에 따라 다른 행동을 수행한다. Context는 State 인터페이스를 구현한다.객체가 가질 수 있는 State들을 멤버변수로 가지며, 현재 State를 유지한다.State : 상태에 대한 인터페이스를 정의한다. Context의 상태에 따라 다른 동작을 수행하기 위한 메서드를 선언한다.ConcreteState: State 인터페이스를 구현하여 객체의 실제 상..


Facade Pattern 퍼사드 패턴은 서브시스템의 복잡성을 숨기고 클라이언트에게 간단한 인터페이스를 제공하는 구조적인 디자인 패턴이다. 문제 : 서브시스템이 너무 많고 사용하기가 복잡하다.해결방안 : 단순한 인터페이스를 제공하는 객체를 중간에 넣음결과 : 최소 지식 원칙에 입각해 의존성 최소화 아트 디자인 회사에 작품 의뢰 클라이언트는 아트 디자인 회사에 작품을 의뢰한다고 생각해보자. 클라이언트가 일일이 디자이너, 밑그림 작업자, 채색자 등의 작업순서를 알고 통제할 필요가 있을까? 클라이언트는 단순히 의뢰하는 인터페이스를 호출하도록 하는 것이 말이 될 것이다. 1. 서브 시스템들 작성public class Designer { public void analysis() { S..