[ devpack ide ] 개발 실습 - ucloudbiz.kt.com · └실행런타임,웹서버,개발도구...

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

Upload: others

Post on 31-Aug-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

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

2

차례 devpack

프레임워크

구름IDE

devpack redis PaaS�세

상이�오고�있다�

Cloud,�PaaS�

Session�Clus

tering�

Cloud�IDE�

실습은�A~E�까지�5개�

3

devpack +�Cloud,�PaaS�이야기�

4

devpack에 node-talk 배포

실습A

A-1. 윈도우 git, cf CLI 설치

5

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�창에서�이렇게�나오면�성공�

오늘�실습에�필요한�프로그램

을�설치해봅시다.�

•  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 확인

A-2. node-talk 배포

6

http://zetawiki.com/wiki/CF에_node-talk_앱_올려보기_(윈도우)�

git으로�소스코드�

다운로드�

cf로�devpack에

�배포�

Cloud?

IT 자원을 제공하는 서비스

7

빠른 프로비저닝·릴리즈, 구성가능한 컴퓨팅 리소스 공유 풀에 온디맨드 네트워크 접근을 가능하게 하는 모델 - NIST 집적·공유된 IT자원을 이용자의 요구·수요 변화에 따라 통신망을 통해 신축적으로 이용가능한 정보처리체계 - 클라우드컴퓨팅 발전법

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

Cloud�computing�

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

http://zetawiki.com/wiki/Cloud�

8

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…�

오늘의�주제�

IaaS vs PaaS

9

개발자는�Application�요리에�집중하고�싶다…�

대자연� 캠핑장� 글램핑� 호텔�

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

10

PaaS platform�as�a�service�

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

개발을 위한 플랫폼을 구축할 필요 없이, 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수 있게 하는 모델 – 위키백과 탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅, 구성, 배포 · 관리를 자동화하는 클라우드 애플리케이션 플랫폼 - 레드햇

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

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

11

PaaS 개발자�맞춤형�Cloud�

PaaS는 주로 IaaS 위에 구축됨

∵ PaaS에 필요한 인프라를 간편하게 증설하기 위해

∴ 2중 Layer – IaaS(OS머신 가상화) 위에 PaaS(컨테이너)

• 솔루션: Cloud Foundry, OpenShift 등

• 서비스: devpack, PWS, Bluemix, ElasticBeanstalk, GAE 등

소스코드 배포/실행 환경을 별도 구성없이 즉시 제공하는 서비스 대략 유연하고 탄력적인 WAS를 제공하는 Cloud 서비스

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

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

└정확히는�컨테이너�+�α�

IaaS vs PaaS

12

서버 확장

IaaS

VM 확장 증설 Container 확장

운영서버구성

사용자계정생성

O/S 설치/패치

시스템SW 설치

코드개발/테스트

실행

소스코드 업로드

운영서버구성

사용자계정생성

O/S 설치/패치

시스템SW 설치

코드개발/테스트

실행

소스코드 업로드

운영서버구성

사용자계정생성

O/S 설치/패치

시스템SW 설치

코드개발/테스트

실행

소스코드 업로드

28 일 13 일 1 일

H/W구매, 설치 H/W구매, 설치 H/W구매, 설치

PaaS On-Premises

7 일 2 일 0 일

구축

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

정말?�

웹호스팅 vs PaaS

13

웹호스팅 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일까?�아닐까?�

기업환경에서의 PaaS

14

Load Balancer

Web Web

WAS

Load Balancer

Router Router

App App

전통적 구성

DB DB NAS Storage

PaaS 구성 장점은?

OS·MW·DB 구축·운영 비용절감

주로 로드밸런서 기능 포함

scale out 가능

à 애플리케이션 개발에 집중

단점은?

cloud storage 필요 (왜?)

session clustering 필요 (왜?)

개발자의 이해 필요

장점을 위한 단점…

à 언제나 자유롭게 scale out 가능 ★

WAS

In-Memory Cache

devpack

15

“develop + package”

ktds의 PaaS 서비스

