SlideShare a Scribd company logo
1 of 19
About Microservice
Coding Style
부제: 하드코딩하자
1년차
재미
즐거움
2년차
이동성
3년차
재사용성
5년차
객체지향
스프링
패턴
…
어려운걸 잘아는게 좋은거?
유엔진솔루션즈
• 2013년 부터 기업용 패키지 솔루션 개발
• BPM, SNS, ALM 등 BPM을 기반한 다양한 파생상품 개발
• (국내) 고객입장의 밸류: 커스터마이징이 잘되는 제품
• 수익모델: 온-프레미스 기반 프로덕트 제공
소프트웨어의 구조
Metaworks Framework
(나이: 15년)
BPM Process
Modeler
BPM Process Engine
(나이: 12년)
BPM Process Portal
(나이: 10년)
ALM Pipeline
Modeler
Business Rule
Modeler
Business Rule
Engine
Enterprise Social
Network Portal
고객사1 고객사2 고객사3 고객사4 고객사5
Key Strategies:
- DRY (Don’t Repeat Yourself) Rule : 가능한 공통구현 코드는 중복이 없어야
- White-box Inheritance : 한번 구현된 것은 추상화하여 상위 클래스에 정의
• 메타데이터 기반 UI생성
• DB접근
• 컨트롤 역전처리
• 프로세스 모델링
• 프로세스 실행
• 프로세스 분석/통계
• 특화된 제
품의 요구
사항 반영
• 특화된 고
객의 요구
사항 반영
상속
상속 상속 상속
상속 상속 상속
10년의 경과보고
• 개발자 수급:
• 자체 프레임워크와 개발표준에 익숙해지는데 최소 3년 소요
• 객체 지향과 AOP 개념, 빌드 등 기반 기술 이해에 그중 1.5 년 이상 소요
• 빌드/통합:
• 1회 Integration, End-to-End Test 를 위한 Maven Dependency 버전 일치에 적어도 4시간(반
나절) 이상 소요
• Maven Dependency Hell
• 기술적용:
• 많은 오픈소스들의 기능들을 통합함에 있어 상이한 라이브러리 디펜던시 충돌로 인한 통합의
어려움
• OSGi 시도
• OSGi 의 복잡한 버전관리, 기반 기술 러닝커브로 포기
통합 빌드 주기: 1개월  망한다
 결론: 소프트웨어 품질 저하
기회: MSA 의 발견
MSA architecture 의 두가지 관점
Outer:
개발자가 공히 겪게 되는 복
잡성들
(e.g. 멀티스레딩, 탄력성, 장
애내성, 공통처리) 을 네트워
크단에서 처리해주고
Inner:
코드내부는 가능한 무식, 간결,
명확하게 단순화
MSA Design Principles
• SoC—Separation of concerns.
: 고생해서 분리를 왜 했느냐? 관심사를 분리해서 개발할 수 있어야 한다
• DDD—Domain Driven Design.
: 도메인을 알면, 관심사를 어떻게 분리할지 작전이 나온다.
• KISS — Keep it simple, stupid.
: 작은 사이즈의 매력이 뭐냐? 무식하게 두라. 때론 하드코드도 괜찮아. 스프링부트를 보
라, Bean 설정을 메서드로-하드코드로 한다
• YAGNI—You aren’t gonna need it.
: 머리를 어지럽히는 복잡한 기술? 지금 당장 필요한 것만 써라. 너무 미래를 보지마라. 보
통 복잡한 설계와 기술은 하나의 언어와 표준을 준수하기 위해 등장한다. 당장 돌아가는
코드와 언어가 있다면 그걸 사용하자 Polyglot 이 좋은게 그거다. 필요할때 복잡해져라.
애자일이 그거다.
Write Simple
• 단위 마이크로 서비스는 의도적으로 크기를 작게 한다
• 이미 모듈화 되었으므로, 내부는 읽기 좋게 (단순하게) 작성한다
• 작은 크기내에 복잡한 추상화, 일반화, 모듈화는 사족이다
• 데이터베이스 또한 단순화한다 (Denormalization, Materialized)
• 적당한 하드코드는 읽기가 생각보다 좋다 (property 화의 최소
화) – 위험한가?
• 설정을 통한 분기 보다 하드코드로 된 펑션이 읽기가 좋다
받아들이기 힘들었던 이야기들
• 공통화 하지 말라?
• DRY X  KISS O
• Shared Kernel X  Polyglot
• 네이밍(패키지명) 멋지게 짓지말라?
• Ubiquitous Language
• Bounded Context
• 하드코딩 하라?
• Inline Bean Definition
• 백엔드가 꼭 필요한가?
• MVC X  Front + Gateway + DB
?
그렇다면 객체지향이 죽은것인가? 아니
면 어디로 갔는가?
네트워크단으로 갔다.
Proxy Pattern  API Gateway
Polymorphism  Traffic Routing
Multi-threading  Container Orchestrator
Aspect Cross-cutting  PubSub, Event-driven
Spring  Istio
Multi-threading  Kubernetes
Aspect Cross-cutting  Kafka
누가 해주느냐?
받아들이니 깨닫게 된 것들
• 내 소프트웨어는 어려운 것이 아니었다
• 그냥 복잡하게 엉켜있는 것이었다.
• 너무 깊은 추상화, 공통화는 오히려 내 발목을 잡았던 것이다.
• 하지만, Inner Architecture 내에서도
• 여전히 주석, 완전한 코드, 테스팅은 ”어느정도” 중요하다.
• 그 정도는 “필요한 만큼” 이라고 정의하고 싶다.
Agile Principle:
팔리지 않을것은 만들지도 마라
결론
• 서비스 사업 뿐만 아니라, 솔루션 개발 및 Product-Line
Management 에서도 MSA 를 적용했을때 효율이 발생
• 단위개발 (Inner Architecture) 의 단순성 추구
• 결론적으로 작전의 변경:
형상에 대한 과도한 표준화, 공통화, 기술 검증의 노력과 에너지
 비즈니스 기회의 빠른 시장 검증의 노력과 에너지
