SlideShare a Scribd company logo
2015 자바카페 OPEN SEMINAR
SpringBoot와
Docker를 이용한 MSA
JAVACAFE
김흥래
2015 자바카페 OPEN SEMINAR발표자
김흥래 (Naver Business Platform)
삼성전자와 군인공제회 C&C를 거쳐
현재 NAVER에서 사내인프라를 개발하고 있습니다.
항상 새로운 것을 배우는 것을 좋아하고
프로그래머가 천직이라고 생각하고 있는 행복한 프로그래머입니다.
JAVACAFE 커뮤니티에서 10년 넘는 세월 동안 활동하고 있으며
Back-End와 Front-End 전 분야를 아우르는 개발자가 되기 위해 노력하고 있습니다.
hrkim3468@gmail.com
2015 자바카페 OPEN SEMINAROverview
SpringBoot
Docker
MSA (Micro Service Architecture)
실전! 빙고게임
2015 자바카페 OPEN SEMINAR
SpringBoot
Docker
MSA (Micro Service Architecture)
실전! 빙고게임
2015 자바카페 OPEN SEMINARFeatures
WSA 의존 없이 Stand-Alone 형태의 Spring 어플리케이션을
만들 수 있다.
Embedded Tomcat을 이용하여 즉시 실행이 가능하다.
(WAR 파일로 Deploy하는 과정이 불필요)
강력한 Annotation 기반의 Java Configuration을 제공하기
때문에 XML 설정이 불필요하다.
개발환경 구성시 Maven Configuration을 추상화 하여 의
존성 관리가 매우 간단하다. (라이브러리 의존성 관리를 자동화)
2015 자바카페 OPEN SEMINARDemo
한번 만들어 볼까요?
2015 자바카페 OPEN SEMINAR
공식메뉴얼 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/
몇 일 전까지 1.2.7 이었는데
릴리즈 속도가….
Release (2015. 11)
2015 자바카페 OPEN SEMINARSpringBoot 1.3.0 요구사항
 Java7+
 Spring Framework 4.1.5 +
 Maven (3.2+) or Gradle (1.12+)
 Servlet 3.0 +
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
Spring과 통합을 위해 제공되는 각종 Template들의 설정
정보를 미리 구현하여 제공
자동 설정을 위해 내부적으로 제공되는 설정정보 Library
인기있는 대부분의 기술들에 대한 설정 정보가 기본적으로
제공
추가적인 기술에 대한 설정 정보를 제공하는 것도 가능 (확장)
spring-boot-autoconfigure.jar
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
프로젝트 구성시 반복적으로 설정해야 하는 Config 정보들
은 이미 대부분 정해져 있고 프로젝트 생성시마다 동일하게 사용
하고 있다. (복사 & 붙여넣기)
 Web 프로젝트 구성시 필요한 라이브러리
 Spring-core, Spring-web, Spring-mvc, jakson(JSON), JDBC
 Test 프로젝트 구성시 필요한 라이브러
 Junit, Spring-core, Spring-test, mockito
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
SpringBoot에서는 이러한 점에 착안하여
spring-boot-starter를 프레임워크 레벨에서 제공
프로젝트 성격에 따라 사용되는 기술들의 패턴을 규격화
하여 미리 설정된 Config 코드를 Maven으로 제공
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
Spring-boot-starter는 3가지로 구성
 Spring-boot-starter-parent
 Spring-boot-starter
 Spring-boot-starter-xxx
2015 자바카페 OPEN SEMINAR
Basic
Starter
SpringBoot Application Starts
2015 자바카페 OPEN SEMINAR
Starter POMs를 이용하여 Spring Boot에서 자동으로 필요한
라이브러리 구성
spring-boot-starter는 모든 Starter의 Base Starter
SpringBoot Application Starts
2015 자바카페 OPEN SEMINAR
Web서비스를
위해 확장 된
Starter
SpringBoot Application Starts
2015 자바카페 OPEN SEMINAR
Spring-boot-starter가 Web 서비스용으로 확장되어 있다.
SpringMVC와 Embedded Tomcat이 자동으로 추가되어 있다.
SpringBoot Application Starts
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
공식적으로 제공하는 Starter
http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter-poms
2015 자바카페 OPEN SEMINARSpringBoot Application Starts
커뮤니티에서 자체 개발하여 추가적으로 제공하는 Starter
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters
2015 자바카페 OPEN SEMINARStart POMs Generator
SpringBoot는 프로젝트 생성시 Start POMs를 좀더 쉽게 사용
하기 위한 Generator를 추가적으로 제공한다.
1. 웹사이트에서 제공하는 툴
http://start.spring.io/
생성된 프로젝트 소스를 zip 파일로 생성하여 다운로드
2. STS 개발툴 옵션으로 제공하는 툴
File > New > Spring Starter Project
바로 실행 가능한 프로젝트 소스 생성
2015 자바카페 OPEN SEMINARStart POMs Generator
2015 자바카페 OPEN SEMINARStart POMs Generator
2015 자바카페 OPEN SEMINAR@SpringBootApplication
SpringBoot에서 제공하는 고도로 추상화 된 Annotation
@SpringBootApplication 하나만 넣어주면 모든 설정이 완료됨
2015 자바카페 OPEN SEMINAR@SpringBootApplication
Servlet 3.0 부터 제공하는 ServletInitialize 기능을 이용하여
web.xml을 자바 코드로 변경하는 것이 가능해짐 (WebApplicationInitializer)
Java Config는 Boot가 제공하는 기능이 아니라 Spirng Core에서 제공하는 기능이지만
Boot에서는 기본적으로 Java Config를 사용한다는 가정으로 동작함
Boot가 고도로 추상화된 Annotation을 제공하기 때문에 Spring 설정에서 해방될 수 있
지만 정확한 원리를 모르면 최적화가 어려울 수 있음
@SpringBootApplication =
@Configuration +
@EnableAutoConfiguration +
@ComponentScan
http://docs.spring.io/spring/docs/3.1.0.M2/javadoc-api/org/springframework/web/WebApplicationInitializer.html
2015 자바카페 OPEN SEMINARProgrammable Tomcat Config
2015 자바카페 OPEN SEMINARProgrammable Tomcat Config
2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
SpringBoot는 특별한 Launcher를 이용하여 독립된 형태로 실행
이 가능
 JarLauncher
 WarLauncher
