SlideShare a Scribd company logo
1 of 129
Download to read offline
지금 당장
(유사) DDD 시작하기
StyleShare 서대원
자바 / C#
파이썬은 왜
파이썬은 왜
파이썬은 왜
파이썬은 왜
예:
광고 노출 목표량
분배 자동화
아무튼 복잡함
DDD? 왜?
https://en.wikipedia.org/wiki/Domain-driven_design
Domain-driven design (DDD)
is an approach to software development
for complex needs
by connecting the implementation
to an evolving model.
https://en.wikipedia.org/wiki/Domain-driven_design
일단 이 책을 질렀습니다
START 라며
그래도 일단 시작해 보자
Pseudo-DDD
Pseudo-DDD
이번 프로젝트를 만들면서
이번 프로젝트를 만들면서
부분적으로 경험했던 과정
이번 프로젝트를 만들면서
부분적으로 경험했던 과정
의사결정을 위해 했던 고민
계층 구조
도메인 주도 설계: 에릭 에반스 (위키북스)
도메인 주도 설계: 에릭 에반스 (위키북스)
도메인 주도 설계: 에릭 에반스 (위키북스)
도메인 계층
도메인 주도 설계: 에릭 에반스 (위키북스)
도메인?
도메인 계층 > 도메인
https://en.wikipedia.org/wiki/Domain-driven_design
소프트웨어로 해결해야 할
문제 영역
도메인 계층 > 도메인
예:
쇼핑몰, SNS,
항공권 예약...
도메인 계층 > 도메인
도메인 계층 > 도메인
그럼 "도메인 주도 개발"은?
도메인 계층 > 도메인
도메인 == 소프트웨어
도메인 계층 > 도메인
도메인 == 소프트웨어
최대한
도메인 계층 > 도메인
도메인 모델
도메인 계층 > 도메인 > 도메인 모델
구성 요소 정의, 요소간의 관계 등등
도메인을 이해하기 위한
개념 모델
도메인 계층 > 도메인 > 도메인 모델
캠페인
도메인 계층 > 도메인 > 도메인 모델
캠페인
총 목표량
집행 기간
도메인 계층 > 도메인 > 도메인 모델
캠페인
목 표 량별일
총 목표량
집행 기간
도메인 계층 > 도메인 > 도메인 모델
광 고 1
광 고 2
캠페인
목 표 량별일
총 목표량
집행 기간
도메인 계층 > 도메인 > 도메인 모델
도메인 계층 > 도메인 > 도메인 모델
도메인 계층 > 도메인 > 도메인 모델
유비쿼터스 언어
도메인 계층 > 도메인 > 도메인 모델 > 유비쿼터스 언어
Ubiquitous Language is the term
Eric Evans uses in Domain Driven Design
for the practice of building up
a common, rigorous language
between developers and users
https://martinfowler.com/bliki/UbiquitousLanguage.html
도메인 계층 > 도메인 > 도메인 모델 > 유비쿼터스 언어
도메인 계층 > 도메인 > 도메인 모델 > 유비쿼터스 언어
도메인 주도 설계: 에릭 에반스 (위키북스)
도메인 주도 설계: 에릭 에반스 (위키북스)
엔티티
도메인 계층 > 엔티티
도메인 모델 구현
도메인 계층 > 엔티티
고유한 식별자를 가진
객체
도메인 계층 > 엔티티
도메인 계층 > 엔티티
도메인 계층 > 엔티티
꼭 AUTO INCREMENT는
아닙니다
도메인 계층 > 엔티티
지속성 무시
도메인 계층 > 엔티티 > 지속성 무시
지속성 구현을 위한
구체적인 정보 포함 X
https://deviq.com/persistence-ignorance
도메인 계층 > 엔티티 > 지속성 무시
지속성 구현 ==
데이터 스토어에 조회/저장
https://deviq.com/persistence-ignorance
도메인 계층 > 엔티티 > 지속성 무시
예:
도메인 계층 > 엔티티 > 지속성 무시
예:
SQLAlchemy Base
도메인 계층 > 엔티티 > 지속성 무시
예:
Django Model
SQLAlchemy Base
도메인 계층 > 엔티티 > 지속성 무시
잉? 지금까지 모델은
다 ORM으로 만들었는데?
도메인 계층 > 엔티티 > 지속성 무시
엔티티는 POPO
https://martinfowler.com/bliki/POJO.html
도메인 계층 > 엔티티 > 지속성 무시
엔티티는 POPO
https://martinfowler.com/bliki/POJO.html
도메인 모델을 코드로
구현하는 것이 목표
도메인 계층 > 엔티티 > 지속성 무시
엔티티 지속성 모델
도메인 계층 > 엔티티 > 지속성 무시
엔티티 지속성 모델Mapper
도메인 계층 > 엔티티 > 지속성 무시
그래서 캠페인이나 광고도
POPO로 만들었냐구요?
도메인 계층 > 엔티티 > 지속성 무시
아뇨 ㅎㅎ
도메인 계층 > 엔티티 > 지속성 무시
아뇨 ㅎㅎ
도메인 계층 > 엔티티 > 지속성 무시
아뇨 ㅎㅎ
도메인 계층 > 엔티티 > 지속성 무시
아뇨 ㅎㅎ
도메인 계층 > 엔티티 > 지속성 무시
아뇨 ㅎㅎ
도메인 계층 > 엔티티 > 지속성 무시
변명
도메인 계층 > 엔티티 > 지속성 무시
https://stackoverflow.com/questions/14024912/ddd-persistence-model-and-domain-model
도메인 계층 > 엔티티 > 지속성 무시
https://stackoverflow.com/questions/14024912/ddd-persistence-model-and-domain-model
도메인 계층 > 엔티티 > 지속성 무시
https://stackoverflow.com/questions/14024912/ddd-persistence-model-and-domain-model
도메인 계층 > 엔티티 > 지속성 무시
Are the benefits of pure DDD worth
the cost in
the speed of development?
도메인 계층 > 엔티티 > 지속성 무시
나도 잘 모르는데...
급진적 패러다임 변경을
팀에 설득할 자신이 없음
도메인 계층 > 엔티티 > 지속성 무시
도메인 계층 > 엔티티 > 지속성 무시
그 대신
도메인 계층 > 엔티티 > 지속성 무시
그 대신
할 수 있는 만큼은
POPO 처럼 쓸 수 있게 하자!
도메인 계층 > 엔티티 > 지속성 무시
엔티티에서 session 객체
사용 금지
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class Ad(Base):
def impression_count(self):
count = session.query(
func.sum(AdImpressionCount.value),
).filter(
AdImpressionCount.ad_id == self.id,
).scalar()
return count or 0
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class Ad(Base):
def impression_count(self):
count = session.query(
func.sum(AdImpressionCount.value),
).filter(
AdImpressionCount.ad_id == self.id,
).scalar()
return count or 0
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class TestAd(Base):
def test_impression_count(self):
# insert AdImpressionCount
ad = Ad()
count = ad.impression_count()
assert count == expected_count
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class TestAd(Base):
def test_impression_count(self):
# insert AdImpressionCount
ad = Ad()
count = ad.impression_count()
assert count == expected_count
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class Ad(Base):
impressions = relationship(AdImpressionCount)
def impression_count(self):
value = 0
for impression in self.impressions:
value += impression.value
return value
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class Ad(Base):
impressions = relationship(AdImpressionCount)
def impression_count(self):
value = 0
for impression in self.impressions:
value += impression.value
return value
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class Ad(Base):
impressions = relationship(AdImpressionCount)
def impression_count(self):
value = 0
for impression in self.impressions:
value += impression.value
return value
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class TestAd(Base):
def test_impression_count(self):
impressions = []
for _ in range(10):
impressions.append(AdImpressionCount())
ad = Ad(impressions=impressions)
count = ad.impression_count()
assert count == expected_count
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
class TestAd(Base):
def test_impression_count(self):
impressions = []
for _ in range(10):
impressions.append(AdImpressionCount())
ad = Ad(impressions=impressions)
count = ad.impression_count()
assert count == expected_count
도메인 계층 > 엔티티 > 지속성 무시 > session 금지
응용 계층
도메인 주도 설계: 에릭 에반스 (위키북스)
응용 계층
데이터 스토어에서 엔티티 조회
응용 계층
데이터 스토어에서 엔티티 조회
조회한 엔티티 사용 (요청 실행)
응용 계층
데이터 스토어에서 엔티티 조회
조회한 엔티티 사용 (요청 실행)
트랜잭션
응용 계층
광고는 기간을 변경할 수 있다
응용 계층
응용 계층 > 엔티티 조회
class AdService(object):
def change_period(self):
pass
class AdService(object):
def change_period(self, ad_id):
ad = session.query(Ad).get(ad_id)
응용 계층 > 엔티티 조회
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.start = start
ad.end = end
응용 계층 > 엔티티 조회
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.start = start
ad.end = end
X
응용 계층 > 엔티티 조회
응용 계층 > 엔티티 사용
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.start = start
ad.end = end
응용 계층 > 엔티티 사용
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.set_start(start)
ad.set_end(end)
class Ad(Base):
def set_start(self, start):
self.start = start
def set_end(self, end):
self.end = end
응용 계층 > 엔티티 사용
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.set_start(start)
ad.set_end(end)
class Ad(Base):
def set_start(self, start):
self.start = start
def set_end(self, end):
self.end = end
X
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
ad.change_period(start, end)


