[유니티 로드쇼 2017] 아이펀팩토리가 전국 개발자 여러분을 찾아갑니다!

아이펀팩토리가 ‘유니티 로드쇼 2017(Unity Roadshow 2017)’의 외부 강연자로 전국의 개발자 여러분을 찾아갑니다!

오는 10월 17일 부산을 시작으로 전국 6개 도시에서 개최되는 유니티 로드쇼에서 아이펀팩토리가 함께 하는 기술 강연! 생생한 개발 실무와 노하우를 들을 수 있는 기회를 놓치지 마세요!

★ 강연시간: 전국 6개 지역 14:50~15:20
★ 강연제목:
쾌적한 서비스 운영을 위한 모니터링 시스템 구축
★ 강연소개:
게임 서버의 성능 지표 모니터링은 실제 라이브 단계에서 뿐만 아니라, 게임 출시 전 스트레스 테스트 단계에서 잠재적인 병목을 찾아내기 위해서도 필요한 기능입니다. 성능 지표 모니터링은 크게 OS 수준에서의 성능 지표, 서버 프로세스 수준에서의 성능 지표, 그리고 게임 수준에서의 성능 지표로 구분할 수 있습니다. 이 발표에서는 이 중 내부 counter 를 이용해 게임 수준에서의 성능 지표 모니터링을 구현하고 이를 활용하는 방법에 대해서 설명합니다.

 온라인홍보2

당신의 서비스에서 모두의 프라이버시 지키기

에드워드 스노든이 2013년에 내부 고발한 NSA의 광범위한 사찰까지 얘기 하지 않아도 ISP, 통신사나 여러분의 고용주가 컴퓨터 네트워크 위의 통신을 들여다보는 일은 비일비재하다. 하지만 조금만 더 노력을 기울이면 이런 프라이버시를 침해하는 일을 막거나 훨씬 어렵게 만들 수 있다. 이 글에서는 표준 프로토콜인 SSL/TLS를 어떻게 일반적인 웹 서버 프로세스나 응용 프로그램 프로세스에 적용할지 설명한다.

SSL/TLS

요즘의 웹 / 네트워크 환경에서는 인터넷 위로 통신하는 부분의 안전성을 위해서 TLS (transport layer security) 를 사용한다. 많은 곳에서 SSL (secure socket layer)이라고 부른다. 하지만 가장 나중 버전인 SSL v3 도 IETF에서 2016에 나온 RFC 7568에서 사용을 피하고 TLS v1.2 를 쓰라고 한다. 그래서 이 글에서는 TLS 라는 용어로 지칭하겠다.

TLS 가 제공하는 것

크게 다음 세 가지 기능을 제공한다.
• 인증 (authentication): 지금 통신 중인 서버가 연결하려고 한 서버가 맞는지 확인
• 보안 (confidentiality): 주고 받는 메시지를 남이 해독할 수 없게 변환
• 무결성 (integrity): 주고 받는 메시지를 남이 조작했는지 확인

TLS 표현 방식

wikipedia-tls.png

파이어폭스에서 확인한 위키 TLS 설정
구글 크롬이나 파이어폭스의 보안 탭을 열어보면 — 혹은 다른 OpenSSL 기반의 설정을 해봤다면 — 아래와 같은 문자열을 볼 수 있다. (아래 예는 위키백과 접속했을 때 사용한 알고리즘이다)
ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
대략 아래와 같은 의미이다.

• ECDHE 키교환: 타원곡선 디피-헬만 알고리즘 (ephemeral 키 방식)
• ECDSA 인증서 알고리즘: 타원곡선을 이용한 디지털 서명 알고리즘
• CHACHA20 스트림 암호화: 메시지를 암호화할 때 CHACHA20 스트림 암호화 알고리즘
Poly1305 MAC, SHA-256 HMAC: 메시지 무결성 검증 알고리즘 두 가지

TLS 표기 방식의 의미

인증을 담당하는 부분은 여기서 ECDSA 하나에 해당한다. 이 부분은 해당 웹 사이트에서 제공하는 인증서 서명 알고리즘에 해당한다.
보안에 해당하는 부분은 키 교환메시지 암호화 (블럭 혹은 스트림 암호화) 에 해당하는 ECDHE 와 Chacha20이다.
무결성 검증을 위해서 사용한 부분이 MAC에 해당하는 Poly1305 와 SHA-256 알고리즘이다.
이 중에서 보안무결성 보장을 위해서 사용한 부분은 웹 서버나 응용 프로그램에서 설정하는 부분이다. 즉, 아파치 웹 서버나 nginx 설정을 하다보면 설정해야하는 부분이다. 모질라 재단에서 제공하는 웹 서버용 권장 설정이나 권장 암호화 알고리즘 목록 의 모범 설정 예시를 참고하면 좋다. 이에 대해서는 이전 블로그 글에서 설명했다.

TLS 인증 기능?

TLS 의 (서버 쪽) 인증 기능은 서버 설정만으로 동작하지 않는다. TLS의 인증 기능이 어떻게 동작하는지 아래에서 살펴보겠다.

TLS 인증서

