(devpack) paas 소개 및 실습

50
[ devpack ] PaaS 소소 소 소소 2016-11-16 김김김

Upload: jeongmin-kim

Post on 24-Jan-2017

312 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: (devpack) PaaS 소개 및 실습

[ devpack ] PaaS 소개 및 실습2016-11-16 김정민

Page 2: (devpack) PaaS 소개 및 실습

2

발표자는 ?

• 김정민• IaaS / PaaS 엔지니어• Cloud 관리 / 자동화 기능 개발자• 좋아하는 것 : IT, 개발 , 클라우드 , 위키• http://github.com/jmnote

└ 별거 없음… ★ 최대 3개

( ucloud biz, devpack )

Page 3: (devpack) PaaS 소개 및 실습

3

딜레마 ?

불치하문과도한 질문은 감사합니다 !언제든지 질문해주세요…

개발자 ? 인프라 엔지니어 ?

Page 4: (devpack) PaaS 소개 및 실습

4

차례 devpack프레임워크devpack redis

PaaS 세상이 오고 있다

Cloud, PaaS

Session Clustering

실습은 A~F 까지 6 개

Page 5: (devpack) PaaS 소개 및 실습

5

devpack+ Cloud, PaaS 이야기

Page 6: (devpack) PaaS 소개 및 실습

6

devpack 에 node-talk 배포실습 A

Page 7: (devpack) PaaS 소개 및 실습

7

A-1. ( 윈도우 ) git, cf CLI 설치 http://zetawiki.com/wiki/ 윈도우_Git_ 설치

윈도우 Git 설치• https://git-scm.com/download/win 접속

( Git-2.x.x-64-bit.exe 다운로드됨 )• Git-2.x.x-64-bit.exe 실행하여 Next 신공으로 설치

http://zetawiki.com/wiki/ 윈도우_cf_CLI_ 설치

윈도우 cf CLI 설치• https://cli.run.pivotal.io/stable?release=windows64  접속

( cf-cli-installer_6.x.x_winx64.zip 다운로드됨 )• 압축 해제• cf_installer.exe 실행하여 Next 신공으로 설치

cmd 창에서 이렇게 나오면 성공

오늘 실습에 필요한

프로그램을 설치해봅시다 .

Page 8: (devpack) PaaS 소개 및 실습

8

A-1. ( 맥 OS) git, cf CLI 설치http://zetawiki.com/wiki/ 맥 OS_Git_설치

맥 OS Git 설치• https://git-scm.com/download/mac 접속

( git-x.x.x.x..…dmg 다운로드됨 )• dmg 파일 실행 , pkg 파일 실행 , Next 신공으로 설치

http://zetawiki.com/wiki/ 맥OS_cf_CLI_ 설치

맥 OS cf CLI 설치$ curl -L "https://cli.run.pivotal.io/stable?release=macosx64-binary" | tar –zx$ mv cf /usr/local/bin/$ cf --version 오늘 실습에 필요한

프로그램을 설치해봅시다 .

Page 9: (devpack) PaaS 소개 및 실습

9

• mkdir \workspace• cd \workspace

A-2. node-talk 배포 http://zetawiki.com/wiki/CF 에 _node-talk_ 앱 _ 올려보기 _( 윈도우 )

git 으로

소스코드

다운로드

cf 로 devpack에 배포

• mkdir workspace• cd workspace/

• git clone https://github.com/jmnote/node-talk.git• cd node-talk 브라우저 http://devpack.co.kr 로그인 frontier00• cf login -a https://api.devpack.co.kr• cf push 브라우저 http://node-talk-xxx-xxx.devpack.co.kr 확인

Page 10: (devpack) PaaS 소개 및 실습

10

Cloud?

IT 자원을 제공하는 서비스

빠른 프로비저닝 · 릴리즈 , 구성가능한 컴퓨팅 리소스 공유 풀에 온디맨드 네트워크 접근을 가능하게 하는 모델 - NIST