class Ad(Base):
def change_period(self, start, end):
self.start = start
self.end = end
응용 계층 > 엔티티 사용
응용 계층 > 트랜잭션
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
with session.begin():
ad.change_period(start, end)




class Ad(Base):
def change_period(self, start, end):
self.start = start
self.end = end
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
with session.begin():
ad.change_period(start, end)




class Ad(Base):
def change_period(self, start, end):
self.start = start
self.end = end
응용 계층 > 트랜잭션
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
with session.begin():
ad.change_period(start, end)




class Ad(Base):
def change_period(self, start, end):
self.start = start
self.end = end
응용 계층 > 트랜잭션
class AdService(object):
def change_period(self, ad_id, start, end):
ad = session.query(Ad).get(ad_id)
with session.begin():
ad.change_period(start, end)




class Ad(Base):
def change_period(self, start, end):
self.start = start
self.end = end
응용 계층 > 트랜잭션
잠깐!
응용 계층 > DIP
응용 계층도 도메인 계층처럼
지속성 정보를
포함해서는 안됩니다!
응용 계층 > DIP
DIP
(Dependency Inversion Principle)
응용 계층 > DIP
https://en.wikipedia.org/wiki/Dependency_inversion_principle
Flask / Django
안 할 겁니다
Flask 앱 만들기 (X)
만든 앱을 Flask로
제공하기 (O)
Flask는 거들 뿐
Flask는 거들 뿐
current_app
g
request
session
마무리
갈길이 (아주) 멀어요
아직 *유사* DDD이긴 하지만
복잡한 앱을 만들 때
좋은 지침이 되고 있습니다
의도가 명확해지는 느낌
문제 해결에 집중하고 있는 느낌
테스트도 잘 짜짐
테스트 속도도 빨라짐
여러분도 필요한 곳에
적절하게 활용하실 수 있기를
바랍니다
끝