10년차: 다시 즐거움을 되찾다

More Related Content

What's hot

유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)uEngine Solutions
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사Open Source Consulting
 
Process Oriented Architecture
Process Oriented ArchitectureProcess Oriented Architecture
Process Oriented ArchitectureuEngine Solutions
 
[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devopsOpen Source Consulting
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?VMware Tanzu Korea
 
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 almuEngine Solutions
 
Open Cloud Engine PaaS Snapshots
Open Cloud Engine PaaS SnapshotsOpen Cloud Engine PaaS Snapshots
Open Cloud Engine PaaS SnapshotsuEngine Solutions
 
Kakao meets jira
Kakao meets jiraKakao meets jira
Kakao meets jira호정 이
 
클린아키텍처와 DDD - day1
클린아키텍처와 DDD - day1클린아키텍처와 DDD - day1
클린아키텍처와 DDD - day1Chimin Park
 
[오픈소스컨설팅]Open Stack Summit 2017 Review
[오픈소스컨설팅]Open Stack Summit 2017 Review[오픈소스컨설팅]Open Stack Summit 2017 Review
[오픈소스컨설팅]Open Stack Summit 2017 ReviewOpen Source Consulting
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발Terry Cho
 
SLiPP 스터디 - MSA
SLiPP 스터디 - MSASLiPP 스터디 - MSA
SLiPP 스터디 - MSADaekwon Kang
 
AI = SE , giip system manage automation with A.I
AI = SE , giip system manage automation with A.IAI = SE , giip system manage automation with A.I
AI = SE , giip system manage automation with A.ILowy Shin
 
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅Open Source Consulting
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드Terry Cho
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementationuEngine Solutions
 
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)Lowy Shin
 
Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Lowy Shin
 
Confluent Startup Webinar Series
 Confluent Startup Webinar Series Confluent Startup Webinar Series
Confluent Startup Webinar Seriesconfluent
 

What's hot (20)

유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
유엔진 오픈소스 클라우드 플랫폼 (uEngine Microservice architecture Platform)
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
 
Process Oriented Architecture
Process Oriented ArchitectureProcess Oriented Architecture
Process Oriented Architecture
 