실행파일 내부에 의존성이 있는 라이브러리들이 repackage 작업
을 통하여 별도의 디렉토리 구조로 복사되어 빌드
 SpringBoot Maven Plugin
Spring-boot:run
Spring-boot:repackage
 org.springframework.boot.loader.jar.JarFile
Jar 형태의 경우 최상단에 별도의 lib 디렉토리를 별도로 분리
War 형태의 경우 lib 디렉토리와 lib-provided 디렉토리로 분리
2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/maven-plugin/index.html
2015 자바카페 OPEN SEMINAR기타
 내부에 Embed Tomcat이 내장되어 있으므로 별도의 Deploy 과정
없이 JAR 파일을 독립적으로 배포하여 웹 서비스가 가능함
 Java –jar myapp.jar
 WAS에 배포하는 방식도 지원 http://spring.io/guides/gs/convert-jar-to-war/
 도커랑 찰떡궁합
 배포된 Jar 파일을 포함한 도커 이미지를 컨테이너로 생성
 원하는 시점에 원하는 만큼의 컨테이너를 손쉽게 증감 가능
 Scale-Out에 손쉬운 대응이 가능함
2015 자바카페 OPEN SEMINAR기타
 설치형 Tomcat과 Embed Tomcat의 성능 차이는?
 http://people.apache.org/~markt/presentations/2010-11-04-Embedding-
Tomcat.pdf
 릴리즈된 Tomcat Core 코드를 인터페이스만 변경하여 재배포하는 방식
최신 SpringBoot에서는 Tomcat 8.0.28 버전이 포함되어 있다.
2015 자바카페 OPEN SEMINAR
SpringBoot
Docker
MSA (Micro Service Architecture)
실전! 빙고게임
2015 자바카페 OPEN SEMINAR소개
2015 자바카페 OPEN SEMINAR도커 컨테이너
출처 http://www.theregister.co.uk/2015/01/07/asigra_dockerises_cloud_backup/
2015 자바카페 OPEN SEMINARDockerfile
2015 자바카페 OPEN SEMINAR
SpringBoot
Docker
MSA (Micro Service Architecture)
실전! 빙고게임
2015 자바카페 OPEN SEMINARMonolithic Architecture
Architecture를 어떻게 설계해야 좋을까요?
자바카페 개발팀에서 대박을 노리고
다양한 게임을 서비스하기 위해
준비하고 있습니다.
2015 자바카페 OPEN SEMINARMonolithic Architecture
일반적인 응용프로그램
 핵심 Business Logic
 다수의 외부 Interface Adapter
간단한 테스트 & 배포
 단일 서비스에 대한 Test Case
 패키징 된 응응 프로그램을
단순 복사하여 배포
손쉬운 확장
 비교적 간단한 부하 분산 구성 가능
 L4 뒤에 여러 복사본을 세트로 연결
