SlideShare a Scribd company logo
1 of 242
Download to read offline
우아한 멀티모듈
With Spring, Gradle
배달의민족 사용법
목록 진입 가게 진입 주문 결제
프론트 시스템 주문 시스템 결제 시스템
co-duck.com
co-duck.com
권용근
프론트검색서비스팀
kingbbode@gmail.com
멀티 모듈
Member
member-internal-api member-external-api
member-batch
Member Member
회원 시스템 (단일 모듈 멀티 프로젝트)
Member Member
Member
회원 시스템 (단일 모듈 멀티 프로젝트)
Member Member
Member
회원 시스템 (단일 모듈 멀티 프로젝트)
사람에게 의존적인 일관성
회원 시스템 (단일 모듈 멀티 프로젝트 + 내부 Maven 저장 )
member-internal-api member-external-apimember-batch
Member
member-domain
Nexus
member-internal-api member-external-apimember-batch
Member
member-domain
Nexus
시스템으로 보장되는 일관성
회원 시스템 (단일 모듈 멀티 프로젝트 + 내부 Maven 저장 )
member-internal-api member-external-apimember-batch
Member
member-domain
Nexus
번거로운 개발 사이클
회원 시스템 (단일 모듈 멀티 프로젝트 + 내부 Maven 저장 )
Member
internal-apiexternal-api batch
member-project
회원 시스템 (멀티 모듈 단일 프로젝트)
Member
internal-apiexternal-api batch
회원 시스템 (멀티 모듈 단일 프로젝트)
시스템으로 보장되는 일관성
빠른 개발 사이클
MSA ? 멀티모듈 ?
API
BATCHDB
ADMIN
WEB
Cache
API
BATCHDB
ADMIN
WEB
Cache
Monolithic
주문 결제
가게
프론트 광고
정산 쿠폰
API
BATCHDB
ADMIN
WEB
Cache API
BATCHDB
ADMIN
WEB
Cache
주문 결제
가게
프론트 광고
정산 쿠폰
주문 결제
가게
프론트 광고
정산 쿠폰MSA
API
BATCHDB
ADMIN
WEB
Cache
API
WEB
BATCH
ADMIN
단일 모듈 멀티 프로젝트
API
BATCHDB
ADMIN
WEB
Cache
ADMIN
API
WEB
BATCH
DOMAIN
멀티 모듈 단일 프로젝트
API
BATCHDB
ADMIN
WEB
Cache
Member
API
WEB
BATCH
DOMAIN
멀티 모듈 단일 프로젝트
API
BATCHDB
ADMIN
WEB
Cache
API
WEB
BATCH
ADMIN
단일 모듈 멀티 프로젝트
MSA 에서 멀티모듈이 부각되는 이유는
역할, 의존성의 분리를 통해

