Anzeige

PaaS를 활용한 효율적 개발

Cloud / Software Engineer um Samsung SDS
27. Sep 2016
Anzeige

Más contenido relacionado

Presentaciones para ti(20)

Similar a PaaS를 활용한 효율적 개발(20)

Anzeige

Último(20)

PaaS를 활용한 효율적 개발

  1. PaaS를 활용한 효율적 개발 2016-09-27 김정민
  2. 딜레마? 2 불치하문 과도한 질문은 감사합니다! 언제든지 질문해주세요…
  3. 발표자는? 3 • 김정민 • IaaS / PaaS 엔지니어 • Cloud 관리/자동화 기능 개발자 • 좋아하는 것: IT, 개발, 클라우드, 위키 • http://github.com/jmnote └ 별거 없음… ★ 최대 3개 ( ucloud biz, devpack )
  4. 4 차례 • Cloud • PaaS • Cloud Native Application • Microservice • Framework PaaS 세상에서 개발자로 살아남기;; 결국 다 먹고 살자고 App 배포하자고 하는 얘기
  5. Cloud? IT 자원을 제공하는 서비스 인터넷 상에서 리소스를 간편하게 할당받아 사용하는 서비스 5 빠른 프로비저닝·릴리즈, 구성가능한 컴퓨팅 리소스 공유 풀에 온디 맨드 네트워크 접근을 가능하게 하는 모델 - NIST 집적·공유된 IT자원을 이용자의 요구·수요 변화에 따라 통신망을 통 해 신축적으로 이용가능한 정보처리체계 - 클라우드컴퓨팅 발전법 인터넷 기술을 활용하여 IT 자원을 제공하는 기술·서비스 리소스를 요청/관리하는 기능을 웹과 API로 제공함 ★ as you know… └ endpoint, CLI 진지한 궁서체…
  6. 6 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… 오늘의 주제, 개발자용 Cloud
  7. IaaS vs PaaS 7 Cloud 설명 IaaS • 인프라(주로 OS가상머신*)을 제공하는 서비스 • “리눅스/윈도우 서버가 필요할 때” PaaS • 개발플랫폼을 제공하는 서비스 • “애플리케이션을 배포할 서버가 필요할 때” • PaaS는 주로 IaaS 위에 구축됨 ∵ PaaS에 필요한 인프라를 간편하게 증설하기 위해 * ‘인프라’라고 하면 OS가상머신(서버/데스크탑) 이외에 스토리지, 로드밸런서, 네트워크 등도 포함. 여기서는 OS가상머신 서버로 한정
  8. 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. 9 PaaS platform as a service 개발플랫폼을 제공하는 Cloud 서비스 └ 실행 런타임, 웹서버,개발도구 개발을 위한 플랫폼을 구축할 필요 없이, 필요한 개발요소들을 웹에서 쉽게 빌려 쓸 수 있게 하는 모델 – 위키백과 탄력적인 Cloud 환경에서 애플리케이션 스택의 호스팅, 구성, 배포 · 관리를 자동화하 는 클라우드 애플리케이션 플랫폼 - 레드햇 개발자 컴퓨터에서 개발 Application 배포 및 실행 서비스 제공 FTP로 소스코드 업로드하여 사용하는 웹호스팅과는 무엇이 어떻게 다를까?
  10. 10 PaaS 개발자 맞춤형 Cloud PaaS는 주로 IaaS 위에 구축됨 ∵ PaaS에 필요한 인프라를 간편하게 증설하기 위해 ∴ 2중 Layer – IaaS(OS머신 가상화) 위에 PaaS(컨테이너) • 솔루션: Cloud Foundry, OpenShift 등 • 서비스: devpack, PWS, Bluemix, ElasticBeanstalk, GAE 등 소스코드 배포/실행 환경을 별도 구성없이 즉시 제공하는 서비스 대략 유연하고 탄력적인 WAS를 제공하는 Cloud 서비스 미들웨어, 프레임워크를 유연하게 배포 가능 웹서버, 패키지 구성을 소스코드처럼 관리, 간편 scale out, 로드밸런서 포함 ★ └정확히는 컨테이너 + α
  11. IaaS vs PaaS 11 개발자는 Application 요리에 집중하고 싶다… 대자연 캠핑장 글램핑 호텔 데크 텐트 음식  SaaS가 더 좋은 거 아님?  원래 출처가 어딘지는 모르겠으나, IBM 공진기님의 발표자료에서 참고함  이런 근사한 비유가 있었다니… 캠핑족이신가?
  12. 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 일 구축 구축, 증설기간 대폭 단축! 정말?
  13. 웹호스팅 vs PaaS 13 웹호스팅 PaaS • scale out 어려움 • 제한된 언어/버전 지원 • 웹서버 설정 변경 불가 • 프레임워크 이용 어려움 • scale out 용이함 • 다양한 언어/버전 지원 • 웹서버 설정 변경 가능 • 프레임워크 이용 자유로움 • PHP 5.6 대신 7.0 버전을 쓰고 싶다. (왜?) • 아파치 DOCUMENT_ROOT 경로를 바꾸고 싶다. • 아파치 대신 Nginx를 쓰고 싶다. No Problem! 즉시 적용 가능 http://zetawiki.com/wiki/웹호스팅_vs_PaaS
  14. 기업환경에서의 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
  15. 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 참고
  16. devpack 16 “develop + package” ktds의 PaaS 서비스 국내기업 최초 상용PaaS Cloud Foundry 기반 + 사용자 포탈 제공 [데브팩]
  17. devpack의 특장점 17  다양한 언어 지원 Java, PHP, Python, Go, Node.js, Ruby  메모리 1GB당 월 2만원 정도  타사 대비 저렴한 가격  트래픽 3TB 무료 제공  MySQL, Redis 부가서비스 이용가능  30MB Redis 인스턴스 1개 상시 무료 모니터링 화면 앱 인스턴스 메모리 최소단위가 1GB라는 얘기는 아님 1MB단위로 설정할 수 있음 간단한 PHP 애플리케이션이라면 100MB도 충분함 100MB라면 월 2000원 정도
  18. Cloud Foundry 18 클라우드 애플리케이션 실행 플랫폼 오픈소스 PaaS 소프트웨어 다양한 인프라스트럭처 지원 사용자 인증/관리 라우터(≒로드밸런서, 도메인기반) https://docs.cloudfoundry.org/concepts/architecture/ 미터링 로그 수합 애플리케이션 보관/실행 부가서비스 연동 아키텍처 cloudfoundry.org
  19. Cloud Foundry 빌드팩 19 애플리케이션용 프레임워크, 런타임 지원 패키지 • 내장 빌드팩 Java, Ruby, Node.js, Go, PHP, Python • 런타임 관련 프레임워크 사용 가능 Spring , Symfony, Django, Rails 등 • 서드파티 빌드팩 사용 가능 • 원하는 빌드팩 만들어 사용 가능
  20. 20 Cloud Native Application? 클라우드 네이티브 애플리케이션? PaaS도 결국 다 먹고 살자고 App 배포하자고 하는 얘기 어떻게 해야 잘 할 수 있을까?
  21. PaaS & Cloud Native App 관련 주제 21 본격 PaaS 삼국지 어디에도 없는 근본없는 그림… PaaS 환경에서 개발하다보니 관심이 가게 된 것들… 관련이 깊은 것끼리 연결해보았음 몇 개나 알고 계신가요?
  22. Cloud Native Application? 22 • 모던 웹 애플리케이션 프레임워크 활용 • 신속한 배포, 출시 가능 • Cloud DB, Cloud Cache, Cloud Storage 등 Cloud 요소를 활용 • 필요시 즉각적인 증설이 가능하도록 구성 ★ • 마이크로서비스 아키텍처의 구성요소로서 이야기하는 경우가 많음 • 상호간 REST API로 연동 클라우드 환경(특히 PaaS)에 적합하게 구성된 애플리케이션 엄밀한 정의가 있는 것은 아님. 아직 Wikipedia에 표제어로 등재되지 않음 애플리케이션 관련 요소들이 점차 Cloud화되고 있는데, Cloud를 적극 활용할 때 어떤 구조가 좋을까에 대한 지향점 “클라우드 태생의 애플리케이션”
  23. 기업환경에서의 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는 점선이 아닌데? ( 있어야 하니까 )
  24. 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로 하면 이상없음. 단, 증설·감설시 매핑관계가 흐트러질 수 있음
  25. Microservice 25 바운디드 컨텍스트로 느슨하게 결합된 서비스 지향 아키텍처 전체 서비스가 동시에 업데이트되어야 한다면 느슨한 결합이 아님 주변 서비스들에 대해 알아야 할 것이 너무 많다면 바운디드 컨텍스트가 아님 작은 서비스의 결합을 통해 하나의 응용프로그램을 개발하는 방법 • 각 서비스가 독립적인 비즈니스 로직으로 구성됨 • 애플리케이션 간 REST API 연동 • 서로 다른 프로그래밍 언어, 데이터베이스 기술로 작성될 수 있음 • 지속적 딜리버리(CD) 가능 http://zetawiki.com/wiki/마이크로서비스
  26. Bounded Context 26 • “적절한 컨텍스트 구획”, DDD의 중심 패턴 • 마이크로서비스로 전환하려면 컨텍스트를 적절히 식별하여 분리해야 함 • 주변 서비스들에 대해 알아야 할 것이 너무 많다면 바운디드 컨텍스트가 아님 http://martinfowler.com/bliki/BoundedContext.html
  27. 도메인 주도 설계 27 • 소프트웨어 설계 기법의 하나 • 복잡한 도메인의 설계는 모델 기준으로 해야 함 • 시스템 구현 위해 특정기술이 아니라 도메인과 로직에 초점 • 시스템 요구를 기술하기 위해 도메인 전문가가 도메인 모델 제공 • 사용자, 개발자가 참고할 수 있는 공통 언어를 형성해야 함 • 다층 아키텍처의 객체지향 시스템에서 도메인층을 기술하는 것에 중점을 둠 http://zetawiki.com/wiki/도메인_주도_설계_DDD Domain-Driven Design
  28. 도메인 구성 단위 in DDD 28 한국어명 영어명 설명 개체 entity 도메인 모델 내의 객체. 속성이 아니라 연속성, 식별성에 의해 정의 값 객체 value object 사물의 특성을 기술하는 객체. 보통 식별자 없이, 읽기 전용 객 체. Flyweight 패턴을 이용해 공유 서비스 service 조작이 객체에 속하지 않는 경우에 서비스로 구현 리파지토리 repository 도메인 객체 취득은, 저장소 변경이 용이하도록, 리파지토리 객 체가 전담 처리 팩토리 factory 도메인 객체 생성 메소드는, 변경이 용이하도록 팩토리 오브젝 트가 전담 처리 http://en.wikipedia.org/wiki/Domain-driven_design#Building_blocks
  29. Agile 29 http://zetawiki.com/wiki/애자일_소프트웨어_개발 • “가벼운 프로세스“, “민첩함”, “능동적”, “자발적”, “형식에 구애받지 않음” • 반복 점진 개발 + 품질 개선 활동 • 프로그래밍에 집중하는 유연한 개발 방식 • 요구사항 피드백을 계속 받고 자주 릴리즈 ? 개발자 입장에서는… 애초에 요구사항을 잘 주세요 정확하고 작은 요구사항/피드백 문서작업 좀 줄여주세요 개발에 집중하고 싶어요
  30. CI / CD 30 http://zetawiki.com/wiki/지속적통합_CI,_지속적배포_CD continuous integration continuous delivery • 지속적으로 품질 관리를 적용하는 프 로세스를 실행하는 것 • 작은 단위의 작업, 빈번한 적용. 지속 적인 통합은 모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법 • 도구 예시: Jenkins • 짧은 주기로 소프트웨어를 생산하는 소프트웨어 공학적 접근법 • 상시, 신뢰성 있는 릴리즈 • 도구 예시: Spinnaker
  31. CD 도구 - Spinnaker 31 http://www.spinnaker.io/ http://techblog.netflix.com/2015/11/global-continuous-delivery-with.html
  32. DevOps 32 http://zetawiki.com/wiki/데브옵스_DevOps • "Development (개발) + Operations (운영)" • 개발자와 운영자의 공감, 소통하는 조직문화 • 개발과 운영이 하나인 것처럼 협동 관리하는 것 • 개발자과 운영자의 소통과 협업을 촉진하여 혁신 속도를 빠르게 하는 업무방식 • 개발, 품질보증, 운영이 한개의 사이클로 묶여 유기적으로 연동되는 개발 패러다임 • 개발자, 운영자, 품질관리 조직 사이의 업무 프로세스, 역할 조율, 자동화 등
  33. 33 프레임워크 이야기 결국 다 먹고 살자고 App 배포하자고 하는 얘기
  34. 웹 애플리케이션 프레임워크 34 • 재사용 가능한 라이브러리 및 클래스 집합 • 애플리케이션의 큰 틀과 구조를 결정함 • 설계자가 의도한 디자인 패턴들의 집합으로 구성됨 • 내부적 제어흐름이 있음 • 개발자는 프레임워크를 통해 기능 호출 웹 애플리케이션 개발을 위해 설계된 소프트웨어 프레임워크 프레임워크 http://zetawiki.com/wiki/프레임워크 http://zetawiki.com/wiki/웹애플리케이션_프레임워크 as you know…
  35. 언어별 프레임워크 35 언어 프레임워크 예시 Java Spring, Grails, Play Ruby Rails, Sinatra Node.js React, AngularJS, Express.js, Meteor Go Revel, Martini, Gorilla PHP Laravel, CakePHP, Symfony, Zend Python Django, Flask http://zetawiki. com/wiki/언어별_웹애플리케이션프레임워크
  36. 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, 애노테이션, 웹소켓, 테스트 기능 추가
  37. Spring 하위 프로젝트 37 http://zetawiki.com/wiki/스프링_프레임워크 영어명 한국어명 설명 Spring Boot 스프링 부트 초기 구성 및 기동 간소화 Spring MVC 스프링 MVC 웹애플리케이션 MVC Spring Integration 스프링 연동 시스템 연동 Spring Batch 스프링 배치 배치 처리 Spring Security 스프링 시큐리티 인증 Spring Data 스프링 데이터 데이터 접근 추상화
  38. 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
  39. 이클립스 vs 스프링 툴 스위트(STS) 39 이외에 IntelliJ IDEA 도 많이 사용됨 http://zetawiki.com/wiki/이클립스 http://zetawiki.com/wiki/스프링_툴_스위트 • 이클립스 IDE • 용도: 주로 자바 개발 • 이클립스 기반 IDE • 용도: 스프링 애플리케이션 개발 • 관련 플러그인 합본 - Cloud Foundry - Gradle - Pivotal tc Server
  40. Spring Boot 기초 예제 40 Dependencies: Web @RestController vs @Controller
  41. Spring Boot - DB 연동 - JDBC 41 Dependencies: spring-boot-starter-jdbc http://zetawiki.com/wiki/스프링부트_JDBC_CF서비스_자동연결
  42. Spring Boot - DB 연동 - JPA 42 Dependencies: spring-boot-starter-data-jpa http://zetawiki.com/wiki/스프링부트_JPA_CF서비스_자동연결
  43. Spring Boot - Cloud 데이터소스 연결 43 Dependencies: • spring-boot-starter-cloud-connectors • spring-boot-configuration-processor 설명 순서가 이상하다… DB 연동 예제는 이미 하지 않았나?
  44. Spring Boot - redis 연동 44 http://zetawiki.com/wiki/스프링부트_Redis_CF서비스_자동연결 Dependencies: spring-boot-starter-redis
  45. 기초실습 시나리오 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 * 오늘 한다는 건 아니고… 그냥 생각해본 것
  46. Laravel 46 • PHP 웹 애플리케이션 프레임워크 • MVC 구조 • 쿼리빌더 + ORM • 마이그레이션, 시딩 • 템플릿 엔진 • Redis 연동, Session Clustering이 간편함
  47. Laravel 설정 47 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
  48. 48 감사합니다 PaaS 세상은 온다… ( 언제? ) 개발자라면 PaaS를 사용해 보면서 Cloud Native Application에 익숙해지자. 개발자가 아니라면? 개발을 공부하자
  49. PaaS http://paasfinder.org PaaS 파인더 http://ko.wikipedia.org/wiki/데브팩 데브팩 - 위키백과 http://ko.wikipedia.org/wiki/클라우드_파운드리 클라우드 파운드리 - 위키백과 https://docs.cloudfoundry.org/buildpacks/ buildpacks - Cloud Foundry http://www.slideshare.net/derekcollison/design-of-cloud-foundry Design and Architecture of Cloud Foundry - Derek Collison http://www.slideshare.net/JinGiKong/pycon-apac-2016-django-flask-paas-ibm-bluemix Django, Flask 고민없이 개발하고 서비스하는 PaaS, IBM블루믹스 - 공진기 http://www.slideshare.net/leosace/paa-s-openshift20140715 오픈소스PaaS 솔루션 openshift 소개 - 김호중 마이크로서비스 http://www.moreagile.net/2014/10/microservices.html 마이크로서비스가 가져올 미래의 개발 패러다임 - 정도현 DevOps http://www.slideshare.net/JinGiKong/bluemix-devops-cognitive-cloud-connect Bluemix 로 접근하는 DevOps - 공진기 49 참고 자료
Anzeige