프로젝트 초기 단계에서는 여전히 좋은 선택
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다.
(개발시 생산성 하락)
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지
고 보수적인 접근을 하게 된다.
(개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARScale Cube
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARScale Cube
X-axis Scaling
 수평적인 복제 (Horizontal Duplication)
 복제본을 이용한 확장 (Scale by cloning)
현실속의 X축 확장
 L4 뒤에 다수의 어플리케이션 복제본을 세트로 구성
 N개의 복제본이 있다면 이론적으로 1/N의 부하분산
2015 자바카페 OPEN SEMINARScale Cube
 X-axis Scaling
웹서버
사용자 요청
서비스 DB
2015 자바카페 OPEN SEMINARScale Cube
 X-axis Scaling
웹서버
사용자 요청
서비스
DB
웹서버 서비스
L4
2015 자바카페 OPEN SEMINARScale Cube
X-axis Scaling
 수평적인 복제 (Horizontal Duplication)
 복제본을 이용한 확장 (Scale by cloning)
현실속의 X축 확장
 L4 뒤에 다수의 어플리케이션 복제본을 세트로 구성
 N개의 복제본이 있다면 이론적으로 1/N의 부하분산
생각해 봅시다
 100개의 컴포넌트를 서비스하는데 1개의 컴포넌트만 대박 날 경
우 부하분산을 위해서 무작정 확장한다면?
 불필요한 99개의 확장 비용은?
2015 자바카페 OPEN SEMINARScale Cube
Y-axis Scaling
 기능 분해(Functional Decomposition)
 서비스 분리를 이용한 확장 (Scale by splitting different things)
현실속의 Y축 확장
 어플리케이션 내부의 컴포넌트를 다수의 어플리케이션으로 분할하여
서비스
 분할 된 서비스는 하나 또는 그 이상의 기능을 명확한 기준으로 나눈다.
 독립적인 서비스들은 API를 통하여 통신한다.
2015 자바카페 OPEN SEMINARScale Cube
 Y-axis Scaling
웹서버
사용자 요청
서비스 DB
2015 자바카페 OPEN SEMINARScale Cube
 Y-axis Scaling
웹서버
사용자 요청
서비스 A
DB B서비스 B
서비스 C
서비스 C
DB A
DB C
2015 자바카페 OPEN SEMINARScale Cube
Y-axis Scaling
 기능 분해(Functional Decomposition)
 서비스 분리를 이용한 확장 (Scale by splitting different things)
현실속의 Y축 확장
 어플리케이션 내부의 컴포넌트를 다수의 어플리케이션으로 분할하여
서비스
 분할 된 서비스는 하나 또는 그 이상의 기능을 명확한 기준으로 나눈다.
 독립적인 서비스들은 API를 통하여 통신한다.
생각해 봅시다
 독립적인 서비스간의 데이터 조인이 필요하다면 어떻게 해야 할까?
 만약 조인해야 하는 서비스가 100개라면?
2015 자바카페 OPEN SEMINARScale Cube
Z-axis Scaling
 데이터 파티션(Data Partitioning)
 데이터 분리를 이용한 확장 (Scale by splitting similar things)
현실속의 Z축 확장
 데이터베이스 데이터를 분할하여 서비스
 Table Partitioning
 DB Sharding
 X축 확장과 비슷하게 N개의 복제본으로 확장하는 측면에서는 비슷함
 각각의 복제본은 데이터의 일부만 책임진다.
2015 자바카페 OPEN SEMINARScale Cube
 Z-axis Scaling
웹서버
사용자 요청
서비스 A
서비스 B DB
2015 자바카페 OPEN SEMINARScale Cube
 Z-axis Scaling
사용자 요청
웹서버
서비스 A
서비스 B
DB
웹서버
서비스 A
서비스 B
L4
2015 자바카페 OPEN SEMINARScale Cube
Z-axis Scaling
 데이터 파티션(Data Partitioning)
 데이터 분리를 이용한 확장 (Scale by splitting similar things)
현실속의 Z축 확장
 데이터베이스 데이터를 분할하여 서비스
 Table Partitioning
 DB Sharding
 X축 확장과 비슷하게 N개의 복제본으로 확장하는 측면에서는 비슷함
 각각의 복제본은 데이터의 일부만 책임진다.
생각해 봅시다
 파티셔닝 된 데이터가 성장하여 또 다시 파티셔닝 해야 할 경우
어플리케이션 복잡도는?
 개발환경과 리얼환경의 데이터가 다르다면 테스트는 어떻게 해야할까?
2015 자바카페 OPEN SEMINARScale Cube
Micro Service
(WAS 분리)
Clustering Service
(WAS 복제)
Table Partitioning
DB Sharding
(DB 분리)
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARMonolithic Architecture
다시 자바카페 개발팀으로 가볼까요?
2015 자바카페 OPEN SEMINARMonolithic Architecture
2015 자바카페 OPEN SEMINARMonolithic Architecture
서비스 유연성을 위해서
Architecture를 어떻게 변경해 볼까요?
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 특정 서비스만 확장하는 것이 가능해진다.
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
2015 자바카페 OPEN SEMINARMonolithic Architecture
시간이 흘러 서비스가 성장하여 개발팀의 규모가
커지고 Business Logic도 점점 더 복잡해진다면?
 큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다.
(특히 신입들)
 Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.
 어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)
 서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.
 지속적인 배포가 점점더 어려워진다.
(소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)
 서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.
 Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능
(비효율적이고 불필요한 확장 비용 발생)
 특정 서비스만 확장하는 것이 가능해진다.
 전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인
접근을 하게 된다. (개발팀의 기술 정체)
 서비스 단위로 기술 Stack을 선택하는 것이 가능해지고 기술 도입 실패시에도 전체 서비스에
영향이 적어 쉽게 롤백하거나 재개발 하는 것이 가능해진다.
2015 자바카페 OPEN SEMINARMicro Service Architecture
서비스 단위로 응용프로그램을 분리
 Business Logic을 다수의 서비스로 분리
 서비스 단위로 책임을 가짐
 서비스간에 API 통신
API Gateway
 다수의 서비스에 공통으로 필요한 기능 제공
(인증, 로깅, 보안정책)
 모든 서비스들의 API를 등록하고 서비스 간에
통신을 중앙 통제
서비스 단위의 손쉬운 확장
 부하 분산이 필요할 경우 서비스 단위로
확장이 가능
 서비스 확장 후 API Gateway에 통보
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
지속적으로 성장하는 서비스라면 MSA를 추천합니다.
2015 자바카페 OPEN SEMINARMicro Service Architecture
MSA로 구축된 서비스가 더욱 더 성장하여 단위 서비스가
매우 많아진다면?
 API Gateway에 장애가 발생될 경우 서비스 전체가 마비 될 위험성이 있다.
(이중화 무조건 필수)
 서비스 규모에 비례하여 API Gateway에 트래픽이 더욱 더 집중된다.
(우리회사 최고 트래픽을 내는 서비스는?)
 단위 서비스가 늘어날수록 내부 연계와 트래픽은 기하급수적으로 증가한다.
 다수의 서비스간에 조인이 필요한 업무가 생기면 성능 문제를 고려해야 한다.
