SlideShare une entreprise Scribd logo
1  sur  78
하루에 10번 배포하기
Flickr의 개발자과 운영자의 협력 이야기



   John Allspaw & Paul Hammond
            Velocity 2009
30억장의 사진들
            초당 40000장의 사진
개발자 versus 운영자
“장비가 잘못된 게 아냐,
당신 코드가 이상 한거라구!!”
“코드가 잘못된게 아니고,
  장비가 이상한거야!”
약간 좀 괴상하다   스위치나 나사를 조이고 있다
 상사 가까이 앉아있다    쉽게 흥분한다.
너무 복잡하게 생각한다    장애가 발생하면 막 소리지른다
맨날 “안돼~~~”만 연발하고
신기술은 우리 사이트를 망쳐버릴 것이라고 무서워하며
      뭔 일만 터지면 남 탓만 하는…
운영자의 고정관념

      왜냐면 사이트는 갑자기
      예고 없이 죽으니까…




                     왜냐면 누구도 운영자에게
                     암것도 얘기 안해주니까…
왜냐면 걔네들은
맨날 안돼다고만 하니까…
전통적인 생각들


   개발자의 역할은 새로운 기능들을 추가하는 것이다.
운영자의 역할은 사이트를 안정적이고 빠르게 유지시키는 것이다.
운영자의 역할은 사이트를 안정적이고 빠르게 유지시키는 것이 아니다
운영자의 역할은 사업이 잘 돌아가게 하는 것이다
       (이것은 개발자의 역할이기도 하다)
사업은 언제나 변화를 요구한다
그러나 변화가 이 모든 일들의 원흉은 아니다
안정성을 위해서 변화를 거부하고
         또는
필요할 때마다 계속 변화를 요구하는 것?
여러 툴과 문화를 바꿔서
변화의 무서움을 이겨내야 한다
운영자처럼 생각하는 개발자
개발자 처럼 생각하는 운영자
“하지만 그건 내게 달렸어!”
여러분은 항상 더 다른 사람처럼 생각할 수 있어요!
Tools
1. Automated infrastructures
    만약에 오직 한가지 여러분이 할 수 있는 것을 꼽자면…
Chef            CFengine
              BCfg2             FAI
 1. Automated infrastructures
     만약에 오직 한가지 여러분이 할 수 있는 것을 꼽자면…




         System Imager

Puppet                       Cobbler
Role &
설정 관리

OS 이미지화
2. Shared version control
모든 사람들이
어디를 봐야 하는 지 안다.
3. One step build
3. One step build
  and deploy
누가? 언제? 무엇을?
작고 여러 번의 업데이트
4. Feature flag
 (일명 코드 브랜칭)
항상 trunk에 저장
모든 사람들이
어디를 봐야 하는 지 안다.
beta버전은 멤버들만
Dark launches
(UI 변경이 없고, perfomance 향상이 목적인 업데이트를 특정 사용자 집단에게만 노출해서 테스트)
5. Shared metrics
5. IRC and IM robots
개발자, 운영자 로봇이
서로 대화하는듯한 로그
Culture
1. Respect
만약에 오직 한가지 여러분이 할 수 있는 것을 꼽자면…
고정관념을 버려요
(모든 개발자가 게으른 건 아닙니다)
다른 사람들의 전문성과, 의견,
       책임을 인정해요.
그냥 “노”라고 대답하지 마세요
감추지 마세요
개발자 : 운영자에게 당신의 코드가 어떤 영향을 줄지 말해주고



  •   어떤 메트릭스가 변경되고, 어떻게 변경되었는지?
  •   리스크는 무엇인지?
  •   무언가 잘 못 돌아가게 되었을때의 징후는?
  •   contingencies는 어떤것 들이 있는지?


이것들은 운영자와 이야기 하기 전에 개발자 분들이 정리해야 하는 것입니다.
2. Trust
운영자는 새로운 기능에 있어서
개발자를 믿어줘야 하고,

개발자는 운영자가 제안하는
인프라의 변화를 믿어줘야합니다.



모든 사람들이 다른 사람들이 우리 사업을 위해서
최선을 다하고 있다는 것을 믿어줘야 합니다.
운영서와 escalation계획을 공유하세요
문고리나 레버들을 제공하세요
(조작가능한 포인트들)
운영자에게: 투명해져요
개발자에게 시스템에 들어갈 문을 만들어주세요.
3. 실패에 대한 의연한 태도
실패는 있습니다
만약 여러분이 모든 실패를 방지할 수 있다고 믿고 있다면,
여러분은 대응력을 개발하지 못하고 있는 겁니다
우리에게 필요한건,

비상사태 대비훈련
4. Avoiding Blame
손가락질 금지!
손가락질 프로세스
장애닷!
아악!!




   놀라기,    비난하     낑낑     문제    장
            기,     숨기,   파악하기   애
   묵비권,
           내 살길                 수
   잘못 찾기          자아보호
            찾기                  정
                                복
                                구