집적 · 공유된 IT 자원을 이용자의 요구 · 수요 변화에 따라 통신망을 통해 신축적으로 이용가능한 정보처리체계 - 클라우드컴퓨팅 발전법

인터넷 기술을 활용하여 IT 자원을 제공하는 기술 · 서비스

Cloud computing

웹과 API 로 리소스를 요청 / 관리할 수 있는 서비스 ★└ endpoint, CLI

http://zetawiki.com/wiki/Cloud

Page 11: (devpack) PaaS 소개 및 실습

11

Cloud 의 종류

https://blogs.technet.microsoft.com/kevinremde/2011/04/03/saas-paas-and-iaas-oh-my-cloudy-april-part-3

SaaS 소프트웨어를 제공하는 클라우드PaaS 개발플랫폼을 제공하는 클라우드IaaS 인프라를 제공하는 클라우드

On-Premises Cloud 아님 반대개념… 자체설비 구축 · 운영

● ● ● as a service…

오늘의 주제

Page 12: (devpack) PaaS 소개 및 실습

12

IaaS vs PaaS개발자는 Application 요리에 집중하고 싶다…

대자연 캠핑장 글램핑 호텔

SaaS 가 더 좋은 거 아님 ? 원래 출처가 어딘지는 모르겠으나 , IBM 공진기님의 발표자료에서 참고함 이런 근사한 비유가 있었다니… 캠핑족이신가 ?

데크

텐트

음식

Page 13: (devpack) PaaS 소개 및 실습

13

PaaSplatform as a service

개발플랫폼을 제공하는 Cloud 서비스└ 실행 런타임 , 웹서버 , 개발도구

개발을 위한 플랫폼을 구축할 필요 없이 , 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수 있게 하는 모델 – 위키백과

탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅 , 구성 , 배포 · 관리를 자동화하는 클라우드 애플리케이션 플랫폼 - 레드햇

개발자 컴퓨터에서 개발 Application 배포 및 실행 서비스 제공

FTP 로 소스코드 업로드하여 사용하는 웹호스팅과는 무엇이 어떻게 다를까 ?

Page 14: (devpack) PaaS 소개 및 실습

14

PaaS개발자 맞춤형 Cloud

PaaS 는 주로 IaaS 위에 구축됨 ∵ PaaS 에 필요한 인프라를 간편하게 증설하기 위해∴ 2 중 Layer – IaaS(OS 머신 가상화 ) 위에 PaaS( 컨테이너 )

• 솔루션 : Cloud Foundry, OpenShift 등• 서비스 : devpack, PWS, Bluemix, ElasticBeanstalk,

GAE 등

소스코드 배포 / 실행 환경을 별도 구성없이 즉시 제공하는 서비스

대략 유연하고 탄력적인 WAS 를 제공하는 Cloud 서비스

미들웨어 , 프레임워크를 유연하게 배포 가능

웹서버 , 패키지 구성을 소스코드처럼 관리 , 간편 scale out, 로드밸런서 포함 ★

└ 정확히는 컨테이너 + α

Page 15: (devpack) PaaS 소개 및 실습

15

IaaS vs PaaS

서버 확장

IaaS

VM 확장증설 Container 확장

운영서버구성

사용자계정생성O/S 설치 / 패치

시스템 SW 설치

코드개발 / 테스트

실행소스코드 업로드

운영서버구성

사용자계정생성O/S 설치 / 패치

시스템 SW 설치

코드개발 / 테스트

실행소스코드 업로드

운영서버구성

사용자계정생성O/S 설치 / 패치

시스템 SW 설치

코드개발 / 테스트

실행소스코드 업로드

28 일 13 일 1 일

H/W 구매 , 설치 H/W 구매 , 설치 H/W 구매 , 설치PaaSOn-Premises

7 일 2 일 0 일

구축

구축 , 증설기간 대폭 단축 !

정말 ?

