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/
개발-빌드-테스트-배포-피드백
•장점
• (베타 지만) VM이 아닌 Linux 환경을 제공 함
• Linux에서 Windows의 파일을 바로 접근 할 수 있음
• Windows의 각 드라이브는 /mnt/<drive>/ 경로로 매핑.
• (Windows) C:test.txt == (Linux) /mnt/c/test.txt
• VBoxSDK 같은 걸 쓰지 않아도, 자동화 하기 편리함
• > bash.exe –c “echo ‘Hello, World!’”
개발-빌드-테스트-배포-피드백
•덕분에
• Windows에서 본인에게 편한 에디터를 사용.
• Visual Studio, PyCharm, gVim(?), …
• 서버는 Linux 환경을 보장 받음.
• 다른 직군이 쉽게 서버를 로컬 배포할 수 있도록,
GUI로 된 쓰기 편한 자동 설정 도구를 제공
개발-빌드-테스트-배포-피드백
•덕분에
• Windows에서 본인에게 편한 에디터를 사용.
• Visual Studio, PyCharm, gVim(?), …
• 서버는 Linux 환경을 보장 받음.
• 다른 직군이 쉽게 서버를 로컬 배포할 수 있도록,
GUI로 된 쓰기 편한 자동 설정 도구를 제공
개발-빌드-테스트-배포-피드백
GitLab CI
•GitLab에서 제공하는 내장형 CI
•저장소의 .gitlab-ci.yml을 통해 빌드 파이프라인을 구성
•Travis CI를 만져본 경험이 있다면, 비슷하게 사용 가능
•설치형 GitHub+Travis CI같은 경험을 느낄 수 있다.
개발-빌드-테스트-배포-피드백
정해진 기준
•효율이 상대적으로 높은, Python 스크립트로 재 작성
•3번 이상 들어온 요구사항은 자동화 대상
•기능을 모듈식으로 나누어서 조립해 사용할 수 있게 한다
•명령어를 몰라도 쓸 수 있게 한다
개발-빌드-테스트-배포-피드백
Python CLI 빌드 툴
•Python을 이용하여 빌드용 All-In-One CLI 툴을 제작
•앞에서 정한 ‘기능’이 하위 명령어가 된다.
•쉘에서 간단하게 빌드의 모든 과정을 수행가능!
$ wbuild <update|build|upload|…> [options]
개발-빌드-테스트-배포-피드백
Jenkins, MultiJob Plugin
•최소 단위인 Job을 연결해서 Pipeline을 만들어 준다.
•CLI의 기능별 Job을 연결해, 레고 조립하듯 빌드를
만들어내는 커다란 Job을 구축.
개발-빌드-테스트-배포-피드백
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
환경 설정 Android 빌드 업로드 알림
환경 설정 iOS 어셋 빌드 업로드
개발-빌드-테스트-배포-피드백
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
개발-빌드-테스트-배포-피드백
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
여전히 최소 단위 Job은 프로그래머의 의존성이 필요..
개발-빌드-테스트-배포-피드백
사라지지 않는 의존성
“방금 만든 브랜치의 버전의 빌드가 필요해요“
“업로드 저장소를 정리했어요, 업로드만 새로 해주세요“
여전히 최소 단위 Job은 프로그래머의 의존성이 필요..
어? 그런데 새로운 기능은 아니다!
개발-빌드-테스트-배포-피드백
Jenkins, Build With Parameters Plugin
•주관식, 객관식의 파라미터를 입력 받을 수 있게 해 줌.
•Jenkins의 기능 Job의 재사용성을 늘릴 수 있게 되었음.
•모든 파라미터는 환경변수로 오기 때문에,
자주 쓰는 파라미터는
새로운 빌드 Job으로 생성 가능
개발-빌드-테스트-배포-피드백
Jenkins, Rebuild Plugin
•앞에서 소개한 ‘Build With Parameters Plugin’와 함께
사용하면 좋은 플러그인
•같은 조건으로 빌드를 재시도할 경우, 파라미터를 다시 넣는
게 꽤 귀찮은 일이다.
•버튼 하나로 해결!
개발-빌드-테스트-배포-피드백
Jenkins, Log Parser Plugin
•로그를 파싱 해서 보기 좋게 정제해 보여준다.
•파싱 룰은 정규식으로 작성 가능
개발-빌드-테스트-배포-피드백
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/
개발-빌드-테스트-배포-피드백
매일 자동으로 돌아가는 빌드일 경우
빌드가 깨지면, 대부분 프로그래밍 오류다.
이 경우에 문제를 빠르게 파악하는데 도움이 된다.
문제를 전달하는 사람도 “빌드가 깨졌어요” 보다 더 좋은 정보를
제공해줄 수 있게 된다.
개발-빌드-테스트-배포-피드백
얻은 이점: 최소한의 프로그래머 의존성
•프로그래머는 실제로 빌드에 문제가 생긴 경우를 제외하고,
최소한의 의존성만 가지게 됨
•마일스톤 막바지에 프로그래머를 찾는 일이 적어짐
• 생산성 향상
•프로그래머 없이 원하는 형태의 빌드를 생성 가능
개발-빌드-테스트-배포-피드백
번외: Jenkins, Blue Ocean 1.0
• 발표 자료를 만들다 보니 어느새 정식 버전이!
• 파이프라인 에디터를 지원 한다고 하니, 새로 도입하시는 분들은 고려해
보실 만 하겠습니다.
• 일단 예쁘기도 하고
개발-빌드-테스트-배포-피드백
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()
개발-빌드-테스트-배포-피드백
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()
개발-빌드-테스트-배포-피드백
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
개발-빌드-테스트-배포-피드백
Docker를 fixture로 만들어 사용
• Docker instance를 띄우고, 사용 후 제거하는 fixture.
• 테스트를 위한 1회용 docker같은 느낌으로 쓸 수 있다.
• Unit Test를 넘어서 Integration Test로 확장 가능
개발-빌드-테스트-배포-피드백
$ 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.
코드로 관리하기 때문에
• 누구든지 인프라 배포 가능
• 똑같은 설정의 인프라를 쉽게 생성 가능
• 버전 관리가 되므로, 인프라의 의도를 전달받을 수 있음
• 사용자의 실수 방지
개발-빌드-테스트-배포-피드백
T-Rex Factor
코드로 관리하기 때문에
• 누구든지 인프라 배포 가능
• 똑같은 설정의 인프라를 쉽게 생성 가능
• 버전 관리가 되므로, 인프라의 의도를 전달받을 수 있음
• 사용자의 실수 방지
• 마지막 작업자를 공룡이 물어가도 안심!
개발-빌드-테스트-배포-피드백
로그 스트리밍 시스템
•(EFK) Elasticsearch, fluentd, Kibana 스택으로 구성
Game Server
Game Server
…
Kinesis
Lambda
Lambda
S3 S3 (parquet)EMR
Elasticsearch
Service
개발-빌드-테스트-배포-피드백
EMR (Zeppelin)
Kibana
•앞에서 모은 로그를 Kibana를 통해 실시간 쿼리
•실시간으로 로그를 통해, 현재 상태를 짐작할 수 있다.
개발-빌드-테스트-배포-피드백
Zeppelin
• 정제 해 놓은 로그를 바탕으로 쿼리
• 지나간 로그를 바탕으로 통계 등을 내기가 쉽다.
• 대시 보드의 접근성이 좋아, 게임 디자이너가 원하는 지표를 직접
쿼리
개발-빌드-테스트-배포-피드백
Datadog
•모니터링 서비스
•서버의 실시간 메트릭을 전송
•원하는 시점의 커스텀 메트릭 그래프를 만들 수 있다.
• 서버 별 동접, 섬 별 동물 수, 서버 간 동기화 빈도, …
• 서버의 상황을 파악하고 새로운 관점을 알게 해준다
개발-빌드-테스트-배포-피드백