생산적인 프로세스
장애닷!
아악!!




    문제    장   죄책감    새삶
   파악하기   애   느끼기   살아가기
          수
          정
          복
          구
개발자들에게 : 당신의 코드가 붕괴되
면,, 누군가가 당신을 깨울 겁니다
운영자들에게:
현재 여러분의 두
통과 고통에 대해
서 건설적인 피드
백을 주세요.
1. Automated infrastructure
2. Shared version control
3. One step build and deploy
4. feature flags
5. shared metrics
6. IRC and IM robots

1. Respect
2. Trust
3. 실패에 대한 의연한 자세
4. Avoiding Blame
쉽지 않습니다.
그냥 서로에게 계속 소리지르면서 지낼 수도 있을 겁니다.
(감사합니다)

Contenu connexe

En vedette

Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리
Keon Ahn
 

En vedette (20)

DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
 
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 Netty
 
Fall in Love with Graphs and Metrics using Grafana
Fall in Love with Graphs and Metrics using GrafanaFall in Love with Graphs and Metrics using Grafana
Fall in Love with Graphs and Metrics using Grafana
 
Enterprise Docker
Enterprise DockerEnterprise Docker
Enterprise Docker
 
Grafana and MySQL - Benefits and Challenges
Grafana and MySQL - Benefits and ChallengesGrafana and MySQL - Benefits and Challenges
Grafana and MySQL - Benefits and Challenges
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
Icinga Camp Barcelona - Current State of Icinga
Icinga Camp Barcelona - Current State of IcingaIcinga Camp Barcelona - Current State of Icinga
Icinga Camp Barcelona - Current State of Icinga
 
Monitoring the #DevOps way
Monitoring the #DevOps wayMonitoring the #DevOps way
Monitoring the #DevOps way
 
Alexei Vladishev - Opening Speech
Alexei Vladishev - Opening SpeechAlexei Vladishev - Opening Speech
Alexei Vladishev - Opening Speech
 
Netflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open SourceNetflix Cloud Architecture and Open Source
Netflix Cloud Architecture and Open Source
 
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
Handling Eventual Consistency in JVM Microservices with Event Sourcing (javao...
 
Andrew Nelson - Zabbix and SNMP on Linux
Andrew Nelson - Zabbix and SNMP on LinuxAndrew Nelson - Zabbix and SNMP on Linux
Andrew Nelson - Zabbix and SNMP on Linux
 
Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리Puppet과 자동화된 시스템 관리
Puppet과 자동화된 시스템 관리
 
Yow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with NotesYow Conference Dec 2013 Netflix Workshop Slides with Notes
Yow Conference Dec 2013 Netflix Workshop Slides with Notes
 
Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015Zabbix 3.0 and beyond - FISL 2015
Zabbix 3.0 and beyond - FISL 2015
 
Stop using Nagios (so it can die peacefully)
Stop using Nagios (so it can die peacefully)Stop using Nagios (so it can die peacefully)
Stop using Nagios (so it can die peacefully)
 
DevOps와 자동화
DevOps와 자동화DevOps와 자동화
DevOps와 자동화
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
DevOps and Chef
DevOps and ChefDevOps and Chef
DevOps and Chef
 

Similaire à 하루에 10번 배포하기 - flickr

김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
성훈 김
 
[HARD CODE] 3. 비능률 박멸
[HARD CODE] 3. 비능률 박멸[HARD CODE] 3. 비능률 박멸
[HARD CODE] 3. 비능률 박멸
종빈 오
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
NAVER D2
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
devCAT Studio, NEXON
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
ChangKyu Song
 
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
Channy Yun
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
Minsuk Lee
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
NAVER D2
 

Similaire à 하루에 10번 배포하기 - flickr (20)

버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법김성훈 - 뛰어난 디버거가 되는 방법
김성훈 - 뛰어난 디버거가 되는 방법
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
[HARD CODE] 3. 비능률 박멸
[HARD CODE] 3. 비능률 박멸[HARD CODE] 3. 비능률 박멸
[HARD CODE] 3. 비능률 박멸
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011임태현, 서버점검 제로에의 도전, NDC2011
임태현, 서버점검 제로에의 도전, NDC2011
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
오픈소스 개발 방법론 - Mozilla 사례 중심 (2010)
 
소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT소스리딩워크샵 - NHN NEXT
소스리딩워크샵 - NHN NEXT
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
애자일 게임 개발: 현실 세계의 혼돈을 다루는 법 (Agile Game Development: Dealing With Chaos In Th...
 
커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님커뮤니티와 함께한 예비개발자 성장기- 조성수님
커뮤니티와 함께한 예비개발자 성장기- 조성수님
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
develop android app using intellij
develop android app using intellijdevelop android app using intellij
develop android app using intellij
 
EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다EMOCON 2015 - 품질과 테스트는 다르다
EMOCON 2015 - 품질과 테스트는 다르다
 
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
[오픈소스컨설팅]Session 6. scrum과 jira 기반의 소프트웨어 개발 프로세스
 

하루에 10번 배포하기 - flickr