Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기

2,337 views

Published on

연사: AWS 김필중 솔루션 아키텍트

https://aws.amazon.com/ko/events/start-up/

Published in: Technology
  • Be the first to comment

[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기

  1. 1. © 2017, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 김필중, 솔루션즈 아키텍트 2017.11.02 AWS Startup Day 서버리스 마이크로서비스
  2. 2. 스타트업이 고려하는 것들 큰 규모 기대 기능에 집중 Lean IT 부서 저렴한 비용 == 비지니스 지속
  3. 3. 우리가 고려하는 또 다른 것들 신뢰성 성능 비용 효율성 보안
  4. 4. 목표를 위한 보통의 접근: 다양한 프레임워크 활용
  5. 5. 목표를 위한 보통의 접근: Monolithic/N-티어 아키텍처 Data Center 1 Your infrastructure provider Data Center 2 Load Balancer DB Master DB Standby App Server App Server
  6. 6. AWS에서 스타트업들의 접근법 git clone git://myrepo && cd myrepo eb init eb create prod pg_restore –v –h mydb.rds.amazonaws.com latest.dump eb setenv SHARED_KEY_OF_SOME_SORT=58dex..24513j // changes eb create test git add . && git commit –m “profound change” eb deploy // test eb switch prod && eb deploy
  7. 7. VM 기반의 N-티어 아키텍처 ExampleApp-Test ExampleApp-Prod Availability Zone A Availability Zone B Elastic Load Balancing EC2 RDS Standby EC2
  8. 8. 추가적인 중요한 이점들! ExampleApp-Test ExampleApp-Prod Availability Zone A Availability Zone B Elastic Load Balancing EC2 RDS Standby EC2 Amazon CloudWatch • 서비스 차원의 리소스 모니터링 • 로그 관리 AWS 보안 • IAM • VPC 네트워킹 전문 서비스 • 블록/오브젝트 저장소 • 캐싱 • DNS
  9. 9. AWS Elastic Beanstalk ­ 손 쉬운 N-티어 구축 및 운영 ExampleApp-Test ExampleApp-Prod Availability Zone A Availability Zone B Elastic Load Balancing EC2 RDS Standby EC2 Amazon CloudWatch • 서비스 차원의 리소스 모니터링 • 로그 관리 AWS 보안 • IAM • VPC 네트워킹 전문 서비스 • 블록/오브젝트 저장소 • 캐싱 • DNS 모범 사례로 가는 가장 빠른 길 AWS Elastic Beanstalk • 시작부터 클라우드 모범 사례로 구축 가능 • 개발자 워크플로우와 통합 • Elastic Beanstalk 명령행 인터페이스를 활용
  10. 10. 성장하는 서비스에서 Monolith 앱의 단점 장기 개발 사이클 (다수개발자 공동 참여) 운영의 어려움 (특정 모듈 장애시) 애플리케이션 확장성 애로 신규 출시에 몇 달이 걸림 신규 기능 추가에 어려움 아키텍처 유지 진화의 어려움 혁신 저해 고객 불만족 민첩성 저해
  11. 11. 성공을 위한 표준 패턴 확인 Monolithic 여러 서비스 내부 마이크로서비스 플랫폼
  12. 12. AWS 기반 마이크로서비스 아키텍처 사례 Building a Microservices Gaming Platform for Turbine Mobile Games (2016) From Monolithic to Microservices Evolving Architecture Patterns in the Cloud (2016) Developing Mobile Apps and Serverless Microservices for Enterprises using AWS (2016) Pure Play Video OTT- A Microservices Architecture (2015) Nike's Journey into Microservices (2014) A Journey to Microservices (2015) 마이크로서비스 기반 모바일 서비스 마이그레이션 (2016) 마이크로 서비스 아키텍처로 방송 서비스 진화 (2016) 삼성전자 IoT 서비스 마이크로서비스 구축 사례 서버리스 마이크로 서비스 전환 사례
  13. 13. 추천 동영상: Netflix 마이크로서비스 아키텍처 https://www.youtube.com/watch?v=Oc zG5FQIcXw https://www.youtube.com/watch?v=- mL3zT1iIKw
  14. 14. “service-oriented architecture composed of loosely coupled elements that have bounded contexts” Adrian Cockcroft (VP of Cloud Architecture @ AWS, former Cloud Architect at Netflix) 마이크로서비스란?
  15. 15. 다른 서비스의 내부 구조를 알지 못해도, 내 서비스 코드를 업데이트 할 수 있다. 서비스들이 네트워크를 통해 서로 API로 통신한다. 서비스는 독자적으로 업데이트하며, 서로 영향을 주지 않는다. “service-oriented architecture composed of loosely coupled elements that have bounded contexts” Adrian Cockcroft (VP of Cloud Architecture @ AWS, former Cloud Architect at Netflix)
  16. 16. Monolithic vs. SOA vs. Microservices SOA 거친 입자 Microservices 고운 입자 Monolithic 하나의 입자
  17. 17. 마이크로서비스 vs SOA Microservices: • 많은 작은 구성요소 • 단일 서비스 도메인 내에 비지니스 로직이 동작 • 간단한 와이어 프로토콜 (XML/JSON와 HTTP) • SDK와 클라이언트와 함께 API 지향 SOA: • 보다 정교한 구성요소 감소 • 여러 도메인에 걸쳐 비지니스 로직이 동작 • 서비스간 레이어와 같은 엔터프라이즈 서비스 버스 • 미들웨어
  18. 18. Monolithic 아키텍처 Order UI User UI Shipping UI Order Service User Service Shipping Service Data Access
  19. 19. Monolithic 아키텍처 - 확장
  20. 20. Monolith 개발 라이프사이클 개발 릴리즈테스트빌드 전달 파이프라인애플리케이션
  21. 21. 마이크로서비스 아키텍처 Order UI User UI Shipping UI Order Service User Service Shipping Service
  22. 22. 마이크로서비스 아키텍처 - 확장 Order UI User UI UI Order Service Service Shipping Service Order UI Order UI User UI UIShipping UI Order ServiceOrder Service Service Service Service Service User Service Shipping Service
  23. 23. 마이크로서비스 개발 라이프사이클 개발 전달 파이프라인마이크로서비스 build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline build pipeline
  24. 24. Build Stage #1 Stage #2 … Stage #N Production Build Build Build Build Spring Developer/ Team Developer/ Team Developer/ Team Developer/ Team Developer/ Team
  25. 25. Developer Build Stage #1 Stage #2 … Stage #N Production Build Build Build Build Bug! Spring Developer/ Team Developer/ Team Developer/ Team Developer/ Team
  26. 26. Build Build Build Stage #1 Stage #2 … Stage #N Production Build Build Build Build Build Build Build Build Build Build Build Build Spring Node.js Ruby on Rails Developer/ Team Developer/ Team Developer/ Team Developer/ Team Developer/ Team
  27. 27. Build Build Developer Build Stage #1 Stage #2 … Stage #N Production Build Build Build Build Bug! Build Build Build Build Build Build Build Build Spring Node.js Ruby onRails Developer/ Team Developer/ Team Developer/ Team Developer/ Team
  28. 28. 마이크로서비스 아키텍처 특징 Do one thing well Independent Decentralized Black Box Polyglot You build it, you run it
  29. 29. 마이크로서비스의 이점 • 복잡성 감소 https://www.nginx.com/resources/library/designing-deploying-microservices/
  30. 30. 마이크로서비스의 이점 • 복잡성 감소 • 독립적인 개발 https://www.nginx.com/resources/library/designing-deploying-microservices/ Mock Service Tests
  31. 31. 마이크로서비스의 이점 • 복잡성 감소 • 독립적인 개발 • 독립적인 배포 https://www.nginx.com/resources/library/designing-deploying-microservices/ v1.1 v1.2
  32. 32. 마이크로서비스의 이점 • 복잡성 감소 • 독립적인 개발 • 독립적인 배포 • 독립적인 확장성 https://www.nginx.com/resources/library/designing-deploying-microservices/
  33. 33. 마이크로서비스로의 전환
  34. 34. 마이크로서비스로의 전환 단계 1 기능성 분리 Code Order Code Monolith ServiceMonolith Service Custom er Code Monolith DB Monolith DB
  35. 35. 마이크로서비스로의 전환 단계 2 데이터 분리 Code Order Code Monolith Service Customer Code Order Code Monolith Service Customer Code Monolith DB Order DB Customer DB
  36. 36. 데이터 캡슐화 Foreign Key가 필요하면? 서비스를 통한 데이터 접근 Order Customer Order DB Customer DB Order Customer Order DB Customer DB
  37. 37. 데이터 캡슐화 공유된 데이터가 필요하면? 별도 서비스 생성 Address Order Customer
  38. 38. 데이터 캡슐화 단일 테이블이라면? 두개로 분리 Order Customer
  39. 39. 이벤트 기반과 최종 일관성 Order Customer Customer DB Topic Order DB POST /Orders (including address change)
  40. 40. 마이크로서비스로의 전환 단계 3 배포 분리 Code Order Code Microservice Customer Code Monolith DB Order DB Customer DB Order Code Monolith Service Customer Code Order DB Customer DB
  41. 41. 배포 분리 Order Code Microservice Customer Code Microservice Expose API
  42. 42. 배포 분리 독립 CD 파이프라인 Compile Unit Test Package Deploy E2E Test ProdOrder Compile Unit Test Package Deploy E2E Test Prod Contract Tests Customer
  43. 43. 마이크로서비스로의 진화 • 새로운 기능을 마이크로서비스로 구성 • 점진적으로 기능 단위 마이그레이션 • 올 인/완전 리빌드
  44. 44. 마이크로서비스로의 진화 • 새로운 기능을 마이크로서비스로 구성 • 점진적으로 기능 단위 마이그레이션 • 올 인/완전 리빌드
  45. 45. 새로운 기능을 마이크로서비스로 구성 • 새로운 기능이 필요할 때, 마이크로서비스를 첫 번째 접근 방식으로 사용 • Monolith에서의 종속성이 마이크로서비스에 미치는 영향을 고려 • ”if you find yourself in a hole, stop digging”, 문제 발생 시 새로운 방법 및 접근법을 고려
  46. 46. Amazon EC2 Amazon ECS AWS Lambda 서버에서 작동하는 애플리케이션 컨테이너로 동작하는 서비스 클라우드에서 동작하는 함수
  47. 47. Amazon EC2 Amazon ECS AWS Lambda 서버에서 작동하는 애플리케이션 컨테이너로 동작하는 서비스 클라우드에서 동작하는 함수 • 머신 단위의 확장 • 하드웨어 추상화 • 머신, 스토리지, 네트워킹, OS를 직접 구성하고 싶을 때 선택 • 앱 단위의 확장 • OS 추상화 • 서버를 구동, 애플리케이션 구성, 확장을 제어하고 싶을 때 • 함수 단위의 확장 • 언어 런타임 추상화 • 필요할 때 코드가 실행되도록 하고 싶을 때
  48. 48. Amazon EC2 Amazon ECS AWS Lambda 서버에서 작동하는 애플리케이션 컨테이너로 동작하는 서비스 클라우드에서 동작하는 함수 • 머신 단위의 확장 • 하드웨어 추상화 • 머신, 스토리지, 네트워킹, OS를 직접 구성하고 싶을 때 선택 • 앱 단위의 확장 • OS 추상화 • 서버를 구동, 애플리케이션 구성, 확장을 제어하고 싶을 때 • 함수 단위의 확장 • 언어 런타임 추상화 • 필요할 때 코드가 실행되도록 하고 싶을 때
  49. 49. AWS Lambda 서버리스, 이벤트 처리 방식의 컴퓨팅 서비스 Lambda = 서버리스 마이크로서비스
  50. 50. Lambda : 동작 원리 Bring your own code • Node.js, Java, Python • Java = Scala, Clojure 등의 어떠한 JVM기반 언어. • Bring your own libraries 유연한 호출 경로 • Event 혹은 Request/Response 호출 옵션 • 여러 AWS 서비스들과 통합 단순한 자원 모델 • 128MB부터 1.5GB까지 64MB 단위로 메모리 설정 • 할당된 메모리에 비례하여 CPU 및 네트웍 자원 할당 • 실제 사용량 내역 보고 효과적인 권한 통제 • AWS IAM (Identity and Access Management) Role을 사용한 실행 권한 설정 • AWS 이벤트 소스에 대한 자원 정책
  51. 51. Lambda : 동작 원리 제작 기능 • AWS SDK 포함 • 인바운드 네트웍 처리 • 프로세스, 쓰레드, /tmp, 소켓 … 배포 옵션 • 콘솔의 WYSIWIG 편집기를 사용하여 직접 제작/배포 • 코드를 zip 파일로 묶어 Lambda 서비스 혹은 S3로 전송 Stateless 기능 • S3/Amazon DynamoDB/Amazon ElastiCache를 사용한 저장 • 인프라스트럭쳐와의 연관성 없음 (로그인 불가) 모니터링 및 로깅 • Amazon CloudWatch 메트릭 – 요청 수, 에러 수, 처리 시간, 처리량 • Amazon CloudWatch Log를 사용하여 로깅
  52. 52. Lambda 사용 이점 • 서버 용량 자동 확장 • API를 통한 실행 트리거 • 함수의 병렬 실행 및 확장을 보장 • 로깅, 모니터링 등 • 만족할만한 가격
  53. 53. 서버리스 웹 애플리케이션 아키텍처 Images/Video HTML/CSS/JS 정적 요청 Angular/SPA Amazon CloudFront/ Amazon S3 Desktop *aaS Mobile
  54. 54. 서버리스 웹 애플리케이션 아키텍처 Images/Video HTML/CSS/JS 정적 요청 동적 요청AWS Lambda Angular/SPA Amazon API Gateway api.example.com Desktop *aaS Mobile Amazon CloudFront/ Amazon S3 api.example.com
  55. 55. 서버리스 웹 애플리케이션 아키텍처 Images/Video HTML/CSS/JS 정적 요청 동적 요청AWS Lambda Amazon DynamoDB 지속성 데이터베이스 Angular/SPA api.example.com Desktop *aaS Mobile Amazon CloudFront/ Amazon S3 Amazon API Gateway
  56. 56. 서버리스 마이크로서비스 구현 사례 (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  57. 57. Elastic Load Balancer AWS Opsworks www.vingle.net api1.vingle.net EC2 . . . DB / Cache EC2 EC2 기존 서비스 및 인프라 구조 Web server / Background Worker / REST API / ORM / Business logic …. Feed Search Card Writing Admin Spam …. (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  58. 58. API Gateway Lambda DynamoDB (List of spam keywords) POST /api/validates Body: { data: “ABCDEFG” } 서버리스 마이크로서비스 테스트 - 스팸 필터 (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  59. 59. 서버리스 마이크로서비스 이전- 6개월 뒤… § Netflix와 같은 Strangler Pattern Architecture § 모든 요청을 받는 기존 API서버가 있 고, 해당 API서버에서 필요로 하는 마이크로서비스를 REST HTTP기반 통신으로 사용 § 모니터링을 위해 Cloudwatch를 사 용하여 알림 자동화 § 서비스들 간의 Dependency를 모니터링 툴을 만들어 관리 § 각 서비스를 독립적으로 개발 / 배포 / 모니터링 (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  60. 60. Lesson Learned- Microservice Migration 1. 새로 추가/변경 필요한 기능부터 분리 • 잘 돌아가고 있는 오래된 기능 재작성은 리스크 높음 • 리스크가 작은 것부터 시작해서 팀 단위 운영/개발 노하우 축적 2. Business Domain 단위 서비스 구성 • Team(X), End-Point(X), # of APIs • Cache (X), Database (X) • Feed (O), Notification(O) 3. 서비스 존재 목적은 사용 되어지는 것 • 다른 개발자 / 시스템에서 쓰기 쉽도록 API 인터페이스 필수 • REST API라면 Swagger등을 통해 적극적으로 문서화 (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  61. 61. 1. AWS에서 제공하는 Fully-managed service 적극 활용 • Search Microservice ▶ Lambda + Cloudsearch • Feed Microservice ▶ Lambda + DynamoDB + Kinesis Stream 2. Infrastructure-as-a-Code (AWS CloudFormation) • 시간이 조금만 지나면, AWS내 많은 리소스 관리하기 어려워짐 • AWS CloudFormation을 통해 리소스들을 코드화 / 데이터화 Lesson Learned - Cloud Infrastructure (c) 이상현(빙글), Vingle의 AWS 기반 서버리스 마이크로 서비스 구현 사례
  62. 62. 배포를 위한 AWS Serverless Application Model (SAM) 1. SAM 파일을 사용하여 Lambda 함수, API 게이트웨이 (Swagger 파일 사용) 및 DynamoDB 테이블을 사용하여 서버리스 애플리케이션을 기술 2. AWS 리소스 배포를 위해 CloudFormation을 사용 Lambda 콘솔에서 SAM 파일 내보내기 SAM 파일 예제
  63. 63. 개발 문화 베스트 프랙티스
  64. 64. 마이크로서비스 아키텍처를 위한 개발 문화 Microservices 작은 서비스 개발 단위로 쪼개 API로 연동하여 개발 민첩성 및 독립적 배포 가능 Two-Pizza Team 서비스 개발 및 배포 운영 등을 모두 맡는 자율적이고 오너쉽을 가진 팀 구성 및 문화 Automation 개별팀이 자신의 서비스 개발 에만 집중할 수 있는 자동화 도구 제공
  65. 65. “Any organization that designs a system will inevitably produce a design whose structure is a copy of the organization’s communication structure.” Melvin E. Conway, 1967 Conway’s Law
  66. 66. 지속적인 서비스 모니터링 도구 개발 투자 • API 외부적인 요소 모니터링 • Latency, RPS, Error rate • API 내부적인 요소 모니터링 • CloudWatch, OS, Application • AWS 기반 모니터링 및 분석 도구 활용 • CloudWatch 및 CloudWatchLogs
  67. 67. 다양한 오픈소스 프레임워크 활용 Chalice Framework Serverless Java Container 예: 서버리스 서비스 개발 및 배포를 위한 오픈 소스 확산
  68. 68. 외부 API 서비스를 통한 생태계 확산 https://aws.amazon.com/ko/blogs/compute/gener ate-your-own-api-gateway-developer-portal/ https://aws.amazon.com/ko/blogs/compute/monetize- your-apis-in-aws-marketplace-using-api-gateway/ API Gateway Developer Portal Serverless Application Model (SAM) 기반의 오픈 소스 키 발급 및 관리 백엔드 API Monetization in Marketplace AWS Marketplace를 통해 API 서비스 판매 및 수익화 가능
  69. 69. 손 쉬운 배포: AWS CodeStar Source Build Test Production Third Party Tooling AWS 데브옵스를 위한 지속적 통합(CI) 전달(CD) 및 프로젝트 운영 AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS Elastic Beanstalk AWS CloudFormation AWS CodePipeline AWS CodeStar AWS IAM Amazon CloudWathch 3rd Party Extensions https://www.slideshare.net/awskorea/aws-80047474
  70. 70. 빠른 빌드/테스트/배포 가능 명확한 오너쉽 및 자율적 운영 개별 마이크로 서비스 확장 가능 몇 분만에 배포 가능 신규 기능 빠르게 추가 가능 빠른 운영 및 개선 빠른 혁신 고객 만족 높은 민첩성 마이크로 서비스의 이점
  71. 71. 이 모든 것으로 좋아진 점 • 새벽 3시에 일어날 필요가 없어졌어요 • 배포가 너무 쉬워요 • 일찍 그리고 자주 배포해요 • 혼자서도 서비스를 동작 시킬 수 있어요 • 버그가 많이 줄어들었고 (옆 시스템에 의한 영향)이 적어졌어요 • 어떻게 확장하는지 잘 알고 있어요 • SSH는 이제 필요 없어요 • 문제 발견 시 해결도 손 쉬워요 • 모듈 식 솔루션을 구축할 수 있었어요
  72. 72. AWS의 수많은 Serverless 옵션 스토리지 데이터베이스 네트워크 컴퓨팅 콘텐츠 전송 메시징 및 대기열보안 게이트웨이 사용자 관리 모니터링 및 로깅 사물 인터넷 기계 학습 데이터 분석
  73. 73. AWS 활용 = Building Block 조립 작은 서비스 구축에 적절한 다양한 서비스들을 유연하게 조립하여 활용
  74. 74. Q&A
  75. 75. 감사합니다!

×