TLS 인증서는 아주 간단히 말하면 “믿을 수 있는 누군가가 특정 형식으로 전자 서명한 공개키” 다. 여기서 “믿을 수 있는 누군가” 에 해당하는 역할을 담당하는게 “인증 기관” 이다. 그리고 특정 형식에 해당하는게 X.509 형식이다.
주의할 점은 믿을 수 있는 누군가 에 대해서는 강제적인 합의가 있는 것이 아니라서, 웹 브라우저 / OS에 따라서 특정 인증 기관을 신뢰할 수도 있고, 신뢰하지 않을 수도 있다. 예를 들어 올해 초에 한국 전자 인증 (crosscert) 에서 권한없이 인증서를 발급해서 모질라 재단 쪽에서 문제를 재기했고, 이에 대해 관리/모니터링할 책임이 있는 시만텍 인증서 사업 부문에 대한 조사가 이뤄졌다. 그 결과 구글 크롬과 모질라 파이어폭스에선 조만간 시만텍에서 발급한 서버 인증서를 모두 신뢰하지 않게 된다.

전자 서명 구조

전자 서명은 단순히 특정 키 + 서명 형식이 아니고, 공개키 인프라 (PKI) 를 이용해서 키를 단계적으로 서명한다. 우선 인증 기관들의 공개키를 루트 인증서 (root certificate) 이라고 한다. 이 루트 인증서는 웹 브라우저나 운영 체제 수준에서 포함하고 있다. 그리고 이 루트 인증서로 서명한 중간 단계 인증서 (intermediate certificate) 혹은 이걸로 다시 서명한 인증서를 생성한다. 이렇게 몇 단계를 거쳐서 생성한 서명키(=공개키)로 실제 웹 서버의 인증서(=공개키)를 전자 서명 알고리즘으로 서명하면 TLS 인증서가 완성된다. 즉, 서버의 TLS 인증서에는 루트 인증서 바로 아래에 있는 서명키부터, 서버의 공개키까지를 포함한다.
그리고 이런 루트 인증 기관, 혹은 이를 대행하는 인증 기관들은 이런 공개키 서명할 때 비용을 청구한다. 흔히 “인증서 발급 비용” 이라고 말하는게 이런 부분이다.

자가 서명 인증서

인증 기관을 통하지 않고 스스로 서명한 인증서 (self-signed certificate) 를 만들 수도 있다. 하지만, 해당 인증서는 클라이언트 프로그램 (웹 브라우저 혹은 게임 클라이언트 등등) 에서 확인할 방법이 없어서 절대로 피해야 한다. 대안은 무엇일까? 공짜로 인증서를 만들 순 없을까?

공짜로 인증서를 만들 방법은 없을까?

서두에서 언급한것처럼 스노든의 내부 고발 이후로 프라이버시에 대한 관심/걱정은 대폭 증가했고, 2014년에 전자 프런티어 재단 (EFF), 모질라 재단, 미시건 주립대 등이 참여해서 Let’s Encrypt 라는 새로운 CA 를 만들었다. Let’s Encrypt 의 설립 목적이 “자동화된 방법”으로, “비용없이” 원하는 모두에게 TLS 인증서를 발급하는 것이라, 대부분의 경우에서 사용할 수 있는 인증서쉽게(?) 발급할 수 있다.

Let’s Encrypt 에서 TLS 인증서 발급해서 적용하기

foo.example.com처럼 도메인 주소를 가지고 있는 서버라면 아래 과정으로 TLS 인증서를 발급할 수 있다. 이를 DV; domain validated인증서라고 한다. 이외에 OV 나 EV 처럼 웹 브라우저에 기관 이름 혹은 사업자 이름이 뜨는 인증서도 있지만 Let’s Encrypt 에선 발급할 수 없다. 이런 인증서는 발급할 때 추가 확인절차가 있어서 “자동화” 발급만 지원하는 Let’s Encrypt 등에선 지원할 수 없다.

리눅스 서버에 적용하기

리눅스에서 인증서를 발급받는다면 다음과 같은 과정으로 TLS 인증서를 발급할 수 있다.
1. 웹 서버를 설치한다. (nginx, apache2, …; 여기서는 nginx 를 예제로 사용) bash $ sudo yum install -y nginx # centos; nginx $ sudo apt-get install -y nginx # ubuntu; nginx

2. 웹 서버에서 80번 포트로 접근할 때의 루트 디렉터리를 지정한다. 예를 들어 nginx 라면 아래와 같은 설정이 필요하다.
>server {
# 80
번 포트에 대한 설정
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    #
이 경로를 기억해두자.
    root /usr/share/nginx/html;

    location / {}

    # Let’s Encrypt 용 추가 설정
    location ~ /.well-known { allow all; }
   }

3. certbot 프로그램을 설치한다. 아래 명령 중에 사용 중인 서버 OS에 맞는 명령을 고르자.
   $ sudo yum install -y certbot # centos
   $ sudo apt-get install -y letsencrypt # ubuntu
   $ pip install certbot # python 사용 가능한 임의의 운영체제 (virtualenv 여도 무방)