Page 16: (devpack) PaaS 소개 및 실습

16

웹호스팅 vs PaaS

웹호스팅 PaaS

• scale up, scale out 어려움• API 로 자원 요청 / 관리 불가• 제한된 언어 / 버전 지원• 웹서버 설정 변경 불가• 프레임워크 이용 어려움

• scale up, scale out 용이함• API 로 자원 요청 / 관리 가능• 다양한 언어 / 버전 지원• 웹서버 설정 변경 가능• 프레임워크 이용 자유로움

• PHP 5.6 대신 7.0 버전을 쓰고 싶다 . ( 왜 ?)

• 아파치 DOCUMENT_ROOT 경로를 바꾸고 싶다 .

• 아파치 대신 Nginx 를 쓰고 싶다 .

No Problem!즉시 적용 가능

http://zetawiki.com/wiki/ 웹호스팅 _vs_PaaS

웹호스팅은 Cloud 일까 ? 아닐까 ?

Page 17: (devpack) PaaS 소개 및 실습

17

기업환경에서의 PaaS

Load Balancer

Web Web

WAS

Load Balancer

Router Router

App App

전통적 구성

DB DBNAS Storage

PaaS 구성 장점은 ? OS·MW·DB 구축 · 운영 비용절감 주로 로드밸런서 기능 포함 scale out 가능 애플리케이션 개발에 집중

단점은 ? cloud storage 필요 ( 왜 ?) session clustering 필요 ( 왜 ?) 개발자의 이해 필요 장점을 위한 단점… 언제나 자유롭게 scale out 가능 ★

WAS

In-MemoryCache

Page 18: (devpack) PaaS 소개 및 실습

18

devpack

“develop + package”

ktds 의 PaaS 서비스국내기업 최초 상용 PaaS

Cloud Foundry 기반 + 사용자 포탈 제공

[ 데브팩 ]

Page 19: (devpack) PaaS 소개 및 실습

19

devpack 의 특장점 다양한 언어 지원 Java, PHP, Python, Go, Node.js,

Ruby

메모리 1GB 당 월 2 만원 정도 타사 대비 저렴한 가격

트래픽 3TB 무료 제공

MySQL, Redis 부가서비스 이용가능

30MB Redis 인스턴스 1 개 상시 무료

모니터링 화면

앱 인스턴스 메모리 최소단위가 1GB 라는 얘기는 아님1MB 단위로 설정할 수 있음간단한 애플리케이션이라면 32MB 로도 가능32MB 라면 월 1000 원 이하

Page 20: (devpack) PaaS 소개 및 실습

20

Cloud Foundry

클라우드 애플리케이션 실행 플랫폼 오픈소스 PaaS 소프트웨어다양한 인프라스트럭처 지원

사용자 인증 / 관리

라우터 (≒ 로드밸런서 , 도메인기반 )

https://docs.cloudfoundry.org/concepts/architecture/미터링 로그 수합

애플리케이션 보관 / 실행

부가서비스 연동

아키텍처

cloudfoundry.org

Page 21: (devpack) PaaS 소개 및 실습

21

프레임워크 , 패키지매니저결국 다 먹고 살자고 App 배포하자고 하는 얘기

PaaS 랑 뭔

상관임 ?

Page 22: (devpack) PaaS 소개 및 실습

22

로컬에서 node-talk 실행실습 B

Page 23: (devpack) PaaS 소개 및 실습

23

B-1. Node.js 설치 http://zetawiki.com/wiki/ 윈도우_node.js_ 설치

• https://nodejs.org/en/download/ 접속• Windows Installer 또는 Macintosh Installer 클릭하여 인스톨러 다운로드• 인스톨러 실행하여 Next 신공으로 설치

http://zetawiki.com/wiki/ 맥OS_node.js_ 설치

Page 24: (devpack) PaaS 소개 및 실습

24

B-2. Node.js CLI 맛보기

↑ 파일 실행

↑ 대화형

