Upload
jeongmin-kim
View
521
Download
5
Embed Size (px)
Citation preview
[ devpack × 구름 IDE ] 활용 개발 실습
2016-10-27 김정민
2
발표자는 ?
• 김정민• IaaS / PaaS 엔지니어• Cloud 관리 / 자동화 기능 개발자• 좋아하는 것 : IT, 개발 , 클라우드 ,
위키• http://github.com/jmnote
└ 별거 없음… ★ 최대 3개
( ucloud biz, devpack )
3
딜레마 ?
불치하문과도한 질문은 감사합니다 !언제든지 질문해주세요…
개발자 ? 인프라 엔지니어 ?
4
차례 devpack프레임워크구름 IDEdevpack redis
PaaS 세상이 오고 있다
Cloud, PaaS
Session Clustering
Cloud IDE
실습은 A~E 까지 5 개
5
devpack+ Cloud, PaaS 이야기
6
devpack 에 node-talk 배포실습 A
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 창에서 이렇게 나오면 성공
오늘 실습에 필요한
프로그램을 설치해봅시다 .
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에 배포
9
Cloud?
IT 자원을 제공하는 서비스
빠른 프로비저닝 · 릴리즈 , 구성가능한 컴퓨팅 리소스 공유 풀에 온디맨드 네트워크 접근을 가능하게 하는 모델 - NIST
집적 · 공유된 IT 자원을 이용자의 요구 · 수요 변화에 따라 통신망을 통해 신축적으로 이용가능한 정보처리체계 - 클라우드컴퓨팅 발전법
인터넷 기술을 활용하여 IT 자원을 제공하는 기술 · 서비스
Cloud computing
웹과 API 로 리소스를 요청 / 관리할 수 있는 서비스 ★└ endpoint, CLI
http://zetawiki.com/wiki/Cloud
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…
오늘의 주제
11
IaaS vs PaaS개발자는 Application 요리에 집중하고 싶다…
대자연 캠핑장 글램핑 호텔
SaaS 가 더 좋은 거 아님 ? 원래 출처가 어딘지는 모르겠으나 , IBM 공진기님의 발표자료에서 참고함 이런 근사한 비유가 있었다니… 캠핑족이신가 ?
데크
텐트
음식
12
PaaSplatform as a service
개발플랫폼을 제공하는 Cloud 서비스└ 실행 런타임 , 웹서버 , 개발도구
개발을 위한 플랫폼을 구축할 필요 없이 , 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수 있게 하는 모델 – 위키백과
탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅 , 구성 , 배포 · 관리를 자동화하는 클라우드 애플리케이션 플랫폼 - 레드햇
개발자 컴퓨터에서 개발 Application 배포 및 실행 서비스 제공
FTP 로 소스코드 업로드하여 사용하는 웹호스팅과는 무엇이 어떻게 다를까 ?
13
PaaS개발자 맞춤형 Cloud
PaaS 는 주로 IaaS 위에 구축됨 ∵ PaaS 에 필요한 인프라를 간편하게 증설하기 위해∴ 2 중 Layer – IaaS(OS 머신 가상화 ) 위에 PaaS( 컨테이너 )
• 솔루션 : Cloud Foundry, OpenShift 등• 서비스 : devpack, PWS, Bluemix, ElasticBeanstalk,
GAE 등
소스코드 배포 / 실행 환경을 별도 구성없이 즉시 제공하는 서비스
대략 유연하고 탄력적인 WAS 를 제공하는 Cloud 서비스
미들웨어 , 프레임워크를 유연하게 배포 가능
웹서버 , 패키지 구성을 소스코드처럼 관리 , 간편 scale out, 로드밸런서 포함 ★
└ 정확히는 컨테이너 + α
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 일
구축
구축 , 증설기간 대폭 단축 !
정말 ?
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 일까 ? 아닐까 ?
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
17
devpack
“develop + package”
ktds 의 PaaS 서비스국내기업 최초 상용 PaaS
Cloud Foundry 기반 + 사용자 포탈 제공
[ 데브팩 ]
18
devpack 의 특장점 다양한 언어 지원 Java, PHP, Python, Go, Node.js,
Ruby
메모리 1GB 당 월 2 만원 정도 타사 대비 저렴한 가격
트래픽 3TB 무료 제공
MySQL, Redis 부가서비스 이용가능
30MB Redis 인스턴스 1 개 상시 무료
모니터링 화면
앱 인스턴스 메모리 최소단위가 1GB 라는 얘기는 아님1MB 단위로 설정할 수 있음간단한 애플리케이션이라면 32MB 로도 가능32MB 라면 월 1000 원 이하
19
Cloud Foundry
클라우드 애플리케이션 실행 플랫폼 오픈소스 PaaS 소프트웨어다양한 인프라스트럭처 지원
사용자 인증 / 관리
라우터 (≒ 로드밸런서 , 도메인기반 )
https://docs.cloudfoundry.org/concepts/architecture/미터링 로그 수합
애플리케이션 보관 / 실행
부가서비스 연동
아키텍처
cloudfoundry.org
20
프레임워크 , 패키지매니저결국 다 먹고 살자고 App 배포하자고 하는 얘기
PaaS 랑 뭔
상관임 ?
21
로컬에서 node-talk 실행실습 B
22
B-1. Node.js 설치 http://zetawiki.com/wiki/ 윈도우_node.js_ 설치
• https://nodejs.org/en/download/ 접속하여 인스톨러 다운로드• Next 신공으로 설치 CMD 에서 해보는 건
그냥 재미로…
↑ 설치 확인
↑ 파일 실행
↑ 대화형 ↑ 바로 코드 실행
23
B-2. npm
윈도우 node.js 인스톨러에는 npm 이 포함되어 있음• cd \workspace\node-talk• npm install• npm start• 브라우저 http://localhost:3000 접속
npm 으로 필요
패키지 다운로드
애플리케이션 실행
24
프레임워크
• 재사용 가능한 라이브러리 및 클래스 집합• 애플리케이션의 큰 틀과 구조를 결정함• 설계자가 의도한 디자인 패턴들의 집합으로 구성됨• 내부적 제어흐름이 있음• 개발자는 프레임워크를 통해 기능 호출
웹 애플리케이션 개발을 위해 설계된 소프트웨어 프레임워크
프레임워크
http://zetawiki.com/wiki/ 프레임워크http://zetawiki.com/wiki/ 웹애플리케이션 _ 프레임워크
여기서는 웹 애플리케이션 프레임워크
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/ 언어별 _ 패키지매니저
26
node.js, npm
node.js
• 자바스크립트 엔진 위에서 동작하는 이벤트 처리 I/O 프레임워크• V8 에 event 처리 라이브러리 libuv 를 결합한 플랫폼• Non-blocking I/O 와 단일 스레드 이벤트 루프를 통한 높은 처리성능• 내장 HTTP 서버 라이브러리 포함 . 별도의 소프트웨어 없이 웹서버 동작 가능
npm
• node.js 용 공식 패키지 매니저• 윈도우에서는 node.js 를 설치하면 함께 설치됨
27
socket.io
• node.js 모듈• 웹소켓 간편하게 사용 가능• 실시간 통신 , 양방향성 , 이벤트 구동형• npm 도구로 설치 가능• 다양한 백엔드 라이브러리 제공
28
Cloud Foundry 빌드팩애플리케이션용 프레임워크 , 런타임 지원 패키지• 내장 빌드팩 Java, Ruby, Node.js, Go, PHP, Python• 프레임워크 지원 Spring, Symfony, Django, Rails 등• 패키지 매니저 지원• 서드파티 빌드팩 , 커스텀 빌드팩 제작 사용 가능
실습 A 에서는 빌드팩이 node.js 설치 , npm 작업을 해준 것
29
Cloud IDE 구름 IDE
30
구름 IDE 에서 node-talk 실행 · 배포실습 C
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 --- [ 확인 ]
구름으로 소스코드
가져오기
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으로 배포
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 에서
실행하기
34
C-4. 수정 후 배포• 프로젝트 public app.js 더블클릭하여 열기• 아래와 같이 소스코드 일부 수정 --- [ 저장 ]
• [ 실행 ] 하여 확인 , [Deploy][Push] 하여 확인
수정하고
실행해보면
35
Cloud IDE 웹 IDE
웹 상에서 이용하는 통합개발환경보통 웹 상에서 애플리케이션 구동 가능즉 , IDE 를 제공하는 SaaS 이면서
실행공간을 제공하는 PaaS 성격도 있음
일반적으로 호스팅업체 수준의 SLA 를 제공하지는 않음
36
구름 IDE
• 코다임 (codigm) 의 클라우드 IDE
• 구름 서비스들 ( 구름 IDE, 구름 EDU, 구름 TEST) 중 하나• git / svn 간편 사용• 웹상에서 터미널 ( 쉘 ) 제공• 실시간 동시 편집 가능• 채팅 , 문서공유 가능
37
devpack redisdevpack 부가서비스 중 하나
38
node-session 실행 · 배포실습 D
로그인 기능만 구현한 간단한 애플리케이션
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 --- [ 확인 ]
40
D-2. devpack 에 배포 , scale out
• manifest.yml 의 host: session00 으로 수정 --- [ 저장 ]
• [Deploy] --- [Push] --- [ 예 ] - 테스트 ( 로그인 /
로그아웃 /페이지이동 )
• CF Push 터미널# cf scale session -i 2 - 테스트 ( 로그인 /
로그아웃 /페이지이동 )
scale out 했더니… ?!로그인이 풀린다 . 그리고
로그인이 안된다 ㅠㅠ
41
Redis
• 오픈소스 인메모리 키 - 값 저장소• 데이터베이스 캐시 , 세션 저장소 등으로 많이 사용함• 선택적 영구성 키 - 값 저장소• 정렬된 집합 , 리스트 등 자료구조 지원• (MongoDB 대비 ) 읽기 / 쓰기 모두 빠름
http://zetawiki.com/wiki/ 레디스 _redis
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 세션 클러스터링 기능을 쓰면 이상없음 . 단 , 서비스 영향 없이 증설 · 감설은 어려움
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_ 프로퍼티
44
node-session-redis 배포실습 E
45
E-1. Redis 인스턴스 신청브라우저 http://devpack.co.kr 로그인 testuser00• [App Service] --- [Redis +] • 서비스명 : redis1 --- 플랜 : shared-vm --- [ 확인 ]
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] --- [ 예 ] - 테스트 ( 로그인 / 로그아
웃 /페이지이동 )
47
PaaS & Cloud Native App 관련 주제
본격 PaaS 삼국지 어디에도 없는 근본없는 그림…PaaS 환경에서 개발하다보니관심이 가게 된 것들…관련이 깊은 것끼리 연결해보았음오늘은 다루지 않음 .
http://www.slideshare.net/onmay1/paas-66446915 참고
48
복습 및 고찰• PaaS 는 ? – 개발자 맞춤형 Cloud! OS, 웹서버 , 패키지 관리에서 해방 ;;• devpack scale out 은 참 빠르구나 . – 서비스 중단도 없음
• 세션 클러스터링을 고려하자 .• node.js, express 프레임워크는 참 가볍구나 . 32MB 애플리케이션이라니… . 이러면 devpack 에서 월
1000 원도 안됨 ㅎㄷㄷ
• redis 를 저렇게 쓰는구나 . - 물론 다른 용도도 얼마든지 있음
• 구름 IDE 가 이렇게 편리하네 . – 코딩도 되고 실행도 되고
49
감사합니다PaaS 세상은 온다… ( 언제 ? )
개발자라면 PaaS 에 익숙해지자 .개발자가 아니라면 ? 개발을 공부하자
Special thanks to 구름 IDE!