SlideShare a Scribd company logo
1 of 50
Download to read offline
© Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version 1.0
Haewon Shin(hshin@pivotal.io)
Younjin Jeong(yjeong@pivotal.io)
Sep 2019
MSA Series Meetup #3
Spring Boot & eXtreme Programming
https://bit.ly/2mZ9fWM
https://www.facebook.com/pivotalkorea/
Wifi : HyperConnectGuest // azar123$
https://github.com/hshin-pivotal/pivotal-bank-demo-kr/
! Agile
! Lean
! 12 factor
! Cloud Native
! DevOps
! Micro Services
! CI CD
! …
Spring Projects
https://spring.io
• Spring Framework
• Spring Boot
• Spring Cloud
• Spring Cloud Data
Flow
• Spring Data
• Spring Integration
• Spring Batch
• Spring Security
• Spring HATEOAS
• Spring REST Docs
• Spring for Android
• Spring AMQP
• Spring Mobile
• Spring Web Flow
• Spring Web Services
• Spring Session
• Spring Shell
• Spring LDAP
• Spring FLO
• Spring Kafka
• Spring StateMachine
• Spring IO Platform
The Big 4
Spring Framework, Spring Boot, Spring Cloud and Spring Cloud Data Flow
Spring Framework
7
완전히 새로운 버전 5.
애플리케이션 설정 패턴, 마이크로 서비스 컨테이너
• 스프링의 기본 설정값 변경을 쉽고 편리하게 제공
• 강화된 CoC (Convention over Configuration), XML 없음, 코드 생성
없음, 자동 설정
• 독립 실행 가능한 JAR 패키징
• 자동 설정 / 앱 서버를 임베드
• 클라우드 파운드리를 위한 자동 설정
• 실 운영을 위한 스위치를 제공
• start.spring.io 를 사용한 프로젝트 생성
• 자바, 스프링, 그루비, 코틀린
Spring Boot Modules
Spring Boot
https://start.spring.io
• Spring Shell
• Spring LDAP
• Spring FLO
• Spring Kafka
• Spring StateMachine
• Spring IO Platform
Spring Initializr
스프링 부트 애플리케이션의 시작
• 현존하는 대부분의 IDE
에 포함되어 즉시 새로운
프로젝트를 생성 가능
Spring Initializr
스프링 부트 애플리케이션의 시작
• Java, Kotlin, Groovy 중
하나의 언어를 선택 가능
• Maven, Gradle 중 선택
가능
• Java Version 은 최하
8이상을 사용 해야 함
Spring Initializr
스프링 부트 애플리케이션의 시작
• 스프링의 다양한 프로젝트 사용
가능
• 스프링 프레임워크 코어
이외에도 리액티브 웹, 다양한
NoSQL 과 SQL, 그리고 아마존
웹 서비스, 마이크로소프트 애저
및 구글 클라우드 플랫폼등의
클라우드 서비스에서 제공하는
서비스를 사용 가능
eXtreme Programming
The five values of XP are communication, simplicity,
feedback, courage, and respect and are described in
more detail below.
Communication
XP stresses the importance of the appropriate kind of communication – face to face
discussion with the aid of a white board or other drawing mechanism.
Simplicity
Simplicity means “what is the simplest thing that will work?” Simplicity also means
address only the requirements that you know about; don’t try to predict the future.
Feedback
Identify areas for improvement and revise their practices. Simple design. Your team builds
something, gathers feedback on your design and implementation, and then adjust your product
going forward.
Courage
Kent Beck defined courage as “effective action in the face of fear” (Extreme Programming
Explained P. 20). This definition shows a preference for action based on other principles so
that the results aren’t harmful to the team. You need courage to raise organizational issues
that reduce your team’s effectiveness. You need courage to stop doing something that
doesn’t work and try something else. You need courage to accept and act on feedback, even
when it’s difficult to accept.
Respect
The members of your team need to respect each other in order to communicate
with each other, provide and accept feedback that honors your relationship, and to
work together to identify simple designs and solutions.
Practices
• The Planning Game
• Small Releases
• Metaphor
• Simple Design
• Testing
• Refactoring
• Pair Programming
• Collective Ownership
• Continuous Integration
• 40-hour week
• On-site Customer
• Coding Standard
프로덕션배포
코드의 길이
조직의 규모
코드의 길이
조직의 규모
프로덕션배포
with Test
without Test
프로덕션배포
with Test
without Test
일정 규모 이상이 되면 테스트 작성을 포기
= “애자일은 (작은) 신규 프로젝트에만”
코드의 길이
조직의 규모
BUT
💩
수천줄의 코드 백만줄의 코드
😎
💩
💩
수천줄의 코드 백만줄의 코드
😎
😱😱😱😱
💩
💩
수천줄의 코드 백만줄의 코드
업데이트에 무슨 문제가 발생할지
“아무도 모름”
책임추궁
롤백 계획서
패치&업데이트 문제
😎
😱😱😱😱
팀에 속해 있지만 개발은 결국 혼자
! 아침을 거르고 출근
! 뇌는 아직 깨어있지 않은 상태에서 커피를 마시며 뉴스, 주식, 메일을 확인
! 오전 끝. 점심 시간
! 점심을 먹고 나면 포만감에 쉽게 피로해 짐
! 피곤한 상태에서 해결해야 하는 문제에 대해 검색, 연구
! 오후 3시 이후에 본격적으로 업무
! 6시까지는 주어진 일을 마감하기에 시간이 부족
! 늦은 시간까지 야근
(실리콘 밸리) 대부분 회사의 (혼자)업무 패턴
How transforming
“how enterprise developers work”
Release Plan
Iternation Plan
Acceptance Test
Stand Up Meeting
Pair Negotiation
Unit Test
Pair Programming
Code
https://www.pivotaltracker.com/agile/XP
아침 식사
….
8:30
스탠드 업
9:00 9:05
팀
스탠드 업
(pair negotiation)
9:30
Pair
업무 시작
11:30
점심
식사
13:00
오후
시작
18:00
아무도
없음
피보탈의 업무 패턴
08:30 AM - 아침밥(잘나옴)
09:00 AM - All Stand Up
09:05 AM - Team Stand Up
09:20 AM - Start working
And some Ping pong
Trusted & Balanced Team
https://www.slideshare.net/Pivotal/tales-from-a-balanced-team
Balanced Team Pairing
https://medium.com/product-labs/cross-functional-pairing-an-experience-report-cdf72f189150
Product
Manager
Engineer
1 Computer
2 Monitor
2 Keyboard
2 Mouse
2 Engineers
Pair Programming
TDD에서의 페어프로그래밍 - example
핑-퐁 페어
핑퐁 페어는 멤버간 키보드 점유 순서를 돌아가며 작업하는 것
1. Member A writes a test and ensures it fails as expected
2. Member B fixes the test and writes the next failing test
3. Member A fixes the test and writes the next failing test
4. Repeat previous 2 steps forever (or at least until lunch)
100% Code Review with Pair
https://pivotal.io/labs/tools
TDD in Pivotal
TDD에서의 테스트에 대한 피보탈의 정의는?
• "Executable description of code behavior". 코드 동작의 실행 가능한 설명
• "Description of how code should behave". 코드가 어떻게 동작해야 하는지에 대한 설명
TDD에서 프로덕션 코드에 대한 피보탈의 정의는?
• "An implementation that satisfies all tests at a given time" 특정 시점에서 모든 테스트를 만족하는 구현
• "That that is sufficient for the tests to pass" 테스트들을 충분히 통과한 코드
TDD를 적용하는 이유는?
• 오버 엔지니어링을 피하기 위해
• 테스트 불가능한 코드 작성을 원천 봉쇄
• 오브젝트 인터페이스를 고려하도록 강제
• 언제 끝났는지를 알기 위해
• 높은 커버리지를 유지하기 위해
• 다른 팀원과 소통하기 위해
• 점진적/연속적 진전을 위해
• 매뉴얼(수동) 테스트에 소비하는 시간을 줄이기 위해
• 코드를 보다 테스트 가능한 상태로 만들기 위해
• Because it's easier to describe how something
*should* work than to *make* it work.
TDD in Pivotal
• 요구 사항에 집중하기 위해
• 디버깅을 줄이기 위해
• 디버깅을 더 쉽게 하기 위해
• 버그가 있는 경우 쉽게 찾아내기 위해
• 오브젝트들이 서로 더 유기적으로 동작할 수 있도록
• 더 좋은 오브젝트 오리엔티드 의존성 디자인을 위해
• 실제로 사용가능한 문서를 유지하기 위해
• 리팩토링을 지원하기 위해
• 코드에 안전장치를 적용하기 위해
• 변화를 능동적으로 수용할 자신감을 가지기 위해
TDD in Pivotal
왜 테스트를 나중에 작성하지 않는가?
• 그런 방식은 동작하지 않기 때문:
◦ 지루하고
◦ 언제 끝날지 도무지 알 수가 없으며
◦ 일반적으로 많은 테스트 케이스를 놓치게 되며 이로 인해 매우 불량한 커버리지를 가진 상태가 되기
때문에: 작성돈 코드는 테스트를 가져야 함
• 테스트를 작성하는데 있어 비현질적인 원칙을 적용하지 않기 위해
https://github.com/hshin-pivotal/pivotal-bank-demo-kr/
DEMO
데모에서 테스트는 bottom up의 방식으로 먼저 진행 (Unit test 부터)
일반적으로는 bottom up 으로 만들어진 테스트들의 집합을 가지고 integration test를 작성한다
https://www.pivotaltracker.com/n/projects/956238
“변화하는 환경에 적응하도록 코드를 작성하라”
“한줄의 추가 코드는 한줄의 추가 메인터넌스”
“즉, 미래에 변경이 쉽도록 코드를 작성해야 한다”
Transforming How The World Builds Software
© Copyright 2017 Pivotal Software, Inc. All rights Reserved.

