49
[ devpack × 구구 IDE ] 구구 구구 구구 2016-10-27 김김김

devpack × 구름IDE 활용 개발 실습

Embed Size (px)

Citation preview

Page 1: devpack × 구름IDE 활용 개발 실습

[ devpack × 구름 IDE ] 활용 개발 실습

2016-10-27 김정민

Page 2: devpack × 구름IDE 활용 개발 실습

2

발표자는 ?

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

위키• http://github.com/jmnote

└ 별거 없음… ★ 최대 3개

( ucloud biz, devpack )

Page 3: devpack × 구름IDE 활용 개발 실습

3

딜레마 ?

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

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

Page 4: devpack × 구름IDE 활용 개발 실습

4

차례 devpack프레임워크구름 IDEdevpack redis

PaaS 세상이 오고 있다

Cloud, PaaS

Session Clustering

Cloud IDE

실습은 A~E 까지 5 개

Page 5: devpack × 구름IDE 활용 개발 실습

5

devpack+ Cloud, PaaS 이야기

Page 6: devpack × 구름IDE 활용 개발 실습

6

devpack 에 node-talk 배포실습 A

Page 7: devpack × 구름IDE 활용 개발 실습

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 × 구름IDE 활용 개발 실습

8

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

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

git 으로

소스코드

다운로드

cf 로 devpack에 배포

Page 9: devpack × 구름IDE 활용 개발 실습

9

Cloud?

IT 자원을 제공하는 서비스

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

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

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

Cloud computing

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

http://zetawiki.com/wiki/Cloud

Page 10: devpack × 구름IDE 활용 개발 실습

10

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 11: devpack × 구름IDE 활용 개발 실습

11

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

대자연 캠핑장 글램핑 호텔

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

데크

텐트

음식

Page 12: devpack × 구름IDE 활용 개발 실습

12

PaaSplatform as a service

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

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

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

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

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

Page 13: devpack × 구름IDE 활용 개발 실습

13

PaaS개발자 맞춤형 Cloud

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

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

GAE 등

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

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

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

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

└ 정확히는 컨테이너 + α

Page 14: devpack × 구름IDE 활용 개발 실습

14

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 15: devpack × 구름IDE 활용 개발 실습

15

웹호스팅 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 16: devpack × 구름IDE 활용 개발 실습

16

기업환경에서의 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 17: devpack × 구름IDE 활용 개발 실습

17

devpack

“develop + package”

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

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

[ 데브팩 ]

Page 18: devpack × 구름IDE 활용 개발 실습

18

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

Ruby

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

트래픽 3TB 무료 제공

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

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

모니터링 화면

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

Page 19: devpack × 구름IDE 활용 개발 실습

19

Cloud Foundry

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

사용자 인증 / 관리

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

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

애플리케이션 보관 / 실행

부가서비스 연동

아키텍처

cloudfoundry.org

Page 20: devpack × 구름IDE 활용 개발 실습

20

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

PaaS 랑 뭔

상관임 ?

Page 21: devpack × 구름IDE 활용 개발 실습

21

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

Page 22: devpack × 구름IDE 활용 개발 실습

22

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

• https://nodejs.org/en/download/ 접속하여 인스톨러 다운로드• Next 신공으로 설치 CMD 에서 해보는 건

그냥 재미로…

↑ 설치 확인

↑ 파일 실행

↑ 대화형 ↑ 바로 코드 실행

Page 23: devpack × 구름IDE 활용 개발 실습

23

B-2. npm

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

npm 으로 필요

패키지 다운로드

애플리케이션 실행

Page 24: devpack × 구름IDE 활용 개발 실습

24

프레임워크

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

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

프레임워크

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

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

Page 25: devpack × 구름IDE 활용 개발 실습

25

언어별 프레임워크 & 패키지매니저언어 프레임워크 패키지매니저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 26: devpack × 구름IDE 활용 개발 실습

26

node.js, npm

node.js

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

npm

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

Page 27: devpack × 구름IDE 활용 개발 실습

27

socket.io

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

Page 28: devpack × 구름IDE 활용 개발 실습

28

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

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

Page 29: devpack × 구름IDE 활용 개발 실습

29

Cloud IDE 구름 IDE

Page 30: devpack × 구름IDE 활용 개발 실습

30

구름 IDE 에서 node-talk 실행 · 배포실습 C

Page 31: devpack × 구름IDE 활용 개발 실습

31

C-1. 구름 IDE 시작하기브라우저 https://ide.goorm.io/ 로그인 [email protected]

• 새 컨테이너 생성 --- 이름 : node1 --- 스택 : Node.js --- [ 생성하기 ], [ 실행 ]

• 새 프로젝트 --- 소스 코드 관리 --- (O) Git

URL: https://github.com/jmnote/node-talk.git

(O) 익명 --- [Test] --- [ 다음 ]

프로젝트 이름 : node-talk --- [ 확인 ]

구름으로 소스코드

가져오기

