SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
52.
그림 출처: https://gifamerica.com/categories/view/de2da6dc70721cc940d774355e74ad6e341275be/rainbow-throw-up-gif.html
개발-빌드-테스트-배포-피드백
53.
Windows Subsystem for Linux (WSL)
• (Bash on Ubuntu on Windows)
• Windows 10의 Linux 호환 레이어
• Anniversary Update (build 14393) 부터 지원
https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/
개발-빌드-테스트-배포-피드백
56.
•장점
• (베타 지만) VM이 아닌 Linux 환경을 제공 함
• Linux에서 Windows의 파일을 바로 접근 할 수 있음
• Windows의 각 드라이브는 /mnt/<drive>/ 경로로 매핑.
• (Windows) C:test.txt == (Linux) /mnt/c/test.txt
• VBoxSDK 같은 걸 쓰지 않아도, 자동화 하기 편리함
• > bash.exe –c “echo ‘Hello, World!’”
개발-빌드-테스트-배포-피드백
57.
•덕분에
• Windows에서 본인에게 편한 에디터를 사용.
• Visual Studio, PyCharm, gVim(?), …
• 서버는 Linux 환경을 보장 받음.
• 다른 직군이 쉽게 서버를 로컬 배포할 수 있도록,
GUI로 된 쓰기 편한 자동 설정 도구를 제공
개발-빌드-테스트-배포-피드백
58.
•덕분에
• Windows에서 본인에게 편한 에디터를 사용.
• Visual Studio, PyCharm, gVim(?), …
• 서버는 Linux 환경을 보장 받음.
• 다른 직군이 쉽게 서버를 로컬 배포할 수 있도록,
GUI로 된 쓰기 편한 자동 설정 도구를 제공
개발-빌드-테스트-배포-피드백
76.
GitLab CI
•GitLab에서 제공하는 내장형 CI
•저장소의 .gitlab-ci.yml을 통해 빌드 파이프라인을 구성
•Travis CI를 만져본 경험이 있다면, 비슷하게 사용 가능
•설치형 GitHub+Travis CI같은 경험을 느낄 수 있다.
개발-빌드-테스트-배포-피드백
85.
정해진 기준
•효율이 상대적으로 높은, Python 스크립트로 재 작성
•3번 이상 들어온 요구사항은 자동화 대상
•기능을 모듈식으로 나누어서 조립해 사용할 수 있게 한다
•명령어를 몰라도 쓸 수 있게 한다
개발-빌드-테스트-배포-피드백
86.
Python CLI 빌드 툴
•Python을 이용하여 빌드용 All-In-One CLI 툴을 제작
•앞에서 정한 ‘기능’이 하위 명령어가 된다.
•쉘에서 간단하게 빌드의 모든 과정을 수행가능!
$ wbuild <update|build|upload|…> [options]
개발-빌드-테스트-배포-피드백
87.
Jenkins
•설치형 오픈소스 CI 도구
Continuous Integration
개발-빌드-테스트-배포-피드백
88.
Jenkins
•설치형 오픈소스 CI 도구
플러그인이 엄청나게 많은!
Continuous Integration
개발-빌드-테스트-배포-피드백
89.
Jenkins, MultiJob Plugin
•최소 단위인 Job을 연결해서 Pipeline을 만들어 준다.
•CLI의 기능별 Job을 연결해, 레고 조립하듯 빌드를
만들어내는 커다란 Job을 구축.
개발-빌드-테스트-배포-피드백
90.
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
91.
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
92.
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
93.
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
개발-빌드-테스트-배포-피드백
94.
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
여전히 최소 단위 Job은 프로그래머의 의존성이 필요..
개발-빌드-테스트-배포-피드백
95.
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
여전히 최소 단위 Job은 프로그래머의 의존성이 필요..
어? 그런데 새로운 기능은 아니다!
개발-빌드-테스트-배포-피드백
96.
Jenkins, Build With Parameters Plugin
•주관식, 객관식의 파라미터를 입력 받을 수 있게 해 줌.
•Jenkins의 기능 Job의 재사용성을 늘릴 수 있게 되었음.
•모든 파라미터는 환경변수로 오기 때문에,
자주 쓰는 파라미터는
새로운 빌드 Job으로 생성 가능
개발-빌드-테스트-배포-피드백
99.
Android iOS
결과물 업로드 X
알림 X
빌드
개발-빌드-테스트-배포-피드백
100.
Android iOS
결과물 업로드 X
알림 X
빌드
개발-빌드-테스트-배포-피드백
101.
Android iOS
결과물 업로드 X
알림 X
빌드
개발-빌드-테스트-배포-피드백
102.
Android iOS
결과물 업로드 X
알림 X
빌드
개발-빌드-테스트-배포-피드백
103.
Android iOS
결과물 업로드 X
알림 X
빌드
완료
개발-빌드-테스트-배포-피드백
104.
Jenkins, Rebuild Plugin
•앞에서 소개한 ‘Build With Parameters Plugin’와 함께
사용하면 좋은 플러그인
•같은 조건으로 빌드를 재시도할 경우, 파라미터를 다시 넣는
게 꽤 귀찮은 일이다.
•버튼 하나로 해결!
개발-빌드-테스트-배포-피드백
105.
Jenkins, Log Parser Plugin
•로그를 파싱 해서 보기 좋게 정제해 보여준다.
•파싱 룰은 정규식으로 작성 가능
개발-빌드-테스트-배포-피드백
106.
ok /not really/
# match line starting with 'error ', case-insensitive
error /(?i)^error /
# list of warnings here...
warning /[Ww]arning/
warning /WARNING/
# create a quick access link to lines in the report containing 'INFO'
info /INFO/
개발-빌드-테스트-배포-피드백
108.
매일 자동으로 돌아가는 빌드일 경우
빌드가 깨지면, 대부분 프로그래밍 오류다.
이 경우에 문제를 빠르게 파악하는데 도움이 된다.
문제를 전달하는 사람도 “빌드가 깨졌어요” 보다 더 좋은 정보를
제공해줄 수 있게 된다.
개발-빌드-테스트-배포-피드백
109.
얻은 이점: 최소한의 프로그래머 의존성
•프로그래머는 실제로 빌드에 문제가 생긴 경우를 제외하고,
최소한의 의존성만 가지게 됨
•마일스톤 막바지에 프로그래머를 찾는 일이 적어짐
• 생산성 향상
•프로그래머 없이 원하는 형태의 빌드를 생성 가능
개발-빌드-테스트-배포-피드백
110.
번외: Jenkins, Blue Ocean 1.0
• 발표 자료를 만들다 보니 어느새 정식 버전이!
• 파이프라인 에디터를 지원 한다고 하니, 새로 도입하시는 분들은 고려해
보실 만 하겠습니다.
• 일단 예쁘기도 하고
개발-빌드-테스트-배포-피드백
111.
테스트 • pytest
• Travis CI
• coveralls.io
개발-빌드-테스트-배포-피드백
112.
pytest: helps you write better programs
개발-빌드-테스트-배포-피드백
113.
Unittest vs pytest
# built-in unittest
def sum(a, b):
return a + b
def is_odd(num):
return num % 2 == 0
class TestFoo(TestCase):
def test_sum(self):
self.assertEqual(sum(1, 2), 3)
def test_odd(self):
self.assertTrue(is_odd(10))
# pytest
def sum(a, b):
return a + b
def is_odd(num):
return num % 2 == 0
def test_sum():
assert sum(1, 2) == 3
def test_odd():
assert is_odd(10)
개발-빌드-테스트-배포-피드백
114.
Unittest vs pytest
# built-in unittest
def sum(a, b):
return a + b
def is_odd(num):
return num % 2 == 0
class TestFoo(TestCase):
def test_sum(self):
self.assertEqual(sum(1, 2), 3)
def test_odd(self):
self.assertTrue(is_odd(10))
# pytest
def sum(a, b):
return a + b
def is_odd(num):
return num % 2 == 0
def test_sum():
assert sum(1, 2) == 3
def test_odd():
assert is_odd(10)
개발-빌드-테스트-배포-피드백
123.
pytest, fixture finalizer
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp(request):
smtp = smtplib.SMTP("smtp.gmail.com")
yield smtp # provide the fixture value
print("teardown smtp")
smtp.close()
개발-빌드-테스트-배포-피드백
124.
pytest, fixture finalizer
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp(request):
smtp = smtplib.SMTP("smtp.gmail.com")
yield smtp # provide the fixture value
print("teardown smtp")
smtp.close()
개발-빌드-테스트-배포-피드백
125.
pytest, fixture finalizer
import smtplib
import pytest
@pytest.fixture(scope="module")
def smtp(request):
smtp = smtplib.SMTP("smtp.gmail.com")
yield smtp # provide the fixture value
print("teardown smtp")
smtp.close()
Teardown flow
개발-빌드-테스트-배포-피드백
126.
Docker를 fixture로 만들어 사용
• Docker instance를 띄우고, 사용 후 제거하는 fixture.
• 테스트를 위한 1회용 docker같은 느낌으로 쓸 수 있다.
• Unit Test를 넘어서 Integration Test로 확장 가능
개발-빌드-테스트-배포-피드백
148.
$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
No changes. Infrastructure is up-to-date.
This means that Terraform did not detect any differences between your
configuration and real physical resources that exist. As a result, Terraform
doesn't need to do anything.
155.
Game Server
DB
…
Dev
Game Server
DB
…
Production
Game Server
DB
…Staging
손쉬운 개발 환경 추가
Game Server
DB
…
?
개발-빌드-테스트-배포-피드백
156.
코드로 관리하기 때문에
• 누구든지 인프라 배포 가능
• 똑같은 설정의 인프라를 쉽게 생성 가능
• 버전 관리가 되므로, 인프라의 의도를 전달받을 수 있음
• 사용자의 실수 방지
개발-빌드-테스트-배포-피드백
157.
T-Rex Factor
코드로 관리하기 때문에
• 누구든지 인프라 배포 가능
• 똑같은 설정의 인프라를 쉽게 생성 가능
• 버전 관리가 되므로, 인프라의 의도를 전달받을 수 있음
• 사용자의 실수 방지
• 마지막 작업자를 공룡이 물어가도 안심!
개발-빌드-테스트-배포-피드백
165.
로그 스트리밍 시스템
•(EFK) Elasticsearch, fluentd, Kibana 스택으로 구성
Game Server
Game Server
…
Kinesis
Lambda
Lambda
S3 S3 (parquet)EMR
Elasticsearch
Service
개발-빌드-테스트-배포-피드백
EMR (Zeppelin)
166.
Kibana
•앞에서 모은 로그를 Kibana를 통해 실시간 쿼리
•실시간으로 로그를 통해, 현재 상태를 짐작할 수 있다.
개발-빌드-테스트-배포-피드백
167.
Zeppelin
• 정제 해 놓은 로그를 바탕으로 쿼리
• 지나간 로그를 바탕으로 통계 등을 내기가 쉽다.
• 대시 보드의 접근성이 좋아, 게임 디자이너가 원하는 지표를 직접
쿼리
개발-빌드-테스트-배포-피드백
168.
Datadog
•모니터링 서비스
•서버의 실시간 메트릭을 전송
•원하는 시점의 커스텀 메트릭 그래프를 만들 수 있다.
• 서버 별 동접, 섬 별 동물 수, 서버 간 동기화 빈도, …
• 서버의 상황을 파악하고 새로운 관점을 알게 해준다
개발-빌드-테스트-배포-피드백