시스템의 분리, 통합을 유연하게 만들어 줄 수 있는
좋은 아키텍처를 만들 수 있기 때문
“좋은 아키텍처는 시스템이 모노리틱 구조로 태어나서 단일 파
일로 배포되더라도, 이후에는 독립적으로 배포 가능한 단위들
의 집합으로 성장하고, 또 독립적인 서비스나 마이크로서비스 수
준까지 성장할 수 있도록 만들어져야한다. 또한 좋은 아키텍처라
면 나중에 상황이 바뀌었을 때 이 진행 방향을 거꾸로 돌려 원
래 형태인 모노리틱 구조로 되돌릴 수도 있어야 한다”
- 클린 아키텍처
실패한 멀티 모듈 프로젝트
Member
internal-apiexternal-api batch
공통되는 코드를 제거할 수 있겠다!
실패한 멀티 모듈 프로젝트
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Common
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Common
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Common
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Common
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
Common
Member
internal-apiexternal-api batch
실패한 멀티 모듈 프로젝트
1. 스파게티 코드
Common
Member
internal-apiexternal-api batch
1. 스파게티 코드
Common
Member
internal-apiexternal-api batch
1. 스파게티 코드
A B
CD
Common
Member
internal-apiexternal-api batch
A B
CD
1. 스파게티 코드
Common
Member
internal-apiexternal-api batch
A B
CD
1. 스파게티 코드
Common
Member
internal-apiexternal-api batch
A B
CD
1. 스파게티 코드
실패한 멀티 모듈 프로젝트
2. 의존성 덩어리
Common
Member
internal-apiexternal-api batch
2.의존성 덩어리
Common
internal-apiexternal-api batch
2.의존성 덩어리
Common
internal-apiexternal-api batch
2.의존성 덩어리
2.의존성 덩어리
Common
internal-apiexternal-api batch
2.의존성 덩어리
Common
internal-apiexternal-api batch
2.의존성 덩어리
Common
internal-apiexternal-api batch
2.의존성 덩어리
실패한 멀티 모듈 프로젝트
3. 공통 설정
Common
internal-apiexternal-api batch
3.공통 설정
Common
internal-apiexternal-api batch
100 5 25
3.공통 설정
Common
internal-apiexternal-api batch
100 5 25
100
3.공통 설정
Common
internal-apiexternal-api batch
100
100 100 100
3.공통 설정
Common
internal-apiexternal-api batch
100
100 100 100
3.공통 설정
무엇이 문제였을까?
모듈에 대한 정의가 모호했다
모듈화란?
무엇을 심으로 정의 내려야할까?
할과 임
할과 임에 대한 범위는?
라이브러리들 염탐
계층
계층 계층 계층
계층 계층 계층
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
계층 계층 계층
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
- 할
- 임
그런데..
라이브러리(프레임워크)의 목적?
우리가 만드는 애플리케이션의 목적?
사용성, 기능 제공
서비스 제공
직접 계층, 할을
나누어보아야겠다
멀티 모듈 구성하기
주의사항
1. 시스템
2. 애플리케이션 비지니스, 도메인 비지니스
1. 요청 값 검증
2. 주문 요청

- 주문 데이터 생성

- 주문 데이터 검증

- 주문 데이터 저장
3. 주문 결과 처리
4. 응답
문 요청 API
1. 요청 값 검증
2. 주문 요청

- 주문 데이터 생성

- 주문 데이터 검증

- 주문 데이터 저장
3. 주문 결과 처리
4. 응답
어플리케이션 비지니스
도메인 비지니스
1. 요청 값 검증
2. 주문 요청

- 주문 데이터 생성

- 주문 데이터 검증

- 주문 데이터 저장
3. 주문 결과 처리
4. 응답
3. 새로운 시각
“입체적이네요.
기존 애플리케이션을
바라보던 방향과는 다
른 방향에서 바라본
내용이군요.”
Presentation
Service
Domain
Infrastructure
Presentation
Service
Domain
Infrastructure
진짜 시작
independently available
in system available system domain
application
system core
Inside
the system
Outside
the system
레이어 구상
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
레이어 구상
레이어 구상
역할이
분명한가?
어플리케이션
비지니스를
가지고 있는가?
도메인
비지니스를
가지고 있는가?
YES NO
어플리케이션
시스템을
알고 있는가??
NO
YESNO
도메인 모듈
YES YES
내부 모듈 독립 모듈
NO
내부 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
1. 내부 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
-시스템 안에서 의미를 갖는다

