파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션...

Post on 14-Apr-2017

181 views 8 download

Transcript of 파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션...

파일기반 메세지큐레스토랑 서비스 시뮬레이션 구현

조 성 수컴퓨터 공학과 / 2011104054

August 3, 2016 자료구조 최종 발표

2

1. 프로젝트 목표

2. 설계 및 구현

3. 테스트

4. 회고

Contents

프로젝트 목표

1

일반 자료구조의 고도화

• 수업시간에 배운 자료구조의 특징은 이해가 되었다.

• 자료구조의 응용은 서비스의 개발로 이어진다.• 어느 상황에서 써야한다는 걸 익히기엔 좋지만 도전적인가? = 결코 그렇지 않다.

• 무언가 도전적인 것을 해보자

• 기존 자료구조를 고도화하여 나만의 자료구조를 만들어보자

August 3, 2016 자료구조 최종 발표

4

기존의 자료구조를 응용한 고도화된 자료구조 개발

공유 큐

• 기존의 큐는 단일 프로그램에서 사용하는 자료구조이다.

• 만일 여러 프로그램이 같은 큐를 공유해서 사용하려면 어떻게 해야할까?

• 여러 프로그램이 같이 사용할 수 있는 공유 큐를 만들어보자

August 3, 2016 자료구조 최종 발표

5

대략적인 그림

August 3, 2016 자료구조 최종 발표

6

동시적 Enqueue / Dequeue

생산자 / 소비자 구분

August 3, 2016 자료구조 최종 발표

7

구현의 간단함을 위해 생산자와 소비자를 구분

역할구분

August 3, 2016 자료구조 최종 발표

8

.

생산자 소비자

공유 큐에 데이터를 넣는Enqueue 의 기능만 한다.

공유 큐에서 데이터를꺼내는 Dequeue의능을 한다.

공유 큐를 어떻게 구현할까

• 한 컴퓨터에서 여러 프로그램이 같이 사용할 수 있는 자원??

• 가장 쉬운 방법으로 파일을 이용하자.

• 파일을 기반으로 한 공유 큐를 구현

• 공유 큐를 이용하여 메시지를 교환하는 메시지큐를 만들자

August 3, 2016 자료구조 최종 발표

9

메시지큐의 응용

• 메시지큐를 이용하여 무엇을 만들까?

• 생산자와 소비자가 구분이 되는 역할의 프로그램을 만들자.

• 여러 생산자가 ‘주문’이라는 메시지를 생산하고, 매장이 ‘주문’을 소비하는

소비자가 되는 레스토랑 서비스를 만들자.

August 3, 2016 자료구조 최종 발표

10

최종 목표

August 3, 2016 자료구조 최종 발표

11

파일기반 메시지큐의 구현

설계와구현

2

레스토랑 서비스

August 3, 2016 자료구조 최종 발표

13

• 레스토랑 서비스의 기능

• 주문

• 주문 취소

• 결제

• 회원가입

• 로그인

레스토랑 서비스 구조

August 3, 2016 자료구조 최종 발표

14

• 주기적으로 메시지큐에서 메시지를

가져와 주문을 처리한다.

• Request Worker가 주문을 해석/실행

어떤 자료구조를 사용할 것인가?

• 큐

• 음식 주문 큐

• 메시지큐

• 해시 테이블• 사용자 관리

August 3, 2016 자료구조 최종 발표

15

• 링크드 리스트

• 큐 자체 구현

• 결제 내역

• 해시 테이블의 키 리스트

해시 테이블

• 왜 필요한가?• 서비스를 하는 매장이다 보니 이용하는 사람들이 매우 많을 것이다.

• 각 사람들을 기록하고, 그 사람들의 결제 내역을 기록해야한다.

• 그리고 그 사람들을 빠르게 검색해야한다.

• 어떻게 구현할 것인가?• 사람이 매우 많으므로 좋은 해시 알고리즘을 써야한다.

• 키를 MD5 단방향 해시화하여 이용하자.

• 테이블에 저장된 키 리스트를 보관하기 위해, 링크드 리스트를 사용하자

August 3, 2016 자료구조 최종 발표

16

메시지큐의 구현

August 3, 2016 Presentation Title

17

• 여러 프로그램이 동시에 사용하도록 해야한다.

• 하지만 ‘동시’ 접근을 할 경우 파일에 메시지가 올바르게 저장되지 않는다.

• ‘동시’ 접근을 방어하면서 모든 메시지를 저장할 수 있는 방안이 필요하다.

• 파일의 한 줄에 반드시 하나의 메시지가 기록되어야한다.

메시지큐의 구현

August 3, 2016 자료구조 최종 발표

18

Lock 파일의 도입

-> 모든 프로그램은 메시지큐를 이용하기 전 Lock 파일이 존재하는지 확인한다.

-> 만약 존재하면 일정 시간 대기한 후 다시 접근을 시도한다.

MessageQueue.lock

메시지큐 사용 흐름

August 3, 2016 자료구조 최종 발표

19

테스트

3

메시지큐의 테스트

August 3, 2016 Presentation Title

21

• 시뮬레이션 프로그램을 만들어서 메시지큐가 잘 동작하는지 확인

• Thread를 이용하여 동시 접근 클라이언트의 갯수와 요청 수를 조절

메시지큐의 테스트 결과

August 3, 2016 자료구조 최종 발표

22

• 동시 접근 클라이언트가 20개 이상을넘어가면 메시지큐에 데이터가중첩되

어 저장된다.

• 20개미만일 경우에도 한 클라이언트당요청 갯수가 많다면중첩이 발생한

다.

원인 분석

August 3, 2016 자료구조 최종 발표

23

• Lock 파일을 생성해도 그것이 실제로 반영되기까지의 지연시간을 계산하지

못함.

• 1ms와 같은찰나의순간에 동시에 접근하는 것에 대해컨트롤하지못함.

• 그래도 적절히컨트롤하면 메시지큐를 이용할 수 있다.

회고

4

회고

도전적인 정신으로 만들었던메시지큐가 그래도 잘 동작해서 다행이다.

비록 특정케이스에서만 잘 동작하지만더많은연구를 한다면 모든 상황을 대

응할 수 있을 것이다.

하나의 주요 자료구조를 이용하여부가적인 산출물을 만들면서 프로그램을

더잘 만들 수 있다는 자신감이 생겼다.

August 3, 2016 Presentation Title

25