facade pattern 소프트웨어 공학 디자인 패턴중 하나로 여기서 facade란 

    • 소프트웨어 라이브러리를 쉽게 사용할 수 있게 
    • 쉽게 이해할 수 있게
    • 코드를 읽기 쉽게
    • 공통적인 작업데 대해 간편한 메소드를 제공
    • 또한 라이브러리 바깥쪽의 코드가 라이브러리의 안쪽 코드에 의존하는 일을 감소
    • 좋게 작성되지 않은 API의 집합을 하나의 좋게 작성된 API로 감싸 사용

해 커다란 코드 부분에 대한 간략한 인터페이스를 제공하는 것 이다.


간단한 예로 라면끓여 먹으려면 

//물을 받고
getWater{};

//불을 키고
setFire{};

//라면을 넣고
setRamen{}

이런 메소드를 호출애햐 하는데 이를 하나의 메소드 또는 인터페이스로 정의한 다음 다른 곳에서 사용할때는 아래외 같이 

doRamen(){
//물을 받고
getWater{};

//불을 키고
setFire{};

//라면을 넣고
setRamen{};
};

doRamen()을 사용해 쉽게 사용할 수 있도록 하는 페턴을 말한다.

'프로그래밍 > 그외' 카테고리의 다른 글

DB Savepoint  (0) 2016.06.21
scheduling - 스케줄링  (0) 2016.06.01
DI (Dependency Injection)  (0) 2016.05.26
First Class Object  (0) 2016.05.25

DB Savepoint 란 DB Transaction내에서 하위 Transaction을 실현하기 위한 데이터베이스 언어인  SQL 구문 중 하나이다.

Transaction 내에 특정 지점을 지정하면 그 이전애 실행된 내용과 상관없이 아래 내용을 실행중 오류가나면 Savepoint이후에 실행된 부분만 롤백 할 수 있다.

단일 Transaction 에 여러 Savepoint 생성할 수 도 있다.

savepoint 는 표준 SQL 에도 채용하고 있어 많은 관계형 DB에서 지원하고 있다.(PostgreSQL, Oracle DB, MS SQL Server, MySQL...)


예제)

UPDATE employees 
    SET salary = 7000 
    WHERE last_name = 'Banda';
SAVEPOINT banda_sal;

UPDATE employees 
    SET salary = 12000 
    WHERE last_name = 'Greene';
SAVEPOINT greene_sal;

SELECT SUM(salary) FROM employees;

ROLLBACK TO SAVEPOINT banda_sal;
 
UPDATE employees 
    SET salary = 11000 
    WHERE last_name = 'Greene';
 
COMMIT; 

위의 예제를 보면 banda_sal 라는 Savepoint 를 생성하고 하위 에 greene_sal 라는 Savepoint 를 추가로 생성하였다. 그리고 banda_sal 하위에서 업데이트를 한 후 banda_sal 를 롤백 하고 다시 하위에 업데이트를 했다. 


(예제 출처 : https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10001.htm)

'프로그래밍 > 그외' 카테고리의 다른 글

facade pattern  (1) 2016.06.21
scheduling - 스케줄링  (0) 2016.06.01
DI (Dependency Injection)  (0) 2016.05.26
First Class Object  (0) 2016.05.25

스케줄링이란,

다중 프로그래밍을 가능하게 하는 운영체제의 동작기법으로 운영체제는 프로세스들에게 CPU 등의 자원 배정을 적절히 함으로써 시스템의 성능을 개선시킨다.


다중 프로그래밍이란 CPU이용율을 최대화 하기 위해 항상 실행중인 프로세스를 시도하는 것이다.


스케줄링의 목적

    • 응답시간의 최소화
    • 처리량 극대화
    • 균형있는 자원 사용


스케줄링 단계

    • 1단계 스케줄링
      • 작업(job) 스케줄링, 승인(admission) 스케줄링. 장기(long-term) 스케줄링으로 어느작업을 선택해 시스템의 자원을 이용하게 할 것 인가를 결정
    • 2단계 스케줄링
      • 작업 프로세스들 중에서 어느 것을 활성화 시키고, 보류 시킬지 결정
    • 3단계 스케줄링
      • CPU 스케줄링, 단기(short-term) 스케줄링으로 CPU가 사용가능한 경우 프로세스들 중 어느 프로세스에게 CPU를 할당할 것인지 결정