4. 인증서 발급. 발급하려는 모든 도메인을 -d some.domain.com 하는 형식으로 여러번 지정할 수 있다. 2에서 설정한 웹 서버 루트 경로 (위에선 root 설정으로 지정) 를 webroot -w 의 인자로 전달해야 한다.
   $ sudo letsencrypt certonly –webroot -w /usr/share/nginx/html -d foo.example.com -d http://www.foo.example.com
해당 명령 실행 후에 /etc/letsencrypt/live 밑에 도메인 이름으로 심볼릭 링크가 걸린 디렉터리가 생긴다.

5. 서버 설정에 반영
   server {
    listen 443 default_server;
    listen [::]:443 default_server;
    server_name foo.example.com;
# 서버 도메인 지정
    root /usr/share/nginx/html;

# TLS 패러미터들 (인증을 제외한 나머지)
    ssl on;
    ssl_certificate /etc/letsencrypt/live/foo.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/foo.example.com/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
    ssl_prefer_server_ciphers on;
 }

윈도우즈 지원

공식은 아니지만 Microsoft Windows 용 클라이언트 가 있으며, 위 웹 사이트의 Release 페이지에서 다운로드할수 있다. 이 커맨드라인 프로그램으로 유사한 작업을 해서 인증서를 발급받을 수 있다.

요약

• 현대적인 방법으로 프라이버시를 보호하는데 사용할 수 있는 TLS 레이어가 있다.
• TLS는 인증, 기밀 유지, 무결성 검증 기능을 제공한다. 이중 뒷쪽 두 가지는 서버 설정에 따라 동작한다.
• 인증을 위해서 인증 기관들이 존재하며, 여기서 발급받은 인증서가 필요하다.
• 인증서 발급을 자동화 + 무료로 처리하는 Let’s Encrypt 가 있으며, 서버에서 자동으로 처리할 수 있다.

아이펀팩토리 김진욱 CTO

아이펀팩토리, 세계 3대 게임쇼 독일 게임스컴 2017에 가다! -B2C편

게임스컴 한국공동관을 포함한 B2B관을 둘러 봤으니, 이제 본격적으로 게임 축제를 즐기기 위해 게임스컴 B2C관으로 출발합니다~!

10

입구부터 사람이 어마어마하죠? 입장을 위해 늘어선 줄은 늦은 오후였는데도 불구하고 끝이 보이지 않을 정도였어요. 

11

드이어 B2C관 입장!! 여러 종류의 게임들을 시연할 수 있는 게임스컴 B2C관에는 B2B관과는 다르게 다양한 연령층과 남녀 모두 즐길 수 있는 게임들이 많았습니다. 설레는 마음 안고 신나게 행사장을 둘러보러 갑니다요~! 

12

행사장에 들어가자마자 눈에 띈 곳은 바로 삼성 부스!
삼성의 여러 제품들을 체험해 볼 수가 있었는데요. 독일에서 만난 삼성 부스는 고향 친구를 만난 듯 반가웠습니다.
게다가 여러 나라의 참관객들이 삼성 부스에 많은 관심을 보여서 더욱 뿌~듯! 

13
▲관중 토너먼트와 VR 게임 시연

PS4, XBOX, PC(Steam) 플랫폼에 동시 런칭을 준비 중인 액션 게임이 새롭게 선보인 부스가 있었는데요, 행사 당일에서는 아직 서비스 전인 베타버전을 선보였어요. 유럽인들이 좋아할 만한 귀엽고 박력있는 3D 만화 같은 그래픽의 액션 대전 게임입니다. 토너먼트로 우승자에게는 상품이 증정되어 참여하는 사람들이 꽤 많았습니다.

VR 시연은 이제 게임쇼에서 빼놓을 수 없죠~! 게임스컴에서 역시 부스 곳곳에서 VR시연이 한창이었습니다. 

15
▲AMD 부스와 문명 게임

CPU 제조 업체인 AMD에서도 놀라운 성능의 하드웨어를 선보이며 문명 게임 시연을 진행했습니다. 체험할 수 있는 것들이 많아서 시간 가는 줄 모르고 즐겼… 

14.png

레이싱 게임부터 액션, VR 또 이미 출시된 게임 또는 출시 예정의 게임들까지! 그 종류도 매우 다양했습니다. 

16.png

짠~! 여기는 게임스컴 전시장 한 편에 위치한 기념품 부스입니다. 일반 쇼핑몰에 온 것처럼 판매 부스와 기념품 종류가 정말 다양했어요. 제 취향을 저격하는 굿즈들이 한 자리에!!! 정말 열리는 지갑을 움켜쥐느라 힘들었답니다..ㅠㅠ
그 중에서도 특히 인기가 많았던 곳은 블리자드 기념품 부스였어요. 놀이동산을 방불케 하는 긴 줄로 블리자드 캐릭터의 인기를 실감할 수 있었습니다.

자, 이제 마지막으로 게이머라면 누구나 열광할 EA부스와 블리자드 게임 부스입니다! 별도의 게임쇼라고 해도 될만큼 스케일이 어마어마하죠? 먼저 EA부스로 출발~

17
▲EA 부스 전경