More Related Content

What's hot

Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...VMware Tanzu Korea
 
클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정VMware Tanzu Korea
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용Terry Cho
 
[오픈소스컨설팅] DevOps 체험교육 소개
[오픈소스컨설팅] DevOps 체험교육 소개[오픈소스컨설팅] DevOps 체험교육 소개
[오픈소스컨설팅] DevOps 체험교육 소개Brian HAN 한진규
 
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드Atlassian 대한민국
 
Kakao meets jira
Kakao meets jiraKakao meets jira
Kakao meets jira호정 이
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 대한민국
 
Spring Camp 2017 - DevOps for everyone
Spring Camp 2017 - DevOps for everyoneSpring Camp 2017 - DevOps for everyone
Spring Camp 2017 - DevOps for everyoneJin Gi Kong
 
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망Hee Jae Lee
 
Azure DevOps를 활용한 CI, CD 구축
Azure DevOps를 활용한 CI, CD 구축Azure DevOps를 활용한 CI, CD 구축
Azure DevOps를 활용한 CI, CD 구축Taeyoung Kim
 
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어Atlassian 대한민국
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
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
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅Atlassian 대한민국
 
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok LeeKubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee규석 이
 

What's hot (20)

Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
Pivotal Concourse를 활용한 CI/CD pipeline automated build-up & Workflow managemen...
 