Page 32: devpack × 구름IDE 활용 개발 실습

32

C-2. devpack 에 배포브라우저 http://devpack.co.kr 로그인 testuser00

• Deployment --- Cloud Foundry --- Info

• User Name: testuser00 --- Password: devpack 패스워드 --- [Con-

nect]

• Push --- [Push] --- [ 예 ]

브라우저 http://node-talk-xxx-xxx.devpack.co.kr 확인

구름 -> devpack으로 배포

Page 33: devpack × 구름IDE 활용 개발 실습

33

C-3. groom 에서 실행• 터미널 # npm install

• [ 실행 ] --- Alert [ 확인 ] --- (O) 서버 --- 메인이름 : server --- [ 적용 ], [

확인 ]

• [ 실행 ] --- Server Domain [ 예 ]

URL: https://testuser00_node-talk.goorm.io --- [ 등록 ] --- [ 확인 ]

주소창 클릭하여 https://testuser00_node-talk.goorm.io/ 확인

구름 IDE 에서

실행하기

Page 34: devpack × 구름IDE 활용 개발 실습

34

C-4. 수정 후 배포• 프로젝트 public app.js 더블클릭하여 열기• 아래와 같이 소스코드 일부 수정 --- [ 저장 ]

• [ 실행 ] 하여 확인 , [Deploy][Push] 하여 확인

수정하고

실행해보면

Page 35: devpack × 구름IDE 활용 개발 실습

35

Cloud IDE 웹 IDE

웹 상에서 이용하는 통합개발환경보통 웹 상에서 애플리케이션 구동 가능즉 , IDE 를 제공하는 SaaS 이면서

실행공간을 제공하는 PaaS 성격도 있음

일반적으로 호스팅업체 수준의 SLA 를 제공하지는 않음

Page 36: devpack × 구름IDE 활용 개발 실습

36

구름 IDE

• 코다임 (codigm) 의 클라우드 IDE

• 구름 서비스들 ( 구름 IDE, 구름 EDU, 구름 TEST) 중 하나• git / svn 간편 사용• 웹상에서 터미널 ( 쉘 ) 제공• 실시간 동시 편집 가능• 채팅 , 문서공유 가능

Page 37: devpack × 구름IDE 활용 개발 실습

37

devpack redisdevpack 부가서비스 중 하나

Page 38: devpack × 구름IDE 활용 개발 실습

38

node-session 실행 · 배포실습 D

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

Page 39: devpack × 구름IDE 활용 개발 실습

39

D-1. node-session 가져오기브라우저 https://ide.goorm.io/ 로그인 [email protected]

• 새 프로젝트 --- 소스 코드 관리 --- (O) Git

URL: https://github.com/jmnote/node-session.git

(O) 익명 --- [Test] --- [ 다음 ]

프로젝트 이름 : node-session --- [ 확인 ]

Page 40: devpack × 구름IDE 활용 개발 실습

40

D-2. devpack 에 배포 , scale out

• manifest.yml 의 host: session00 으로 수정 --- [ 저장 ]

• [Deploy] --- [Push] --- [ 예 ] - 테스트 ( 로그인 /

로그아웃 /페이지이동 )

• CF Push 터미널# cf scale session -i 2 - 테스트 ( 로그인 /

로그아웃 /페이지이동 )

scale out 했더니… ?!로그인이 풀린다 . 그리고

로그인이 안된다 ㅠㅠ

Page 41: devpack × 구름IDE 활용 개발 실습

41

Redis

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

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

Page 42: devpack × 구름IDE 활용 개발 실습

42

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 43: devpack × 구름IDE 활용 개발 실습

43

활용예시 - 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 44: devpack × 구름IDE 활용 개발 실습

44

node-session-redis 배포실습 E

Page 45: devpack × 구름IDE 활용 개발 실습

45

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

Page 46: devpack × 구름IDE 활용 개발 실습

46

E-2. node-session-redis 배포 , 테스트브라우저 https://ide.goorm.io/ 로그인 [email protected]

• 새 프로젝트 --- 소스 코드 관리 --- (O) Git

URL: https://github.com/jmnote/node-session-redis.git

(O) 익명 --- [Test] --- [ 다음 ]

프로젝트 이름 : node-session-redis --- [ 확인 ]

• manifest.yml 의 host: session00 으로 수정 --- [ 저장 ]

• [Deploy] --- [Push] --- [ 예 ] - 테스트 ( 로그인 / 로그아

웃 /페이지이동 )

Page 47: devpack × 구름IDE 활용 개발 실습

47

PaaS & Cloud Native App 관련 주제

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

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

Page 48: devpack × 구름IDE 활용 개발 실습

48

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

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

1000 원도 안됨 ㅎㄷㄷ

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

• 구름 IDE 가 이렇게 편리하네 . – 코딩도 되고 실행도 되고

Page 49: devpack × 구름IDE 활용 개발 실습

49

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

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

Special thanks to 구름 IDE!