↑ 바로 코드 실행

↑ 설치 확인

Page 25: (devpack) PaaS 소개 및 실습

25

B-3. npm

※ 윈도우 , 맥 OS 의 node.js 인스톨러에는 npm 이 포함되어 있음• cd node-talk• npm install• npm start• 브라우저 http://localhost:3000 접속

Npm 으로 필요

패키지 다운로드

애플리케이션 실행

Page 26: (devpack) PaaS 소개 및 실습

26

프레임워크

• 재사용 가능한 라이브러리 및 클래스 집합• 애플리케이션의 큰 틀과 구조를 결정함• 설계자가 의도한 디자인 패턴들의 집합으로 구성됨• 내부적 제어흐름이 있음• 개발자는 프레임워크를 통해 기능 호출

웹 애플리케이션 개발을 위해 설계된 소프트웨어 프레임워크

프레임워크

http://zetawiki.com/wiki/ 프레임워크http://zetawiki.com/wiki/ 웹애플리케이션 _ 프레임워크

여기서는 웹 애플리케이션 프레임워크

Page 27: (devpack) PaaS 소개 및 실습

27

언어별 프레임워크 & 패키지매니저언어 프레임워크 패키지매니저Go Revel, Martini, Gorilla gvt, godep

Java Spring, Grails, Play Maven, Gradle

Node.js React, AngularJS, Express.js, Me-teor npm

PHP Laravel, CakePHP, Symfony, Zend composer

Python Django, Flask pip

Ruby Rails, Sinatra RubyGemshttp://zetawiki.com/wiki/ 언어별 _ 웹애플리케이션프레임워크http://zetawiki.com/wiki/ 언어별 _ 패키지매니저

어떤 언어를

쓰시나요 ?

Page 28: (devpack) PaaS 소개 및 실습

28

node.js, npm

node.js

• 자바스크립트 엔진 위에서 동작하는 이벤트 처리 I/O 프레임워크• V8 에 event 처리 라이브러리 libuv 를 결합한 플랫폼• Non-blocking I/O 와 단일 스레드 이벤트 루프를 통한 높은 처리성능• 내장 HTTP 서버 라이브러리 포함 . 별도의 소프트웨어 없이 웹서버 동작 가능

npm

• node.js 용 공식 패키지 매니저• 윈도우에서는 node.js 를 설치하면 함께 설치됨

Page 29: (devpack) PaaS 소개 및 실습

29

socket.io

• node.js 모듈• 웹소켓 간편하게 사용 가능• 실시간 통신 , 양방향성 , 이벤트 구동형• npm 도구로 설치 가능• 다양한 백엔드 라이브러리 제공

Page 30: (devpack) PaaS 소개 및 실습

30

Cloud Foundry 빌드팩애플리케이션용 프레임워크 , 런타임 지원 패키지• 내장 빌드팩 Java, Ruby, Node.js, Go, PHP, Python• 프레임워크 지원 Spring, Symfony, Django, Rails 등• 패키지 매니저 지원• 서드파티 빌드팩 , 커스텀 빌드팩 제작 사용 가능

실습 A 에서는 빌드팩이 node.js 설치 , npm 작업을 해준 것

Page 31: (devpack) PaaS 소개 및 실습

31

node-talk 수정 · 배포실습 C

Page 32: (devpack) PaaS 소개 및 실습

32

C-1. 소스코드 수정 후 배포

• cd node-talk• notepad public\app.js소스코드 수정• cf push

수정하고

실행해보면

• cd node-talk/• nano public/app.js소스코드 수정• cf push

Vi 로

해도 됨

Page 33: (devpack) PaaS 소개 및 실습

33

bower

• 웹 클라이언트측 패키지 관리 시스템• npm 으로 설치• MIT 라이선스

http://zetawiki.com/wiki/Bowerhttps://bower.io/

Page 34: (devpack) PaaS 소개 및 실습

34

node-talk-bower 배포실습 D