클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정클라우드 네이티브로의 전환을 위한 여정
클라우드 네이티브로의 전환을 위한 여정
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
 
[오픈소스컨설팅] DevOps 체험교육 소개
[오픈소스컨설팅] DevOps 체험교육 소개[오픈소스컨설팅] DevOps 체험교육 소개
[오픈소스컨설팅] DevOps 체험교육 소개
 
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
 
Kakao meets jira
Kakao meets jiraKakao meets jira
Kakao meets jira
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
DevOps Demo
DevOps DemoDevOps Demo
DevOps Demo
 
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
Atlassian 및 오픈소스를 이용한 DevOps 구축 - 한국정보컨설팅
 
Spring Camp 2017 - DevOps for everyone
Spring Camp 2017 - DevOps for everyoneSpring Camp 2017 - DevOps for everyone
Spring Camp 2017 - DevOps for everyone
 
About Programmer 2021
About Programmer 2021About Programmer 2021
About Programmer 2021
 
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
[오픈소스컨설팅]Session 4. dev ops 구성 사례와 전망
 
Azure DevOps를 활용한 CI, CD 구축
Azure DevOps를 활용한 CI, CD 구축Azure DevOps를 활용한 CI, CD 구축
Azure DevOps를 활용한 CI, CD 구축
 
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어
[Atlassian in 부산]Atlassian과 함께한 제품기획부터 출시까지_인프라웨어
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
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 ) 신혜원
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅
[AIS 2018] [Team Tools_Advanced] Altassian 기능 확장과 구축사례 - 한국정보컨설팅
 
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok LeeKubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
Kubernetes cloud native development tools - k8s day korea 2019 - Gyuseok Lee
 

