오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
인천경제산업정보테크노파크에서
사물인터넷(IoT)과 가상현실(VR) 관련 교육생을 모집하고 있어 내용 공유 드립니다.
가상현실 산업이 활성화 되면서 많은 전문인력이 필요로 되고 있으며, 모든 사물은 인터넷으로 연결되는 사회가 되면서 관련 분야의 개발자도 많이 필요한 실정인데, 관련된 교육을 단기간에 체계적으로 배울 수 있는 프로그램입니다.
수업료, 교재비용, 수업에 활용되는 구글보드, 아두이노보드까지.. 모두 무상제공되며, 우수 교육생에게는 해외연수까지 갈 수 있는 기회~ 놓치지 마세요.
접수기간: ~10.18(수)
결과발표: 10.19(목)
교육기간: 10.23(월)~11.15(수)
교육 신청하기 ▶ https://goo.gl/fP98Mt
상세 안내설명문 보기 ▶ https://goo.gl/Zaed2D
SW융합클러스터 홈페이지 가기 ▶ https://goo.gl/5KVcWD
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
인천경제산업정보테크노파크에서
사물인터넷(IoT)과 가상현실(VR) 관련 교육생을 모집하고 있어 내용 공유 드립니다.
가상현실 산업이 활성화 되면서 많은 전문인력이 필요로 되고 있으며, 모든 사물은 인터넷으로 연결되는 사회가 되면서 관련 분야의 개발자도 많이 필요한 실정인데, 관련된 교육을 단기간에 체계적으로 배울 수 있는 프로그램입니다.
수업료, 교재비용, 수업에 활용되는 구글보드, 아두이노보드까지.. 모두 무상제공되며, 우수 교육생에게는 해외연수까지 갈 수 있는 기회~ 놓치지 마세요.
접수기간: ~10.18(수)
결과발표: 10.19(목)
교육기간: 10.23(월)~11.15(수)
교육 신청하기 ▶ https://goo.gl/fP98Mt
상세 안내설명문 보기 ▶ https://goo.gl/Zaed2D
SW융합클러스터 홈페이지 가기 ▶ https://goo.gl/5KVcWD
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
IoT 시대에 Opensource H/W 와 NodeJS 를 이용하여 누구나 나만의 H/W + S/W + Service 를 만들기 위한 교육 과정을 만들어 보았습니다.
상상했던 아이디어를 Raspberry Pi 기반으로 나만의 IoT 제품을 현실로 만들어 보세요.
Lesson 1 - Introduction : IoT개요, Opensource H/W, 라즈베리파이 기초
Lesson 2 - Linux : Raspberry Pi 에서 리눅스 활용하기
Lesson 3 - Node.JS : Raspberry Pi 에서 Node.JS 로 프로그래밍 하기
Lesson 4 - Sensor : GPIO 를 Node.JS 로 동작시켜 센서 제어하기
Lesson 5 - Project : Raspberry Pi 로 스마트폰 + 무선 IoT 오디오 제작
챕터가 완성되는대로 추가적으로 공유하겠습니다.
Circulus Site - http://www.circul.us
Circulus Group - http://group.circul.us
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
머신러닝 및 데이터 과학 분야의 컴퓨팅 수요는 해가 갈수록 급증하고 있습니다. 이와 더불어 분산처리 기술, 데이터 파이프라이닝 및 개발 환경 스택 관리 등의 관련된 다양한 이슈들 또한 엄청나게 늘어나고 있습니다. 머신러닝 모델의 기하급수적인 모델 복잡도 증가 추세와 마찬가지로, 모델 학습을 위한 환경 관리 또한 갈수록 복잡도가 높아지는 추세입니다.
이 세션에서는 이러한 문제를 해결하기 위해 python 언어 기반의 분산처리 스케쥴링/오케스트레이션 미들웨어 플랫폼을 개발한 4년간의 과정에서 겪은 다양한 문제들에 대해 다룹니다. 2015년 컨테이너 기반의 고밀도 분산처리 플랫폼 설계 및 프로토타이핑 과정을 PyCon KR에서 발표한 이후, 실제 구현 및 오픈소스화, 안정화를 거치며 겪은 다양한 기술적/비기술적 문제들에 대한 경험을 공유합니다.
기술적으로는 최근 몇 년 간의 클러스터 플랫폼 관련 기술의 진보와 함께 탄생한 다양한 도구들과, 이러한 도구들을 python 기반으로 엮어내기 위해 사용하고 개발한 다양한 오픈소스들을 다룹니다. Python 기반의 컨테이너 스케쥴링 및 오케스트레이션 과정의 구현과, 다양한 프로그래밍 언어로 만든 SDK를 graphQL을 이용하여 연동하는 과정에서의 몇몇 유의점을 설명합니다. 아울러 python 기반의 SDK를 다양한 언어로 포팅했던 경험을 간단하게 안내합니다.
플랫폼을 개발하는 중 등장한 TensorFlow, PyTorch 등의 다양한 머신러닝 프레임워크들을 도입하며 겪은 문제와 해결 과정에 대해서도 나눕니다. 연구 분야에는 Python 2.7 기반의 프레임워크들이 여전히 많습니다. 이러한 프레임워크 및 라이브러리의 지원을 위하여 Python 2 기반의 프레임워크와 Python 3.7로 구현한 컨테이너 인터페이스를 단일 컨테이너 환경에 중복 빌드 및 상호 간섭 없이 공존시키기 위해 개발한 아이디어를 소개합니다.
마지막으로 Python 기반의 프레임워크를 개발, 배포 및 상용화 하는 과정에서 겪은 다양한 어려움을 소개합니다. 솔루션을 배포 및 보급할 때 겪는 다양한 런타임, 하드웨어 환경 및 개인 정보 보호를 위한 폐쇄망 대상의 디플로이 등에 대응하기 위하여 Python 응용프로그램을 단독 실행용으로 패키징하는 과정에서 겪은 팁들을 설명합니다. 또한 GUI 빌드 및 Python, Go 및 C++을 함께 사용한 드라이버 가상화 레이어 개발 등의 내용도 살짝 다룹니다.
이 슬라이드는 PyCon KR 2019의 발표 슬라이드입니다. ( https://www.pycon.kr/program/talk-detail?id=138 )
[17.01.19] docker introduction (Korean Version)Ildoo Kim
Docker(도커) 소개를 위해 사용했던 자료입니다.
제가 속한 개발팀에서는 도커 컨테이너를 기반으로 개발부터 배포까지 가능한 환경 및 인프라를 구축하여 개발팀에서 대다수의 오퍼레이션까지 관여하면서 Devops 형태로 운영합니다.
Docker(도커)를 처음 사용하거나 개념적으로 익숙하지 않은 초보를 위해 만든 자료입니다.
슬라이드에서 사용된 스크립트/코드는 아래에 있습니다.
https://github.com/ildoonet/docker_introduction
----
김일두, Software Engineer @ Kakao
Github : https://github.com/ildoonet
Linkedin : https://www.linkedin.com/in/ildoo-kim-56962034/
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템
Node.js in Flitto
1. p l a y . n o d e ( ) ;
asbubam @ Flitto
집단지성 번역 플랫폼 플리토는 노드를 어떻게 사용하는가?
photo
by
Jongho Jang
2. C, Java in 여기저기
Ruby on Rails, Node.js in News1
Node.js in Flitto
Punk Band bass
Fashion Photography in Tokyo
Seungwoo Lee
Engineer
asbubam@Flitto.com
…
dalsdoll
3. 現 플리토 남성후디 전속모델 활동 중
특기: 역동적인 포즈
특이사항: 촬영 후 다이어트로 체중감량에 성공
스타트업 플리토의 개발자입니다.
photo by Jongho Jang
www.flitto.com store
15. 디렉터리 구조
- app
- models
- services
- routes
- views
- utils
- test
- …
- public
메인 서비스의 디렉터리 구조는
일반적인 express 프로젝트의 구조와 비슷합니다.
16. Node.js 4.2.1
production 전 서버에 적용 (2015/10/27)
주의
기존에 설치된 node_modules
npm cache
node_gyp
깔끔하게 지우고 재 설치
https://github.com/nodesource/distributions 참고
17. v0.8.x => 2012/10/17 AWS t1.micro 서버 생성
v0.10.x
v0.10.8 => 2013/05/20 내가 입사한 날
v0.12.x
v4.2.1 LTS => 2015/10/27 빨라진 것 같은 느낌적인느낌
Node.js 버전변화
v0.12.7: (57.3+60.8+61.5+66.4+69.3)/5 = 63.06 건 / sec
v4.2.1: (57.1+73.9+74.8+75.4+78.4)/5 = 71.92 건 / sec
(71.92-63.06)/63.06*100 = 약 14.05 % 성능향상
랜딩 화면을 2000번씩 5회 렌더링 테스트
특정 페이지를 2가지 버전 환경에서 테스트한 결과로
모든 환경을 통틀어 14.05%를 보장할 수는 없지만
실제 서비스 반영결과 버전업으로 만족할 만한 성능을 얻고 있다고 판단됩니다.
23. step / async / promise
Callback What?
Callback 이 중첩되는 문제는
step을 많이 이용하다가 작년부터는 async로 이동하고 있고
특정부분에는 promise를 사용하고 있어요.
개인적인 생각이지만
Node.js로 개발하면서 Callback에 의한 문제는 크게 겪은 경험이 없어요.
오히려 비동기적인 설계경험이 아직 많지않아서 겪는
시행착오가 더 많은 것 같아요.
24. tpl() 메소드를 통한
백엔드 / 프론트엔드
그리기
파샬을 렌더링하는 tpl() 메소드를 정의하고
백엔드와, 프론트엔드에서
동일한 탬플릿 파일, 메소드를 이용해서 파샬을 그리고 있어요.
25. pg_node
pg 를 래핑
트랜잭션 처리 추가
query string 출력 log() 추가
postgresql 연동 시 많이 사용하는 pg 모듈에
트랜잭션 처리를 래핑하고
query parameter를 넣어 log를 출력하는 log 메소드를 추가해서 사용해요.
38. 실험적 admin
변경 전: backbone.js
변경 후: angular.js, sequelize
실험적인 기능이나, 기술의 반영은 메인서비스에도 많이 하지만
어드민에 특히 많이 시험삼아 도입해보고 있어요.
어드민은 기존에는 backbone.js를 사용하다가
최근에는 angular.js 와 sequelize를 사용하고 있어요.
39. 그밖에 노드로 하는 것
쉘스크립트, 크론잡
쉘 스크립트, 크론잡도 Node.js 스크립트로 구현하고 있어요.
Node.js로 다할 수 있어요. :)
40. 그밖에 노드로 하는 것
u+ xpay, alipay, paypal
giftishow, happymoney
Node.js 포팅
기존에 php, java로 작성되어 있던 api들을 Node.js 로 포팅해서 사용해요.
41. 그밖에 노드로 하는 것
s3에서 파일 50만개 빨리
다운받기
aws-sdk, async(queue)
var AWS = require(‘aws-sdk')
, s3 = new AWS.S3()
, fs = require(‘fs’)
, targetFile = fs.createWriteStream(targetFilePath);
var read = s3.getObject({ Bucket: bucket, Key: filePath }).createReadStream();
read.pipe(targetFile);
AWS S3에서 수많은 파일을 동시에 옮겨야할 땐
aws-sdk + stream 조합이 최고에요.
42. 그밖에 노드로 하는 것
형태소 분석
“내일 아침까지 첨부된 엑셀파일에 포함된 문장 중에서
3글자 이상이면서 2번이상 반복되는 명사, 형용사
뽑아주세요.”
“그리고 ~이런 느낌적인 느낌의 문장들도 뽑아주세요.”
mecab-ffi
은전한닢(오픈소스 한국어 형태소 분석기 프로젝트)에서 사용하는
mecab-ko(오픈소스 형태소 분석 엔진인 MeCab를 한국어에 맞게 포팅)를
@xissy님이 Node.js 로 포팅
43. 그밖에 노드로 하는 것
형태소 분석
라네즈 파워 에센셜 스킨 200ml 제조년월일 13년 06월10일/개봉전 제조일로부터 30개월/개봉후 12개월/제조일은 상품 입출고일에 따로 수시로 변동 될수 있으므로 반드시 판매자에 문의 바랍니다. 1. 세안 후 500우너 동전크기 (지름
2.5cm)만큼 화장솜에 적셔 피부결에 따라 발라줍니다. 2.얼굴을 가볍게 닦아내는 기분으로 >사용하시면 투명케어에 더욱 효과적입니다. 1. 상처가 있는 부위 또는 습진 및 피부염 등의 이상이 있는 부위에는 사용하지 마십시오. 2. 화장품
을 사용하여 다>음과 같은 이상이 있을 경우에는 사용을 중지할 것이며. 계속 사용하면 증상을 악화시키므로 피부과 전문의 등에게 상담하십시오. 1) 사용 중 붉은 반점. 부어오름. 가려움증. 자극 등의 이상이 있는 경우 2) 적용부위가 직사
광선에 의하여 위와 같은 이상이 있을 경우 3. 보관 및 취급상의 주의사항 1) 사용 후에는 반드시 마개를 닫아 두십시오 2) 유소아의 손이 닿지 않는 곳에 보관하십시오 3) 고온 내지 저온의 장소. 직사광선이 닿는 곳에는 보관하지 마십시
오 1.모이스쳐(중>건성)-200ml, 2.라이트(지복합성)-200ml, 3.센서티브(민감성)-200ml 아모레퍼시픽/아모레퍼시픽 1.모이스쳐(중건성),2.라이트(지복합성),3.센서티브(민감성) 제조사 홈페이지 및 제조사 고객센타로 문의 또는 동봉된
사용설명서 참조
직사광선 | 2
모이스쳐 | 2
중건성 | 2
라이트 | 2
지복합성 | 2
센서티브 | 2
민감성 | 2
아모레퍼시픽 | 2
mecab-ffi 모듈을 통해 어렵지 않게 구현할 수 있었어요. :)
45. 시행착오
surrogate pair
UTF-16(16-bit Unicode Transformation Format)은 유니코드 문자 인코딩 방식의 하나이
다. 주로 사용되는 기본 다국어 평면 (BMP, Basic multilingual plane)에 속하는 문자들은
그대로 16비트 값으로 인코딩이 되고 그 이상의 문자는 특별히 정해진 방식으로 32비트로
인코딩이 된다.
기본 다국어 평면에 포함되지 않는 문자들, 즉 16비트로 값을 표현할 수 없는 문자들은 서러
게이트(Surrogate) 문자 영역에 해당하는 두 개의 16비트 문자로 변환되어 이 한 쌍(즉 32
비트)이 그 문자를 나타내게 된다.
https://ko.wikipedia.org/wiki/UTF-16
문제를 겪고 알게된 surrogate pair
47. > var str = ‘안녕하세요반가워요ud83dude03하이';
> str
‘안녕하세요반가워요😃하이’
> str.length
str.length 의 값은 몇일까요?
48. > var str = ‘안녕하세요반가워요ud83dude03하이';
> str
‘안녕하세요반가워요😃하이’
> str.length
13
> encodeURI(str.slice(0,10))
URIError: URI malformed
at encodeURI (native)
…
네 13이에요. 그리고 10번째까지 자르면 스마일 emoji까지 slice되리라 생각했는데
오류가 발생하고 말았어요.
49. > var str = ‘안녕하세요반가워요ud83dude03하이';
> str
‘안녕하세요반가워요😃하이’
> str.length
13
> encodeURI(str.slice(0,10))
URIError: URI malformed
at encodeURI (native)
…
> var decodedArr = punycode.ucs2.decode(str);
> var slicedStr = punycode.ucs2.encode(decodedArr.slice(0,10));
> slicedStr
‘안녕하세요반가워요😃’
> encodeURI(slicedStr);
에러안남. https://goo.gl/uZIV7m
node.js v0.6 버전부터 포함된 punycode를 통해
decoding한 결과를 사용해서 slice하면 이 문제를 해결할 수 있어요.
좀 더 자세한 설명은 여기에 -> https://t.co/fbehjnz8fQ
50. 시행착오
forEach 안에 비동기코드 엄~~청 많이 동시 실행
시스템 콜스택에도 한계가..
users.forEach(function(user) {
헨리를 팔로우한 전체 유저에게 비동기로 푸쉬
});
async.queue 등을 사용해서 동시 실행되는 비동기코드를 제어
항상 얼마나 많은 양의 코드가 동시에 비동기로 실행되고 있는 지
생각하고 또 생각해야 해요!
51. 시행착오
npm install 했더니 동작이 달라요.
버전올라가면서 변경된 사항 요체크!
ex) "sequelize": “latest”
sequelize v2하고 v3는 달라도 너무달라요.
모듈이 버전업 되면서 성능향상만 되는게 아니라
사용방법이나 파라미터타입이 바뀌는 경우가 있으니 모듈 릴리즈노트를 잘 살펴야해요!
56. 하고싶어요
Node.js production 적용
좋은 예 되기
오늘 발표 주제가 ‘node.js in production 사용 예’ 였다면
다음에 또 발표할 기회가 있다면
플리토를 꼭 좋은 서비스로 만들어서
‘node.js in production (킹왕짱) 좋은 예’ 로 발표할 수 있기를… 하고 바라봅니다.
59. 하고싶어요
평일 Node.js 세미나에
4만원 내고 참여하는당신!
함께 하고 싶어요!
그래요. 정말 당신과 함께하고 싶어요!
그리고,
Node.js를 하는 더 많은 개발자들과 소통하고 싶어요!
저는 Node.js를 정말 좋아하고, Node.js로 개발하는게 정말 즐거우니까요. :)
60. 1
2
구인은 1번
구직은 2번
서버
구글에서 ‘이승우 이력서’ 혹은 ‘이승우 이력서 서버’ 를 검색하시면
2개의 슬라이드가 나오는데요.
1번은 제가 구직할 때 만들었던 이력서 슬라이드
2번은 플리토에 입사해서 함께할 팀원을 찾을 때 만들었던 슬라이드에요.
다시 정리하면 여러분은
구인은 1번
구직은 2번
링크를 클릭하시면 됩니다. :)
61. asbubam
asbubam @ Flitto.com
감사합니다. :)
발표 들어주시고, 또 이렇게 슬라이드 찾아 봐주셔서 감사합니다.
온 세상 개발자를 다 만나고 싶은 저니까
언제든 편하게 연락주시고, 페이스북 친구도 해주세요! :)
번역이 필요할 때 집단지성 번역 플랫폼 플리토 기억해주시고,
서버, 웹, 앱 개발팀, 마케팅, 기획 전체파트에서 상시 구인 중에 있으니
서비스에 관심이 있으시면, 그리고 저와 함께 일하고 싶으시다면 언제든 연락주세요!