[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops[Atlassian meets dev ops and itsm] infrastructure for devops
[Atlassian meets dev ops and itsm] infrastructure for devops
 
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
MSA 전략 1: 마이크로서비스, 어떻게 디자인 할 것인가?
 
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm
아키텍트대회 유엔진-장진영-Sw공학표준을 기반한 alm
 
Open Cloud Engine PaaS Snapshots
Open Cloud Engine PaaS SnapshotsOpen Cloud Engine PaaS Snapshots
Open Cloud Engine PaaS Snapshots
 
Kakao meets jira
Kakao meets jiraKakao meets jira
Kakao meets jira
 
클린아키텍처와 DDD - day1
클린아키텍처와 DDD - day1클린아키텍처와 DDD - day1
클린아키텍처와 DDD - day1
 
[오픈소스컨설팅]Open Stack Summit 2017 Review
[오픈소스컨설팅]Open Stack Summit 2017 Review[오픈소스컨설팅]Open Stack Summit 2017 Review
[오픈소스컨설팅]Open Stack Summit 2017 Review
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발
 
SLiPP 스터디 - MSA
SLiPP 스터디 - MSASLiPP 스터디 - MSA
SLiPP 스터디 - MSA
 
AI = SE , giip system manage automation with A.I
AI = SE , giip system manage automation with A.IAI = SE , giip system manage automation with A.I
AI = SE , giip system manage automation with A.I
 
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅
4시간 안에 끝내는 AWS 클라우드 전환 및 운영 환경 구성_최지웅_오픈소스컨설팅
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드
 
From event storming to spring cloud implementation
From event storming to spring cloud implementationFrom event storming to spring cloud implementation
From event storming to spring cloud implementation
 
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)
[giip] A.I. Infrastructure Advisor (인공지능 인프라 어드바이저)
 
Giip bp-giip connectivity1703
Giip bp-giip connectivity1703Giip bp-giip connectivity1703
Giip bp-giip connectivity1703
 
Confluent Startup Webinar Series
 Confluent Startup Webinar Series Confluent Startup Webinar Series
Confluent Startup Webinar Series
 

Similar to Microservice coding guide

소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선Jung Dohyun
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은현진 김
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)InBum Kim
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
BD Talk 2017 봄 - 원정코딩
BD Talk 2017 봄 - 원정코딩BD Talk 2017 봄 - 원정코딩
BD Talk 2017 봄 - 원정코딩Sumin Byeon
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011devCAT Studio, NEXON
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it goChris Ohk
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427Will Kim
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기수보 김
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Sangwon Ko
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)VMware Tanzu Korea
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 

Similar to Microservice coding guide (20)

소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
BD Talk 2017 봄 - 원정코딩
BD Talk 2017 봄 - 원정코딩BD Talk 2017 봄 - 원정코딩
BD Talk 2017 봄 - 원정코딩
 
Why no Hadoop? What's next?
Why no Hadoop? What's next?Why no Hadoop? What's next?
Why no Hadoop? What's next?
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
 
How to implement your dream 20150427
How to implement your dream 20150427How to implement your dream 20150427
How to implement your dream 20150427
 
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
 
예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기예비 개발자를 위한 소프트웨어 세상 이야기
예비 개발자를 위한 소프트웨어 세상 이야기
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1Domain-Driven Design 훑어보기 Part 1
Domain-Driven Design 훑어보기 Part 1
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 

More from uEngine Solutions

이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기
이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기
이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기uEngine Solutions
 
Safe cloud native transformation approaches
Safe cloud native transformation approachesSafe cloud native transformation approaches
Safe cloud native transformation approachesuEngine Solutions
 
microservice architecture public education v2
microservice architecture public education v2microservice architecture public education v2
microservice architecture public education v2uEngine Solutions
 
Distributed transanction in microservices
Distributed transanction in microservicesDistributed transanction in microservices
Distributed transanction in microservicesuEngine Solutions
 
Bluemix paas 기반 saas 개발 사례
Bluemix paas 기반 saas 개발 사례Bluemix paas 기반 saas 개발 사례
Bluemix paas 기반 saas 개발 사례uEngine Solutions
 
Building multi tenancy enterprise applications - quick
Building multi tenancy enterprise applications - quickBuilding multi tenancy enterprise applications - quick
Building multi tenancy enterprise applications - quickuEngine Solutions
 
Building multi tenancy enterprise applications
Building multi tenancy enterprise applicationsBuilding multi tenancy enterprise applications
Building multi tenancy enterprise applicationsuEngine Solutions
 
성공적인 서비스로의 플랫폼 선택
성공적인 서비스로의 플랫폼 선택성공적인 서비스로의 플랫폼 선택
성공적인 서비스로의 플랫폼 선택uEngine Solutions
 
