SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
파일기반 메세지큐
레스토랑 서비스 시뮬레이션 구현
조 성 수
컴퓨터 공학과 / 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
파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현

Weitere ähnliche Inhalte

Was ist angesagt?

WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYHyun-woo Park
 
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로Ian Choi
 
SQLER on Windows Azure camp - Web site
SQLER on Windows Azure camp - Web siteSQLER on Windows Azure camp - Web site
SQLER on Windows Azure camp - Web site근호 이
 
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)knight1128
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한NAVER Engineering
 
팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법Eugene Park
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)CONNECT FOUNDATION
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01SangHun Lee
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료치웅 이
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발현승 배
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Kris Jeong
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서흥배 최
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표NAVER D2
 
삐약삐약 네트워크 엔지니어 이야기
삐약삐약 네트워크 엔지니어 이야기삐약삐약 네트워크 엔지니어 이야기
삐약삐약 네트워크 엔지니어 이야기InfraEngineer
 
디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법Je Lyoung Kim
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 

Was ist angesagt? (20)

WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로
Launchpad 활용 사례 in OpenStack: 다루어본 Bug & Blueprint를 중심으로
 
SQLER on Windows Azure camp - Web site
SQLER on Windows Azure camp - Web siteSQLER on Windows Azure camp - Web site
SQLER on Windows Azure camp - Web site
 
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)
 
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
 
팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
[부스트캠퍼세미나]육진혁_(대충 도커 쓰자는 이야기)
 
Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01Basic of web ref.웹을지탱하는기술_01
Basic of web ref.웹을지탱하는기술_01
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
vuetiful korea 발표자료
vuetiful korea 발표자료vuetiful korea 발표자료
vuetiful korea 발표자료
 
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
 
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
Soscon2017 오픈소스를 활용한 마이크로 서비스의 캐시 전략
 
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
Twitter의 대규모 시스템 운용 기술 어느 고래의 배속에서
 
Inside node.js
Inside node.jsInside node.js
Inside node.js
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표
 
삐약삐약 네트워크 엔지니어 이야기
삐약삐약 네트워크 엔지니어 이야기삐약삐약 네트워크 엔지니어 이야기
삐약삐약 네트워크 엔지니어 이야기
 
디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Subversion
SubversionSubversion
Subversion
 

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

Agile sw development 101
Agile sw development 101Agile sw development 101
Agile sw development 101Kiwon Kyung
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가smartstudy_official
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님NAVER D2
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기nexusz99
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)NAVER D2
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)Seongyun Byeon
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기복연 이
 
AtoM으로 아카이브 만들기 lite
AtoM으로 아카이브 만들기 liteAtoM으로 아카이브 만들기 lite
AtoM으로 아카이브 만들기 liteDaejin An
 
(책 소개) 엘라스틱 스택 개발부터 운영까지
(책 소개) 엘라스틱 스택 개발부터 운영까지(책 소개) 엘라스틱 스택 개발부터 운영까지
(책 소개) 엘라스틱 스택 개발부터 운영까지Jay Park
 
2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경Moon Soo Kim
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서ServerDevCamp
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)Sang Don Kim
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차seung-hyun Park
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택Moon Soo Kim
 
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례ABRC_DATA
 
PJ Sunrise, NGC Group, Maalaang Labs
PJ Sunrise, NGC Group, Maalaang LabsPJ Sunrise, NGC Group, Maalaang Labs
PJ Sunrise, NGC Group, Maalaang LabsSangwon Park
 
5th.lecture.step3.analysis.20180928
5th.lecture.step3.analysis.201809285th.lecture.step3.analysis.20180928
5th.lecture.step3.analysis.20180928Jeongeun Kwon
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스한 경만
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기복연 이
 

Ähnlich wie 파일기반 동기식 메세지큐를 이용한 간단한 레스토랑 서비스 시뮬레이션 구현 (20)

Agile sw development 101
Agile sw development 101Agile sw development 101
Agile sw development 101
 
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
[스마트스터디]스마트스터디는 무엇을 / 왜 / 어떻게 만들어 왔는가
 
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님학교에선 알려주지 않는 오픈소스이야기 - 박치완님
학교에선 알려주지 않는 오픈소스이야기 - 박치완님
 
Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기Github 으로 학교 팀 프로젝트 하기
Github 으로 학교 팀 프로젝트 하기
 
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
경희대 해커 기술 세미나 - Git hub으로 학교 팀프로젝트 하기(조성수)
 
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
[MLOps KR 행사] MLOps 춘추 전국 시대 정리(210605)
 
『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기『고성능 파이썬』 - 맛보기
『고성능 파이썬』 - 맛보기
 
AtoM으로 아카이브 만들기 lite
AtoM으로 아카이브 만들기 liteAtoM으로 아카이브 만들기 lite
AtoM으로 아카이브 만들기 lite
 
(책 소개) 엘라스틱 스택 개발부터 운영까지
(책 소개) 엘라스틱 스택 개발부터 운영까지(책 소개) 엘라스틱 스택 개발부터 운영까지
(책 소개) 엘라스틱 스택 개발부터 운영까지
 