-어플리케이션, 도메인의 비지니스를 모른다
1. 내부 모듈 계층
1. 내부 모듈 계층
프론트
1. 내부 모듈 계층
프론트
1. 내부 모듈 계층
Request Spec
Response Spec
A
1. 내부 모듈 계층
A
application
application
application
1. 내부 모듈 계층
application
application
application
스펙 중복
1. 내부 모듈 계층
application
application
application
외부 시스템 변경에 대한 영향 파악 어려움
1. 내부 모듈 계층
A
application
application
application
외부 통신을 담당하는 모듈을 만들어보자
1. 내부 모듈 계층
client-coduck
환경별 시스템 Host, Header 관리
요청, 응답 Spec 관리
예외 처리 추상화 수준 통일
1. 내부 모듈 계층
client-coduck
역할이
분명한가?
어플리케이션
비지니스를
가지고 있는가?
도메인
비지니스를
가지고 있는가?
YES NO
어플리케이션
시스템을
알고 있는가??
NO
YESNO
도메인 모듈
YES YES
내부 모듈 독립 모듈
NO
1. 내부 모듈 계층
client-coduck
1. 내부 모듈 계층
client-coduck
1. 내부 모듈 계층
build.gradle
1. 내부 모듈 계층
build.gradle
1. 내부 모듈 계층
build.gradle
1. 내부 모듈 계층
client-coduck
1. 내부 모듈 계층
1. 내부 모듈 계층
1. 내부 모듈 계층
1. 내부 모듈 계층
client-coduck
1. 내부 모듈 계층
1. 내부 모듈 계층
1. 내부 모듈 계층
무엇을 얻었나?
1. 내부 모듈 계층
Request Spec
Response Spec
A
스펙 변경에 대한 단일 변경 포인트
사용 추적
도메인 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
2. 도메인 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
-어플리케이션 비지니스를 모른다

-하나의 모듈은 최대 하나의 인프라스트럭처
에 대한 책임만 갖는다

-도메인 모듈을 조합한 더 큰 단위의 도메인
모듈이 있을 수 있다
2. 도메인 모듈 계층
역할이
분명한가?
어플리케이션
비지니스를
가지고 있는가?
도메인
비지니스를
가지고 있는가?
YES NO
어플리케이션
시스템을
알고 있는가??
NO
YESNO
도메인 모듈
YES YES
내부 모듈 독립 모듈
NO
?
2. 도메인 모듈 계층
객체지향 : 패키지 의존성
2. 도메인 모듈 계층
멀티모듈 설계 : 역할, 의존성 중심 모듈화
2. 도메인 모듈 계층
domain-rds
Infrastructure 연동 관리
도메인 계층 구현
2. 도메인 모듈 계층
2. 도메인 모듈 계층
build.gradle
2. 도메인 모듈 계층
2. 도메인 모듈 계층
2. 도메인 모듈 계층
개발은 “우아한 객체지향” 참고!
https://www.slideshare.net/baejjae93/ss-151545329
https://www.youtube.com/watch?v=dJ5C4qRqAgA
1. 내부 모듈 계층
다중 도메인
객체지향 : 객체 중심 모듈화
2. 도메인 모듈 계층
Infrastructure 연동 관리

