사내 세미나 - 그루비 소개 발표자료
(2013. 11. 12)
최근에 파이썬 및 장고 프레임워크를 배워 간단한 웹 사이트를 구축한 이후, 우연히 그루비를 알게 되었고 자바의 모든 라이브러리 및 기능을 그대로 사용 할 수 있고, 자바 개발자의 경우 학습 비용도 거의 들지 않는다고 하여, 그루비에 대해 알아보게 되었다.
(파이썬의 경우 간결하고 깔끔한 코드에 감탄했지만, 새로운 언어를 사용하는 터라 기존의 자바 개발경험을 이용할 수 없었던 문제는 간단한 기능을 구현하는데에도 많이 답답하였다)
그리고 그렇게 알게 된 자료를 토대로 사내 세미나 발표자료를 만들어 보았다.
사내 세미나 - 그루비 소개 발표자료
(2013. 11. 12)
최근에 파이썬 및 장고 프레임워크를 배워 간단한 웹 사이트를 구축한 이후, 우연히 그루비를 알게 되었고 자바의 모든 라이브러리 및 기능을 그대로 사용 할 수 있고, 자바 개발자의 경우 학습 비용도 거의 들지 않는다고 하여, 그루비에 대해 알아보게 되었다.
(파이썬의 경우 간결하고 깔끔한 코드에 감탄했지만, 새로운 언어를 사용하는 터라 기존의 자바 개발경험을 이용할 수 없었던 문제는 간단한 기능을 구현하는데에도 많이 답답하였다)
그리고 그렇게 알게 된 자료를 토대로 사내 세미나 발표자료를 만들어 보았다.
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
OSS 포럼 개발자 교육 'Git/GitHub 입문하기 - 부산'에서 Git 실습에서 사용한 자료입니다. (http://onoffmix.com/event/69536)
지난 번 자료(http://www.slideshare.net/ssusercef361/git-github-62006866)는 구름 IDE를 활용해서 진행했고, 이번 자료는 Git 클라이언트를 설치해서 진행했습니다. GitHub 가입과 Git 클라이언트 설치는 강의 전 준비(http://www.slideshare.net/ssusercef361/github-git)를 참고해주세요.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
특정 폰트가 SlideShare.net에서 보이지 않는 관계로 모두 나눔고딕으로 통일했습니다.
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
Git 더하기 GitHub(Git클라이언트 활용) / Getting started with git+githubJunyoung Lee
OSS 포럼 개발자 교육 'Git/GitHub 입문하기 - 부산'에서 Git 실습에서 사용한 자료입니다. (http://onoffmix.com/event/69536)
지난 번 자료(http://www.slideshare.net/ssusercef361/git-github-62006866)는 구름 IDE를 활용해서 진행했고, 이번 자료는 Git 클라이언트를 설치해서 진행했습니다. GitHub 가입과 Git 클라이언트 설치는 강의 전 준비(http://www.slideshare.net/ssusercef361/github-git)를 참고해주세요.
1. Git과 Github
- 버전 관리?
- Git은 어쩌다 세상에 나왔나?
- Github?
2. Git 시작하기 - 실습
- 실습 준비 : Github, Goorm IDE 가입하기
- 리눅스 명령어와 친해지기
- Git 필수 개념 집고 넘어가기
- Step by Step Git 명령어 실습 (커밋, 브랜치, 원격 저장소 등)
- 옆자리 분과 Fork하고, Pull Request
3. Git과 Github 맛깔나게 활용하기
- Github의 협업 기능 살펴보기
- Github Page
- Gitbook
4. 있어보이는 Git 활용
- .git 디렉토리 살펴보기
- Git Branch 전략
- Commit Message 활용
특정 폰트가 SlideShare.net에서 보이지 않는 관계로 모두 나눔고딕으로 통일했습니다.
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
테크데이즈 코리아 2014 에서 "The Future of C# and .NET Framework"라는 제목으로 발표한 슬라이드 입니다. 관련 동영상 : http://www.microsoftvirtualacademy.com/training-courses/-techdays-korea-2014-t14
이 발표는 [야생의 땅: 듀랑고]의 지형 배포 시스템과 생태계 시뮬레이션 자동화 시스템에 대한 이야기를 다룹니다. 듀랑고의 각 섬은 크기와 지형, 기후 조건이 다양하고 섬의 개수가 많아서 수동으로 관리하는 것은 사실상 불가능합니다. 몇번의 사내 테스트와 베타 테스트를 거치면서 이러한 문제를 해결해주는 자동화된 도구의 필요성이 절실해졌고, 작년에 NDC에서 발표했던 생태계 시뮬레이터와 Docker, 그리고 아마존 웹서비스(AWS)를 이용하여 수많은 섬들을 자동으로 생성하고 관리하는 자동화 시스템을 구축하게 되었습니다. 그 과정에서 했던 고민들, 기존의 애플리케이션을 "Dockerizing" 했던 경험, AWS의 각 서비스들을 적절히 활용했던 이야기, AWS의 각 지역별 요금이 상이하다는 점을 이용해서 비용을 절감한 사례, 그리고 자동화 시스템의 문제점과 앞으로의 방향에 대해서 이야기 할 계획입니다.
10. Why Go?
• Problem 1: System Scale
• designed to scale to 10⁶⁺ machines
• everyday jobs run on 1000s of machines
• jobs coordinate, interact with others in the system
• lots going on at once
• Solution: great support for concurrency
• Problem 2: Engineering Scale
• 5000+ developers across 40+ offices
• 20+ changes per minute
• 50% of code base changes every month
• 50 million test cases executed per day
• single code tree
• Solution: design the language for large code bases
11. Who uses Go at Google?
• Hundreds of projects. Thousands of Go programmers. Millions of lines of Go code.
• Public examples:
• Flywheel: SPDY proxy for Chrome on mobile devices
• dl.google.com: Download server for Chrome, ChromeOS, Android SDK, Earth, etc.
• Vitess: YouTube MySQL balancer
• Seesaw: Linux Virtual Server (LVS) based load balancer
• Lingo: Logs analysis in Go, migrated from Sawzall
• The target is networked servers, but Go is a great general-purpose language.
13. 2016 Skills On the Rise
http://www.payscale.com/data-packages/job-skills?utm_content=bufferf478a&utm_medium=social&utm_source=linkedin.com&utm_campaign=buffer
14. • 빠른 개발속도
• 모듈화를 위한 의존성
• 정적타입이지만 동적타입 언어의 속성도 가진 언어
• 가비지 컬렉션 (Garbage Collection) // No VM
• 쉬운 병렬처리 (Parallelism)
• 빠른 컴파일 속도
• 소스코드 UTF-8
The feature of Go
15. • No classes
• No inheritance
• No constructors
• No final
• No exceptions
• No annotations
• No user-defined generics
Not the feature of Go
16. Go 는 Object-Oriented 언어인가?
• 맞기도 하고 아니기도 하다.
• http://golang.org/doc/faq#Is_Go_an_object-oriented_language
• 아닌 이유
• 상속관계가 없다. No subclass
• 맞는 이유
• object-oriented 스타일의 프로그래밍을 허용한다. interface제공.
• object-oriented 스타일의 프로그래밍?
• 상속은 제공하지 않으며 interface만 제공.
• implements"라는 선언 필요없음.
• 단순히 해당 인터페이스의 메소드를 구현하기만 하면 인터페이스 사용가능
20. Fast compilation times
• 빠른 컴파일 속도는 Go의 설계 목표중 하나였다.
• 문법이 compiler가 분석하기 용이하게 설계되었고 symbol table없이 구문분석이 가
• Go는 각각의 파일에서 선언한 패키지를 사용하지 않으면 에러가 발생하므로
종속성 트리를 계산하는게 효율적이다.
• Go는 templates과 선언파일(ex .h) 이없다.
• 패키지들이 선형종속성이므로 병렬 컴파일 가능.
21. • gc compiler
• gccgo compiler
gcc is required only if you plan to use cgo.
34. Go루틴(Goroutines)
• OS 쓰레드보다 경량화된 Go 쓰레드
• 같은 메모리 공간을 공유해서 다른 Goroutines을 병렬로 실행한다.
• 스택에서 작은 메모리로 시작 필요에 따라 힙 메모리에 할당/해제
• 프로그래머는 쓰레드를 처리하지 않고 마찬가지로 OS도 Goroutine의 존재를 모른
• OS관점에서는 Goroutine은 C program의 event-driven형식처럼 작동한다.
35. Goroutines vs OS threads
Goroutines OS threads
Memory consumption 2kb 1mb
Setup and teardown
costs
pretty cheap high-priced
Switching costs
(saved/restored)
Program Counter,
Stack Pointer and DX.
ALL registers, that is, 16 general
purpose registers, PC (Program
Counter), SP (Stack Pointer),
segment registers, 16 XMM
registers, FP coprocessor state,
16 AVX registers, all MSRs etc.Goroutine stack size was decreased from 8kB to 2kB in Go 1.4.
36. Goroutines blocking
• network input
• sleeping
• channel operations or
• blocking on primitives in the sync package.
• call function (case by case)
53. Five things that make Go fast
• Values
• Inlining
• Escape Analysis
• Goroutines
• segmented/copying stacks.
http://dave.cheney.net/2014/06/07/five-things-that-make-go-fast
54. Escape analysis
• Funtion안에 변수가 레퍼런스 타입으로 선언되었는지에 따라 영향받음.
• 만약 레퍼런스 타입이 아니라면 변수는 스택에 안전하게 저장할 수 있다
• 스택에 저장되어있는 값은 할당과 해제 할 필요없다.
http://dave.cheney.net/2014/06/07/five-things-that-make-go-fast
57. Memory model
• Go에서 각 변수는 참조가 존재하는 한 계속 남아 있다.
• 가능하면 Go 컴파일러는 변수를 함수의 스택 프레임(stack frame)에 있는
함수에 지역변수로 할당한다.
• 컴파일러가 함수가 리턴되고 난 후에 변수가 참조되지 않는다는 것을 증명할
수 없다면 컴파일러는 dangling pointer 오류를 피하기 위해서 가비지 콜렉션
이 되는 힙에 변수를
할당해야만 한다.