18.png
▲9월 출시 예정인 FIFA 2018

특히 FIFA 2018 체험 존에서는 게임을 할 수 없을 만큼 대기인원이 굉장했습니다. 축구를 사랑하지만 기다릴 시간이 없던 글쓴이는 눈물을 머금고 자리를 떠나야하만 했습니다…ㅠㅠ

19.png
▲EA의 배틀프론트 2 체험 존

EA는 FIFA와 같은 스포츠 게임 개발을 넘어서 자체적으로 오리진이라는 게임플랫폼을 운영할 만큼 영향력 있는 게임 퍼블리셔인데요, 이번 게임스컴에서는 인기 있는 게임을 모두 체험존으로 만들어서 참관객들의 만족도를 한층 높여주었어요.

다음은 최근 스타크래프트 리마스터 출시로 글쓴이의 학창시절을 다시 한번 추억하게 해준 블리자드 체험존!

20.png
▲블리자드 오버워치 체험존

21
▲블리자드 스타크래프트 리마스터(좌) 히어로즈오브스톰 체험존(우)

22
▲블리자드 하스 스톤 체험존

블리자드 부스에서 시간가는 줄 모르고 게임을 즐기다 보니 어느새 탐방을 마칠 시간이 왔습니다..

게임스컴 2017은 전시장 구역별로 그 컨셉이 명확 했는데요. 오로지 미팅을 위한 B2B부터 다양한 굿즈를 판매하는 기념품 샵, 게임시연 부스 그리고 EA와 블리자드의 독립 체험존까지 게이머들의 축제라는 타이틀에 걸맞는 알찬 행사였습니다~! 

Python 기본 개념에 대한 간단한 퀴즈

Python은 그 단순함과 유연성, 다양한 라이브러리의 존재 등의 장점을 가진 언어이다. 웹 서비스로부터 통계, 최근에는 머신 러닝에 이르기까지 다양한 분야에서 사용된다.
이는 게임 산업에서도 마찬가지이다. 실시간 PVP등 성능이 중요한 게임에서는 GIL로 인한 멀티스레딩 불가 문제(C python, Pypy 등의 경우이다. IronPython 등 GIL이 없는 환경도 있다.), 스크립트 언어가 가지는 성능상의 불리함 등의 이유로 게임 개발에 직접로 사용되는 경우는 상대적으로 적지만( Eve online, 듀랑고 등 게임 구현에 Python을 적극적으로 도입하는 게임들도 있다.), 웹 서버 기반의 게임 서버 작성, 기능/부하 테스트를 위한 더미 클라이언트, 각종 배치 작업 등 각종 도구를 작성하는 용도 등으로 널리 사용된다.

Python의 단순함과 명료함은 툴 개발과 같은 높은 생산성이 있어야 하는 작업에 적합하다. 하지만 이것이 Python의 전부는 아니다. Python을 메인 언어로 하는 게임 개발 프로젝트는 많지 않기에 단순하고 생산성이 높은 언어로만 알고 있는 경우가 많지만, 이외에도 다양한 프로그램 패러다임을 지원할 수 있도록 명료하면서도 다양한 개념들이 존재한다.

아래의 문제들은 Python에서 지원하는 몇몇 개념에 대한 것들이다. 본사에서 후원한 Pycon 2017 에서 이벤트 진행에 사용한 문제들로, 특별한 언급이 없다면 Python 3.6 버전을 기준으로 한다. https://www.python.org/dev/peps/pep-0020/ 에 쓰인 것처럼, Python의 아름다움(?)을 느끼는 데 조금이나마 도움이 되길 바란다.

Q. Python의 에러 처리 메커니즘인 Exception에 대한 설명 중 옳은 것은?

1. 별도의 try… except 를 통해 처리되지 않은 exception 들을 처리하는 함수를 지정 가능하다.
2. 새로운 Exception을 임의로 정의할 수 없다.
3. 처리(handling)을 위해 특정 코드를 건너뛸 수는 없다.
4. 예외가 발생하지 않은 경우에만 실행되는 코드를 따로 지정할 수 없다.
5. 임의로 발생시킬 수 없다.

정답 : 1

Python에서는 내장 Exception 클래스를 상속받아 유저가 임의의 Exception을 정의할 수 있다. 다른 언어의 exception과 마찬가지로, exception 발생 시 코드 실행을 중지하고 가장 가까운 handler(except 문)으로 이동하므로, 특정 코드를 건너뛸 수 있으며 finally 문을 이용한, Exception 발생 여부와 관계없이 실행되는 블록을 작성할 수 있다.
이외에도 else 문을 사용하여 Exception이 발생하지 않은 경우에만 실행되는 블록을 작성할 수 있다.

1끝으로, 별도의 핸들링(except)을 거치지 않은 Exception은 sys.excepthook 함수에서 확인, 필요 시 처리 가능하다.

1-2

Q. 다음 중, Python Closure에 대한 설명으로 옳지 않은 것은?

1. 상위 영역의 변수에 접근이 필요한 경우, __dict__ 멤버에서 해당 변수를 찾으려 시도한다.
2. 일반적으로, nested function 형태이다.
3. Callable이다.
4. 다른 변수에 대입(binding)할 수 있다.
5. parent scope에 존재하는 변수를 참조할 수 있다.