도메인 계층 구현
2. 도메인 모듈 계층
DB
Module
2. 도메인 모듈 계층
2. 도메인 모듈 계층
DB
Module
DB
Module
2. 도메인 모듈 계층
다중 인프라스트 처
2. 도메인 모듈 계층
2. 도메인 모듈 계층
2. 도메인 모듈 계층
2. 도메인 모듈 계층
Fallback
2. 도메인 모듈 계층
Cache
2. 도메인 모듈 계층
2. 도메인 모듈 계층
2. 도메인 모듈 계층
인프라스트 처를 분리하자
2. 도메인 모듈 계층
2. 도메인 모듈 계층
Infrastructure 연동 관리
도메인 계층 구현
Infrastructure 연동 관리
도메인 계층 구현
domain-dynamodomain-redis
2. 도메인 모듈 계층
domain-dynamodomain-redis
2. 도메인 모듈 계층
Domain Service
Module
도메인 서비스 구현
Domain Service
Module
2. 도메인 모듈 계층
domain-dynamodomain-redis
domain-dynamodomain-redis
Domain Service
Module
2. 도메인 모듈 계층
2. 도메인 모듈 계층
개발은 “우아한 객체지향” 참고!
https://www.slideshare.net/baejjae93/ss-151545329
https://www.youtube.com/watch?v=dJ5C4qRqAgA
2. 도메인 모듈 계층
build.gradle
2. 도메인 모듈 계층
2. 도메인 모듈 계층
Fallback
Cache
독립 모듈 계층
3. 독립 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
3. 독립 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
-시스템과 관련 없이 자체로서 독립적인 역할
을 갖는다.
3. 독립 모듈 계층
application-rds.yml
3. 독립 모듈 계층
data-dynamo-reactive
역할이
분명한가?
어플리케이션
비지니스를
가지고 있는가?
도메인
비지니스를
가지고 있는가?
YES NO
어플리케이션
시스템을
알고 있는가??
NO
YESNO
도메인 모듈
YES YES
내부 모듈 독립 모듈
NO
data-dynamo-reactive
3. 독립 모듈 계층
Infrastructure 연동 사용성 제공
Object Mapping 기능 지원
Reactor 사용성 제공
3. 독립 모듈 계층
data-dynamo-reactive
3. 독립 모듈 계층
build.gradle
3. 독립 모듈 계층
DynamoReactiveRepository.java
공통 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
4. 공통 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
4. 공통 모듈 계층
-Type, Util 등을 정의한다.
4. 공통 모듈 계층
Root build.gradle
프론트
4. 공통 모듈 계층
4. 공통 모듈 계층
4. 공통 모듈 계층
build.gradle
4. 공통 모듈 계층
build.gradle
4. 공통 모듈 계층
어플리케이션 모듈 계층
5. 어플리케이션 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
시스템 내부
시스템 외부
5. 어플리케이션 모듈 계층
app-api
5. 어플리케이션 모듈 계층
app-worker
5. 어플리케이션 모듈 계층
app-admin
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
dynamo
domain-
redis
domain-
service
domain-
redis
domain-
dynamo
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
dynamo
domain-
redis
domain-
service
data-
dynamo
domain-
redis
domain-
dynamo
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
dynamo
domain-
redis
domain-
service
data-
dynamo
core
domain-
redis
domain-
dynamo
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
dynamo
domain-
redis
domain-
service
data-
dynamo
core
apiworker admin
domain-
redis
domain-
dynamo
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
dynamo
domain-
redis
domain-
service
data-
dynamo
core
apiworker admin
domain-
redis
domain-
dynamo
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
redis
domain-
dynamo
domain-
service
data-
dynamo
core
apiworker admin
독립 모듈
내부 모듈 도메인 모듈
어플리케이션
공통 모듈
5. 어플리케이션 모듈 계층
client-a client-b client-c client-d
domain-
redis
domain-
dynamo
domain-
service
data-
dynamo
core
apiworker admin
효과
명확한 추상화 경계
레이어 구상
역할이
분명한가?
어플리케이션
비지니스를
가지고 있는가?
도메인
비지니스를
가지고 있는가?
YES NO
어플리케이션
시스템을
알고 있는가??
NO
YESNO
도메인 모듈
YES YES
내부 모듈 독립 모듈
NO
1. 내부 모듈 계층
client-coduck
환경별 시스템 Host, Header 관리
요청, 응답 Spec 관리
예외 처리 추상화 수준 통일
2. 도메인 모듈 계층
Infrastructure 연동 관리
도메인 계층 구현
Infrastructure 연동 관리
도메인 계층 구현
2. 도메인 모듈 계층
Domain Service
Module
도메인 서비스 구현
Infrastructure 연동 사용성 제공
Object Mapping 기능 지원
Reactor 사용성 제공
3. 독립 모듈 계층
data-dynamo-reactive
역할과 책임의 선
ARepository
Shop

RestClient
AService AbService
AcService
PropertiesEnvironment

PostProcessor
A
OperationTimeUtils
SqsEventPublisher
independently available
in system available system domain
application
system core
AbService AcService
app-b-api app-c-api
Shop

RestClient
shop-client
SqsEventPublisher
a-event-publisher
domain-a
ARepository
AService
A
core
OperationTimeUtils
yaml-impoter
PropertiesEnvironment

PostProcessor
-각 모듈이 갖는 책임과 역할이 명확하여 리펙토링, 기능의 변경의 영향 범위를 파악하기 용이
-경계가 명확해짐으로써 기능의 제공 정도를 예측 가능하여 스파게티 코드 발생 가능성 저하
-역할과 책임에 대한 애매함이 없어짐으로써 어떤 모듈에서 어느정도까지를 개발되야할지 명확
independently available
in system available system domain
application
system core
AbService AcService
app-b-api app-c-api
Shop