2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경2014.04.24.nrise 개발환경
2014.04.24.nrise 개발환경
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
 
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
[Td 2015]개발하기 바쁜데 푸시서버와 메시지큐는 있는거 쓸래요(김영재)
 
몽고디비교육1일차
몽고디비교육1일차몽고디비교육1일차
몽고디비교육1일차
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
NRISE 개발스택
NRISE 개발스택NRISE 개발스택
NRISE 개발스택
 
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례
[중소기업형 인공지능/빅데이터 기술 심포지엄] 대용량 거래데이터 분석을 위한 서버인프라 활용 사례
 
PJ Sunrise, NGC Group, Maalaang Labs
PJ Sunrise, NGC Group, Maalaang LabsPJ Sunrise, NGC Group, Maalaang Labs
PJ Sunrise, NGC Group, Maalaang Labs
 
5th.lecture.step3.analysis.20180928
5th.lecture.step3.analysis.201809285th.lecture.step3.analysis.20180928
5th.lecture.step3.analysis.20180928
 
애자일 프랙티스
애자일 프랙티스애자일 프랙티스
애자일 프랙티스
 
『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기『클라우드 시스템을 관리하는 기술』 - 맛보기
『클라우드 시스템을 관리하는 기술』 - 맛보기
 

Mehr von nexusz99

[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기nexusz99
 
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현nexusz99
 
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스nexusz99
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?nexusz99
 
태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템nexusz99
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종nexusz99
 
REST API 디자인 개요
REST API 디자인 개요REST API 디자인 개요
REST API 디자인 개요nexusz99
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 

Mehr von nexusz99 (8)

[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
[2017 파이썬 연말 세미나] PyCon APAC 2017 참가 후기
 
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
스마트 홈 Io t 서비스를 위한 분산 데이터베이스 설계 및 구현
 
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
분산형 데이터베이스 기반 비중앙식 IoT 플랫폼을 이용한 스마트 홈 서비스
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템태그기반 파일관리시스템을 적용한 스토리지 시스템
태그기반 파일관리시스템을 적용한 스토리지 시스템
 
Cache cloud 최종
Cache cloud 최종Cache cloud 최종
Cache cloud 최종
 
REST API 디자인 개요
REST API 디자인 개요REST API 디자인 개요
REST API 디자인 개요
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 

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

  • 1. 파일기반 메세지큐 레스토랑 서비스 시뮬레이션 구현 조 성 수 컴퓨터 공학과 / 2011104054
  • 2. August 3, 2016 자료구조 최종 발표 2 1. 프로젝트 목표 2. 설계 및 구현 3. 테스트 4. 회고 Contents
  • 4. 일반 자료구조의 고도화 • 수업시간에 배운 자료구조의 특징은 이해가 되었다. • 자료구조의 응용은 서비스의 개발로 이어진다. • 어느 상황에서 써야한다는 걸 익히기엔 좋지만 도전적인가? = 결코 그렇지 않다. • 무언가 도전적인 것을 해보자 • 기존 자료구조를 고도화하여 나만의 자료구조를 만들어보자 August 3, 2016 자료구조 최종 발표 4 기존의 자료구조를 응용한 고도화된 자료구조 개발
  • 5. 공유 큐 • 기존의 큐는 단일 프로그램에서 사용하는 자료구조이다. • 만일 여러 프로그램이 같은 큐를 공유해서 사용하려면 어떻게 해야할까? • 여러 프로그램이 같이 사용할 수 있는 공유 큐를 만들어보자 August 3, 2016 자료구조 최종 발표 5
  • 6. 대략적인 그림 August 3, 2016 자료구조 최종 발표 6 동시적 Enqueue / Dequeue
  • 7. 생산자 / 소비자 구분 August 3, 2016 자료구조 최종 발표 7 구현의 간단함을 위해 생산자와 소비자를 구분
  • 8. 역할 구분 August 3, 2016 자료구조 최종 발표 8 . 생산자 소비자 공유 큐에 데이터를 넣는 Enqueue 의 기능만 한다. 공유 큐에서 데이터를 꺼내는 Dequeue의 능을 한다.
  • 9. 공유 큐를 어떻게 구현할까 • 한 컴퓨터에서 여러 프로그램이 같이 사용할 수 있는 자원?? • 가장 쉬운 방법으로 파일을 이용하자. • 파일을 기반으로 한 공유 큐를 구현 • 공유 큐를 이용하여 메시지를 교환하는 메시지큐를 만들자 August 3, 2016 자료구조 최종 발표 9
  • 10. 메시지큐의 응용 • 메시지큐를 이용하여 무엇을 만들까? • 생산자와 소비자가 구분이 되는 역할의 프로그램을 만들자. • 여러 생산자가 ‘주문’이라는 메시지를 생산하고, 매장이 ‘주문’을 소비하는 소비자가 되는 레스토랑 서비스를 만들자. August 3, 2016 자료구조 최종 발표 10
  • 11. 최종 목표 August 3, 2016 자료구조 최종 발표 11 파일기반 메시지큐의 구현
  • 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
  • 19. 메시지큐 사용 흐름 August 3, 2016 자료구조 최종 발표 19
  • 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