발표자는?
3
• 김정민
• IaaS / PaaS 엔지니어
• Cloud 관리/자동화 기능 개발자
• 좋아하는 것: IT, 개발, 클라우드, 위키
• http://github.com/jmnote
└ 별거 없음… ★ 최대 3개
( ucloud biz, devpack )
4
차례
• Cloud
• PaaS
• Cloud Native Application
• Microservice
• Framework
PaaS 세상에서 개발자로 살아남기;;
결국 다 먹고 살자고 App 배포하자고 하는 얘기
Cloud?
IT 자원을 제공하는 서비스
인터넷 상에서 리소스를 간편하게 할당받아 사용하는 서비스
5
빠른 프로비저닝·릴리즈, 구성가능한 컴퓨팅 리소스 공유 풀에 온디
맨드 네트워크 접근을 가능하게 하는 모델 - NIST
집적·공유된 IT자원을 이용자의 요구·수요 변화에 따라 통신망을 통
해 신축적으로 이용가능한 정보처리체계 - 클라우드컴퓨팅 발전법
인터넷 기술을 활용하여 IT 자원을 제공하는 기술·서비스
리소스를 요청/관리하는 기능을 웹과 API로 제공함 ★
as you know…
└ endpoint, CLI
진지한 궁서체…
IaaS vs PaaS
7
Cloud 설명
IaaS
• 인프라(주로 OS가상머신*)을 제공하는 서비스
• “리눅스/윈도우 서버가 필요할 때”
PaaS
• 개발플랫폼을 제공하는 서비스
• “애플리케이션을 배포할 서버가 필요할 때”
• PaaS는 주로 IaaS 위에 구축됨
∵ PaaS에 필요한 인프라를 간편하게 증설하기 위해
* ‘인프라’라고 하면 OS가상머신(서버/데스크탑) 이외에 스토리지, 로드밸런서, 네트워크 등도 포함. 여기서는 OS가상머신 서버로 한정
IaaS
8
인프라를 제공하는 Cloud 서비스
• 제공되는 것: Linux, Windows 등의 OS 가상머신
• 서비스: AWS EC2, kt ucloud biz 등
• 솔루션: OpenStack, CloudStack 등
• 하이퍼바이저: KVM, VMware, Xen, Hyper-V 등
OS가상머신을 제공하는 서비스를 지칭하는 경우가 많음
└ OS가상머신(서버/데스크탑),스토리지,로드밸런서, 네트워크
Infrastructure as a service
└ + XenServer,OracleVM Server
9
PaaS platform as a service
개발플랫폼을 제공하는 Cloud 서비스
└ 실행 런타임, 웹서버,개발도구
개발을 위한 플랫폼을 구축할 필요 없이, 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수
있게 하는 모델 – 위키백과
탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅, 구성, 배포 · 관리를 자동화하
는 클라우드 애플리케이션 플랫폼 - 레드햇
개발자 컴퓨터에서 개발 Application 배포 및 실행 서비스 제공
FTP로 소스코드 업로드하여 사용하는 웹호스팅과는 무엇이 어떻게 다를까?
10
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
11
개발자는 Application 요리에 집중하고 싶다…
대자연 캠핑장 글램핑 호텔
데크
텐트
음식
SaaS가 더 좋은 거 아님?
원래 출처가 어딘지는 모르겠으나, IBM 공진기님의 발표자료에서 참고함
이런 근사한 비유가 있었다니… 캠핑족이신가?
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구매, 설치
PaaSOn-Premises
7 일 2 일 0 일
구축
구축, 증설기간 대폭 단축!
정말?
웹호스팅 vs PaaS
13
웹호스팅 PaaS
• scale out 어려움
• 제한된 언어/버전 지원
• 웹서버 설정 변경 불가
• 프레임워크 이용 어려움
• scale out 용이함
• 다양한 언어/버전 지원
• 웹서버 설정 변경 가능
• 프레임워크 이용 자유로움
• PHP 5.6 대신 7.0 버전을 쓰고 싶다. (왜?)
• 아파치 DOCUMENT_ROOT 경로를 바꾸고 싶다.
• 아파치 대신 Nginx를 쓰고 싶다.
No Problem!
즉시 적용 가능
http://zetawiki.com/wiki/웹호스팅_vs_PaaS
기업환경에서의 PaaS
14
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
PaaS 서비스 비교
15
kt ds
devpack
IBM
Bluemix
Pivotal
Web
Service
AWS
Elastic
Beanstalk
Google
App
Engine
Cloud
Foundry
Cloud
Foundry
Cloud
Foundry
자체
솔루션
자체
솔루션
KT
ucloud biz
IBM AWS AWS Google
PaaS
솔루션
인프라
서비스
더 많은 서비스를 살펴보려면 http://paasfinder.org 참고
devpack의 특장점
17
다양한 언어 지원 Java, PHP, Python, Go, Node.js, Ruby
메모리 1GB당 월 2만원 정도 타사 대비 저렴한 가격
트래픽 3TB 무료 제공
MySQL, Redis 부가서비스 이용가능
30MB Redis 인스턴스 1개 상시 무료
모니터링 화면
앱 인스턴스 메모리 최소단위가 1GB라는 얘기는 아님
1MB단위로 설정할 수 있음
간단한 PHP 애플리케이션이라면 100MB도 충분함
100MB라면 월 2000원 정도
Cloud Foundry
18
클라우드 애플리케이션 실행 플랫폼
오픈소스 PaaS 소프트웨어
다양한 인프라스트럭처 지원
사용자 인증/관리
라우터(≒로드밸런서, 도메인기반)
https://docs.cloudfoundry.org/concepts/architecture/
미터링 로그 수합
애플리케이션 보관/실행
부가서비스 연동
아키텍처
cloudfoundry.org
Cloud Foundry 빌드팩
19
애플리케이션용 프레임워크, 런타임 지원 패키지
• 내장 빌드팩
Java, Ruby, Node.js, Go, PHP, Python
• 런타임 관련 프레임워크 사용 가능
Spring , Symfony, Django, Rails 등
• 서드파티 빌드팩 사용 가능
• 원하는 빌드팩 만들어 사용 가능
PaaS & Cloud Native App 관련 주제
21
본격 PaaS 삼국지
어디에도 없는 근본없는 그림…
PaaS 환경에서 개발하다보니
관심이 가게 된 것들…
관련이 깊은 것끼리 연결해보았음
몇 개나 알고 계신가요?
Cloud Native Application?
22
• 모던 웹 애플리케이션 프레임워크 활용
• 신속한 배포, 출시 가능
• Cloud DB, Cloud Cache, Cloud Storage 등 Cloud 요소를 활용
• 필요시 즉각적인 증설이 가능하도록 구성 ★
• 마이크로서비스 아키텍처의 구성요소로서 이야기하는 경우가 많음
• 상호간 REST API로 연동
클라우드 환경(특히 PaaS)에 적합하게 구성된 애플리케이션
엄밀한 정의가 있는 것은 아님. 아직 Wikipedia에 표제어로 등재되지 않음
애플리케이션 관련 요소들이 점차 Cloud화되고 있는데, Cloud를 적극 활용할 때 어떤 구조가 좋을까에 대한 지향점
“클라우드 태생의 애플리케이션”
기업환경에서의 PaaS
23
Load Balancer
Web Web
WAS
Load Balancer
Router Router
App App
전통적 구성
DB DBNAS Storage
PaaS 구성
WAS
In-Memory
Cache
다시 보기…
App 이외의 요소들이 Cloud화되어 있다
frontend 쪽) App 인스턴스 증설시
PaaS가 유연하게 처리함
backend 쪽) 같은 곳을 바라보니
문제가 없을까?
아래쪽에..In-Memory Cache는 뭐지?
왜 점선으로 그렸을까? ( 없어도 되니까 )
DB와 Storage는 점선이 아닌데?
( 있어야 하니까 )
Session Clustering
24
• 스티키 세션 - 로드밸런싱 환경에서 사용자의 세션이 유지되도록 하는 것
• 세션 클러스터링 – 애플리케이션 간 세션을 공유하는 것
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로 하면
이상없음. 단, 증설·감설시 매핑관계가 흐트러질 수 있음
Microservice
25
바운디드 컨텍스트로 느슨하게 결합된 서비스 지향 아키텍처
전체 서비스가 동시에 업데이트되어야 한다면 느슨한 결합이 아님
주변 서비스들에 대해 알아야 할 것이 너무 많다면 바운디드 컨텍스트가 아님
작은 서비스의 결합을 통해 하나의 응용프로그램을 개발하는 방법
• 각 서비스가 독립적인 비즈니스 로직으로 구성됨
• 애플리케이션 간 REST API 연동
• 서로 다른 프로그래밍 언어, 데이터베이스 기술로 작성될 수 있음
• 지속적 딜리버리(CD) 가능
http://zetawiki.com/wiki/마이크로서비스
Bounded Context
26
• “적절한 컨텍스트 구획”, DDD의 중심 패턴
• 마이크로서비스로 전환하려면 컨텍스트를 적절히 식별하여 분리해야 함
• 주변 서비스들에 대해 알아야 할 것이 너무 많다면 바운디드 컨텍스트가 아님
http://martinfowler.com/bliki/BoundedContext.html
도메인 주도 설계
27
• 소프트웨어 설계 기법의 하나
• 복잡한 도메인의 설계는 모델 기준으로 해야 함
• 시스템 구현 위해 특정기술이 아니라 도메인과 로직에 초점
• 시스템 요구를 기술하기 위해 도메인 전문가가 도메인 모델 제공
• 사용자, 개발자가 참고할 수 있는 공통 언어를 형성해야 함
• 다층 아키텍처의 객체지향 시스템에서 도메인층을 기술하는 것에 중점을 둠
http://zetawiki.com/wiki/도메인_주도_설계_DDD
Domain-Driven Design
도메인 구성 단위 in DDD
28
한국어명 영어명 설명
개체 entity
도메인 모델 내의 객체. 속성이 아니라 연속성, 식별성에 의해
정의
값 객체 value object
사물의 특성을 기술하는 객체. 보통 식별자 없이, 읽기 전용 객
체. Flyweight 패턴을 이용해 공유
서비스 service 조작이 객체에 속하지 않는 경우에 서비스로 구현
리파지토리 repository
도메인 객체 취득은, 저장소 변경이 용이하도록, 리파지토리 객
체가 전담 처리
팩토리 factory
도메인 객체 생성 메소드는, 변경이 용이하도록 팩토리 오브젝
트가 전담 처리
http://en.wikipedia.org/wiki/Domain-driven_design#Building_blocks
CI / CD
30
http://zetawiki.com/wiki/지속적통합_CI,_지속적배포_CD
continuous integration continuous delivery
• 지속적으로 품질 관리를 적용하는 프
로세스를 실행하는 것
• 작은 단위의 작업, 빈번한 적용. 지속
적인 통합은 모든 개발을 완료한 뒤에
퀄리티 컨트롤을 적용하는 고전적인
방법을 대체하는 방법
• 도구 예시: Jenkins
• 짧은 주기로 소프트웨어를 생산하는
소프트웨어 공학적 접근법
• 상시, 신뢰성 있는 릴리즈
• 도구 예시: Spinnaker
CD 도구 - Spinnaker
31
http://www.spinnaker.io/
http://techblog.netflix.com/2015/11/global-continuous-delivery-with.html
DevOps
32
http://zetawiki.com/wiki/데브옵스_DevOps
• "Development (개발) + Operations (운영)"
• 개발자와 운영자의 공감, 소통하는 조직문화
• 개발과 운영이 하나인 것처럼 협동 관리하는 것
• 개발자과 운영자의 소통과 협업을 촉진하여 혁신 속도를 빠르게 하는 업무방식
• 개발, 품질보증, 운영이 한개의 사이클로 묶여 유기적으로 연동되는 개발 패러다임
• 개발자, 운영자, 품질관리 조직 사이의 업무 프로세스, 역할 조율, 자동화 등
웹 애플리케이션 프레임워크
34
• 재사용 가능한 라이브러리 및 클래스 집합
• 애플리케이션의 큰 틀과 구조를 결정함
• 설계자가 의도한 디자인 패턴들의 집합으로 구성됨
• 내부적 제어흐름이 있음
• 개발자는 프레임워크를 통해 기능 호출
웹 애플리케이션 개발을 위해 설계된 소프트웨어 프레임워크
프레임워크
http://zetawiki.com/wiki/프레임워크
http://zetawiki.com/wiki/웹애플리케이션_프레임워크
as you know…
Spring 프레임워크
36
오픈소스 애플리케이션 프레임워크
Java 프레임워크 중 가장 대중적임
http://zetawiki.com/wiki/스프링_프레임워크
• 2003년, 아파치 라이선스 2.0으로 공개됨
• 2004년 v1.0, DIxAOP 컨테이너, Bean 정의파일 도입
• 2006년 v2.0, Bean 정의파일 XML로 변경, 애노테이션, JPA, 스크립트 언어 지원
• 2009년 v3.0, 애노테이션 추가
• 2011년 v3.1, 캐시 기능 추가
• 2013년 v4.0, 애노테이션, 웹소켓, 테스트 기능 추가
Spring 하위 프로젝트
37
http://zetawiki.com/wiki/스프링_프레임워크
영어명 한국어명 설명
Spring Boot 스프링 부트 초기 구성 및 기동 간소화
Spring MVC 스프링 MVC 웹애플리케이션 MVC
Spring Integration 스프링 연동 시스템 연동
Spring Batch 스프링 배치 배치 처리
Spring Security 스프링 시큐리티 인증
Spring Data 스프링 데이터 데이터 접근 추상화
Spring Boot
38
• 스프링 프로젝트의 일부
• 스프링 "설정보다 컨벤션(CoC)" 솔루션
• 초기 구성 및 기동 간소화
• 'starter' POM으로 기본설정 자동수행, 자동연결 강화
• 자주 사용되는 프로젝트 조합이 미리 준비됨
• stand-alone 웹서버(예: 톰캣) 내장(embed)
→ WAR 파일로 배포할 필요가 없음
• Cloud Foundry와 찰떡궁합
http://zetawiki. com/wiki/스프링부트_SpringBoot
http://zetawiki. com/wiki/Make_JAR,_not_WAR
이클립스 vs 스프링 툴 스위트(STS)
39
이외에 IntelliJ IDEA 도 많이 사용됨
http://zetawiki.com/wiki/이클립스
http://zetawiki.com/wiki/스프링_툴_스위트
• 이클립스 IDE
• 용도: 주로 자바 개발
• 이클립스 기반 IDE
• 용도: 스프링 애플리케이션 개발
• 관련 플러그인 합본
- Cloud Foundry
- Gradle
- Pivotal tc Server
Spring Boot 기초 예제
40
Dependencies: Web
@RestController vs @Controller
Spring Boot - DB 연동 - JDBC
41
Dependencies: spring-boot-starter-jdbc
http://zetawiki.com/wiki/스프링부트_JDBC_CF서비스_자동연결
Spring Boot - DB 연동 - JPA
42
Dependencies: spring-boot-starter-data-jpa
http://zetawiki.com/wiki/스프링부트_JPA_CF서비스_자동연결
Spring Boot - Cloud 데이터소스 연결
43
Dependencies:
• spring-boot-starter-cloud-connectors
• spring-boot-configuration-processor
설명 순서가 이상하다… DB 연동 예제는 이미 하지 않았나?
Spring Boot - redis 연동
44
http://zetawiki.com/wiki/스프링부트_Redis_CF서비스_자동연결
Dependencies: spring-boot-starter-redis
기초실습 시나리오
45
• https://github.com/jmnote/jmSpringJdbcMovie
• https://github.com/jmnote/jmJpaTest
• https://github.com/jmnote/jmJdbcTest
구분 내용
기초예제 • devpack 접속, 앱 삭제, DB 삭제
• 이클립스에 devpack 서버 등록
• Hello 앱 신규작성, 로컬/원격 실행
DB연결 • DB 상품 신청
• cf cli 환경설정
• phpMyAdmin 앱 올리기
• 데이터 마이그레이션
• jmSpringMovie 소스코드설명, 실행 *
• jmPhpMovie 소스코드설명, 실행 *
신규작성 • jmJdbcTest2 *
• jmJpaTest2 *
오늘 한다는 건 아니고… 그냥 생각해본 것
Laravel
46
• PHP 웹 애플리케이션 프레임워크
• MVC 구조
• 쿼리빌더 + ORM
• 마이그레이션, 시딩
• 템플릿 엔진
• Redis 연동, Session Clustering이 간편함