CPU 스케줄링의 결정 시점 프로세스의 상태 변화에 결정된다.
    1.  수행 -> 대기
    2.  수행 -> 준비
    3.  대기 -> 준비
    4.  수행 -> 종료
의 4가지 시점이 있고 위의 프로세스의 상태는 아래와 같다.

    • 생성 : 프로세스 생성
    • 실행 : 프로세스가 CPU를 차지하고 있는 상태
    • 준비 : CPU에 할당되기를 기다리는 상태
    • 대기 : I/O(입출력)가 완료되기를 기다리는 상태
    • 종료 : 프로세스의 실행 종료



스케줄링에는 선점형과 비 선점형, 정적과 동적 스케줄링이, 그리고 우선순위라는 개념이 있다.

  • 선점형(Preemptive) 스케줄링
    • 프로세스가 CPU를 차지하고 있을때, 다른 프로세스가 현재 프로세스를 중지 시키고 CPU를 차지할 수 있도록 하는 방법
    • 우선순위가 높은 프로세스를 먼저 수행하는데 유리
    • 실시간 처리에 유리
  • 비 선점형(Non-Preemptive) 스케줄링
    • CPU가 프로세스에 할당되면 종료,또는 대기상태로 전환해 CPU를 해제할 때 까지 현제 프로세스가 CPU를 점유 하는 방법
    • 순차 처리로 공정성이 있고 응답시간의 예측 가능
    • 짧은 작업이 긴 작업을 기다리는 경우 자주 발생
  • 우선순위 : 프로세스에 우선순위를 부여해 프로세스의 처리 순서를 결정
    • 우선순위에 따른 선점형과 비 선점형의 비교
      • 선점형 : 우선순위가 높은 프로세스가 현재 CPU를 사용하고 있는 프로세스를 종료하고 CPU를 차지
      • 비선점형 : 최상위 준비 큐에 우선순위가 높은 프로세스를 위치시킨다.
  • 정적(Static) 스케줄링 :  스케줄링 과정에서 프로세스에 부여된 우선순위가 변경되지 않는다.
  • 동적(Dynamic) 스케줄링 : 스케줄링 과정에서 프로세스의 우선순위가 변동된다.



스케줄링의 목적은 위와 같은 개념들에서 CPU이용율, 처리율을 최대화 하고 반환시간, 대기시간, 응답시간을 최소화 하는 기법이다.

    • CPU이용율 (CPU Utilization) : 가능한 CPU를 최대한 이용
    • 처리율 (Throughput) : 단위 시간당 완료할 수 있는 프로세스의 수
    • 반환시간 (Turnaround time) : 프로세스 시작부터 준비, 대기, 종료 되기 까지의 시간
    • 대기시간 (Waiting time) : 프로세스가 준비상태에서 대기하는 시간
    • 응답시간 (Response time)  
      •  프로세스가 어떤 요청을 한 후 그에 대한 첫 응답을 받을때 까지 걸리는 시간으로 응답을 출력할때 걸리는 시간은 포함되지 않는다.



'프로그래밍 > 그외' 카테고리의 다른 글

facade pattern  (1) 2016.06.21
DB Savepoint  (0) 2016.06.21
DI (Dependency Injection)  (0) 2016.05.26
First Class Object  (0) 2016.05.25

이번 글에서는 앞으로 사용할 RabbitMQ Server를 설치하는 방법에 대하여 알아보겠습니다.

이후 예제는 Windows상에서 RabbitMQ Server를 띄우고 C#코드를 이용해 사용하는 방법에 대하여 알아보겠습니다.


 설치 방법

  1. Erlang을 설치한다.(Erlang이 설치되어 있지 않으면 RabbitMQ 설치되지 않는다)
  2. RabbitMQ를 설치한다.
  3. cmd를 실행해 RabbitMQ가 설치된 폴더의 sbin폴더로 이동해 아래 명령어를 실행시킨다.
    • Rabbitmq -plugins enable rabbitmq_management
  4. 실행이 완료되면 http://localhost:15672 에 접속해본다.
    • UserName : guest
    • Password : guest

설치가 정상적으로 되었다면 아래와 같은 화면이 나옵니다.



cmd에서 RabbitMQ Server 명령어를 통해 관리할 및 분석을 할 수 있는데 이를 보기 편하게 만든 웹 페이지 입니다.