(어떻게?)
2015 자바카페 OPEN SEMINARMSA at Netflx
출처 http://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
2015 자바카페 OPEN SEMINARMSA at Netflx
출처 https://blog.docker.com/2014/12/dockercon-europe-keynote-state-of-the-art-in-microservices-by-adrian-
cockcroft-battery-ventures/
2015 자바카페 OPEN SEMINAR단일 서비스 배포
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINAR서비스 기반 Database
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARAPI Gateway
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARSync Interaction
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARAsync Interaction
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINARService Registry
출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
2015 자바카페 OPEN SEMINAR
SpringBoot
Docker
MSA (Micro Service Architecture)
실전! 빙고게임
2015 자바카페 OPEN SEMINAR빙고게임 Architecture
SR
Service Registry
미구현
QUEUE
Ranking
DB
Rank
랭킹 서비스
Rest
API
AMQP
User
사용자 서비스
User DB
Rest
API
AMQP
Game
빙고게임 서비스
Game DB
Rest
API
AMQP
API
Gateway
AMQP
Rest
API
Front
End
프론트엔드 UI
AMQP
Rest
API
Web
Socket
사용자 브라우저
Web
Socket
내부망외부망
2015 자바카페 OPEN SEMINAR
Thank You

More Related Content

What's hot

Bitbucket
BitbucketBitbucket
Bitbucket
Okba Mahdjoub
 
Jenkins presentation
Jenkins presentationJenkins presentation
Jenkins presentation
Valentin Buryakov
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
日本マイクロソフト株式会社
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
YongSung Yoon
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
SangSun Park
 
Introduction to DevOps | Edureka
Introduction to DevOps | EdurekaIntroduction to DevOps | Edureka
Introduction to DevOps | Edureka
Edureka!
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Simplilearn
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
Terry Cho
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
Edureka!
 
Azure DevOps CI/CD For Beginners
Azure DevOps CI/CD  For BeginnersAzure DevOps CI/CD  For Beginners
Azure DevOps CI/CD For Beginners
Rahul Nath
 
Integration Patterns for Microservices Architectures
Integration Patterns for Microservices ArchitecturesIntegration Patterns for Microservices Architectures
Integration Patterns for Microservices Architectures
NATS
 
Jenkins Introduction
Jenkins IntroductionJenkins Introduction
Jenkins Introduction
Pavan Gupta
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
VMware Tanzu
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
Lalit Kale
 
Building Kubernetes images at scale with Tanzu Build Service
Building Kubernetes images at scale with Tanzu Build ServiceBuilding Kubernetes images at scale with Tanzu Build Service
Building Kubernetes images at scale with Tanzu Build Service
VMware Tanzu
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
Knoldus Inc.
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
BugRaptors
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
태준 문
 

What's hot (20)

Bitbucket
BitbucketBitbucket
Bitbucket
 
Jenkins presentation
Jenkins presentationJenkins presentation
Jenkins presentation
 
【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート【BS2】.NET 6 最新アップデート
【BS2】.NET 6 最新アップデート
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Introduction to DevOps | Edureka
Introduction to DevOps | EdurekaIntroduction to DevOps | Edureka
Introduction to DevOps | Edureka
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | EdurekaWhat is Jenkins | Jenkins Tutorial for Beginners | Edureka
What is Jenkins | Jenkins Tutorial for Beginners | Edureka
 
Azure DevOps CI/CD For Beginners
Azure DevOps CI/CD  For BeginnersAzure DevOps CI/CD  For Beginners
Azure DevOps CI/CD For Beginners
 
Integration Patterns for Microservices Architectures
Integration Patterns for Microservices ArchitecturesIntegration Patterns for Microservices Architectures
Integration Patterns for Microservices Architectures
 
Jenkins Introduction
Jenkins IntroductionJenkins Introduction
Jenkins Introduction
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
Introduction To Microservices
Introduction To MicroservicesIntroduction To Microservices
Introduction To Microservices
 
Building Kubernetes images at scale with Tanzu Build Service
Building Kubernetes images at scale with Tanzu Build ServiceBuilding Kubernetes images at scale with Tanzu Build Service
Building Kubernetes images at scale with Tanzu Build Service
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
CICD with Jenkins
CICD with JenkinsCICD with Jenkins
CICD with Jenkins
 
Jenkins tutorial for beginners
Jenkins tutorial for beginnersJenkins tutorial for beginners
Jenkins tutorial for beginners
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
 

Similar to Spring boot와 docker를 이용한 msa

2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
Tai Hoon KIM
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
Amazon Web Services Korea
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
흥래 김
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Nanha Park
 
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
rockplace
 
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
VMware Tanzu Korea
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
rockplace
 
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
Jongwon Han
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
WebFrameworks
 
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
VMware Tanzu Korea
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
NAVER D2
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)uEngine Solutions
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
cho hyun jong
 
Project TIMAT - infrastructure as code
Project TIMAT - infrastructure as codeProject TIMAT - infrastructure as code
Project TIMAT - infrastructure as code
Jesang Yoon
 
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
Heejong Lee
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
Dexter Jung
 
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
Amazon Web Services Korea
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
Jaewoo Ahn
 
당근마켓에서 IaC경험
당근마켓에서 IaC경험당근마켓에서 IaC경험
당근마켓에서 IaC경험
용진 조
 

Similar to Spring boot와 docker를 이용한 msa (20)