RestClient
shop-client
SqsEventPublisher
a-event-publisher
domain-a
ARepository
AService
A
core
OperationTimeUtils
yaml-impoter
PropertiesEnvironment

PostProcessor
최소 의존성
1. 내부 모듈 계층
build.gradle
2. 도메인 모듈 계층
build.gradle
3. 독립 모듈 계층
build.gradle
4. 공통 모듈 계층
build.gradle
각 모듈은 역할에 필요한 최소 의존성 보유
A
어플리케이션은 필요한 모듈만 선택
꿀팁
모듈 Scan
Package Convention
baemin.com
Package Convention
baemin.com
com
baemin.com
com
baemin
Package Convention
com
baemin
projectName
Package Convention
com
baemin
projectName
Module Name
Package Convention
Spring Framework
com
baemin
projectName
Module Name
Spring Framework
com
baemin
projectName
Module Name
Application.java
Spring Framework
com
baemin
projectName
Module Name
Application.java
Component Scan
Base Package
Multi Module
com
baemin
projectName
external
Application.java
com
baemin
projectName
clientA
ClientAConfig.java
Multi Module
com
baemin
projectName
external
Application.java
clientA
ClientAConfig.java
Multi Module
com
baemin
projectName
external
Application.java
clientA
ClientAConfig.java
Multi Module
Multi Module
Spring Framework
com
baemin
projectName
Module Name
Application.java
Spring Framework
com
baemin
projectName
Module Name
Application.java
Spring Framework
com
baemin
projectName
Module Name
Application.java
Component Scan
Base Package
Multi Module
com
baemin
projectName
external
clientA
ClientAConfig.java
Application.java
Multi Module
com
baemin
projectName
external
clientA
ClientAConfig.java
Application.java
Multi Module
각 모듈의 Property
domain-rdsclient-coduck
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
resources
application-{profile}.yml
resources
application-dynamo.yml
resources
application-redis.yml
resources
application-clienta.yml
resources
application-clientb.yml
application.yml
resources
application-dynamo.yml
resources
application-redis.yml
resources
application-clienta.yml
resources
application-clientb.yml
application.yml
https://github.com/kingbbode/spring-boot-custom-yaml-importer
spring-boot-custom-yaml-importer
의존성 숨기기
Domain Service
Module
domain-dynamodomain-redis
Domain Service
Module
domain-dynamodomain-redis
Domain Service
Module
domain-dynamodomain-redis
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation
Gradle, API and implementation separation
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_separation
Gradle, API and implementation separation
CODE
정리
“좋은 아키텍처는 시스템이 모노리틱 구조로 태어나서 단일 파
일로 배포되더라도, 이후에는 독립적으로 배포 가능한 단위들
의 집합으로 성장하고, 또 독립적인 서비스나 마이크로서비스 수
준까지 성장할 수 있도록 만들어져야한다. 또한 좋은 아키텍처라
면 나중에 상황이 바뀌었을 때 이 진행 방향을 거꾸로 돌려 원
래 형태인 모노리틱 구조로 되돌릴 수도 있어야 한다”
- 클린 아키텍처
끗

More Related Content

What's hot

우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) Amazon Web Services Korea
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?VMware Tanzu Korea
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)Ashal aka JOKER
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Kotlin coroutines 톺아보기
Kotlin coroutines 톺아보기Kotlin coroutines 톺아보기
Kotlin coroutines 톺아보기Taewoo Kim
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기Young-Ho Cho
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드Insub Lee
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsKnoldus Inc.
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignYoung-Ho Cho
 
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현NAVER Engineering
 
Integration patterns in AEM 6
Integration patterns in AEM 6Integration patterns in AEM 6
Integration patterns in AEM 6Yuval Ararat
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱Suhyeon Jo
 

What's hot (20)

우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
 