cmd에서 기본적으로 사용하는 명령어로 RabbitMQ를 종료하는 명령어 rabbitmqctl stop 와 시작하는 명령어 rabbitmqctl strat 가 있습니다.


RabbitMQ Server의 종료와 시작은 winsows 서비스에서 관리할 수도 있습니다.





'프로그래밍 > RabbitMQ' 카테고리의 다른 글

RabbitMQ란  (0) 2016.05.31

RabbitMQ란 

AMQP를 구현한 메시지 브로커 입니다. ISO 준 AMQP를 구현했으며, 비동기처리를 위한 메시지 큐 브로커 입니다. Erlang과 Java로 만들어졌으며 분산처리를 위한 MQ입니다.


RabbitMQ는 다양한 언어로된 RabbitMQ Client를 지원하고 있고 공식적인 온라인 문서에서는 대표적인 언어들에 대하여 소스코드를 예제로 공개하고있습다.


이번 글에서는 RabbitMQ 예제를 알아보기 전에 기본적인 용어들을 알아보겠습니다.

Producer – 메시지를 보내는 Application
Consumer – 메시지를 받는 User Application
Publish – Producer가 메시지를 보냄
Subscribe – Consumer가 메시지를 수신하기 위해 Queue를 실시간으로 리스닝 하기로 만든다
Queue – 메시지를 저장하는 버퍼(QueueExchangeBinding된다)
Bindings – ExchangeQueue를 연결
RoutingKey – Exchange를 생성하거나 메시지를 Publish할 때 사용하는 Key

 

             Exchange
