A-1. (윈도우) git, cf CLI 설치
7
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 창에서 이렇게 나오면 성공
A-1. (맥OS) git, cf CLI 설치
8
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
• mkdir workspace
• cd workspace
A-2. node-talk 배포
9
http://zetawiki.com/wiki/CF에_node-talk_앱_올려보기_(윈도우)
• 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 확인
Cloud?
IT 자원을 제공하는 서비스
10
빠른 프로비저닝·릴리즈, 구성가능한 컴퓨팅 리소스 공유 풀에 온디맨드 네트워크 접근
을 가능하게 하는 모델 - NIST
집적·공유된 IT자원을 이용자의 요구·수요 변화에 따라 통신망을 통해 신축적으로 이용
가능한 정보처리체계 - 클라우드컴퓨팅 발전법
인터넷 기술을 활용하여 IT 자원을 제공하는 기술·서비스
Cloud computing
웹과 API로 리소스를 요청/관리할 수 있는 서비스 ★
└ endpoint, CLI
http://zetawiki.com/wiki/Cloud
IaaS vs PaaS
12
개발자는 Application 요리에 집중하고 싶다…
대자연 캠핑장 글램핑 호텔
SaaS가 더 좋은 거 아님?
원래 출처가 어딘지는 모르겠으나, IBM 공진기님의 발표자료에서 참고함
이런 근사한 비유가 있었다니… 캠핑족이신가?
데크
텐트
음식
13
PaaS platform as a service
개발플랫폼을 제공하는 Cloud 서비스
└ 실행 런타임, 웹서버,개발도구
개발을 위한 플랫폼을 구축할 필요 없이, 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수
있게 하는 모델 – 위키백과
탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅, 구성, 배포 · 관리를 자동화하
는 클라우드 애플리케이션 플랫폼 - 레드햇
개발자 컴퓨터에서 개발 Application 배포 및 실행 서비스 제공
FTP로 소스코드 업로드하여 사용하는 웹호스팅과는 무엇이 어떻게 다를까?
14
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
15
서버 확장
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 일
구축
구축, 증설기간 대폭 단축!
정말?
웹호스팅 vs PaaS
16
웹호스팅 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
17
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-Memory
Cache
devpack의 특장점
19
다양한 언어 지원 Java, PHP, Python, Go, Node.js, Ruby
메모리 1GB당 월 2만원 정도 타사 대비 저렴한 가격
트래픽 3TB 무료 제공
MySQL, Redis 부가서비스 이용가능
30MB Redis 인스턴스 1개 상시 무료
모니터링 화면
앱 인스턴스 메모리 최소단위가 1GB라는 얘기는 아님
1MB단위로 설정할 수 있음
간단한 애플리케이션이라면 32MB 로도 가능
32MB라면 월 1000원 이하
Cloud Foundry
20
클라우드 애플리케이션 실행 플랫폼
오픈소스 PaaS 소프트웨어
다양한 인프라스트럭처 지원
사용자 인증/관리
라우터(≒로드밸런서, 도메인기반)
https://docs.cloudfoundry.org/concepts/architecture/
미터링 로그 수합
애플리케이션 보관/실행
부가서비스 연동
아키텍처
cloudfoundry.org
B-3. npm
25
※ 윈도우, 맥OS의 node.js 인스톨러에는 npm이 포함되어 있음
• cd node-talk
• npm install
• npm start
• 브라우저 http://localhost:3000 접속
프레임워크
26
• 재사용 가능한 라이브러리 및 클래스 집합
• 애플리케이션의 큰 틀과 구조를 결정함
• 설계자가 의도한 디자인 패턴들의 집합으로 구성됨
• 내부적 제어흐름이 있음
• 개발자는 프레임워크를 통해 기능 호출
웹 애플리케이션 개발을 위해 설계된 소프트웨어 프레임워크
프레임워크
http://zetawiki.com/wiki/프레임워크
http://zetawiki.com/wiki/웹애플리케이션_프레임워크
여기서는 웹 애플리케이션 프레임워크
node.js, npm
28
node.js
• 자바스크립트 엔진 위에서 동작하는 이벤트 처리 I/O 프레임워크
• V8에 event처리 라이브러리 libuv를 결합한 플랫폼
• Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리성능
• 내장 HTTP 서버 라이브러리 포함. 별도의 소프트웨어 없이 웹서버 동작 가능
npm
• node.js 용 공식 패키지 매니저
• 윈도우에서는 node.js를 설치하면 함께 설치됨
Cloud Foundry 빌드팩
30
애플리케이션용 프레임워크, 런타임 지원 패키지
• 내장 빌드팩
Java, Ruby, Node.js, Go, PHP, Python
• 프레임워크 지원
Spring, Symfony, Django, Rails 등
• 패키지 매니저 지원
• 서드파티 빌드팩, 커스텀 빌드팩 제작 사용 가능
실습A에서는 빌드팩이 node.js 설치, npm 작업을 해준 것
• cd workspace
D-1. node-talk-bower 배포
35
• 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 확인
D-2. node-talk-bower 로컬 실행
36
• npm install
• cd node-talk-bower
• cf push
브라우저 http://localhost:3000 확인
37
manifest.yml vs package.json
npm install 수행시, bower install도 수행됨
package.json – npm 설정 파일
manifest.yml – Cloud Foundry 앱 설정 파일
bower install 후 application 실행
38
JSON vs YAML
JSON YAML
• 확장자: .json
• 개행, 공백 무시됨
• 주석 사용 불가
• 문자열을 쌍따옴표로 감싸야 함
• 한글 인코딩되어 읽기 어려움
• YAML보다 더 널리 사용됨
• 대부분의 언어에서 기본 지원
• 확장자: .yml, .yaml
• 개행, 공백으로 블록 인식
• 주석 사용 가능
• 문자열을 쌍따옴표로 감싸지 않아도 됨
• 한글 그대로 사용 가능
• 점차 사용이 늘고 있음
• 대부분의 언어에 라이브러리 있음
가독성이 좋음
http://zetawiki.com/wiki/JSON,_YAML_비교
E-1. node-session 배포, scale out
41
• cd workspace • 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 하면… ?!
로그인이 풀린다.
그리고 로그인이 안된다 ㅠㅠ
Redis
42
• 오픈소스 인메모리 키-값 저장소
• 데이터베이스 캐시, 세션 저장소 등으로 많이 사용함
• 선택적 영구성 키-값 저장소
• 정렬된 집합, 리스트 등 자료구조 지원
• (MongoDB 대비) 읽기/쓰기 모두 빠름
http://zetawiki.com/wiki/레디스_redis
Session Clustering
43
• 스티키 세션 - 로드밸런싱 환경에서 사용자의 세션이 유지되도록 하는 것
• 세션 클러스터링 – 애플리케이션 간 세션을 공유하는 것
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로 하거나,
WAS 또는 Redis 세션 클러스터링 기능을 쓰면 됨.
단, 서비스 영향 없이 증설·감설은 어려움
활용예시 - Laravel 설정
44
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_프로퍼티
F-2. node-session-redis 배포, 테스트
47
• cd workspace • 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
PaaS & Cloud Native App 관련 주제
48
본격 PaaS 삼국지
어디에도 없는 근본없는 그림…
PaaS 환경에서 개발하다보니
관심이 가게 된 것들…
관련이 깊은 것끼리 연결해보았음
http://www.slideshare.net/onmay1/paas-66446915 참고