Page 35: (devpack) PaaS 소개 및 실습

35

• cd \workspace

D-1. node-talk-bower 배포git 으로

소스코드

다운로드

cf 로 devpack에 배포

• cd ~/workspace/

• git clone https://github.com/jmnote/node-talk-bower.git• cd node-talk-bower• cf push 브라우저 http://node-talk-xxx-xxx.devpack.co.kr 확인

Page 36: (devpack) PaaS 소개 및 실습

36

D-2. node-talk-bower 로컬 실행

• npm install

• cd node-talk-bower

• cf push

브라우저 http://localhost:3000 확인

Page 37: (devpack) PaaS 소개 및 실습

37

manifest.yml vs package.json

npm install 수행시 , bower install도 수행됨

package.json – npm 설정 파일

manifest.yml – Cloud Foundry 앱 설정 파일

bower install 후 application 실행

Page 38: (devpack) PaaS 소개 및 실습

38

JSON vs YAML

JSON YAML

• 확장자 : .json

• 개행 , 공백 무시됨• 주석 사용 불가• 문자열을 쌍따옴표로 감싸야 함• 한글 인코딩되어 읽기 어려움• YAML 보다 더 널리 사용됨• 대부분의 언어에서 기본 지원

• 확장자 : .yml, .yaml

• 개행 , 공백으로 블록 인식• 주석 사용 가능• 문자열을 쌍따옴표로 감싸지 않아도 됨• 한글 그대로 사용 가능• 점차 사용이 늘고 있음• 대부분의 언어에 라이브러리 있음 가독성이

좋음

http://zetawiki.com/wiki/JSON,_YAML_ 비교

Page 39: (devpack) PaaS 소개 및 실습

39

devpack redisdevpack 부가서비스 중 하나

Page 40: (devpack) PaaS 소개 및 실습

40

node-session 실행 · 배포실습 E

로그인 기능만 구현한 간단한 애플리케이션

Page 41: (devpack) PaaS 소개 및 실습

41

E-1. node-session 배포 , scale out

• cd \workspace git 으로

소스코드

다운로드

cf 로 devpack에 배포

cf 로 scale out

• cd ~/workspace/• git clone https://github.com/jmnote/node-session.git• cd node-session

host: session00 으로 수정• cf push - 테스트 ( 로그인 / 로그아웃 /페이지이동 )• cf scale session -i 2 - 테스트 ( 로그인 / 로그아웃 /페이지이동 )

• notepad manifest.yml • nano manifest.yml

scale out 하면… ?!로그인이 풀린다 .그리고 로그인이 안된다 ㅠㅠ

Page 42: (devpack) PaaS 소개 및 실습

42

Redis

• 오픈소스 인메모리 키 - 값 저장소• 데이터베이스 캐시 , 세션 저장소 등으로 많이 사용함• 선택적 영구성 키 - 값 저장소• 정렬된 집합 , 리스트 등 자료구조 지원• (MongoDB 대비 ) 읽기 / 쓰기 모두 빠름

http://zetawiki.com/wiki/ 레디스 _redis

Page 43: (devpack) PaaS 소개 및 실습

43

Session Clustering

• 스티키 세션 - 로드밸런싱 환경에서 사용자의 세션이 유지되도록 하는 것• 세션 클러스터링 – 애플리케이션 간 세션을 공유하는 것

http://zetawiki. com/wiki/ 스티키 _ 세션http://zetawiki. com/wiki/ 세션 _ 클러스터링

Load Balancer

Web Web

WAS

Load Balancer

Router Router

App #1 App #2

전통적 구성 PaaS 구성

WAS

In-MemoryCache

소프트웨어 라우터로서단순한 분기 알고리즘Round Robin 사용

출발지정보의 해시값에따라 분기 경로 결정

특정 사용자의 경로는App 인스턴스 #1, #2 를왔다갔다 하게 됨

공유저장소가 세션을기억해줘야 함