Queue에 메시지를 전달할지 결정하는 Key
Exchange – Producer가 전달한 메시지를 Queue에 전달하는 역할
메시지가 Queue에 직접 전달되는 것이 아니라 Exchange Type이라는 속성에 정의한데로 동작

 Type

 설명

 특징

 Fanout

 알려진 모든 Queue에 메시지 전달

 Broadcast 

 Direct

 지정된 RoutingKey를 가진 Queue에만 메시지 전달 

 Unicast

 Topic

 지정된 패턴 바인딩 형태에 일지하는 Queue에만 메시지 전달

 (# 은 여러단어, *은 한 단어를 통합한 문자열 패턴 매칭)

 Multicast

 Header

 헤더에 포함된 Key = Value의 일치조건에 따라서 메시지 전달 

 Multicast


Exchange Type에 따른 메시지 전송을 알기 쉽게 설명한 페이지 -> http://killins.egloos.com/m/3025514


'프로그래밍 > RabbitMQ' 카테고리의 다른 글

Rabbit MQ Server 설치 (Windows 기준)  (0) 2016.05.31

Spring은 Spring FrameWork를 줄여 말한것이다. 

Spring은 JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 원하고있어 JEE를 대체하는 프레임 워크로 볼 수 있다.

또한 DI(Dependency Injection)나 AOP(Aspect Oriented Programming), IoC(Inversion of Control)와 같은 기능도 지원하고있다.


Spring의 특징으로는 

  1. Spring은 자바 객체를 담고 있는 경량 컨테이너로 자바 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며, 필요한 객체를 가져와 사용할수 있다.
  2. Spring은 DI를 재공해 설정파일이나 어노테인션을 통해 객체간의 의존관계를 설저알수 있다.
  3. Spring은 POJO(Plain Old Java Object)를 지원해 컨테이너에 저장되는 자바 객체는 특정한 interface를구 현하거나 class를 상속받지 않아도 된다.
  4. Spring은 트랜잭션 처리를 위한 일관된 방법을 제공한다. 설정 파일을 통해 트랜잭션 관리 정보를 입력하기 때문에, 트랜잭션 구현에 상관없이 동일한 코드를 여려 환경에 사용할 수 있다.
  5. Spring은 AOP를 지원한다.
  6. Spring은 영속성과 관련된 다양한 API를 지원한다.
  7. Spring은 다양한 API에 대한 연동을 지원한다.

Spring에서의 DI

스프링은 DI페턴을 지원하는 프레임워크이며 설정파일과 어노테이션을 이용해 쉽게 객체간의 의존관계를 설정해줄 수 있다.


Lambda Expression란 프로그래밍에서 식별값 없이 실행할수 있는 함수 표헌 방법.

함수를 first Class Object로 취급한다.


Java 8버전부터 람다식을 사용할 수 있는데 

예제로 자바에서 CallBack함수를 구현하는 예제에서

public interface ICallback {
	public void callbackMethod();
}

public class CallbackClass extends Thread{
	private ICallback callback;

	public CallbackClass(ICallback callback) {
	    this.callback = callback;
	}
	public void run(){
            doWork();
	}
	public void doWork() {
	    callback.callbackMethod();
	}
}

에서 아래와 같이 CallBack를 구현한다.

public class Main {
    public static void main(String[] args) {
	ICallback call = new ICallback() {
            @Override
    	    public void callbackMethod() {
	        System.out.println("콜백 메소드 실행");
	    }
	};
	CallbackClass callbackClass= new CallbackClass(call);
	callbackClass.start();
    }
}

이를 Lambda Expression을 사용하면 아래와 같은 소스로 같은 기능을 할 수 있다. 

public class Main {
    public static void main(String[] args) {
        CallbackClass callbackClass = new CallbackClass( () -> System.out.println("람다식으로 콜백 실행하기"));
	    callbackClass.doWork();
	}
}


DI란 객체간의 의존관계를 객체 자신이 아닌 외부의 조립기가 수행해 준다는 개념이다.

이는 객체 생성시 소스코드에서 생성하는 것이 아닌 외부의 조립기가 수행하준다는 말로도 해석 가능하다.


예를 들면 컴퓨터를 사는 방법을 들 수 있다.

먼저 일반적인 방법으로는 컴퓨터를 조립해서 팔거나 완제품으로 나오는 메장에서 직접사는 방법이 있고, 직접 부품을 사 조립하는 방법이 있다.

완제품의 컴퓨터를 사는 방법 내가 원하든 원하지 않든 컴퓨터의 내부 부품을 만들어진 규격안에서 사는것이고, 직접 부품을 사서 조립하는 방법은 내가 원하는 부품을  골라 조립하는 차이가 있다.


완제품을 사는 방법

public class Player{
    public static void main(String[] args) {
	Computer computer = new Computer();
        computer.start();
    }
}

조립을 하는 방법

public class Player{
    public static void main(String[] args) {
    Ram ram = new Ram(16G);
    CPU cpu = new CPU(I5);
    SSD ssd = new SSD(521G): .....
	Computer computer = new Computer(ram,cpu,ssd);
        computer.start();
    }
}

위의 두 방법의 차이점은 객체간의 결합도 차이다. 조립으로 컴퓨터를 구매하면 컴퓨터라는 객체 안의 결합도를 낮출수 있다.


DI의 방법으로는 위와같이 Construction Injection(생성자 주입)과, Setter Injection(세터 주입) 방법이 있다.

Setter Injection이다은 아래와같이 사용한다.


'프로그래밍 > 그외' 카테고리의 다른 글

facade pattern  (1) 2016.06.21
DB Savepoint  (0) 2016.06.21
scheduling - 스케줄링  (0) 2016.06.01
First Class Object  (0) 2016.05.25

First Class Object란

한국말로는 1급 객체, 또는 일등급 객체 등으로 번역하고 있다.

First Class Object의 정의는 다음을 충족하는 것 이라고 할 수 있다.

변수(variable)에 담을 수 있다.

인자(parameter)로 전달할 수 있다.

반환값(return value)으로 전달할 수 있다.

할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.

자료 구조에 할당할 수 있어야한다.


Java에서 보면 이 조건을 충족시키는 것들은 기본 자료형들을 예로들수 있다. 함수(메소드)는 조건을 충족하지 못한다.


First Class Object에 대하여 검색을 하다 보면 함수형 언어라는 것이 자주 나온다. 함수형 언어는 함수를 First Class Object로 다룰 수 있게 지원한 언어이다.

함수형 언어가 많이 이야기 되는 이유는 함수를 First Class Object를 만족하는가 만족하지 못하는가에 따라 사용할 수 있는 기능과 없는 기능들이 구분되기 때문이다.

함수형 언어의 한 예로 JavaScript를 들 수 있다. 


'프로그래밍 > 그외' 카테고리의 다른 글

facade pattern  (1) 2016.06.21
DB Savepoint  (0) 2016.06.21
scheduling - 스케줄링  (0) 2016.06.01
DI (Dependency Injection)  (0) 2016.05.26

+ Recent posts