Similar to 꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스Hee Jae Lee
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화Terry Cho
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션DoHyun Jung
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기Seokjae Lee
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호용호 최
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다이상한모임
 
소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선Jung Dohyun
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기Soojin Ro
 
Agile sw development 101
Agile sw development 101Agile sw development 101
Agile sw development 101Kiwon Kyung
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑Dongsik Yang
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1대영 노
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Aree Oh
 
Learning Unit Testing with Pair Programming
Learning Unit Testing with Pair ProgrammingLearning Unit Testing with Pair Programming
Learning Unit Testing with Pair ProgrammingJongchan Kim
 
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824AWSKRUG - AWS한국사용자모임
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)Jeongkyu Shin
 

Similar to 꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD) (20)

[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션
 
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
코프링 프로젝트 투입 일주일 전: 주니어 개발자의 코틀린 도입 이야기
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선소프트웨어 개발 프로세스 개선
소프트웨어 개발 프로세스 개선
 
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
 
Agile sw development 101
Agile sw development 101Agile sw development 101
Agile sw development 101
 
UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑UI/UX 개선을 위한 빠른 프로토타이핑
UI/UX 개선을 위한 빠른 프로토타이핑
 
Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
 
Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정Software engineer가 되기 위한 여정
Software engineer가 되기 위한 여정
 
Learning Unit Testing with Pair Programming
Learning Unit Testing with Pair ProgrammingLearning Unit Testing with Pair Programming
Learning Unit Testing with Pair Programming
 
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)
기술 관심 갖기: 스타트업 기술 101 (Interested in Tech?: Startup Technology 101)
 

More from VMware Tanzu Korea

2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...VMware Tanzu Korea
 
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례VMware Tanzu Korea
 
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례VMware Tanzu Korea
 
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개VMware Tanzu Korea
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인VMware Tanzu Korea
 
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵 클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵 VMware Tanzu Korea
 
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)VMware Tanzu Korea
 
Core Spring + Reactive 김민석
Core Spring + Reactive  김민석Core Spring + Reactive  김민석
Core Spring + Reactive 김민석VMware Tanzu Korea
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진VMware Tanzu Korea
 

More from VMware Tanzu Korea (19)

