배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
AWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
배민찬(https://www.baeminchan.com) 서비스의 백엔드 시스템 중 일부가 지난 1년간 어떤 고민과 아이디어, 결과물을 만들어냈는지 공유하려고 합니다. 발표 중 언급되는 용어나 도구에 대해 일반적인 정의나 간단한 설명은 언급되나 자세히 다루지 않습니다. 사용된 도구들로 어떻게 이벤트 기반 분산 시스템을 만들었는지에 대한 이야기가 중심입니다.
AWS를 사용하는 게임 고객사를 대상으로 ‘Amazon GameLift 세션’ 을 준비했습니다.
GameLift는 클라우드에서 세션 기반 멀티플레이 게임 서버를 배포, 운영, 조정하는 데 사용되는 완전 관리형 서비스로, 본 행사에서는 Amazon GameLift를 이용한 세션형 1:1 게임 배포 실습을 진행합니다.
2017년 3월 22일 re:View 1st Impact
"코드리뷰를 시작하려는 그대에게" 세션 발표 내용입니다
자세한 행사 내용은 아래 링크를 참고해주시기 바랍니다 ^^
https://reviewmeetup.wordpress.com/2017/03/11/review-1st-impact-20170322/
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
넷플릭스에서는 높은 속도로 데이터를 제공하기 위해서 뿐만 아니라 멀티 리전의 데이터 가용성을 바탕으로한 전체 서비스 가용성 유지를 위해 캐시를 사용하고 있습니다. 이 앞의 세션에서 보았던 마이크로서비스 구조를 염두해 둘때 한가지 가장 간단한 변화는 외부 클라이언트로 부터 유입되는 단 하나의 요청에 대한 응답을 만들기 위해 다수의 내부 서비스들로 부터 데이터를 확보해야 하며, 이는 다수 서비스들에 대한 요청과 응답으로 이루어지게 됩니다. 내부 네트워크 성능, 데이터 저장소의 응답속도등의 복합적인 영향으로 인해 마이크로 서비스는 쉽게 느려질 수 있으며, 이는 보통 '팬아웃 효과'로 알려져 있습니다. 뿐만 아니라 다수 서비스간의 데이터 정합성 유지, 필요에 따라 각 서비스간 데이터의 다운타임 없는 이동, 증가하는 데이터량에 동시에 증가하는 데이터 소스의 부하, 그리고 이런 것들을 모두 감안한 데이터 복제 등을 처리해야 할 필요가 있습니다. 본 세션에서는 넷플릭스에서는 이런 문제를 어떤 방식으로 해결하는지, 그리고 스프링 부트, 스프링 클라우드를 비롯한 피보탈의 기술을 사용해서 어떻게 빠르고 쉽게 사용할 수 있는지에 대해 알아봅니다.
[17.02.09] Github introduction (Korean Version)Ildoo Kim
Git 혹은 소스코드 형상관리를 아예 모르는 사람을 대상으로 작성한 Starter Guide입니다. 팀에 새로운 사람이 Join하는 등의 경우에 세미나 자료로 활용합니다.
형상관리/git 개념과 command line 혹은 source tree를 활용한 기본적인 사용 방법에 대해 소개합니다.
<팀을>이라는 책을 많이 참고하였습니다.
2017년 3월 22일 re:View 1st Impact
"코드리뷰를 시작하려는 그대에게" 세션 발표 내용입니다
자세한 행사 내용은 아래 링크를 참고해주시기 바랍니다 ^^
https://reviewmeetup.wordpress.com/2017/03/11/review-1st-impact-20170322/
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
서비스 런칭을 위해 라이온하트와 카카오게임즈가 어떻게 최적 성능의 인스턴스를 선택하고, Windows 운영 체제를 최적화하며, 왜 Amazon Aurora를 기본 데이터베이스로 채택하였는지를 설명합니다. 또한, 출시부터 운영까지의 과정에서 MMORPG가 어떻게 AWS 상에서 설계되고, 게임 서버 성능을 극대할 수 있었는지에 대해 전달해드립니다.
넷플릭스에서는 높은 속도로 데이터를 제공하기 위해서 뿐만 아니라 멀티 리전의 데이터 가용성을 바탕으로한 전체 서비스 가용성 유지를 위해 캐시를 사용하고 있습니다. 이 앞의 세션에서 보았던 마이크로서비스 구조를 염두해 둘때 한가지 가장 간단한 변화는 외부 클라이언트로 부터 유입되는 단 하나의 요청에 대한 응답을 만들기 위해 다수의 내부 서비스들로 부터 데이터를 확보해야 하며, 이는 다수 서비스들에 대한 요청과 응답으로 이루어지게 됩니다. 내부 네트워크 성능, 데이터 저장소의 응답속도등의 복합적인 영향으로 인해 마이크로 서비스는 쉽게 느려질 수 있으며, 이는 보통 '팬아웃 효과'로 알려져 있습니다. 뿐만 아니라 다수 서비스간의 데이터 정합성 유지, 필요에 따라 각 서비스간 데이터의 다운타임 없는 이동, 증가하는 데이터량에 동시에 증가하는 데이터 소스의 부하, 그리고 이런 것들을 모두 감안한 데이터 복제 등을 처리해야 할 필요가 있습니다. 본 세션에서는 넷플릭스에서는 이런 문제를 어떤 방식으로 해결하는지, 그리고 스프링 부트, 스프링 클라우드를 비롯한 피보탈의 기술을 사용해서 어떻게 빠르고 쉽게 사용할 수 있는지에 대해 알아봅니다.
[17.02.09] Github introduction (Korean Version)Ildoo Kim
Git 혹은 소스코드 형상관리를 아예 모르는 사람을 대상으로 작성한 Starter Guide입니다. 팀에 새로운 사람이 Join하는 등의 경우에 세미나 자료로 활용합니다.
형상관리/git 개념과 command line 혹은 source tree를 활용한 기본적인 사용 방법에 대해 소개합니다.
<팀을>이라는 책을 많이 참고하였습니다.
7. 1
콘텐츠
목차
content
Pull Request 관점에서의 코드 리뷰
Pull Request의 아쉬운점
2 Stacked Changes 관점에서의 코드 리뷰
Stacked changes란 무엇인가?
3 Graphite
너도 Stacked changes 할 수 있어!
4 결론
코드 리뷰를 잘 한다는 것
13. comment - 서버 로직 생성
oldest commit
oldest commit
commit (main)
comment - API endpoint 생성
main
feature/add-comment
“댓글 기능을 만들어 주세요”
14. comment - 프론트 컴포넌트 생성
oldest commit
oldest commit
commit (main)
comment - 서버 로직 생성
comment - API endpoint 생성
main
feature/add-comment
“댓글 기능을 만들어 주세요”
15. oldest commit
oldest commit
commit (main)
이전 작업에서 난 오타 수정
comment - 프론트 컴포넌트 생성
comment - 서버 로직 생성
comment - API endpoint 생성
main
feature/add-comment
“댓글 기능을 만들어 주세요”
16. oldest commit
oldest commit
commit (main)
이전 작업에서 난 오타 수정
line changed: +1500 / -200
comment - 프론트 컴포넌트 생성
comment - 서버 로직 생성
comment - API endpoint 생성
main
feature/add-comment
“댓글 기능을 만들어 주세요”
17. 이 과정 안 개발자들
작업자
프론트
리뷰어
댓글 코드 리뷰 빨리 끝나야
그 다음 작업 하는데…
도대체 리뷰 언제 해주는거야
코드… +1500 -200
어디서부터 봐야하는겨…
난 프론트만 봐야지…
그래도 양이…
막막하다…
18. 변경 내용이 왜 커졌던 걸까
작업 과정 수 많은
고민들과 커밋들
기능을 나누는 기준은?
오타 수정과 같은
아주 작은 단위의 수정은 어떻게 하지?!
한번 받을 때 한꺼번에 리뷰 받는게
빠를 것 같은데?!
작업마다 매번 main
돌아가서 새 branch
만들기 귀찮아 ㅠㅠ
main
feature/add-comment
점심 뭐 먹지??
19. 변경 내용이 왜 커졌던 걸까
main
feature/add-comment
리뷰어가 만난 것
20. 변경 내용이 왜 커졌던 걸까… 그 결과
이슈 못찾음
https://twitter.com/iamdevloper/status/397664295875805184
21. 리뷰 할 내용이 커지면…그 결과
코드 리뷰하기 매우 부담
작은 수정에도 모든 코드가 “리뷰 중” 상태
코드 리뷰 속도 느려짐
22. 코드 리뷰가 길어지면…그 결과
다른 작업 과의 충돌 가능성이 높아짐
코드 롤백 시, 모든 작업이 다 롤백
심적 부담감 증가
26. oldest commit
commit
comment - API endpoint 생성 (ft-add-comment-api)
line changed: +10 / -3
흐름을 좌우가 아닌 아래에서 위로!
oldest commit
27. oldest commit
commit
oldest commit
comment - API endpoint 생성 (ft-add-comment-api)
line changed: +10 / -3
comment - 서버 로직 생성 (ft-add-comment-logic)
line changed: +20 / -15
구현 하나 하나 Stack 쌓듯이
28. comment - API endpoint 생성 (ft-add-comment-api)
line changed: +10 / -3
comment - 서버 로직 생성 (ft-add-comment-logic)
line changed: +20 / -15
oldest commit
commit
oldest commit
comment - 프론트 컴포넌트 생성 (ft-comment-comp)
line changed: +150 / -35
구현 하나 하나 Stack 쌓듯이
29. Stacked Changes
comment - API endpoint 생성 (ft-add-comment-api)
line changed: +10 / -3
comment - 서버 로직 생성 (ft-add-comment-logic)
line changed: +20 / -15
comment - 프론트 컴포넌트 생성 (ft-comment-comp)
line changed: +150 / -35
sequence of dependent code changes
tested, reviewed, and merged independently
30. Stacked Changes 장점
comment - API endpoint 생성 (ft-add-comment-api)
line changed: +10 / -3
comment - 서버 로직 생성 (ft-add-comment-logic)
line changed: +20 / -15
comment - 프론트 컴포넌트 생성 (ft-comment-comp)
line changed: +150 / -35
코드 변경 크기 📉
작업의 명확성 📈
리뷰 속도 📈
32. 구글의 Gerrit, 메타의 phabricator
• Google internal로 사용하다가 Android Open
Source Project를 지원하기 위해 오픈
• 단위 : Patch set
• Patch set 단위로 코드 리뷰
• Facebook internal로 시작 후 외부로 공개
• Meta, Twitter, Dropbox, Uber 등에서 사용중
• LLVM, FireFox 프로젝트에서 사용중
• 단위 : Differential
39. Graphite
open-source CLI and a code review dashboard
write and review smaller pull requests, stay unblocked, and ship faster.
https://graphite.dev/
40. Graphite
open-source CLI and a code review dashboard
write and review smaller pull requests, stay unblocked, and ship faster.
https://graphite.dev/
41. comment - API endpoint 생성 (ft-add-comment-api)
line changed: +50 / -25
comment - 서버 로직 생성 (ft-add-comment-logic)
line changed: +200 / -15
oldest commit
commit
oldest commit
comment - 프론트 컴포넌트 생성 (ft-comment-comp)
line changed: +150 / -35
Graphite로 직접 stacked changes 해봅시다
66. Pull Requests
결론
Stacked Changes
From `main` branch
기능 단위 변경
작업 전체 변경분 비교
Changes를 `main` 과 비교
From previous changes
코드 변화 단위 변경
Stack 별로 비교
Changes를 차곡 차곡 쌓이는 것
67. 결론
여러 팀이 함께 작업하는 경우
잦은 리뷰 처리가 어려운 경우
작은 변경이 많은 경우
팀이 빠르게 움직이고자 하는 경우
Pull Requests Stacked Changes