정답 : 1.

Closure란, 어떤 함수 및 해당 함수의 실행 시 필요한 환경(각종 변수 등)을 모두 포함한 것을 뜻한다. 예를 들어, 아래 예제의 cl 은 inner 함수 및 inner의 실행에 필요한 변수(outer_var)를 모두 가지고 있는 Closure이다.

2-1

Python의 함수는 first class 값이므로, 일반적인 변수나 객체처럼 인자로 넘겨지거나 함수의 반환 값으로 사용 가능하다. Closure는 함수이므로 당연히 Callable의 일종이며 다른 변수에 대입(binding)할 수 있다. 또한 위의 예에서처럼, 실행에 부모 스코프(outer 함수의 스코프) 내의 변수가 필요하다면 해당 변수 또한 참조 가능하다.

Python의 각종 타입들은 실행 시 필요한 많은 정보, 혹은 동작들을 특수한 이름 규칙을 따르는 변수/함수로 관리한다. 예를 들어 함수의 이름은 __name__ 이라는 변수에 저장되며, 두 오브젝트간의 동등 비교(a == b) 시에는 __eq__(self, other) 라는 함수를 호출한다. 특정 오브젝트의 어트리뷰트들은 __dict__ 에 저장된다. 하지만 Closure 실행 시 필요한 변수들__dict__ 가 아닌, __closure__ 라는 멤버 변수에 저장된다.

Q. Python decorator에 대한 다음 설명 중 옳지 않은 것은?

1. 클래스 멤버 함수(method)는 decorated될 수 없다.
2. 하나의 함수가 둘 이상의 decorator로 decorated 될 수 있다.
3. 다른 모듈 내에 정의된 함수도 decorator로 사용할 수 있다.
4. 함수 정의 구문 위에 @ 기호를 붙여 사용한다.
5. decorator로 감싸진 함수의 __name__ 등 몇몇 변수의 값은 감싸지지 않은 함수의 그것과 다르다.

정답 : 1.

Python의 decorator는 closure 개념을 이용, 함수의 동작을 확장/변경하는 개념이다.

3

위의 예제는 DocratedSample 라는 클래스의 decorated_func 라는 Method를 doc_1, doc_2라는 두 개의 Decorator 로 감싸는 예제이다.

decorator 자체는 closure를 반환하는 함수이므로 다른 모듈에 속해 있어도 사용할 수 있다. 또한 어떤 함수가 decorator로 감싸지면, 이름이 같은 closure로 대체되므로 __name__ 등 몇몇 내장 변수의 값이 원래 함수의 그것과는 다르다.

Python에서 object의 method는 자기 자신을 가리키는 인자를 하나 더 받는 함수이므로 decorator 내에서 해당 처리( inner, inner_2 함수에서 self를 넘겨주는 동작)만 해 준다면 method도 decorator로 감쌀 수 있다.

Q. 다음 중, python 2.7이후의 내장 자료형인 set에 대한 설명으로 옳은 것은?

1. set 객체 자체는 hashable하지 않다.
2. 보기 내의 다른 모든 선택지가 옳다.
3. 원소를 추가/삭제할 수 있다.
4. 순회(iterate)할 수 있다.
5. set의 원소들은 해당 set 내에서 유일하다.

정답 : 2

우선 set의 객체는 collection.Iterable 의 instance이므로 순회(iterate)가능하며, set은 동일 set 객체 내의 원소들이 해당 set 객체 내에서 유일함을 보장해 준다.

Python의 내장 자료구조 중 set, dict 의 key 등 유일성이 보장된 값들을 관리하는 자료 구조들은, hashable 한 값들만을 원소로 취할 수 있다. 이러한 자료 구조들에서는 두 원소를 비교하기 위해 __hash__ 함수와 __eq__ 함수의 반환 값을 참조한다. 이 때, __eq__ 를 이용한 비교 결과 두 객체가 동일하다면, __hash__ 의 값도 동일한 경우를 hashable하다고 한다. (Python glossary) list, set 등 원소들을 변경 가능한(mutable) 자료 구조들의 경우, 값이 변경되었을 때 동일성을 판단하기 모호한 경우가 생긴다.

4

따라서 Python 내장 자료 구조 중 변경 가능한(mutable) 자료 구조들은 모두 hashable하지 않다. set은 필요에 따라 원소 추가, 제거가 가능하므로 mutable 한 자료 구조이며, 따라서 set은 hashable하지 않다.

Q. Python 2.x에서, 다음 코드에 대한 설명으로 옳은 것은?

5

1. type(B) 는 의 값은 ‘class __main__.B’ 이다.
2. Class B는 A를 상속받지만, A클래스 내의 now 필드는 상속받지 않는다.
3. a 객체의 now 필드는 a 객체가 생성된 시점의 시각이다.
4. j 필드는 b 객체에서 접근할 수 없다.
5. Class B 의 object 생성 시, 반드시 생성자의 j에 해당하는 값을 넘겨야 한다.