More Related Content

What's hot

게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍Seungmo Koo
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐NAVER D2
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & InconsistencyGreenD0g
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
옥트리의 구축
옥트리의 구축옥트리의 구축
옥트리의 구축sj k
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해beom kyun choi
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 

What's hot (20)

게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐네이버 오픈세미나 백엔드_아키텍쳐
네이버 오픈세미나 백엔드_아키텍쳐
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
Reverse proxies & Inconsistency
Reverse proxies & InconsistencyReverse proxies & Inconsistency
Reverse proxies & Inconsistency
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
옥트리의 구축
옥트리의 구축옥트리의 구축
옥트리의 구축
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 

Similar to 지금 당장 (유사) DDD 시작하기

Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션codercay
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental systemJaehoon Oh
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.Ryan Park
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GDG Korea
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트YongEun Choi
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 SangIn Choung
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Sangon Lee
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initializationEunjoo Im
 
Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)MDLicht
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게Sungju Jin
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션SangIn Choung
 
레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기Jiyong Jung
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 

Similar to 지금 당장 (유사) DDD 시작하기 (20)

Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션
 
Legacy code refactoring video rental system
Legacy code refactoring   video rental systemLegacy code refactoring   video rental system
Legacy code refactoring video rental system
 
카사 공개세미나1회 W.E.L.C.
카사 공개세미나1회  W.E.L.C.카사 공개세미나1회  W.E.L.C.
카사 공개세미나1회 W.E.L.C.
 
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
GKAC 2014 Nov. - 안드로이드 스튜디오로 생산성 올리기
 
시작하자 단위테스트
시작하자 단위테스트시작하자 단위테스트
시작하자 단위테스트
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
Android ndk jni 설치및 연동
Android ndk jni 설치및 연동Android ndk jni 설치및 연동
Android ndk jni 설치및 연동
 
Swift3 subscript inheritance initialization
Swift3 subscript inheritance initializationSwift3 subscript inheritance initialization
Swift3 subscript inheritance initialization
 
Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)Android UI Test (Espresso/Kakao)
Android UI Test (Espresso/Kakao)
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Scala for play
Scala for playScala for play
Scala for play
 
반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게반복적인 작업이 싫은 안드로이드 개발자에게
반복적인 작업이 싫은 안드로이드 개발자에게
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기레거시 시스템에 Django 들이밀기
레거시 시스템에 Django 들이밀기
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 

지금 당장 (유사) DDD 시작하기