Jenkins Automation
Jenkins AutomationJenkins Automation
Jenkins Automation
 
도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)도메인 주도 설계 (Domain Driven Design)
도메인 주도 설계 (Domain Driven Design)
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Kotlin coroutines 톺아보기
Kotlin coroutines 톺아보기Kotlin coroutines 톺아보기
Kotlin coroutines 톺아보기
 
객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기객체지향적인 도메인 레이어 구축하기
객체지향적인 도메인 레이어 구축하기
 
svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드svn 능력자를 위한 git 개념 가이드
svn 능력자를 위한 git 개념 가이드
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
 
Integration patterns in AEM 6
Integration patterns in AEM 6Integration patterns in AEM 6
Integration patterns in AEM 6
 
Maven ppt
Maven pptMaven ppt
Maven ppt
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
DDD와 이벤트소싱
DDD와 이벤트소싱DDD와 이벤트소싱
DDD와 이벤트소싱
 

Similar to 우아한테크세미나-우아한멀티모듈

XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XpressEngine
 
Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleNAVER Engineering
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4Daniel Lim
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)우용 김
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?NAVER Engineering
 
WeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfWeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfjaneSim13
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellijSewon Ann
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayseung-hyun Park
 

Similar to 우아한테크세미나-우아한멀티모듈 (20)

XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
XECon2015 :: [3-2] 오승훈 - XE3 플러그인 제작 소개
 
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
 
Modularization with Dynamic Feature Module
Modularization with Dynamic Feature ModuleModularization with Dynamic Feature Module
Modularization with Dynamic Feature Module
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
 
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스  ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
NCS기반 Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스 ☆무료강의자료 제공/ 구로오라클학원, 탑크리에...
 
J2 Ee
J2 EeJ2 Ee
J2 Ee
 
Design pattern 4
Design pattern 4Design pattern 4
Design pattern 4
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
okspring3x
okspring3xokspring3x
okspring3x
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
메이븐파헤치기(김우용)
메이븐파헤치기(김우용)메이븐파헤치기(김우용)
메이븐파헤치기(김우용)
 
Angular2 NgModule
Angular2   NgModuleAngular2   NgModule
Angular2 NgModule
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
Maven
MavenMaven
Maven
 
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
[21]변화의 시대 : 안드로이드 앱 어떻게 개발할 것인가?
 
WeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdfWeAreDevelopers_micro_frontend_framework.pdf
WeAreDevelopers_micro_frontend_framework.pdf
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st day
 

More from 용근 권

KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"용근 권
 
KSUG 스프링캠프 2017 발표자료
KSUG 스프링캠프 2017 발표자료KSUG 스프링캠프 2017 발표자료
KSUG 스프링캠프 2017 발표자료용근 권
 
강서구 자바 스터디
강서구 자바 스터디강서구 자바 스터디
강서구 자바 스터디용근 권
 
Java Build Tool
Java Build ToolJava Build Tool
Java Build Tool용근 권
 
울트론 개발 가이드 V3.0
울트론 개발 가이드 V3.0울트론 개발 가이드 V3.0
울트론 개발 가이드 V3.0용근 권
 
개발자 1.5배 즐기기
개발자 1.5배 즐기기개발자 1.5배 즐기기
개발자 1.5배 즐기기용근 권
 

More from 용근 권 (6)

KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
 
KSUG 스프링캠프 2017 발표자료
KSUG 스프링캠프 2017 발표자료KSUG 스프링캠프 2017 발표자료
KSUG 스프링캠프 2017 발표자료
 
강서구 자바 스터디
강서구 자바 스터디강서구 자바 스터디
강서구 자바 스터디
 
Java Build Tool
Java Build ToolJava Build Tool
Java Build Tool
 
울트론 개발 가이드 V3.0
울트론 개발 가이드 V3.0울트론 개발 가이드 V3.0
울트론 개발 가이드 V3.0
 
개발자 1.5배 즐기기
개발자 1.5배 즐기기개발자 1.5배 즐기기
개발자 1.5배 즐기기
 

우아한테크세미나-우아한멀티모듈