ݺߣ

ݺߣShare a Scribd company logo
김용환
#카카오스토리 #DevOps #Practical #CI/CD #NoSQL
카카오스토리의
DevOps 사례
1
순서
발표자 소개
카카오 스토리 소개
DevOps란?
카카오 스토리를 지탱하는 DevOps 환경
카카오 스토리의 테스트/배포 환경
2
발표자 소개
 공부용으로 김용환 블로그(http://knight76.tistory.com) 작성
 하루에 2,000 View 이상
 NIPA 소프트웨어공학센터 기고
 대용량 캐시/형상 관리/오픈 소스 거버넌스/WEB,WAS 표준화
 업무 : 임베디드, 웹/백엔드 개발, 플랫폼 기획/개발, WEB/WAS튜닝, 생산성
혁신활동(SQE), 서비스 개발, 클라우드
 다녀본 회사
3
발표자 소개 – 번역, 그림, 사진
 번역 출간 (7권)
 『Ansible 설정 관리』(2015),
 『ElasticSearch Cookbook 2/e』(2016),
 『Redis 핵심정리』(2016),
 『일래스틱서치 입문과 활용』(2016),
 『CentOS 7 리눅스 서버 쿡북』(2016),
 『하이브 핵심정리』(2017),
 『일래스틱서치 살펴보기』(2017.9 출간 예정)
 번역 출간 예정 (5권)
 High Performance Scala
 Fast Data Processing Systems with SMACK Stack
 Shell Programming in Unix, Linux and OS X
 Learning Cassandra
 Scala and Spark for Big Data Analytics
4
카카오 스토리 소개 5
2017 소셜 미디어 이용 행태 및
광고 접촉 태도 분석 보고(2017.7)
출처 : http://www.itworld.co.kr/news/105506
6
카카오 스토리 서버 개발 접근 방식
 기능(Function)
 데이터 모델링
 동작 구현/테스트
 Since(from/to)
 단순화
 트래픽(Traffic)
 캐시(Write Through/Write Back)
 용량(Capacity)
 샤딩(Sharding) 전략
 백업(Backup) 전략
• 지속적인 모니터링/로깅
• 고객 문의
• 마이그레이션(Migration)
• 양쪽 저장(Dual Write Functionality)
• 모델링
• NoSQL 성격에 맞게
• 생성일/변경일
• 반정규화(denormalization)
• 에러/성능/장애 튜닝
• Hotspotting
• 큰 장애가 오기 전에 신호가 옴. 미리 파악
해두는 것이 좋음(Cassandra/Hbase 사례)
평상시에 미리 공부를 하고 있어야 함
7
DevOps란?
 Dev과 Ops 조직이 하나로 구성
 일반적으로 명시된 역할 또는 직책의 범위를 넘어 서비스에 대한 완전한 주인의식을 갖음
 전체 개발과 인프라 수명 주기를 스스로의 책임으로 간주함
 빠른 속도로 서비스를 제공(Time To Market, 새로운 릴리즈의 더 낮은 실패율, 빠른 장애 복
구)
 조직의 역량을 향상시키는 문화, 철학, 도구의 조합
 반복적인 개선, 혁신
 효율적, 유지보수성이 높음 -> 속도,자동화(Automation) 강조
8
DevOps를 지탱하는 요소(발표자 관점)
 사람 : 능력이 있고 책임감을 갖고 있는 DevOps 개발자/
관리자(리더십)
 테스트/배포 환경 : 개발 산출물을 바로 빌드/ 배포할 수
있는 환경
 인프라 : 환경, 시스템, 지원 조직, 문화
사람
인프라
테스트 /
배포 환경
9
DevOps 툴 체인
계획
버전
콘트롤
빌드 테스트 배포 추적
• 자동화된 빌드 / 테스트 수행을 통해 지속적인 기능 추가, 품질
개선 시간이 단축
• 상용 환경 테스트 환경이 완료되면 언제든지 배포될 수 있는 배
포 환경
10
카카오 스토리 서버 환경
 대용량 트래픽과 빅 데이터를 처리
 스토리지 : 다양한 NoSQL(zookeeper, redis, memcached, resque, elasticsearch,
mongodb, cassandra, hbase, hadoop, kafka),
MySQL DB
 언어 : Java/Spring(주요 언어), Scala/Spark, Python, Ruby, R
 DevOps 개발자 인원 : 1x명
 QA 엔지니어 인원 : 없음
11
카카오 스토리 DevOps 환경
 API 서버
 배포 자동화 툴(로컬 배포 가능)
 빌드/테스트 환경
 로컬 / CI 서버
 지표 공유, 테스트, 배포, 모니터링 정보를 카카오톡으로 자동으로 받음
 업무 소통은 카카오톡으로 진행
 단위 및 회귀 테스팅 환경
12
카카오 스토리 DevOps 버전 콘트롤 환경
 소스 관리
 저장소 : GitHub
 브랜치 정책 : Git Flow와 Github Flow의 중간 상태
 Merge를 최소화하고 간결화한 상태
 브랜치 : develop/master/feature만 사용
 로컬/알파 환경 : develop
 베타/상용 환경 : master
13
카카오 스토리 DevOps 운영 환경
알파 상용베타
develop develop master master
14
일반 회사의 DevOps 테스팅 환경
 개발하기 어려운 상황
 특정 사람에 의존적
 테스팅 환경(CI)의 부재
 로컬 테스트 환경이 없음
 잘 모르는 운영 환경에 대한 두려움
 코드 따로 문서 따로
 상상 코딩 / 상상 배포 / 배포했다가 롤백하는 정책
개발은 더 이상 리팩토링을 하지 못하고
더 이상 개선하지 못하고 지속적인 발전을 이룰 수 없음
15
카카오 스토리 DevOps 테스팅 환경
 개발할 만한 환경
 테스팅 환경(CI)
 로컬 테스트 환경
 운영 환경을 미리 예상
 테스트 환경에서 충분한 테스트
 단위 테스트/회귀 테스트 코드는 DevOps가 직접 작성
 문서 업데이트 속도는 코드의 속도를 따라올 수 없어서 지금까지 정리된 문서와 코드를 각각 봐야하
는데, 테스트 코드는 문서화와 코드의 중간 가교 역할도 가능
Innovation!
16
최신 테스팅 추세 –
Specification by Example
 리빙 도큐멘테이션은..
 리빙 도큐멘테이션은 이해하기 쉬워야 한다
 리빙 도큐멘테이션은 일관성이 있어야 한다
 접근하기 쉽게 구성해야 한다
 명세의 변경 없이 검증 자동화하기
 테스트는 좋은 문서가 될 수 있다
 명세는 설명이 필요 없을 만큼 자명해야 한다
 최근 미국에서는 회귀 테스트, 기능 테스트라는 단
어 대신 Specification by Example이라 표현
17
로컬(PC) 테스트 환경
RSpec(based on Ruby)
카카오 스토리
서버 컴포넌트
18
RSpec
 Ruby 기반
 명세서는 자연어와 비슷하고 읽기 쉬어야 함
 명세서 기반의 BDD(Behaviour Driven
Development)
 Mocking 지원
 Open Stack( IaaS 형태의 클라우드 컴퓨팅 오
픈 소스 프로젝트)에서도 사용
19
RSpec 예제
it ’feed 테스트' do
user1.subscribe(”samuel”)
user2.subscribe(“alice”)
user1.make_friend(user2)
user1.post(“스토리 가입했다!”)
feed_result = user2.feed
expect(feed_result[0].content).to equal(“스토리 가입했다!”)
end
20
리눅스 테스팅 클러스터 환경
Docker
RSpec(based on Ruby)
자동 배포 (Continuous Deployment)
카카오 스토리
서버 컴포넌트
21
리눅스 테스팅 클러스터 환경
 웹과 앱 환경에 맞춰진 테스팅 환경 구성
 개발 환경/상용 환경은 다르게 구성
 다양한 git 브랜치 테스트 가능
 테스트 서버 확장성
 빠른 속도
22
리눅스 테스팅 클러스터 자동화 환경
버전 콘트롤 저장소
소스 커밋
개발자
알림
빌드/
유닛 테스트
Continuous Integration
빌드/유닛 테스트
성공
빌드/유닛 테스트
실패
3,000+ 회귀 테스트
회귀 테스트 실패 서버(알파) 배포
10분
23
회귀 테스트 최적화 방법
소스 변경시
젠킨스 실행
자바 소스 컴파일,
도커에 자바 빌드
산출물 복사
RSpec 테스트 RSpec 결과 수집
도커 이미지 생성과
컴포넌트 추가
도커 이미지를 도커
사설 저장소에 저장
젠킨스 서버에
도커 이미지 배포
젠킨스 테스트
도커 사설
저장소
워커 장비
버전 콘트롤
저장소
업로드 도커 이미지 배포
테스트 실행
소스 다운로드
테스트용 도커 이미지 생성
도커 다운로드
테스트 결과 얻음
24
회귀 테스트 최적화 방법 - 아키텍처
#group1
1. 빌드/유닛 테스트 완료
젠킨스 회귀 테스트
Multi-job
젠킨스 플러그인
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
#group2
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
#group N
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
Worker-1-1
4. Job(도커 기반 RSpec) 실행
5. 각 Job의 부분 테스트 결과를 저장
서버(알파) 배포
6. 결과 집계
2. 플러그인 실행
테스트 장비
7. 성공하면
배포
3. 이전 테스트 정보를 기반으로
미리 분배된 Job 정보를 읽음
25
감사합니다
26

More Related Content

What's hot (17)

Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
Open Source Consulting
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
SeungYong Baek
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
NAVER D2
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
Open Source Consulting
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
KTH, 케이티하이텔
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
현승 배
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST_NHNent
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
NAVER D2
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
[233]멀티테넌트하둡클러스터 남경완
[233]멀티테넌트하둡클러스터 남경완[233]멀티테넌트하둡클러스터 남경완
[233]멀티테넌트하둡클러스터 남경완
NAVER D2
Docker Container
Docker ContainerDocker Container
Docker Container
Seung-Hoon Baek
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop
rockplace
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER
형근 송
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
Chanwoong Kim
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님
NAVER D2
[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성[122]네이버의모던웹라이브러리 박재성
[122]네이버의모던웹라이브러리 박재성
NAVER D2
[오픈소스컨설팅]인프라 자동화 도구 Chef
[오픈소스컨설팅]인프라 자동화 도구  Chef[오픈소스컨설팅]인프라 자동화 도구  Chef
[오픈소스컨설팅]인프라 자동화 도구 Chef
Open Source Consulting
[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)[17.01.19] docker introduction (Korean Version)
[17.01.19] docker introduction (Korean Version)
Ildoo Kim
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
[H3 2012] 앱(APP) 중심으로 생각하기 - DevOps와 자동화
KTH, 케이티하이텔
FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발FCGI, C++로 Restful 서버 개발
FCGI, C++로 Restful 서버 개발
현승 배
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST_NHNent
Quic을 이용한 네트워크 성능 개선
 Quic을 이용한 네트워크 성능 개선 Quic을 이용한 네트워크 성능 개선
Quic을 이용한 네트워크 성능 개선
NAVER D2
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
[233]멀티테넌트하둡클러스터 남경완
[233]멀티테넌트하둡클러스터 남경완[233]멀티테넌트하둡클러스터 남경완
[233]멀티테넌트하둡클러스터 남경완
NAVER D2
JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop JBoss EAP on Azure Workshop
JBoss EAP on Azure Workshop
rockplace
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER
형근 송
[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영[215]네이버콘텐츠통계서비스소개 김기영
[215]네이버콘텐츠통계서비스소개 김기영
NAVER D2
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
Chanwoong Kim
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님
NAVER D2

Viewers also liked (8)

속도체크
속도체크속도체크
속도체크
knight1128
ScalaBlitz
ScalaBlitzScalaBlitz
ScalaBlitz
Aleksandar Prokopec
Scala Parallel Collections
Scala Parallel CollectionsScala Parallel Collections
Scala Parallel Collections
Aleksandar Prokopec
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
상욱 송
Redis: Lua scripts - a primer and use cases
Redis: Lua scripts - a primer and use casesRedis: Lua scripts - a primer and use cases
Redis: Lua scripts - a primer and use cases
Redis Labs
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Rahul Krishna Upadhyaya
LinkedIn Data Infrastructure (QCon London 2012)
LinkedIn Data Infrastructure (QCon London 2012)LinkedIn Data Infrastructure (QCon London 2012)
LinkedIn Data Infrastructure (QCon London 2012)
Sid Anand
Redis: Lua scripts - a primer and use cases
Redis: Lua scripts - a primer and use casesRedis: Lua scripts - a primer and use cases
Redis: Lua scripts - a primer and use cases
Redis Labs
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Openstack Rally - Benchmark as a Service. Openstack Meetup India. Ananth/Rahul.
Rahul Krishna Upadhyaya
LinkedIn Data Infrastructure (QCon London 2012)
LinkedIn Data Infrastructure (QCon London 2012)LinkedIn Data Infrastructure (QCon London 2012)
LinkedIn Data Infrastructure (QCon London 2012)
Sid Anand

Similar to Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례) (20)

소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
Terry Cho
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
cho hyun jong
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
Amazon Web Services Korea
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
Joongi Kim
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
Jaesuk Ahn
Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"
Lablup Inc.
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_s
Seong-Bok Lee
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
Ji-Woong Choi
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
Amazon Web Services Korea
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나 DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
Amazon Web Services Korea
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
OpenStack Korea Community
ԾDzԷɱ로젝트
ԾDzԷɱ로젝트ԾDzԷɱ로젝트
ԾDzԷɱ로젝트
Dong-Jin Park
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
Software in Life
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
Open Source Consulting
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
Seung kyoo Park
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
Amazon Web Services Korea
오픈스택데이 오픈소스PaaS 솔루션 - openshift 소개
오픈스택데이   오픈소스PaaS 솔루션 - openshift 소개오픈스택데이   오픈소스PaaS 솔루션 - openshift 소개
오픈스택데이 오픈소스PaaS 솔루션 - openshift 소개
Hojoong Kim
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Jeongkyu Shin
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
Amazon Web Services Korea
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
Terry Cho
올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud올챙이로 살펴보는 개발툴과 Cloud
올챙이로 살펴보는 개발툴과 Cloud
cho hyun jong
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
클라이드 네이티브 기반 Twelve Factor 앱 개발 - 윤석찬, AWS 테크에반젤리스트 :: AWS Summit Online Kore...
Amazon Web Services Korea
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
Joongi Kim
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
세션5_데보션테크데이_1_MSA와 오픈소스의 중요성 - OSC Korea(이제응) - v2...
Jaesuk Ahn
Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"Lablupconf session8 "Paving the road to AI-powered world"
Lablupconf session8 "Paving the road to AI-powered world"
Lablup Inc.
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_s
Seong-Bok Lee
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
[오픈소스컨설팅]오픈소스 클라우드 개발플랫폼_및_Docker의_이해_v1
Ji-Woong Choi
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
Amazon Web Services Korea
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나 DevOps를 위한 AWS 서비스 및 개발도구  -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
DevOps를 위한 AWS 서비스 및 개발도구 -김상필 솔루션아키텍트 :: AWS 파트너 테크시프트 세미나
Amazon Web Services Korea
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
[OpenInfra Days Korea 2018] (Track 3) Software Defined Infrastructure 전략 및 사례
OpenStack Korea Community
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
Software in Life
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
Terry Cho
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
[발표자료] 오픈소스 기반 클라우드 네이티브 애플리케이션 구축 방안 (feat. Kubernetes)
Open Source Consulting
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
ᅡᆱᄋƵᄑƧᆫᅵᅳᆫ_ᆨᄋƦᆫᅳƢᄇơᆯᅡᅵᅵᆨ.
Seung kyoo Park
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
AWS Code 서비스 특집 - 아마존 DevOps와 CodeDeploy, CodePipeline (윤석찬)
Amazon Web Services Korea
오픈스택데이 오픈소스PaaS 솔루션 - openshift 소개
오픈스택데이   오픈소스PaaS 솔루션 - openshift 소개오픈스택데이   오픈소스PaaS 솔루션 - openshift 소개
오픈스택데이 오픈소스PaaS 솔루션 - openshift 소개
Hojoong Kim
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Jeongkyu Shin
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
데브옵스(DevOps) 문화 모범 사례와 구현 도구 살펴보기 – 박선준 :: AWS Builders Online Series
Amazon Web Services Korea

More from knight1128 (17)

Apache Thrift
Apache ThriftApache Thrift
Apache Thrift
knight1128
Spring MVC 3 Restful
Spring MVC 3 RestfulSpring MVC 3 Restful
Spring MVC 3 Restful
knight1128
Jersey framework
Jersey frameworkJersey framework
Jersey framework
knight1128
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
knight1128
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
knight1128
Jdk(java) 7 - 6 기타기능
Jdk(java) 7 - 6 기타기능Jdk(java) 7 - 6 기타기능
Jdk(java) 7 - 6 기타기능
knight1128
Jdk 7 4-forkjoin
Jdk 7 4-forkjoinJdk 7 4-forkjoin
Jdk 7 4-forkjoin
knight1128
공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin
knight1128
공유 Jdk 7-1-short introduction
공유 Jdk 7-1-short introduction공유 Jdk 7-1-short introduction
공유 Jdk 7-1-short introduction
knight1128
아마존 Aws 서비스_연구
아마존 Aws 서비스_연구아마존 Aws 서비스_연구
아마존 Aws 서비스_연구
knight1128
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
knight1128
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상
knight1128
Spring MVC 3 Restful
Spring MVC 3 RestfulSpring MVC 3 Restful
Spring MVC 3 Restful
knight1128
Google Protocol buffer
Google Protocol bufferGoogle Protocol buffer
Google Protocol buffer
knight1128
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
knight1128
Jdk(java) 7 - 6 기타기능
Jdk(java) 7 - 6 기타기능Jdk(java) 7 - 6 기타기능
Jdk(java) 7 - 6 기타기능
knight1128
공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin공유 Jdk 7-2-project coin
공유 Jdk 7-2-project coin
knight1128
공유 Jdk 7-1-short introduction
공유 Jdk 7-1-short introduction공유 Jdk 7-1-short introduction
공유 Jdk 7-1-short introduction
knight1128
아마존 Aws 서비스_연구
아마존 Aws 서비스_연구아마존 Aws 서비스_연구
아마존 Aws 서비스_연구
knight1128
오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유오픈소스를 활용한 Batch_처리_플랫폼_공유
오픈소스를 활용한 Batch_처리_플랫폼_공유
knight1128
Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상Ssl 하드웨어 가속기를 이용한 성능 향상
Ssl 하드웨어 가속기를 이용한 성능 향상
knight1128

Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례)

  • 1. 김용환 #카카오스토리 #DevOps #Practical #CI/CD #NoSQL 카카오스토리의 DevOps 사례 1
  • 2. 순서 발표자 소개 카카오 스토리 소개 DevOps란? 카카오 스토리를 지탱하는 DevOps 환경 카카오 스토리의 테스트/배포 환경 2
  • 3. 발표자 소개  공부용으로 김용환 블로그(http://knight76.tistory.com) 작성  하루에 2,000 View 이상  NIPA 소프트웨어공학센터 기고  대용량 캐시/형상 관리/오픈 소스 거버넌스/WEB,WAS 표준화  업무 : 임베디드, 웹/백엔드 개발, 플랫폼 기획/개발, WEB/WAS튜닝, 생산성 혁신활동(SQE), 서비스 개발, 클라우드  다녀본 회사 3
  • 4. 발표자 소개 – 번역, 그림, 사진  번역 출간 (7권)  『Ansible 설정 관리』(2015),  『ElasticSearch Cookbook 2/e』(2016),  『Redis 핵심정리』(2016),  『일래스틱서치 입문과 활용』(2016),  『CentOS 7 리눅스 서버 쿡북』(2016),  『하이브 핵심정리』(2017),  『일래스틱서치 살펴보기』(2017.9 출간 예정)  번역 출간 예정 (5권)  High Performance Scala  Fast Data Processing Systems with SMACK Stack  Shell Programming in Unix, Linux and OS X  Learning Cassandra  Scala and Spark for Big Data Analytics 4
  • 6. 2017 소셜 미디어 이용 행태 및 광고 접촉 태도 분석 보고(2017.7) 출처 : http://www.itworld.co.kr/news/105506 6
  • 7. 카카오 스토리 서버 개발 접근 방식  기능(Function)  데이터 모델링  동작 구현/테스트  Since(from/to)  단순화  트래픽(Traffic)  캐시(Write Through/Write Back)  용량(Capacity)  샤딩(Sharding) 전략  백업(Backup) 전략 • 지속적인 모니터링/로깅 • 고객 문의 • 마이그레이션(Migration) • 양쪽 저장(Dual Write Functionality) • 모델링 • NoSQL 성격에 맞게 • 생성일/변경일 • 반정규화(denormalization) • 에러/성능/장애 튜닝 • Hotspotting • 큰 장애가 오기 전에 신호가 옴. 미리 파악 해두는 것이 좋음(Cassandra/Hbase 사례) 평상시에 미리 공부를 하고 있어야 함 7
  • 8. DevOps란?  Dev과 Ops 조직이 하나로 구성  일반적으로 명시된 역할 또는 직책의 범위를 넘어 서비스에 대한 완전한 주인의식을 갖음  전체 개발과 인프라 수명 주기를 스스로의 책임으로 간주함  빠른 속도로 서비스를 제공(Time To Market, 새로운 릴리즈의 더 낮은 실패율, 빠른 장애 복 구)  조직의 역량을 향상시키는 문화, 철학, 도구의 조합  반복적인 개선, 혁신  효율적, 유지보수성이 높음 -> 속도,자동화(Automation) 강조 8
  • 9. DevOps를 지탱하는 요소(발표자 관점)  사람 : 능력이 있고 책임감을 갖고 있는 DevOps 개발자/ 관리자(리더십)  테스트/배포 환경 : 개발 산출물을 바로 빌드/ 배포할 수 있는 환경  인프라 : 환경, 시스템, 지원 조직, 문화 사람 인프라 테스트 / 배포 환경 9
  • 10. DevOps 툴 체인 계획 버전 콘트롤 빌드 테스트 배포 추적 • 자동화된 빌드 / 테스트 수행을 통해 지속적인 기능 추가, 품질 개선 시간이 단축 • 상용 환경 테스트 환경이 완료되면 언제든지 배포될 수 있는 배 포 환경 10
  • 11. 카카오 스토리 서버 환경  대용량 트래픽과 빅 데이터를 처리  스토리지 : 다양한 NoSQL(zookeeper, redis, memcached, resque, elasticsearch, mongodb, cassandra, hbase, hadoop, kafka), MySQL DB  언어 : Java/Spring(주요 언어), Scala/Spark, Python, Ruby, R  DevOps 개발자 인원 : 1x명  QA 엔지니어 인원 : 없음 11
  • 12. 카카오 스토리 DevOps 환경  API 서버  배포 자동화 툴(로컬 배포 가능)  빌드/테스트 환경  로컬 / CI 서버  지표 공유, 테스트, 배포, 모니터링 정보를 카카오톡으로 자동으로 받음  업무 소통은 카카오톡으로 진행  단위 및 회귀 테스팅 환경 12
  • 13. 카카오 스토리 DevOps 버전 콘트롤 환경  소스 관리  저장소 : GitHub  브랜치 정책 : Git Flow와 Github Flow의 중간 상태  Merge를 최소화하고 간결화한 상태  브랜치 : develop/master/feature만 사용  로컬/알파 환경 : develop  베타/상용 환경 : master 13
  • 14. 카카오 스토리 DevOps 운영 환경 알파 상용베타 develop develop master master 14
  • 15. 일반 회사의 DevOps 테스팅 환경  개발하기 어려운 상황  특정 사람에 의존적  테스팅 환경(CI)의 부재  로컬 테스트 환경이 없음  잘 모르는 운영 환경에 대한 두려움  코드 따로 문서 따로  상상 코딩 / 상상 배포 / 배포했다가 롤백하는 정책 개발은 더 이상 리팩토링을 하지 못하고 더 이상 개선하지 못하고 지속적인 발전을 이룰 수 없음 15
  • 16. 카카오 스토리 DevOps 테스팅 환경  개발할 만한 환경  테스팅 환경(CI)  로컬 테스트 환경  운영 환경을 미리 예상  테스트 환경에서 충분한 테스트  단위 테스트/회귀 테스트 코드는 DevOps가 직접 작성  문서 업데이트 속도는 코드의 속도를 따라올 수 없어서 지금까지 정리된 문서와 코드를 각각 봐야하 는데, 테스트 코드는 문서화와 코드의 중간 가교 역할도 가능 Innovation! 16
  • 17. 최신 테스팅 추세 – Specification by Example  리빙 도큐멘테이션은..  리빙 도큐멘테이션은 이해하기 쉬워야 한다  리빙 도큐멘테이션은 일관성이 있어야 한다  접근하기 쉽게 구성해야 한다  명세의 변경 없이 검증 자동화하기  테스트는 좋은 문서가 될 수 있다  명세는 설명이 필요 없을 만큼 자명해야 한다  최근 미국에서는 회귀 테스트, 기능 테스트라는 단 어 대신 Specification by Example이라 표현 17
  • 18. 로컬(PC) 테스트 환경 RSpec(based on Ruby) 카카오 스토리 서버 컴포넌트 18
  • 19. RSpec  Ruby 기반  명세서는 자연어와 비슷하고 읽기 쉬어야 함  명세서 기반의 BDD(Behaviour Driven Development)  Mocking 지원  Open Stack( IaaS 형태의 클라우드 컴퓨팅 오 픈 소스 프로젝트)에서도 사용 19
  • 20. RSpec 예제 it ’feed 테스트' do user1.subscribe(”samuel”) user2.subscribe(“alice”) user1.make_friend(user2) user1.post(“스토리 가입했다!”) feed_result = user2.feed expect(feed_result[0].content).to equal(“스토리 가입했다!”) end 20
  • 21. 리눅스 테스팅 클러스터 환경 Docker RSpec(based on Ruby) 자동 배포 (Continuous Deployment) 카카오 스토리 서버 컴포넌트 21
  • 22. 리눅스 테스팅 클러스터 환경  웹과 앱 환경에 맞춰진 테스팅 환경 구성  개발 환경/상용 환경은 다르게 구성  다양한 git 브랜치 테스트 가능  테스트 서버 확장성  빠른 속도 22
  • 23. 리눅스 테스팅 클러스터 자동화 환경 버전 콘트롤 저장소 소스 커밋 개발자 알림 빌드/ 유닛 테스트 Continuous Integration 빌드/유닛 테스트 성공 빌드/유닛 테스트 실패 3,000+ 회귀 테스트 회귀 테스트 실패 서버(알파) 배포 10분 23
  • 24. 회귀 테스트 최적화 방법 소스 변경시 젠킨스 실행 자바 소스 컴파일, 도커에 자바 빌드 산출물 복사 RSpec 테스트 RSpec 결과 수집 도커 이미지 생성과 컴포넌트 추가 도커 이미지를 도커 사설 저장소에 저장 젠킨스 서버에 도커 이미지 배포 젠킨스 테스트 도커 사설 저장소 워커 장비 버전 콘트롤 저장소 업로드 도커 이미지 배포 테스트 실행 소스 다운로드 테스트용 도커 이미지 생성 도커 다운로드 테스트 결과 얻음 24
  • 25. 회귀 테스트 최적화 방법 - 아키텍처 #group1 1. 빌드/유닛 테스트 완료 젠킨스 회귀 테스트 Multi-job 젠킨스 플러그인 Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 #group2 Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 #group N Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 Worker-1-1 4. Job(도커 기반 RSpec) 실행 5. 각 Job의 부분 테스트 결과를 저장 서버(알파) 배포 6. 결과 집계 2. 플러그인 실행 테스트 장비 7. 성공하면 배포 3. 이전 테스트 정보를 기반으로 미리 분배된 Job 정보를 읽음 25