4. 일반 자료구조의 고도화
• 수업시간에 배운 자료구조의 특징은 이해가 되었다.
• 자료구조의 응용은 서비스의 개발로 이어진다.
• 어느 상황에서 써야한다는 걸 익히기엔 좋지만 도전적인가? = 결코 그렇지 않다.
• 무언가 도전적인 것을 해보자
• 기존 자료구조를 고도화하여 나만의 자료구조를 만들어보자
August 3, 2016 자료구조 최종 발표
4
기존의 자료구조를 응용한 고도화된 자료구조 개발
5. 공유 큐
• 기존의 큐는 단일 프로그램에서 사용하는 자료구조이다.
• 만일 여러 프로그램이 같은 큐를 공유해서 사용하려면 어떻게 해야할까?
• 여러 프로그램이 같이 사용할 수 있는 공유 큐를 만들어보자
August 3, 2016 자료구조 최종 발표
5
7. 생산자 / 소비자 구분
August 3, 2016 자료구조 최종 발표
7
구현의 간단함을 위해 생산자와 소비자를 구분
8. 역할 구분
August 3, 2016 자료구조 최종 발표
8
.
생산자 소비자
공유 큐에 데이터를 넣는
Enqueue 의 기능만 한다.
공유 큐에서 데이터를
꺼내는 Dequeue의
능을 한다.
9. 공유 큐를 어떻게 구현할까
• 한 컴퓨터에서 여러 프로그램이 같이 사용할 수 있는 자원??
• 가장 쉬운 방법으로 파일을 이용하자.
• 파일을 기반으로 한 공유 큐를 구현
• 공유 큐를 이용하여 메시지를 교환하는 메시지큐를 만들자
August 3, 2016 자료구조 최종 발표
9
10. 메시지큐의 응용
• 메시지큐를 이용하여 무엇을 만들까?
• 생산자와 소비자가 구분이 되는 역할의 프로그램을 만들자.
• 여러 생산자가 ‘주문’이라는 메시지를 생산하고, 매장이 ‘주문’을 소비하는
소비자가 되는 레스토랑 서비스를 만들자.
August 3, 2016 자료구조 최종 발표
10
13. 레스토랑 서비스
August 3, 2016 자료구조 최종 발표
13
• 레스토랑 서비스의 기능
• 주문
• 주문 취소
• 결제
• 회원가입
• 로그인
14. 레스토랑 서비스 구조
August 3, 2016 자료구조 최종 발표
14
• 주기적으로 메시지큐에서 메시지를
가져와 주문을 처리한다.
• Request Worker가 주문을 해석/실행
15. 어떤 자료구조를 사용할 것인가?
• 큐
• 음식 주문 큐
• 메시지큐
• 해시 테이블
• 사용자 관리
August 3, 2016 자료구조 최종 발표
15
• 링크드 리스트
• 큐 자체 구현
• 결제 내역
• 해시 테이블의 키 리스트
16. 해시 테이블
• 왜 필요한가?
• 서비스를 하는 매장이다 보니 이용하는 사람들이 매우 많을 것이다.
• 각 사람들을 기록하고, 그 사람들의 결제 내역을 기록해야한다.
• 그리고 그 사람들을 빠르게 검색해야한다.
• 어떻게 구현할 것인가?
• 사람이 매우 많으므로 좋은 해시 알고리즘을 써야한다.
• 키를 MD5 단방향 해시화하여 이용하자.
• 테이블에 저장된 키 리스트를 보관하기 위해, 링크드 리스트를 사용하자
August 3, 2016 자료구조 최종 발표
16
17. 메시지큐의 구현
August 3, 2016 Presentation Title
17
• 여러 프로그램이 동시에 사용하도록 해야한다.
• 하지만 ‘동시’ 접근을 할 경우 파일에 메시지가 올바르게 저장되지 않는다.
• ‘동시’ 접근을 방어하면서 모든 메시지를 저장할 수 있는 방안이 필요하다.
• 파일의 한 줄에 반드시 하나의 메시지가 기록되어야한다.
18. 메시지큐의 구현
August 3, 2016 자료구조 최종 발표
18
Lock 파일의 도입
-> 모든 프로그램은 메시지큐를 이용하기 전 Lock 파일이 존재하는지 확인한다.
-> 만약 존재하면 일정 시간 대기한 후 다시 접근을 시도한다.
MessageQueue.lock
21. 메시지큐의 테스트
August 3, 2016 Presentation Title
21
• 시뮬레이션 프로그램을 만들어서 메시지큐가 잘 동작하는지 확인
• Thread를 이용하여 동시 접근 클라이언트의 갯수와 요청 수를 조절
22. 메시지큐의 테스트 결과
August 3, 2016 자료구조 최종 발표
22
• 동시 접근 클라이언트가 20개 이상을 넘어가면 메시지큐에 데이터가 중첩되
어 저장된다.
• 20개 미만일 경우에도 한 클라이언트당 요청 갯수가 많다면 중첩이 발생한
다.
23. 원인 분석
August 3, 2016 자료구조 최종 발표
23
• Lock 파일을 생성해도 그것이 실제로 반영되기까지의 지연시간을 계산하지
못함.
• 1ms와 같은 찰나의 순간에 동시에 접근하는 것에 대해 컨트롤 하지 못함.
• 그래도 적절히 컨트롤 하면 메시지큐를 이용할 수 있다.
25. 회고
도전적인 정신으로 만들었던 메시지큐가 그래도 잘 동작해서 다행이다.
비록 특정 케이스에서만 잘 동작하지만 더 많은 연구를 한다면 모든 상황을 대
응할 수 있을 것이다.
하나의 주요 자료구조를 이용하여 부가적인 산출물을 만들면서 프로그램을
더 잘 만들 수 있다는 자신감이 생겼다.
August 3, 2016 Presentation Title
25