국내기업 최초 상용PaaS

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

[데브팩]�

devpack의 특장점

16

ü  다양한 언어 지원 Java, PHP, Python, Go, Node.js, Ruby

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

ü  트래픽 3TB 무료 제공

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

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

모니터링 화면

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

Cloud Foundry

17

클라우드 애플리케이션 실행 플랫폼

오픈소스 PaaS 소프트웨어

다양한 인프라스트럭처 지원

사용자�인증/관리�

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

https://docs.cloudfoundry.org/concepts/architecture/�

미터링� 로그�수합�

애플리케이션�보관/실행�

부가서비스�연동�

아키텍처

cloudfoundry.org

18

프레임워크, 패키지매니저

결국�다�먹고�살자고�App�배포하자고�하는�얘기�

PaaS랑�뭔�상관임?�

19

로컬에서 node-talk 실행

실습B

B-1. Node.js 설치

20

http://zetawiki.com/wiki/윈도우_node.js_설치�

•  https://nodejs.org/en/download/ 접속하여 인스톨러 다운로드

•  Next 신공으로 설치 �CMD에서�해보는�건�그냥�재미로…�

↑�설치�확인�

↑�파일�실행�

↑�대화형� ↑�바로�코드�실행�

B-2. npm

21

윈도우 node.js 인스톨러에는 npm이 포함되어 있음

•  cd \workspace\node-talk

•  npm install

•  npm start

• 브라우저 http://localhost:3000 접속

npm으로�필요�패키지�다

운로드�

애플리케이션�실행�

프레임워크

22

•  재사용 가능한 라이브러리 및 클래스 집합

•  애플리케이션의 큰 틀과 구조를 결정함

•  설계자가 의도한 디자인 패턴들의 집합으로 구성됨

•  내부적 제어흐름이 있음

•  개발자는 프레임워크를 통해 기능 호출

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

프레임워크

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

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

언어별 프레임워크 & 패키지매니저

23

언어 프레임워크 패키지매니저

Go Revel, Martini, Gorilla gvt, godep

Java Spring, Grails, Play Maven, Gradle

Node.js React, AngularJS, Express.js, Meteor npm

PHP Laravel, CakePHP, Symfony, Zend composer

Python Django, Flask pip

Ruby Rails, Sinatra RubyGems

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

http://zetawiki.com/wiki/언어별_패키지매니저�

node.js, npm

24

node.js

•  자바스크립트 엔진 위에서 동작하는 이벤트 처리 I/O 프레임워크

•  V8에 event처리 라이브러리 libuv를 결합한 플랫폼

•  Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리성능

•  내장 HTTP 서버 라이브러리 포함. 별도의 소프트웨어 없이 웹서버 동작 가능

npm

•  node.js 용 공식 패키지 매니저

•  윈도우에서는 node.js를 설치하면 함께 설치됨

socket.io

25

•  node.js 모듈

• 웹소켓 간편하게 사용 가능

• 실시간 통신, 양방향성, 이벤트 구동형

•  npm 도구로 설치 가능

• 다양한 백엔드 라이브러리 제공

Cloud Foundry 빌드팩

26

애플리케이션용 프레임워크, 런타임 지원 패키지

• 내장 빌드팩

Java, Ruby, Node.js, Go, PHP, Python

• 프레임워크 지원

Spring, Symfony, Django, Rails 등

• 패키지 매니저 지원

• 서드파티 빌드팩, 커스텀 빌드팩 제작 사용 가능

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

27

Cloud IDE 구름IDE

28

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

실습C

C-1. 구름IDE 시작하기

29

브라우저 https://ide.goorm.io/ 로그인 [email protected]

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

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

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

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

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

구름으로�소스코드�

가져오기�

C-2. devpack에 배포 #1

30

https://ucloudbiz.olleh.com 로그인 후 devpack 콘솔접속

•  Deployment --- Cloud Foundry --- Info

•  User Name: frontier00 --- Password: devpack패스워드 --- [Connect]

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

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

구름�->�devpac

k으로�배포�

C-3. groom에서 실행

31