정답 : 2

Python 에서 object property 는 __init__ 함수에서 초기화함으로써 만들어지며, 설령 상속을 받았다 하더라도 super(…).__init__(…) 등의, 부모 클래스의 __init__을 호출해 주지 않으면 부모 클래스에서 선언된 property 는 사용할 수 없다.

이외에, 의외로 많은 실수를 하는 부분이 3번, 함수의 기본 인자값과 관련된 내용이다. Python에서 함수의 기본 인자값은 해당 문장이 interpreter에서 해석되는 시점에 평가된다. 즉 함수가 호출되는 시점에 평가되지 않는다.

5-1

위의 예제를 보면, obj 생성 시점은 21:33:34 임에도 불구하고, __init__ 에서 datetime.now()의 값으로 초기화하는 obj.now의 값은 그보다도 이전, 대략 5초 전이다. class 선언문 위에서의 시간 값과 비교해보면 class 선언문이 interpereter에서 해석된 시점의 것과 거의 유사함을 알 수 있다. 또한 5초 sleep후에 다시 생성해봐도 객체 내 now 의 값은 변함이 없음을 확인할 수 있다. 의외로 실수하기 쉬운 부분이므로, 함수 인자의 기본값을 함수의 반환값으로 지정하는 경우 주의가 필요하다.

Python 은 간결하고 명확한 언어이지만 그것이 다는 아니다. 개발자가 상당히 깊은 부분까지 커스터마이징이 가능하며, 우아한 코드를 작성할 수 있는 방법들을 제공한다. 위에서 언급한 개념들이 Python을 이용한 제품 설계, 개발 시 조금이라도 도움이 되기를 바라며 글을 마친다.

아이펀팩토리 민영기 TD

아이펀팩토리, 세계 3대 게임쇼 독일 게임스컴 2017에 가다! -B2B편

아이펀팩토리가 2017년 8월 22일부터 24일까지 독일에서 열린 게임스컴에 다녀왔습니다!

게임인이라면 모두 알고 계시겠지만, 게임스컴은 독일 쾰른에서 개최되는 명실상부한 유럽 최대의 게임쇼입니다.
미국에서 열리는 E3가 새로운 신작의 발표 위주라면, 게임스컴은 게임 시연의 행사라고 할 수 있지요.
공항 입국 심사를 할 때부터 게임스컴 방문을 위해 독일에 왔다고 하면, “오! 게임스컴 굳굳” 이라고 하며 바로 통과가 되니 게임스컴의 역사와 그 규모를 실감할 수 있었습니다.
또한 독일 쾰른 메쎄라는 대규모의 행사장 전체가 오직 게임스컴을 위해 사용되는 점을 보면, 유럽인들의 게임 사랑과 게임스컴의 인기를 새삼 느낄 수 있습니다.
특히, 이번 게임스컴 2017에서는 한국공동관 부스 행사에 아이펀팩토리도 함께 했답니다.

그럼 먼저 한국공동관부터 방문해볼까요?!

1
▲한국 공동관 입구

2
▲한국공동관 벽면에 송출되고 있는 아이펀 엔진 영상

3
▲한국공동관 내부 전경(좌) VR 게임 시연(우)

한국 공동관에 참여한 여러 게임 개발사 및 퍼블리셔 분들이 미팅을 진행하고 계신데요, 모두 좋은 성과 있기를 기원합니다.

4
▲아이펀팩토리 미팅(좌)과 부스 사진(우)

그럼 이제 한국공동관을 나와 다른 B2B 부스로 가보도록 하겠습니다.

5.png▲자유로운 분위기의 게임스컴 카페

한국공동관 바로 옆에 위치한 게임스컴 카페를 가보았는데요. 커피는 물론이고 맥주의 나라 독일 답게 자유롭게 맥주도 마실 수 있었습니다. 각 B2B관 부스에서 미팅 공간이 없으면 카페에서 미팅을 하기도 하는데요 미팅 종종 맥주를 마시면서 편안하게 미팅을 하는 모습을 종종 볼 수 있었습니다.

6
▲B2B관 전경

7
▲공굴리기 게임과 VR 게임 시연

캐나다관 에서는 여러 게임들을 선보였는데요. 그 중에서 실제 대형 공을 굴리면 게임 안에서 공을 굴리면서 달리는 게임이 있었는데요. 보기와는 달리 운동량이 상당했습니다.. 게임으로 운동효과까지! 일석이조~~

9
▲자유로운 미팅 분위기

독일 게임 업체들의 미팅공간은 참관객들을 위해 카페 형식으로 만들어져 미팅을 기다리는 사람들에게 맥주 또는 음료들을 편하게 제공하고 있습니다. 다시 한번 유럽의 자유롭고 맥주를 사랑하는 분위기를 느낄 수 있었습니다.

반면, B2B관의 다른 홀에서는 앞서 본 B2B관과는 정반대의 분위기로 오로지 미팅을 위한 공간으로 구성되어 있었습니다. 각 부스 마다 외벽을 만들어서 미팅에 집중할 수 있도록 만들어진 것이죠~

8
▲B2B관의 폐쇄적인 전경