9 design factors for cloud applications
9 design factors for cloud applications9 design factors for cloud applications
9 design factors for cloud applicationsuEngine Solutions
 
Front-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymerFront-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymeruEngine Solutions
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강uEngine Solutions
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석uEngine Solutions
 
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱uEngine Solutions
 
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사uEngine Solutions
 

More from uEngine Solutions (17)

이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기
이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기
이벤트스토밍과 BDD 를 혼합하여 소프트웨어 디자인과 테스트 자동화하기
 
Safe cloud native transformation approaches
Safe cloud native transformation approachesSafe cloud native transformation approaches
Safe cloud native transformation approaches
 
microservice architecture public education v2
microservice architecture public education v2microservice architecture public education v2
microservice architecture public education v2
 
Distributed transanction in microservices
Distributed transanction in microservicesDistributed transanction in microservices
Distributed transanction in microservices
 
Micro service architecture
Micro service architectureMicro service architecture
Micro service architecture
 
Bluemix paas 기반 saas 개발 사례
Bluemix paas 기반 saas 개발 사례Bluemix paas 기반 saas 개발 사례
Bluemix paas 기반 saas 개발 사례
 
Building multi tenancy enterprise applications - quick
Building multi tenancy enterprise applications - quickBuilding multi tenancy enterprise applications - quick
Building multi tenancy enterprise applications - quick
 
Building multi tenancy enterprise applications
Building multi tenancy enterprise applicationsBuilding multi tenancy enterprise applications
Building multi tenancy enterprise applications
 
Metaworks4 intro
Metaworks4 introMetaworks4 intro
Metaworks4 intro
 
Essencia 2017
Essencia 2017Essencia 2017
Essencia 2017
 
성공적인 서비스로의 플랫폼 선택
성공적인 서비스로의 플랫폼 선택성공적인 서비스로의 플랫폼 선택
성공적인 서비스로의 플랫폼 선택
 
9 design factors for cloud applications
9 design factors for cloud applications9 design factors for cloud applications
9 design factors for cloud applications
 
Front-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and PolymerFront-end architecture for cloud applications and Polymer
Front-end architecture for cloud applications and Polymer
 
객체지향프로그래밍 특강
객체지향프로그래밍 특강객체지향프로그래밍 특강
객체지향프로그래밍 특강
 
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석Open source apm scouter를 통한 관제  관리 jadecross 정환열 수석
Open source apm scouter를 통한 관제 관리 jadecross 정환열 수석
 
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
클라우드 서비스운영 플랫폼 가루다 Open cloudengine_패스트캣_cto 송상욱
 
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사
Io t에서 big data를 통합하는 통합 빅데이터 플랫폼 flamingo_클라우다인_김병곤 대표이사
 