• 터미널# npm install

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

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

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

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

구름IDE에서�실행하기�

C-4. 수정 후 배포

32

• 프로젝트 public app.js 더블클릭하여 열기

• 아래와 같이 소스코드 일부 수정 --- [저장]

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

수정하고�실행해보면�

33

Cloud IDE 웹�IDE�

웹 상에서 이용하는 통합개발환경

보통 웹 상에서 애플리케이션 구동 가능

즉,�IDE를�제공하는�SaaS이면서�

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

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

34

구름 IDE

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

•  구름 서비스들(구름IDE, 구름EDU, 구름TEST) 중 하나

•  git / svn 간편 사용

•  웹상에서 터미널(쉘) 제공

•  실시간 동시 편집 가능

•  채팅, 문서공유 가능

35

devpack redis devpack�부가서비스�중�하나�

36

node-session 실행·배포

실습D

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

D-1. node-session 가져오기

37

브라우저 https://ide.goorm.io/ 로그인 [email protected]

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

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

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

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

D-2. devpack에 배포, scale out

38

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

•  [Deploy] --- [Push] --- [예] -�테스트�(로그인/로그아웃/페이지이동)�

•  CF Push 터미널# cf scale session -i 2 -�테스트�(로그인/로그아웃/페이지이동)�

scale�out�했더니…�?�

Redis

39

•  오픈소스 인메모리 키-값 저장소

•  데이터베이스 캐시, 세션 저장소 등으로 많이 사용함

•  선택적 영구성 키-값 저장소

•  정렬된 집합, 리스트 등 자료구조 지원

•  (MongoDB 대비) 읽기/쓰기 모두 빠름

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

Session Clustering

40

•  스티키 세션 - 로드밸런싱 환경에서 사용자의 세션이 유지되도록 하는 것

•  세션 클러스터링 – 애플리케이션 간 세션을 공유하는 것

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

Load Balancer

Web Web

WAS

Load Balancer

Router Router

App #1 App #2

전통적 구성 PaaS 구성

WAS

In-Memory Cache

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

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

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

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

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

세션이�언제�죽는다

고�생각하나?�

…사람들에게서�잊혀졌을�때다!!�

그냥�공유저장소면�되는데�세션정보는�매번�확인하므로�성능을�위해�인메모리�키-밸류�스토어�사용이�권장되는�것�

Load�Balancer의�분기알고리즘을�Source�Hash로�하면�이상없음.�단,�증설·감설시�매핑관계가�흐트러질�수�있음�

활용예시 - Laravel 설정

41

APP_ENV=local APP_KEY= APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret

CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null

설정파일 .env

à  캐시·세션·큐로 redis 사용가능

à  같은 redis, 같은 APP_KEY라면 세션 공유 가능

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

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

42

node-session-redis 배포

실습E

E-1. Redis 인스턴스 신청

43

https://ucloudbiz.olleh.com 로그인 후 devpack 콘솔접속

•  [App Service] --- [Redis +]

• 서비스명: redis1 --- 플랜: shared-vm --- [확인]

E-2. node-session-redis 배포, 테스트

44

브라우저 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] --- [예] -�테스트�(로그인/로그아웃/페이지이동)�

PaaS & Cloud Native App 관련 주제

45

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

오늘은�다루지�않음.�http://www.slideshare.net/onmay1/paas-66446915�참고�

복습 및 고찰

46

•  PaaS는? ­�개발자�맞춤형�Cloud!�

���OS,�웹서버,�패키지�관리에서�해방;;

•  devpack scale out은 참 빠르구나. ­�서비스�중단도�없음

•  세션 클러스터링을 고려하자.

•  node.js, express 프레임워크는 참 가볍구나.

32MB�애플리케이션이라니….�이러면�devpack에서�월�1000원도�안됨�ㅎㄷㄷ

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

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

47

감사합니다

PaaS�세상은�온다…�(�언제?�)�개발자라면�PaaS에�익숙해지자.�

개발자가�아니라면?�개발을�공부하자�

Special�thanks�to�구름IDE