특정 사용자의 경로는 특정 WAS만으로 한정됨예 ) 사용자 1-WAS1 사용자 2-WAS2

세션이 언제 죽는다고

생각하나 ?

… 사람들서버들에게

잊혀졌을 때다

- 원피스 명대사 中

그냥 공유저장소면 되는데 세션정보는 매번 확인하므로성능을 위해 인메모리 키 - 밸류 스토어 사용이 권장되는 것 .증설 · 감설시에도 서비스 영향 없음

Load Balancer 의 분기알고리즘을 Source Hash 로 하거나 ,WAS 또는 Redis 세션 클러스터링 기능을 쓰면 됨 .단 , 서비스 영향 없이 증설 · 감설은 어려움

Page 44: (devpack) PaaS 소개 및 실습

44

활용예시 - Laravel 설정APP_ENV=localAPP_KEY=APP_DEBUG=trueAPP_LOG_LEVEL=debugAPP_URL=http://localhost

DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=homesteadDB_USERNAME=homesteadDB_PASSWORD=secret

CACHE_DRIVER=fileSESSION_DRIVER=fileQUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1REDIS_PASSWORD=nullREDIS_PORT=6379

MAIL_DRIVER=smtpMAIL_HOST=mailtrap.ioMAIL_PORT=2525MAIL_USERNAME=nullMAIL_PASSWORD=nullMAIL_ENCRYPTION=null

설정파일 .env

캐시 · 세션 · 큐로 redis 사용가능 같은 redis, 같은 APP_KEY 라면 세션 공유 가능

https://github.com/laravel/laravel/blob/master/.env.example

다른 프레임워크들도 지원하는 경우가 많음예 ) http://zetawiki.com/wiki/ 스프링 _REDIS_ 프로퍼티

Page 45: (devpack) PaaS 소개 및 실습

45

node-session-redis 배포실습 F

Page 46: (devpack) PaaS 소개 및 실습

46

F-1. Redis 인스턴스 신청브라우저 http://devpack.co.kr 로그인 testuser00• [App Service] --- [Redis +] • 서비스명 : redis1 --- 플랜 : shared-vm --- [ 확인 ]

Page 47: (devpack) PaaS 소개 및 실습

47

F-2. node-session-redis 배포 , 테스트• cd \workspace git 으로

소스코드

다운로드

cf 로 devpack에 배포

이번에는 in-

stance 2 개

• cd ~/workspace/• git clone https://github.com/jmnote/node-session-redis.git• cd node-session-redis

host: session00 으로 수정• cf push - 테스트 ( 로그인 / 로그아웃 /페이지이동 )

• notepad manifest.yml • nano manifest.yml

Page 48: (devpack) PaaS 소개 및 실습

48

PaaS & Cloud Native App 관련 주제

본격 PaaS 삼국지 어디에도 없는 근본없는 그림…PaaS 환경에서 개발하다보니관심이 가게 된 것들…관련이 깊은 것끼리 연결해보았음

http://www.slideshare.net/onmay1/paas-66446915 참고

Page 49: (devpack) PaaS 소개 및 실습

49

복습 및 고찰• PaaS 는 ? – 개발자 맞춤형 Cloud! OS, 웹서버 , 패키지 관리에서 해방 ;;• devpack scale out 은 참 빠르구나 . – 서비스 중단도 없음

• 세션 클러스터링을 고려하자 .• node.js, express 프레임워크는 참 가볍구나 . 32MB 애플리케이션이라니… . 이러면 devpack 에서 월

1000 원도 안됨 ㅎㄷㄷ

• redis 를 저렇게 쓰는구나 . - 물론 다른 용도도 얼마든지 있음

Page 50: (devpack) PaaS 소개 및 실습

50

감사합니다PaaS 세상은 온다… ( 언제 ? )

개발자라면 PaaS 에 익숙해지자 .개발자가 아니라면 ? 개발을

공부하자