Microservice coding guide

  • 6. 유엔진솔루션즈 • 2013년 부터 기업용 패키지 솔루션 개발 • BPM, SNS, ALM 등 BPM을 기반한 다양한 파생상품 개발 • (국내) 고객입장의 밸류: 커스터마이징이 잘되는 제품 • 수익모델: 온-프레미스 기반 프로덕트 제공
  • 7. 소프트웨어의 구조 Metaworks Framework (나이: 15년) BPM Process Modeler BPM Process Engine (나이: 12년) BPM Process Portal (나이: 10년) ALM Pipeline Modeler Business Rule Modeler Business Rule Engine Enterprise Social Network Portal 고객사1 고객사2 고객사3 고객사4 고객사5 Key Strategies: - DRY (Don’t Repeat Yourself) Rule : 가능한 공통구현 코드는 중복이 없어야 - White-box Inheritance : 한번 구현된 것은 추상화하여 상위 클래스에 정의 • 메타데이터 기반 UI생성 • DB접근 • 컨트롤 역전처리 • 프로세스 모델링 • 프로세스 실행 • 프로세스 분석/통계 • 특화된 제 품의 요구 사항 반영 • 특화된 고 객의 요구 사항 반영 상속 상속 상속 상속 상속 상속 상속
  • 8. 10년의 경과보고 • 개발자 수급: • 자체 프레임워크와 개발표준에 익숙해지는데 최소 3년 소요 • 객체 지향과 AOP 개념, 빌드 등 기반 기술 이해에 그중 1.5 년 이상 소요 • 빌드/통합: • 1회 Integration, End-to-End Test 를 위한 Maven Dependency 버전 일치에 적어도 4시간(반 나절) 이상 소요 • Maven Dependency Hell • 기술적용: • 많은 오픈소스들의 기능들을 통합함에 있어 상이한 라이브러리 디펜던시 충돌로 인한 통합의 어려움 • OSGi 시도 • OSGi 의 복잡한 버전관리, 기반 기술 러닝커브로 포기
  • 9. 통합 빌드 주기: 1개월  망한다  결론: 소프트웨어 품질 저하
  • 10. 기회: MSA 의 발견
  • 11. MSA architecture 의 두가지 관점 Outer: 개발자가 공히 겪게 되는 복 잡성들 (e.g. 멀티스레딩, 탄력성, 장 애내성, 공통처리) 을 네트워 크단에서 처리해주고 Inner: 코드내부는 가능한 무식, 간결, 명확하게 단순화
  • 12. MSA Design Principles • SoC—Separation of concerns. : 고생해서 분리를 왜 했느냐? 관심사를 분리해서 개발할 수 있어야 한다 • DDD—Domain Driven Design. : 도메인을 알면, 관심사를 어떻게 분리할지 작전이 나온다. • KISS — Keep it simple, stupid. : 작은 사이즈의 매력이 뭐냐? 무식하게 두라. 때론 하드코드도 괜찮아. 스프링부트를 보 라, Bean 설정을 메서드로-하드코드로 한다 • YAGNI—You aren’t gonna need it. : 머리를 어지럽히는 복잡한 기술? 지금 당장 필요한 것만 써라. 너무 미래를 보지마라. 보 통 복잡한 설계와 기술은 하나의 언어와 표준을 준수하기 위해 등장한다. 당장 돌아가는 코드와 언어가 있다면 그걸 사용하자 Polyglot 이 좋은게 그거다. 필요할때 복잡해져라. 애자일이 그거다.
  • 13. Write Simple • 단위 마이크로 서비스는 의도적으로 크기를 작게 한다 • 이미 모듈화 되었으므로, 내부는 읽기 좋게 (단순하게) 작성한다 • 작은 크기내에 복잡한 추상화, 일반화, 모듈화는 사족이다 • 데이터베이스 또한 단순화한다 (Denormalization, Materialized) • 적당한 하드코드는 읽기가 생각보다 좋다 (property 화의 최소 화) – 위험한가? • 설정을 통한 분기 보다 하드코드로 된 펑션이 읽기가 좋다
  • 14. 받아들이기 힘들었던 이야기들 • 공통화 하지 말라? • DRY X  KISS O • Shared Kernel X  Polyglot • 네이밍(패키지명) 멋지게 짓지말라? • Ubiquitous Language • Bounded Context • 하드코딩 하라? • Inline Bean Definition • 백엔드가 꼭 필요한가? • MVC X  Front + Gateway + DB ?
  • 15. 그렇다면 객체지향이 죽은것인가? 아니 면 어디로 갔는가? 네트워크단으로 갔다. Proxy Pattern  API Gateway Polymorphism  Traffic Routing Multi-threading  Container Orchestrator Aspect Cross-cutting  PubSub, Event-driven Spring  Istio Multi-threading  Kubernetes Aspect Cross-cutting  Kafka 누가 해주느냐?
  • 16. 받아들이니 깨닫게 된 것들 • 내 소프트웨어는 어려운 것이 아니었다 • 그냥 복잡하게 엉켜있는 것이었다. • 너무 깊은 추상화, 공통화는 오히려 내 발목을 잡았던 것이다. • 하지만, Inner Architecture 내에서도 • 여전히 주석, 완전한 코드, 테스팅은 ”어느정도” 중요하다. • 그 정도는 “필요한 만큼” 이라고 정의하고 싶다.
  • 18. 결론 • 서비스 사업 뿐만 아니라, 솔루션 개발 및 Product-Line Management 에서도 MSA 를 적용했을때 효율이 발생 • 단위개발 (Inner Architecture) 의 단순성 추구 • 결론적으로 작전의 변경: 형상에 대한 과도한 표준화, 공통화, 기술 검증의 노력과 에너지  비즈니스 기회의 빠른 시장 검증의 노력과 에너지