2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드2017. 프론트엔드 트랜드
2017. 프론트엔드 트랜드
 
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
[2017 AWS Startup Day] 서버리스 마이크로서비스로 일당백 개발조직 만들기
 
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE  [제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
[제14회 JCO 컨퍼런스] 개발자를 위한 서버이중화 by JAVACAFE
 
1.스프링프레임워크 개요
1.스프링프레임워크 개요1.스프링프레임워크 개요
1.스프링프레임워크 개요
 
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
 
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
왜 컨테이너인가? - OpenShift 구축 사례와 컨테이너로 환경 전환 시 고려사항
 
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
Pivotal Cloud Foundry(PCF) 2.0 and Pivotal Container Service ( PKS ) 신혜원
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
 
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
클라우드 네이티브 IT를 위한 4가지 요소와 상관관계 - DevOps, CI/CD, Container, 그리고 MSA
 
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트[Tech meet up] 2018 프론트엔드 트렌드&인사이트
[Tech meet up] 2018 프론트엔드 트렌드&인사이트
 
Open standard open cloud engine (3)
Open standard open cloud engine (3)Open standard open cloud engine (3)
Open standard open cloud engine (3)
 
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
 
Project TIMAT - infrastructure as code
Project TIMAT - infrastructure as codeProject TIMAT - infrastructure as code
Project TIMAT - infrastructure as code
 
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
오라클 클라우드와 함께 떠나는 마이크로서비스 아키텍처로의 여행 V3
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
[2017 Windows on AWS] AWS를 활용한 그룹웨어 구축 방안
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
당근마켓에서 IaC경험
당근마켓에서 IaC경험당근마켓에서 IaC경험
당근마켓에서 IaC경험
 

More from 흥래 김

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기
흥래 김
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유
흥래 김
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
흥래 김
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기
흥래 김
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리
흥래 김
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기
흥래 김
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
흥래 김
 
Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2
흥래 김
 
Spring di chapter1
Spring di chapter1Spring di chapter1
Spring di chapter1
흥래 김
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
흥래 김
 
3. stream api
3. stream api3. stream api
3. stream api
흥래 김
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression
흥래 김
 
1. introduction to java8
1. introduction to java81. introduction to java8
1. introduction to java8
흥래 김
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy흥래 김
 
Apache http component
Apache http componentApache http component
Apache http component
흥래 김
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포흥래 김
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화흥래 김
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
흥래 김
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
흥래 김
 

More from 흥래 김 (19)

생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기생초보를 위한 한글 형태소 분석하기
생초보를 위한 한글 형태소 분석하기
 
검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유검색엔진과 DB Like 검색의 결과가 다른 이유
검색엔진과 DB Like 검색의 결과가 다른 이유
 
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
Elasticsearch와 Python을 이용하여 맨땅에서 데이터 분석하기
 
한글 자동완성 구현하기
한글 자동완성 구현하기한글 자동완성 구현하기
한글 자동완성 구현하기
 
한글 자모 분석 원리
한글 자모 분석 원리한글 자모 분석 원리
한글 자모 분석 원리
 
한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기한글 형태소 분석기 활용하기
한글 형태소 분석기 활용하기
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
Spring di chapter2
Spring di chapter2Spring di chapter2
Spring di chapter2
 
Spring di chapter1
Spring di chapter1Spring di chapter1
Spring di chapter1
 
5강 코드효율성
5강 코드효율성5강 코드효율성
5강 코드효율성
 
3. stream api
3. stream api3. stream api
3. stream api
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression
 
1. introduction to java8
1. introduction to java81. introduction to java8
1. introduction to java8
 
[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy[DevOn 2013] Dynamic web proxy
[DevOn 2013] Dynamic web proxy
 
Apache http component
Apache http componentApache http component
Apache http component
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포
 
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
[JCO 컨퍼런스] 웹사이트 Front-End 성능 최적화
 
Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략Spring 3.1에서 ehcache 활용 전략
Spring 3.1에서 ehcache 활용 전략
 
[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava[2012 자바카페 OPEN 세미나] Introduction to google guava
[2012 자바카페 OPEN 세미나] Introduction to google guava
 

Spring boot와 docker를 이용한 msa

  • 1. 2015 자바카페 OPEN SEMINAR SpringBoot와 Docker를 이용한 MSA JAVACAFE 김흥래
  • 2. 2015 자바카페 OPEN SEMINAR발표자 김흥래 (Naver Business Platform) 삼성전자와 군인공제회 C&C를 거쳐 현재 NAVER에서 사내인프라를 개발하고 있습니다. 항상 새로운 것을 배우는 것을 좋아하고 프로그래머가 천직이라고 생각하고 있는 행복한 프로그래머입니다. JAVACAFE 커뮤니티에서 10년 넘는 세월 동안 활동하고 있으며 Back-End와 Front-End 전 분야를 아우르는 개발자가 되기 위해 노력하고 있습니다. hrkim3468@gmail.com
  • 3. 2015 자바카페 OPEN SEMINAROverview SpringBoot Docker MSA (Micro Service Architecture) 실전! 빙고게임
  • 4. 2015 자바카페 OPEN SEMINAR SpringBoot Docker MSA (Micro Service Architecture) 실전! 빙고게임
  • 5. 2015 자바카페 OPEN SEMINARFeatures WSA 의존 없이 Stand-Alone 형태의 Spring 어플리케이션을 만들 수 있다. Embedded Tomcat을 이용하여 즉시 실행이 가능하다. (WAR 파일로 Deploy하는 과정이 불필요) 강력한 Annotation 기반의 Java Configuration을 제공하기 때문에 XML 설정이 불필요하다. 개발환경 구성시 Maven Configuration을 추상화 하여 의 존성 관리가 매우 간단하다. (라이브러리 의존성 관리를 자동화)
  • 6. 2015 자바카페 OPEN SEMINARDemo 한번 만들어 볼까요?
  • 7. 2015 자바카페 OPEN SEMINAR 공식메뉴얼 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 몇 일 전까지 1.2.7 이었는데 릴리즈 속도가…. Release (2015. 11)
  • 8. 2015 자바카페 OPEN SEMINARSpringBoot 1.3.0 요구사항  Java7+  Spring Framework 4.1.5 +  Maven (3.2+) or Gradle (1.12+)  Servlet 3.0 +
  • 9. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts Spring과 통합을 위해 제공되는 각종 Template들의 설정 정보를 미리 구현하여 제공 자동 설정을 위해 내부적으로 제공되는 설정정보 Library 인기있는 대부분의 기술들에 대한 설정 정보가 기본적으로 제공 추가적인 기술에 대한 설정 정보를 제공하는 것도 가능 (확장) spring-boot-autoconfigure.jar
  • 10. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts
  • 11. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts
  • 12. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts
  • 13. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts
  • 14. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts
  • 15. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts 프로젝트 구성시 반복적으로 설정해야 하는 Config 정보들 은 이미 대부분 정해져 있고 프로젝트 생성시마다 동일하게 사용 하고 있다. (복사 & 붙여넣기)  Web 프로젝트 구성시 필요한 라이브러리  Spring-core, Spring-web, Spring-mvc, jakson(JSON), JDBC  Test 프로젝트 구성시 필요한 라이브러  Junit, Spring-core, Spring-test, mockito
  • 16. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts SpringBoot에서는 이러한 점에 착안하여 spring-boot-starter를 프레임워크 레벨에서 제공 프로젝트 성격에 따라 사용되는 기술들의 패턴을 규격화 하여 미리 설정된 Config 코드를 Maven으로 제공
  • 17. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts Spring-boot-starter는 3가지로 구성  Spring-boot-starter-parent  Spring-boot-starter  Spring-boot-starter-xxx
  • 18. 2015 자바카페 OPEN SEMINAR Basic Starter SpringBoot Application Starts
  • 19. 2015 자바카페 OPEN SEMINAR Starter POMs를 이용하여 Spring Boot에서 자동으로 필요한 라이브러리 구성 spring-boot-starter는 모든 Starter의 Base Starter SpringBoot Application Starts
  • 20. 2015 자바카페 OPEN SEMINAR Web서비스를 위해 확장 된 Starter SpringBoot Application Starts
  • 21. 2015 자바카페 OPEN SEMINAR Spring-boot-starter가 Web 서비스용으로 확장되어 있다. SpringMVC와 Embedded Tomcat이 자동으로 추가되어 있다. SpringBoot Application Starts
  • 22. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts 공식적으로 제공하는 Starter http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-starter-poms
  • 23. 2015 자바카페 OPEN SEMINARSpringBoot Application Starts 커뮤니티에서 자체 개발하여 추가적으로 제공하는 Starter https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters
  • 24. 2015 자바카페 OPEN SEMINARStart POMs Generator SpringBoot는 프로젝트 생성시 Start POMs를 좀더 쉽게 사용 하기 위한 Generator를 추가적으로 제공한다. 1. 웹사이트에서 제공하는 툴 http://start.spring.io/ 생성된 프로젝트 소스를 zip 파일로 생성하여 다운로드 2. STS 개발툴 옵션으로 제공하는 툴 File > New > Spring Starter Project 바로 실행 가능한 프로젝트 소스 생성
  • 25. 2015 자바카페 OPEN SEMINARStart POMs Generator
  • 26. 2015 자바카페 OPEN SEMINARStart POMs Generator
  • 27. 2015 자바카페 OPEN SEMINAR@SpringBootApplication SpringBoot에서 제공하는 고도로 추상화 된 Annotation @SpringBootApplication 하나만 넣어주면 모든 설정이 완료됨
  • 28. 2015 자바카페 OPEN SEMINAR@SpringBootApplication Servlet 3.0 부터 제공하는 ServletInitialize 기능을 이용하여 web.xml을 자바 코드로 변경하는 것이 가능해짐 (WebApplicationInitializer) Java Config는 Boot가 제공하는 기능이 아니라 Spirng Core에서 제공하는 기능이지만 Boot에서는 기본적으로 Java Config를 사용한다는 가정으로 동작함 Boot가 고도로 추상화된 Annotation을 제공하기 때문에 Spring 설정에서 해방될 수 있 지만 정확한 원리를 모르면 최적화가 어려울 수 있음 @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan http://docs.spring.io/spring/docs/3.1.0.M2/javadoc-api/org/springframework/web/WebApplicationInitializer.html
  • 29. 2015 자바카페 OPEN SEMINARProgrammable Tomcat Config
  • 30. 2015 자바카페 OPEN SEMINARProgrammable Tomcat Config
  • 31. 2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR SpringBoot는 특별한 Launcher를 이용하여 독립된 형태로 실행 이 가능  JarLauncher  WarLauncher 실행파일 내부에 의존성이 있는 라이브러리들이 repackage 작업 을 통하여 별도의 디렉토리 구조로 복사되어 빌드  SpringBoot Maven Plugin Spring-boot:run Spring-boot:repackage  org.springframework.boot.loader.jar.JarFile Jar 형태의 경우 최상단에 별도의 lib 디렉토리를 별도로 분리 War 형태의 경우 lib 디렉토리와 lib-provided 디렉토리로 분리
  • 32. 2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
  • 33. 2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR
  • 34. 2015 자바카페 OPEN SEMINAR독립실행 가능한 JAR http://docs.spring.io/spring-boot/docs/1.2.0.BUILD-SNAPSHOT/maven-plugin/index.html
  • 35. 2015 자바카페 OPEN SEMINAR기타  내부에 Embed Tomcat이 내장되어 있으므로 별도의 Deploy 과정 없이 JAR 파일을 독립적으로 배포하여 웹 서비스가 가능함  Java –jar myapp.jar  WAS에 배포하는 방식도 지원 http://spring.io/guides/gs/convert-jar-to-war/  도커랑 찰떡궁합  배포된 Jar 파일을 포함한 도커 이미지를 컨테이너로 생성  원하는 시점에 원하는 만큼의 컨테이너를 손쉽게 증감 가능  Scale-Out에 손쉬운 대응이 가능함
  • 36. 2015 자바카페 OPEN SEMINAR기타  설치형 Tomcat과 Embed Tomcat의 성능 차이는?  http://people.apache.org/~markt/presentations/2010-11-04-Embedding- Tomcat.pdf  릴리즈된 Tomcat Core 코드를 인터페이스만 변경하여 재배포하는 방식 최신 SpringBoot에서는 Tomcat 8.0.28 버전이 포함되어 있다.
  • 37. 2015 자바카페 OPEN SEMINAR SpringBoot Docker MSA (Micro Service Architecture) 실전! 빙고게임
  • 38. 2015 자바카페 OPEN SEMINAR소개
  • 39. 2015 자바카페 OPEN SEMINAR도커 컨테이너 출처 http://www.theregister.co.uk/2015/01/07/asigra_dockerises_cloud_backup/
  • 40. 2015 자바카페 OPEN SEMINARDockerfile
  • 41. 2015 자바카페 OPEN SEMINAR SpringBoot Docker MSA (Micro Service Architecture) 실전! 빙고게임
  • 42. 2015 자바카페 OPEN SEMINARMonolithic Architecture Architecture를 어떻게 설계해야 좋을까요? 자바카페 개발팀에서 대박을 노리고 다양한 게임을 서비스하기 위해 준비하고 있습니다.
  • 43. 2015 자바카페 OPEN SEMINARMonolithic Architecture 일반적인 응용프로그램  핵심 Business Logic  다수의 외부 Interface Adapter 간단한 테스트 & 배포  단일 서비스에 대한 Test Case  패키징 된 응응 프로그램을 단순 복사하여 배포 손쉬운 확장  비교적 간단한 부하 분산 구성 가능  L4 뒤에 여러 복사본을 세트로 연결 프로젝트 초기 단계에서는 여전히 좋은 선택 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 44. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지 고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 45. 2015 자바카페 OPEN SEMINARScale Cube 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 46. 2015 자바카페 OPEN SEMINARScale Cube X-axis Scaling  수평적인 복제 (Horizontal Duplication)  복제본을 이용한 확장 (Scale by cloning) 현실속의 X축 확장  L4 뒤에 다수의 어플리케이션 복제본을 세트로 구성  N개의 복제본이 있다면 이론적으로 1/N의 부하분산
  • 47. 2015 자바카페 OPEN SEMINARScale Cube  X-axis Scaling 웹서버 사용자 요청 서비스 DB
  • 48. 2015 자바카페 OPEN SEMINARScale Cube  X-axis Scaling 웹서버 사용자 요청 서비스 DB 웹서버 서비스 L4
  • 49. 2015 자바카페 OPEN SEMINARScale Cube X-axis Scaling  수평적인 복제 (Horizontal Duplication)  복제본을 이용한 확장 (Scale by cloning) 현실속의 X축 확장  L4 뒤에 다수의 어플리케이션 복제본을 세트로 구성  N개의 복제본이 있다면 이론적으로 1/N의 부하분산 생각해 봅시다  100개의 컴포넌트를 서비스하는데 1개의 컴포넌트만 대박 날 경 우 부하분산을 위해서 무작정 확장한다면?  불필요한 99개의 확장 비용은?
  • 50. 2015 자바카페 OPEN SEMINARScale Cube Y-axis Scaling  기능 분해(Functional Decomposition)  서비스 분리를 이용한 확장 (Scale by splitting different things) 현실속의 Y축 확장  어플리케이션 내부의 컴포넌트를 다수의 어플리케이션으로 분할하여 서비스  분할 된 서비스는 하나 또는 그 이상의 기능을 명확한 기준으로 나눈다.  독립적인 서비스들은 API를 통하여 통신한다.
  • 51. 2015 자바카페 OPEN SEMINARScale Cube  Y-axis Scaling 웹서버 사용자 요청 서비스 DB
  • 52. 2015 자바카페 OPEN SEMINARScale Cube  Y-axis Scaling 웹서버 사용자 요청 서비스 A DB B서비스 B 서비스 C 서비스 C DB A DB C
  • 53. 2015 자바카페 OPEN SEMINARScale Cube Y-axis Scaling  기능 분해(Functional Decomposition)  서비스 분리를 이용한 확장 (Scale by splitting different things) 현실속의 Y축 확장  어플리케이션 내부의 컴포넌트를 다수의 어플리케이션으로 분할하여 서비스  분할 된 서비스는 하나 또는 그 이상의 기능을 명확한 기준으로 나눈다.  독립적인 서비스들은 API를 통하여 통신한다. 생각해 봅시다  독립적인 서비스간의 데이터 조인이 필요하다면 어떻게 해야 할까?  만약 조인해야 하는 서비스가 100개라면?
  • 54. 2015 자바카페 OPEN SEMINARScale Cube Z-axis Scaling  데이터 파티션(Data Partitioning)  데이터 분리를 이용한 확장 (Scale by splitting similar things) 현실속의 Z축 확장  데이터베이스 데이터를 분할하여 서비스  Table Partitioning  DB Sharding  X축 확장과 비슷하게 N개의 복제본으로 확장하는 측면에서는 비슷함  각각의 복제본은 데이터의 일부만 책임진다.
  • 55. 2015 자바카페 OPEN SEMINARScale Cube  Z-axis Scaling 웹서버 사용자 요청 서비스 A 서비스 B DB
  • 56. 2015 자바카페 OPEN SEMINARScale Cube  Z-axis Scaling 사용자 요청 웹서버 서비스 A 서비스 B DB 웹서버 서비스 A 서비스 B L4
  • 57. 2015 자바카페 OPEN SEMINARScale Cube Z-axis Scaling  데이터 파티션(Data Partitioning)  데이터 분리를 이용한 확장 (Scale by splitting similar things) 현실속의 Z축 확장  데이터베이스 데이터를 분할하여 서비스  Table Partitioning  DB Sharding  X축 확장과 비슷하게 N개의 복제본으로 확장하는 측면에서는 비슷함  각각의 복제본은 데이터의 일부만 책임진다. 생각해 봅시다  파티셔닝 된 데이터가 성장하여 또 다시 파티셔닝 해야 할 경우 어플리케이션 복잡도는?  개발환경과 리얼환경의 데이터가 다르다면 테스트는 어떻게 해야할까?
  • 58. 2015 자바카페 OPEN SEMINARScale Cube Micro Service (WAS 분리) Clustering Service (WAS 복제) Table Partitioning DB Sharding (DB 분리) 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 59. 2015 자바카페 OPEN SEMINARMonolithic Architecture 다시 자바카페 개발팀으로 가볼까요?
  • 60. 2015 자바카페 OPEN SEMINARMonolithic Architecture
  • 61. 2015 자바카페 OPEN SEMINARMonolithic Architecture 서비스 유연성을 위해서 Architecture를 어떻게 변경해 볼까요?
  • 62. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 63. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 64. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 65. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 66. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  특정 서비스만 확장하는 것이 가능해진다.  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)
  • 67. 2015 자바카페 OPEN SEMINARMonolithic Architecture 시간이 흘러 서비스가 성장하여 개발팀의 규모가 커지고 Business Logic도 점점 더 복잡해진다면?  큰 모놀리틱 코드 기반의 서비스는 개발자를 위축시킨다. (특히 신입들)  Scale Cube Y축 확장을 통하여 서비스를 분리하고 분리된 코드는 자신의 서비스만 책임진다.  어플리케이션의 크기가 커지면 커질수록 구동하는데 시간이 많이 소요된다. (개발시 생산성 하락)  서비스가 작게 분리되면 각각의 어플리케이션 구동 시간은 짧아진다.  지속적인 배포가 점점더 어려워진다. (소스코드 한줄만 고쳐도 전체 서비스를 내렸다 올려야 함)  서비스 단위로 기능 확장, 리팩토링, 버그수정 및 배포가 쉬워진다.  Scale 확장시 특정 컴포넌트만 확장하는 것이 불가능 (비효율적이고 불필요한 확장 비용 발생)  특정 서비스만 확장하는 것이 가능해진다.  전체적인 안정성이 점점 더 중요해지므로 신기술 도입이 점점 더 어려워 지고 보수적인 접근을 하게 된다. (개발팀의 기술 정체)  서비스 단위로 기술 Stack을 선택하는 것이 가능해지고 기술 도입 실패시에도 전체 서비스에 영향이 적어 쉽게 롤백하거나 재개발 하는 것이 가능해진다.
  • 68. 2015 자바카페 OPEN SEMINARMicro Service Architecture 서비스 단위로 응용프로그램을 분리  Business Logic을 다수의 서비스로 분리  서비스 단위로 책임을 가짐  서비스간에 API 통신 API Gateway  다수의 서비스에 공통으로 필요한 기능 제공 (인증, 로깅, 보안정책)  모든 서비스들의 API를 등록하고 서비스 간에 통신을 중앙 통제 서비스 단위의 손쉬운 확장  부하 분산이 필요할 경우 서비스 단위로 확장이 가능  서비스 확장 후 API Gateway에 통보 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8 지속적으로 성장하는 서비스라면 MSA를 추천합니다.
  • 69. 2015 자바카페 OPEN SEMINARMicro Service Architecture MSA로 구축된 서비스가 더욱 더 성장하여 단위 서비스가 매우 많아진다면?  API Gateway에 장애가 발생될 경우 서비스 전체가 마비 될 위험성이 있다. (이중화 무조건 필수)  서비스 규모에 비례하여 API Gateway에 트래픽이 더욱 더 집중된다. (우리회사 최고 트래픽을 내는 서비스는?)  단위 서비스가 늘어날수록 내부 연계와 트래픽은 기하급수적으로 증가한다.  다수의 서비스간에 조인이 필요한 업무가 생기면 성능 문제를 고려해야 한다. (어떻게?)
  • 70. 2015 자바카페 OPEN SEMINARMSA at Netflx 출처 http://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
  • 71. 2015 자바카페 OPEN SEMINARMSA at Netflx 출처 https://blog.docker.com/2014/12/dockercon-europe-keynote-state-of-the-art-in-microservices-by-adrian- cockcroft-battery-ventures/
  • 72. 2015 자바카페 OPEN SEMINAR단일 서비스 배포 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 73. 2015 자바카페 OPEN SEMINAR서비스 기반 Database 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 74. 2015 자바카페 OPEN SEMINARAPI Gateway 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 75. 2015 자바카페 OPEN SEMINARSync Interaction 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 76. 2015 자바카페 OPEN SEMINARAsync Interaction 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 77. 2015 자바카페 OPEN SEMINARService Registry 출처 https://www.nginx.com/blog/introduction-to-microservices/#gs.mfQz0k8
  • 78. 2015 자바카페 OPEN SEMINAR SpringBoot Docker MSA (Micro Service Architecture) 실전! 빙고게임
  • 79. 2015 자바카페 OPEN SEMINAR빙고게임 Architecture SR Service Registry 미구현 QUEUE Ranking DB Rank 랭킹 서비스 Rest API AMQP User 사용자 서비스 User DB Rest API AMQP Game 빙고게임 서비스 Game DB Rest API AMQP API Gateway AMQP Rest API Front End 프론트엔드 UI AMQP Rest API Web Socket 사용자 브라우저 Web Socket 내부망외부망
  • 80. 2015 자바카페 OPEN SEMINAR Thank You