이렇게 게임스컴의 B2B관은 각 홀마다 분위기를 달리하여 업체와 부스별 성격에 따라 미팅을 진행했습니다. 게임스컴의 B2B관은 전체적으로 볼거리가 많지 않아서 조금은 아쉬웠지만, 미팅에만 집중할 수 있도록 구성된 게임스컴 B2B만의 매력을 느낄 수 있었던 시간이었습니다! 

자, 이제 다음 포스팅에서는 게임스컴의 꽃! B2C관으로 함께 가보실까요?!

아이펀팩토리 2017 하계 워크샵

무더위가 기승을 부리는 7월의 어느 날!
아이펀팩토리는 더위를 피해 강원도 홍천으로 워크샵을 다녀왔습니다.

홍천으로 출발하기 전, 워크샵의 첫 일정으로 사내 발표행사가 진행되었습니다.
우수 발표자는 하반기에 열릴 아이펀팩토리의 대표 행사, 아이펀팩토리 데브데이의 강연자로 선정될 예정이랍니다. 하반기 아이펀팩토리 데브데이를 기대해주세요!

그림1

짧은 시간동안 알찬 강의를 준비해 주신 발표자 분들께 다시 한번 감사의 박수! 짝짝짝
자, 이제 본격적으로 워크샵을 시작해볼까요? 다함께 홍천으로 출바알~~

2
비가 오진 않을까 걱정했으나…어쩜! 물놀이 하기 딱 좋은 날씨!
창밖 풍경을 즐기며 달리다보니 어느새 춘천에 도착했습니다. 춘천을 그냥 지나치면 서운하겠죠?

3
짜잔! 오늘의 점심메뉴는 바로 춘천의 명물, 춘천 닭갈비입니다. 역시 닭갈비는 춘천이 진리! (인정)

닭갈비를 순식간에 흡입하고서 드디어 워크샵 장소인 홍천강에 도착했습니다. 꺄호~!
더위에 지친 아이펀팩토리 식구들은 도착하자마자 물에 뛰어들기 위한 채비를 갖추고 래프팅하러 고고싱~~

4
물에 젖기 전 멀쩡한(?) 모습으로 단체사진 한 방 찍구요~
5
물에 빠져도 즐거운 아이펀팩토리 식구들

물놀이의 하이라이트! 다이빙도 빠질 수 없죠. 점프 사진 퍼레이드~~ 
8
와우! 뒤로 돌면서 점프!
9오~~ 앞으로 돌기!! 
10남녀 불문하고 다같이 물 속으로 풍덩! 

7
강물에 몸을 맡겨 숙소로 돌아갑니다 둥둥~ 

이렇게 물가에서 즐거운 한 때를 보내고 이제 허기진 배를 채워야할 시간! 신나는 바베큐 타임 >_<

11
다시 봐도 넘나 먹음직스러운 것… 지친 물놀이 후 먹는 고기는 그야말로 꿀!맛!

13
10인분의 라면을 준비하는 이쉐프의 뒷 모습. 비장하도다.. 

12
그동안 각자의 업무로 바빠 나누지 못했던 이야기 보따리도 풀구요~

1차는 배를 채우는 시간이었다면, 2차에서는 본격적으로 게임을 시작해야죠. 
14
요즘 대세 게임은 여기 다 모였다!
귀엽고~~ 깜직하게~~ 써리~원! 이 게임은 결국 술을 마셔야 끝나는 게임이었다는 것을 한 껏 귀여운
척을 하고서야 뒤늦게 깨달았던 밤… 모쪼록 신나는 게임과 벌주로 워크샵의 밤이 깊어갑니다. 

다음 날, 주루마블의 여파로 힘들게 일어난 우리는 막국수와 콩국수로 먹방 워크샵을 마무리 짓고 판교로 돌아왔습니다. 

워크샵인지.. MT인지.. 먹방여행인지 모를 아이펀팩토리의 하반기 워크샵은 이렇게 성공적(?)으로 마무리 되었습니다. 여름의 막바지 더위도 잘 이겨내고 다가올 하반기도 모두 화이팅!

15

중국 최대 게임 전시회 차이나 조이 2017 방문기!

아이펀팩토리가 지난 7월 27일부터 30일까지 나흘간 중국 상하이 뉴인터내셔널엑스포센터에서 열린 ‘차이나조이’에 다녀왔습니다!

차이나조이 2017는 올해로 15번째를 맞이한 아시아 최대 규모의 게임쇼로서 해마다 기록을 갱신하는 규모와 다양한 콘텐츠로 무장하여 세계적인 축제로 자리매김하고 있는 중국 게임 전시회입니다.

올해에도 역시 38도가 넘는 무더위에도 불구하고 수 많은 인파가 차이나조이 2017를 방문했는데요,
대륙의 더위와 세계적인 게이머들의 열정으로 뜨거웠던 그 현장을 아이펀팩토리가 전해 드리겠습니다!

그림1
▲차이나조이 행사장 입구

행사장 입구부터 세계적인 게임쇼라는 명성에 걸맞은 어마어마한 규모가 느껴지시나요?