2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
2018 Pivotal DevOps Day_DevOps 플랫폼 소개 및 데모 (Pivotal Application Service, Pivo...
 
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
2018 Pivotal DevOps Day_DevOps 플랫폼 팀 육성/운영 사례
 
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
2018 Pivotal DevOps Day_마이크로서비스 전환 방법론과 사례
 
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
2018 Pivotal DevOps Day_Pivotal 소개 및 세션 아젠다 소개
 
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
숨겨진 마이크로서비스: 초고속 응답과 고가용성을 위한 캐시 서비스 디자인
 
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵 클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
클라우드 네이티브 플랫폼의 미래 - Kubernetes 기반의 PCF 로드맵
 
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
굿 소프트웨어 컴퍼니로의 여정(Journey To Be a Good Software Company)
 
Netflix MSA and Pivotal
Netflix MSA and PivotalNetflix MSA and Pivotal
Netflix MSA and Pivotal
 
Cloud native enterprise
Cloud native enterpriseCloud native enterprise
Cloud native enterprise
 
gp text roadmap presentation
gp text roadmap presentationgp text roadmap presentation
gp text roadmap presentation
 
GPCloud ( GP on PKS)
GPCloud ( GP on PKS)GPCloud ( GP on PKS)
GPCloud ( GP on PKS)
 
Gemfire Introduction
Gemfire Introduction Gemfire Introduction
Gemfire Introduction
 
Greenplum User Case
Greenplum User Case Greenplum User Case
Greenplum User Case
 
Greenplum Roadmap
Greenplum RoadmapGreenplum Roadmap
Greenplum Roadmap
 
1 greenplum in banking sk cab
1 greenplum in banking   sk cab1 greenplum in banking   sk cab
1 greenplum in banking sk cab
 
Core Spring + Reactive 김민석
Core Spring + Reactive  김민석Core Spring + Reactive  김민석
Core Spring + Reactive 김민석
 
Serverless Spring 오충현
Serverless Spring 오충현Serverless Spring 오충현
Serverless Spring 오충현
 
SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진SpringOne Platform recap 정윤진
SpringOne Platform recap 정윤진
 
Spring one platform 2017 kf
Spring one platform 2017  kfSpring one platform 2017  kf
Spring one platform 2017 kf
 

꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)

  • 1. © Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version 1.0 Haewon Shin(hshin@pivotal.io) Younjin Jeong(yjeong@pivotal.io) Sep 2019 MSA Series Meetup #3 Spring Boot & eXtreme Programming
  • 2. https://bit.ly/2mZ9fWM https://www.facebook.com/pivotalkorea/ Wifi : HyperConnectGuest // azar123$ https://github.com/hshin-pivotal/pivotal-bank-demo-kr/
  • 3. ! Agile ! Lean ! 12 factor ! Cloud Native ! DevOps ! Micro Services ! CI CD ! …
  • 4.
  • 5. Spring Projects https://spring.io • Spring Framework • Spring Boot • Spring Cloud • Spring Cloud Data Flow • Spring Data • Spring Integration • Spring Batch • Spring Security • Spring HATEOAS • Spring REST Docs • Spring for Android • Spring AMQP • Spring Mobile • Spring Web Flow • Spring Web Services • Spring Session • Spring Shell • Spring LDAP • Spring FLO • Spring Kafka • Spring StateMachine • Spring IO Platform
  • 6. The Big 4 Spring Framework, Spring Boot, Spring Cloud and Spring Cloud Data Flow
  • 8. 애플리케이션 설정 패턴, 마이크로 서비스 컨테이너 • 스프링의 기본 설정값 변경을 쉽고 편리하게 제공 • 강화된 CoC (Convention over Configuration), XML 없음, 코드 생성 없음, 자동 설정 • 독립 실행 가능한 JAR 패키징 • 자동 설정 / 앱 서버를 임베드 • 클라우드 파운드리를 위한 자동 설정 • 실 운영을 위한 스위치를 제공 • start.spring.io 를 사용한 프로젝트 생성 • 자바, 스프링, 그루비, 코틀린
  • 9.
  • 11.
  • 12.
  • 13. Spring Boot https://start.spring.io • Spring Shell • Spring LDAP • Spring FLO • Spring Kafka • Spring StateMachine • Spring IO Platform
  • 14. Spring Initializr 스프링 부트 애플리케이션의 시작 • 현존하는 대부분의 IDE 에 포함되어 즉시 새로운 프로젝트를 생성 가능
  • 15. Spring Initializr 스프링 부트 애플리케이션의 시작 • Java, Kotlin, Groovy 중 하나의 언어를 선택 가능 • Maven, Gradle 중 선택 가능 • Java Version 은 최하 8이상을 사용 해야 함
  • 16. Spring Initializr 스프링 부트 애플리케이션의 시작 • 스프링의 다양한 프로젝트 사용 가능 • 스프링 프레임워크 코어 이외에도 리액티브 웹, 다양한 NoSQL 과 SQL, 그리고 아마존 웹 서비스, 마이크로소프트 애저 및 구글 클라우드 플랫폼등의 클라우드 서비스에서 제공하는 서비스를 사용 가능
  • 17. eXtreme Programming The five values of XP are communication, simplicity, feedback, courage, and respect and are described in more detail below.
  • 18. Communication XP stresses the importance of the appropriate kind of communication – face to face discussion with the aid of a white board or other drawing mechanism. Simplicity Simplicity means “what is the simplest thing that will work?” Simplicity also means address only the requirements that you know about; don’t try to predict the future. Feedback Identify areas for improvement and revise their practices. Simple design. Your team builds something, gathers feedback on your design and implementation, and then adjust your product going forward.
  • 19. Courage Kent Beck defined courage as “effective action in the face of fear” (Extreme Programming Explained P. 20). This definition shows a preference for action based on other principles so that the results aren’t harmful to the team. You need courage to raise organizational issues that reduce your team’s effectiveness. You need courage to stop doing something that doesn’t work and try something else. You need courage to accept and act on feedback, even when it’s difficult to accept. Respect The members of your team need to respect each other in order to communicate with each other, provide and accept feedback that honors your relationship, and to work together to identify simple designs and solutions.
  • 20. Practices • The Planning Game • Small Releases • Metaphor • Simple Design • Testing • Refactoring • Pair Programming • Collective Ownership • Continuous Integration • 40-hour week • On-site Customer • Coding Standard
  • 23. 프로덕션배포 with Test without Test 일정 규모 이상이 되면 테스트 작성을 포기 = “애자일은 (작은) 신규 프로젝트에만” 코드의 길이 조직의 규모
  • 24. BUT
  • 26. 💩 💩 수천줄의 코드 백만줄의 코드 😎 😱😱😱😱
  • 27. 💩 💩 수천줄의 코드 백만줄의 코드 업데이트에 무슨 문제가 발생할지 “아무도 모름” 책임추궁 롤백 계획서 패치&업데이트 문제 😎 😱😱😱😱
  • 28. 팀에 속해 있지만 개발은 결국 혼자
  • 29. ! 아침을 거르고 출근 ! 뇌는 아직 깨어있지 않은 상태에서 커피를 마시며 뉴스, 주식, 메일을 확인 ! 오전 끝. 점심 시간 ! 점심을 먹고 나면 포만감에 쉽게 피로해 짐 ! 피곤한 상태에서 해결해야 하는 문제에 대해 검색, 연구 ! 오후 3시 이후에 본격적으로 업무 ! 6시까지는 주어진 일을 마감하기에 시간이 부족 ! 늦은 시간까지 야근 (실리콘 밸리) 대부분 회사의 (혼자)업무 패턴
  • 30.
  • 32. Release Plan Iternation Plan Acceptance Test Stand Up Meeting Pair Negotiation Unit Test Pair Programming Code https://www.pivotaltracker.com/agile/XP
  • 33. 아침 식사 …. 8:30 스탠드 업 9:00 9:05 팀 스탠드 업 (pair negotiation) 9:30 Pair 업무 시작 11:30 점심 식사 13:00 오후 시작 18:00 아무도 없음 피보탈의 업무 패턴
  • 34. 08:30 AM - 아침밥(잘나옴)
  • 35. 09:00 AM - All Stand Up
  • 36. 09:05 AM - Team Stand Up
  • 37. 09:20 AM - Start working And some Ping pong
  • 38. Trusted & Balanced Team https://www.slideshare.net/Pivotal/tales-from-a-balanced-team
  • 40. 1 Computer 2 Monitor 2 Keyboard 2 Mouse 2 Engineers Pair Programming
  • 41. TDD에서의 페어프로그래밍 - example 핑-퐁 페어 핑퐁 페어는 멤버간 키보드 점유 순서를 돌아가며 작업하는 것 1. Member A writes a test and ensures it fails as expected 2. Member B fixes the test and writes the next failing test 3. Member A fixes the test and writes the next failing test 4. Repeat previous 2 steps forever (or at least until lunch) 100% Code Review with Pair
  • 43. TDD in Pivotal TDD에서의 테스트에 대한 피보탈의 정의는? • "Executable description of code behavior". 코드 동작의 실행 가능한 설명 • "Description of how code should behave". 코드가 어떻게 동작해야 하는지에 대한 설명 TDD에서 프로덕션 코드에 대한 피보탈의 정의는? • "An implementation that satisfies all tests at a given time" 특정 시점에서 모든 테스트를 만족하는 구현 • "That that is sufficient for the tests to pass" 테스트들을 충분히 통과한 코드
  • 44. TDD를 적용하는 이유는? • 오버 엔지니어링을 피하기 위해 • 테스트 불가능한 코드 작성을 원천 봉쇄 • 오브젝트 인터페이스를 고려하도록 강제 • 언제 끝났는지를 알기 위해 • 높은 커버리지를 유지하기 위해 • 다른 팀원과 소통하기 위해 • 점진적/연속적 진전을 위해 • 매뉴얼(수동) 테스트에 소비하는 시간을 줄이기 위해 • 코드를 보다 테스트 가능한 상태로 만들기 위해 • Because it's easier to describe how something *should* work than to *make* it work. TDD in Pivotal • 요구 사항에 집중하기 위해 • 디버깅을 줄이기 위해 • 디버깅을 더 쉽게 하기 위해 • 버그가 있는 경우 쉽게 찾아내기 위해 • 오브젝트들이 서로 더 유기적으로 동작할 수 있도록 • 더 좋은 오브젝트 오리엔티드 의존성 디자인을 위해 • 실제로 사용가능한 문서를 유지하기 위해 • 리팩토링을 지원하기 위해 • 코드에 안전장치를 적용하기 위해 • 변화를 능동적으로 수용할 자신감을 가지기 위해
  • 45. TDD in Pivotal 왜 테스트를 나중에 작성하지 않는가? • 그런 방식은 동작하지 않기 때문: ◦ 지루하고 ◦ 언제 끝날지 도무지 알 수가 없으며 ◦ 일반적으로 많은 테스트 케이스를 놓치게 되며 이로 인해 매우 불량한 커버리지를 가진 상태가 되기 때문에: 작성돈 코드는 테스트를 가져야 함 • 테스트를 작성하는데 있어 비현질적인 원칙을 적용하지 않기 위해
  • 47. DEMO 데모에서 테스트는 bottom up의 방식으로 먼저 진행 (Unit test 부터) 일반적으로는 bottom up 으로 만들어진 테스트들의 집합을 가지고 integration test를 작성한다
  • 49. “변화하는 환경에 적응하도록 코드를 작성하라” “한줄의 추가 코드는 한줄의 추가 메인터넌스” “즉, 미래에 변경이 쉽도록 코드를 작성해야 한다”
  • 50. Transforming How The World Builds Software © Copyright 2017 Pivotal Software, Inc. All rights Reserved.