볼거리가 많아 어디부터 갈지 고민하다가 먼저 B2B관으로 향합니다. 

B2B관에 들어가자마자 가장 눈에 들어온 것은 “한국의 대세 캐릭터”인 카카오 프렌즈의 라이언과 무지를 모형으로 내세운 카카오게임즈 부스였습니다. (사랑해요, 라이언) 카카오 게임즈는 카카오톡으로 상당히 많은 유저층을 보유하고 있어 게임 퍼블리싱에서도 상당한 영향력을 차지하고 있지요~

그림2
▲카카오 프렌즈 캐릭터를 내세운 카카오 게임즈 부스

차이나조이의 B2B관은 중국 최대 게임쇼답게 다양한 퍼블리셔와 개발사들이 활발하게 교류하는 모습입니다. 

그림3
▲중국 게임 개발사 및 퍼블리셔 부스

그림4

▲이벤트로 인해 줄이 엄청난 Talking Tom and Friends 부스

스마트 폰이 막 보급될 시기에 대표적으로 즐겼던 게임 Talking Tom 게임의 개발사 부스도 보입니다. (이 게임 아시는 분은 아재 인정!!!) 부스 이벤트 상품으로 증정되는 캐릭터 인형은 인기 폭발! 글쓴이는 줄이 너무 길어서 기다릴 엄두도 못내고 다음 부스로 이동합니다…ㅠㅠ 

올해는 사드 문제로 한중 관계가 예민한 상황에서 차이나조이가 진행이 되었습니다. 그로 인해 이번 차이나조이의 한국기업 공동관은 KOREA PAVILION이 아닌 KOCCA PAVILION으로 진행되었다고 하네요.  아무쪼록 차이나조이를 통해 한국 게임 개발사들에게 좋은 성과가 있기를 기원합니다.

그림5
▲한국콘텐츠진흥원 글로벌 게임센터 부스

특히, 이번 차이나조이에서는 중국 게임사에서 참신한 게임들을 많이 선보였는데요, 중국 게임산업의 성장과 잠재력을 다시 한번 실감할 수 있었습니다.

이렇게 B2B관의 여정을 마치고 이제 B2C관으로 이동합니다~!
일반인을 대상으로 하는 B2C관의 규모는 역시나…. 어마어마했습니다. 들어서는 순간부터 인해전술로 발 디딜 틈이 없는 차이나조이의 B2C관!

그림6
▲중국의 인구를 실감하게 하는 B2C 입구 현장

이번 차이나조이에서는 하드웨어 업체들이 한층 업그레이드된 제품을 선보이며 게임을 체험 및 시연할 수 있었습니다. 게임인이라면 누구나 알고 있는 CPU의 Intel과 그래픽 카드의 NVIDA가 대표적이었지요. 

그림7
▲Intel CPU를 탑재한 VR게임 시연과 메인 PC

그림8
▲Intel부스에서 진행된 “오버워치” 게임 대회

Geforce 그래픽 카드로 게임인들에게 유명한 NVIDIA 부스에서도 다양한 무대 행사 및 이벤트가 진행되었습니다.

그림9▲NVIDIA 부스에서 진행된 게임 시연과 무대행사

그림10▲GeForce 그래픽 카드를 탑재한 화려한 PC와 게임 그래픽

“대륙의 실수”라고 불리는 샤오미 부스도 발견! 국내에서는 샤오미 핸드폰, 미밴드 등으로 이미 잘 알려져 있죠. 이번 행사에서는 샤오미 미니 냉장고까지 선보였답니다. 샤오미 전자제품의 범위는 하루가 다르게 넓어지고 있네요. 

그림11▲샤오미 부스와 샤오미 미니 냉장고

또한, 올해 차이나조이 2017은 전체적으로 게임 대회를 방불케 할 만큼 각 행사관마다 게임 대회를 라이브로 진행 한 곳이 많았습니다. 덕분에 글쓴이의 눈은 넘나 즐거웠지요 하핫
DOTA, 왕자영요, 리그 오브 레전드와 같이 게임인들에게 매우 익숙한 AOS 장르의 게임들을 5vs5로 현장에서 생생하게 라이브 중계를 했었는데요. 마치 스포츠 경기를 보는 것 처럼 그 인기가 대단했습니다. 

그림12
▲게임 대회를 온 것 같은 차이나조이의 부스별 게임 대회 현장

지난 15년간 중국 최대의 게임 전시회로 성장해 온 차이나조이를 통해 중국의 게임산업의 발전을 엿볼 수 있는 좋은 시간이었습니다. 한국과 마찬가지로 중국 또한 게임산업이 하나의 문화 콘텐츠로 자리잡은 것을 느낄 수 있었으며, 앞으로도 게임산업이 세계적으로 발전해가길 바랍니다. 올해 말 국내에서 개최되는 지스타 또한 작년보다 더욱 풍성한 볼거리로 세계적인 게임축제로 거듭나길 기대하며! 차이나조이의 하이라이트, 부스 모델 누나들의 사진을 마지막으로 이번 차이나조이 2017 방문기 포스팅을 마치도록 하겠습니다. 

그림13