SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
KotlinJS Overview
-TwiceRound Project #001-
Kotlin Study 모임용
TwiceRound ( https://github.com/nurinamu/twiceround - branch “kotlin”)
- 기존의 유명한 Chrome Extension인 “Momentum”에서 영감을 받아서 시작한
“TWICE” 덕질 Project.
- 기능
- 새 탭을 열 때마다 Twice 이미지 보여주기
- landscape / portrait에 맞춰 보기
- 원본 보기, dislike, 미리보기
- 원스 공지 Crawling (TBD)
- 현재는 Client만 만들어진 상태로 Server 없이 Direct로 GCSE(Google Custom Search Engine)
사용
- 하지만 quota 이슈와 배포 이슈(API Key 설정)로 Appengine 서버 필요해짐.
- 현재 TwiceRound 개발 환경은 Jquery + Chrome API + GCSE + Webpack
- 결과물
- “TWICERound” Chrome Extension(KotlinJS) + API Server(Kotlin + Spring : Google Appengine)
KotlinJS
- Kotlin JS Compiler가 Kotlin -> Javascript 로 만들어줌.
- 내가 원하는 스타일, 패턴으로 코딩하고 싶은데 JS를 다시 공부하기 싫을때 아주 좋음. ㅋ
- IntelliJ 에서 Kotlin Javascript Project 생성 가능
- CLI로도 가능. 하지만 난 pass
- Kotlin 1.1 에서 공식 지원 발표
- ECMA5.1 지원 -> ECMA2016 목표.
- 장점
- javascript 문법 잘 몰라도 kotlin 문법만 알면 됨.
- 단점
- java library import 하면 안됨.
- compile 된 소스를 다시 minify+uglify 해야함.
- 옵션이 있음 좋겠어 : Webpack이 출동한다면!?
Webpack
- Web application bundling framework
- KotlinJS로 Compile되면 kotlin lib js와 raw compiled js가 나옴.
- js 하나로 만들고 싶다.
- minify, uglify하고 싶다.
- 그래서 Webpack!
- gulp/grunt로는 단순 concat이지만 webpack으로는 bundling되어 encapsulize할 수 있음.
KotlinJS + Webpack
KotlinJS + JQuery
- JQuery : Javascript 개발의 절친
- kotlin.js 에서 jquery.Jquery로 지원함. (1.1에서 Deprecated)
- Kotlin : jq(“#id”) -> Javscript : jquery(“#id”)
- 하지만 ajax 등 추가 기능은 지원되지 않음.
- ts2kt를 이용하여 TypeScript를 Kotlin으로 변환하여 사용 (권장)
- http://kotlinlang.org/docs/tutorials/javascript/working-with-javascript.html
- http://definitelytyped.org/
대형 화재발생
??????
KotlinJS + JQuery
- IntelliJ의 Kotlin Plugin을 1.1 이상으로 업데이트 해야함.
- external wrapper를 선언해서 ts로 정의된 type을 사용 가능하게함.
KotlinJS
- Dynamic Type
- dynamic modifier를 사용하면 kotlin의 validation을 skip하여 처리됨.
- javascript는 type free, attribute free. kotlin은 type strict, attribute strict. 두 언어는 상극
하지만 이것은 Magic Keyword 임.
- external interface
- 1.1 부터 지원되기 시작하였으며, js compile된 이후 js 코드와 연결을 위한 interface 선언으로
보면됨.
- JNI의 native modifier와 비슷한 느낌.
- @JsName , @JsModule annotation
- js compile코드로 전환시 명시적으로 명명을 전환시킬 때 사용.
코드봅시다
KotlinJS Limitations
- JSON 전달이 안됨.
- javascript는 argument로 json object를 anonymous 선언으로 전달이 가능하지만 kotlin에서는
불가능함. 해결을 위해서는 따로 data class 선언을 해야함.
- 현재 이 이슈는 Issue로 되어있지만 언제 기능이 만들어질지는 모르는 일. data class를
만드는 것이 kotlin 문법에 맞다는 의견들이 다수임. 편의성이냐 철학이냐 그것이
문제로다.
- Type free 처리를 하다보니 결국 NPE safety가 깨짐.
- Kotlin 에서 validation을 하지 않게됨. 결국 javascript로 컴파일 되는 것이기 때문에 NPE가
발생하는 것은 아니지만 Java의 NPE safety만큼 Javascript에서 undefined error 이슈가
해결되나 했지만 그것은 안됨.
德業一致
NEXT -
“Chrome API를 Kotlin에서 사용하기"

Weitere ähnliche Inhalte

Was ist angesagt?

The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework명신 김
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Eunbee Song
 
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.ChangHyeon Bae
 
프론트엔드 개발자
프론트엔드 개발자프론트엔드 개발자
프론트엔드 개발자jung kyunghwan
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHubYurim Jin
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능Dexter Jung
 
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 [숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 Soongsil University
 
팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법Eugene Park
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼Kenu, GwangNam Heo
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대CONNECT FOUNDATION
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps성수 이
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민NAVER D2
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스Dexter Jung
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaDexter Jung
 
Share some development
Share some developmentShare some development
Share some developmentJi Heon Kim
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Youngbin Han
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱NAVER D2
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 

Was ist angesagt? (20)

The Future of C# and .NET Framework
The Future of C# and .NET FrameworkThe Future of C# and .NET Framework
The Future of C# and .NET Framework
 
Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)Tech Update - The Future of .NET Framework (김명신 부장)
Tech Update - The Future of .NET Framework (김명신 부장)
 
Angular Library
Angular LibraryAngular Library
Angular Library
 
Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.Angular 살짝 해보고 발표.
Angular 살짝 해보고 발표.
 
프론트엔드 개발자
프론트엔드 개발자프론트엔드 개발자
프론트엔드 개발자
 
초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub초보자를 위한 Git & GitHub
초보자를 위한 Git & GitHub
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습 [숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
[숭실대학교 SODA]깃(git) 명령 및 소스트리(sourceTree) 실습
 
팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법팀 개발을 위한 GitHub 사용법
팀 개발을 위한 GitHub 사용법
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼
 
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
[부스트캠퍼세미나]권혁우_REST는 바이바이_ GraphQL과 함께하는 칼퇴시대
 
LinqPad for DevOps
LinqPad for DevOpsLinqPad for DevOps
LinqPad for DevOps
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
[125]react로개발자2명이플랫폼4개를서비스하는이야기 심상민
 
예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스예제를 통해 쉽게_살펴보는_뷰제이에스
예제를 통해 쉽게_살펴보는_뷰제이에스
 
Hot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With JavaHot Trend Lambda Expressions, Compare C# With Java
Hot Trend Lambda Expressions, Compare C# With Java
 
Share some development
Share some developmentShare some development
Share some development
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
 
[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱[114]angularvs react 김훈민손찬욱
[114]angularvs react 김훈민손찬욱
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 

Andere mochten auch

개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기Lee WonJae
 
Kotlin으로 안드로이드 개발하기
Kotlin으로 안드로이드 개발하기Kotlin으로 안드로이드 개발하기
Kotlin으로 안드로이드 개발하기Taehwan kwon
 
Raymond james insitutional investors conference march 7 2016
Raymond james insitutional investors conference march 7 2016Raymond james insitutional investors conference march 7 2016
Raymond james insitutional investors conference march 7 2016impax-labs
 
value proposition e identità
value proposition e identitàvalue proposition e identità
value proposition e identitàKilowatt
 
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFT
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFTESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFT
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFTGeraldine Ordoñez
 
ProPublica Live: How to Fight Back if Your Rent is Illegally High
ProPublica Live: How to Fight Back if Your Rent is Illegally HighProPublica Live: How to Fight Back if Your Rent is Illegally High
ProPublica Live: How to Fight Back if Your Rent is Illegally HighCezary Podkul
 
Graphic News a #CoopUPBo
Graphic News a #CoopUPBoGraphic News a #CoopUPBo
Graphic News a #CoopUPBoKilowatt
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinAndrey Breslav
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: FunctionChan Shik Lim
 
Webinar Gratuito: "Analisis Forense al Firewall de Windows"
Webinar Gratuito: "Analisis Forense al Firewall de Windows"Webinar Gratuito: "Analisis Forense al Firewall de Windows"
Webinar Gratuito: "Analisis Forense al Firewall de Windows"Alonso Caballero
 
Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅JinKwon Lee
 
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계Seung Heun Noh
 
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...Journal For Research
 
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...Journal For Research
 
WebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampWebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampBlisson Choi
 
clean code for high quality software
clean code for high quality softwareclean code for high quality software
clean code for high quality softwareArif Huda
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기Gyutae Jo
 
Grade 9, U1-L5 Physical and chemical changes
Grade 9, U1-L5 Physical and chemical changesGrade 9, U1-L5 Physical and chemical changes
Grade 9, U1-L5 Physical and chemical changesgruszecki1
 

Andere mochten auch (20)

개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기개발자와 커뮤니티 - 기묘한 이야기
개발자와 커뮤니티 - 기묘한 이야기
 
React js 1
React js   1React js   1
React js 1
 
Kotlin으로 안드로이드 개발하기
Kotlin으로 안드로이드 개발하기Kotlin으로 안드로이드 개발하기
Kotlin으로 안드로이드 개발하기
 
Raymond james insitutional investors conference march 7 2016
Raymond james insitutional investors conference march 7 2016Raymond james insitutional investors conference march 7 2016
Raymond james insitutional investors conference march 7 2016
 
value proposition e identità
value proposition e identitàvalue proposition e identità
value proposition e identità
 
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFT
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFTESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFT
ESTRATEGIAS COMPETITIVAS DE APPLE vs MICROSOFT
 
ProPublica Live: How to Fight Back if Your Rent is Illegally High
ProPublica Live: How to Fight Back if Your Rent is Illegally HighProPublica Live: How to Fight Back if Your Rent is Illegally High
ProPublica Live: How to Fight Back if Your Rent is Illegally High
 
Graphic News a #CoopUPBo
Graphic News a #CoopUPBoGraphic News a #CoopUPBo
Graphic News a #CoopUPBo
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
Python Programming: Function
Python Programming: FunctionPython Programming: Function
Python Programming: Function
 
Webinar Gratuito: "Analisis Forense al Firewall de Windows"
Webinar Gratuito: "Analisis Forense al Firewall de Windows"Webinar Gratuito: "Analisis Forense al Firewall de Windows"
Webinar Gratuito: "Analisis Forense al Firewall de Windows"
 
Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅
 
Cefalea
CefaleaCefalea
Cefalea
 
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계
아카마이 CDN 과 함께, 마음이 편해지는 인프라 설계
 
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...
PAPER ON WELDABILITY OF H30 ALUMINIUM WITH BS970 MILD STEEL USING FRICTION WE...
 
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...
DISTRIBUTION OF ELECTRIC FIELD ANALYSIS IN 36 KV ROOF TOP BUSHING BY USING FE...
 
WebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscampWebRTC 전망 최진호_webappscamp
WebRTC 전망 최진호_webappscamp
 
clean code for high quality software
clean code for high quality softwareclean code for high quality software
clean code for high quality software
 
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기[DevOn 2013] Backbone.js로 능동적  M-V 디자인 구현하기
[DevOn 2013] Backbone.js로 능동적 M-V 디자인 구현하기
 
Grade 9, U1-L5 Physical and chemical changes
Grade 9, U1-L5 Physical and chemical changesGrade 9, U1-L5 Physical and chemical changes
Grade 9, U1-L5 Physical and chemical changes
 

Ähnlich wie KotlinJS Overview - TwiceRound #001

Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without DockerfileWon-Chon Jung
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우Arawn Park
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow석환 홍
 
Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기 철민 배
 
WebKit / Blink Community 동향 및 개발방향
WebKit / Blink Community 동향 및 개발방향WebKit / Blink Community 동향 및 개발방향
WebKit / Blink Community 동향 및 개발방향Gyuyoung Kim
 
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기YoungjikYoon
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Leonardo YongUk Kim
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합Daeseok Kim
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013명신 김
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Changyeop Kim
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부mosaicnet
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaLazy Ahasil
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetesNAVER D2
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축철구 김
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSKenneth Ceyer
 

Ähnlich wie KotlinJS Overview - TwiceRound #001 (20)

Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
Source To URL Without Dockerfile
Source To URL Without DockerfileSource To URL Without Dockerfile
Source To URL Without Dockerfile
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow[Open-infradays 2019 Korea] jabayo on Kubeflow
[Open-infradays 2019 Korea] jabayo on Kubeflow
 
Angular2 톺아보기
Angular2 톺아보기 Angular2 톺아보기
Angular2 톺아보기
 
WebKit / Blink Community 동향 및 개발방향
WebKit / Blink Community 동향 및 개발방향WebKit / Blink Community 동향 및 개발방향
WebKit / Blink Community 동향 및 개발방향
 
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기
Gradle Kotlin 컨벤션 플러그인으로 효율적으로 멀티 모듈 관리하기
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
2015 oce specification
2015 oce specification2015 oce specification
2015 oce specification
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합백엔드 서버 개발과 코틀린의 조합
백엔드 서버 개발과 코틀린의 조합
 
C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013C++ 개발자와 함께 하는 visual studio 2013
C++ 개발자와 함께 하는 visual studio 2013
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부구글 앱 엔진의 활용(Google App Engine) 2부
구글 앱 엔진의 활용(Google App Engine) 2부
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
C++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & NanaC++ GUI 라이브러리 소개: Qt & Nana
C++ GUI 라이브러리 소개: Qt & Nana
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축GitLab과 Kubernetes를 통한 CI/CD 구축
GitLab과 Kubernetes를 통한 CI/CD 구축
 
AngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJSAngularJS 2, version 1 and ReactJS
AngularJS 2, version 1 and ReactJS
 

KotlinJS Overview - TwiceRound #001

  • 1. KotlinJS Overview -TwiceRound Project #001- Kotlin Study 모임용
  • 2. TwiceRound ( https://github.com/nurinamu/twiceround - branch “kotlin”) - 기존의 유명한 Chrome Extension인 “Momentum”에서 영감을 받아서 시작한 “TWICE” 덕질 Project. - 기능 - 새 탭을 열 때마다 Twice 이미지 보여주기 - landscape / portrait에 맞춰 보기 - 원본 보기, dislike, 미리보기 - 원스 공지 Crawling (TBD) - 현재는 Client만 만들어진 상태로 Server 없이 Direct로 GCSE(Google Custom Search Engine) 사용 - 하지만 quota 이슈와 배포 이슈(API Key 설정)로 Appengine 서버 필요해짐. - 현재 TwiceRound 개발 환경은 Jquery + Chrome API + GCSE + Webpack - 결과물 - “TWICERound” Chrome Extension(KotlinJS) + API Server(Kotlin + Spring : Google Appengine)
  • 3. KotlinJS - Kotlin JS Compiler가 Kotlin -> Javascript 로 만들어줌. - 내가 원하는 스타일, 패턴으로 코딩하고 싶은데 JS를 다시 공부하기 싫을때 아주 좋음. ㅋ - IntelliJ 에서 Kotlin Javascript Project 생성 가능 - CLI로도 가능. 하지만 난 pass - Kotlin 1.1 에서 공식 지원 발표 - ECMA5.1 지원 -> ECMA2016 목표. - 장점 - javascript 문법 잘 몰라도 kotlin 문법만 알면 됨. - 단점 - java library import 하면 안됨. - compile 된 소스를 다시 minify+uglify 해야함. - 옵션이 있음 좋겠어 : Webpack이 출동한다면!?
  • 4. Webpack - Web application bundling framework - KotlinJS로 Compile되면 kotlin lib js와 raw compiled js가 나옴. - js 하나로 만들고 싶다. - minify, uglify하고 싶다. - 그래서 Webpack! - gulp/grunt로는 단순 concat이지만 webpack으로는 bundling되어 encapsulize할 수 있음.
  • 6. KotlinJS + JQuery - JQuery : Javascript 개발의 절친 - kotlin.js 에서 jquery.Jquery로 지원함. (1.1에서 Deprecated) - Kotlin : jq(“#id”) -> Javscript : jquery(“#id”) - 하지만 ajax 등 추가 기능은 지원되지 않음. - ts2kt를 이용하여 TypeScript를 Kotlin으로 변환하여 사용 (권장) - http://kotlinlang.org/docs/tutorials/javascript/working-with-javascript.html - http://definitelytyped.org/
  • 8. KotlinJS + JQuery - IntelliJ의 Kotlin Plugin을 1.1 이상으로 업데이트 해야함. - external wrapper를 선언해서 ts로 정의된 type을 사용 가능하게함.
  • 9. KotlinJS - Dynamic Type - dynamic modifier를 사용하면 kotlin의 validation을 skip하여 처리됨. - javascript는 type free, attribute free. kotlin은 type strict, attribute strict. 두 언어는 상극 하지만 이것은 Magic Keyword 임. - external interface - 1.1 부터 지원되기 시작하였으며, js compile된 이후 js 코드와 연결을 위한 interface 선언으로 보면됨. - JNI의 native modifier와 비슷한 느낌. - @JsName , @JsModule annotation - js compile코드로 전환시 명시적으로 명명을 전환시킬 때 사용.
  • 11. KotlinJS Limitations - JSON 전달이 안됨. - javascript는 argument로 json object를 anonymous 선언으로 전달이 가능하지만 kotlin에서는 불가능함. 해결을 위해서는 따로 data class 선언을 해야함. - 현재 이 이슈는 Issue로 되어있지만 언제 기능이 만들어질지는 모르는 일. data class를 만드는 것이 kotlin 문법에 맞다는 의견들이 다수임. 편의성이냐 철학이냐 그것이 문제로다. - Type free 처리를 하다보니 결국 NPE safety가 깨짐. - Kotlin 에서 validation을 하지 않게됨. 결국 javascript로 컴파일 되는 것이기 때문에 NPE가 발생하는 것은 아니지만 Java의 NPE safety만큼 Javascript에서 undefined error 이슈가 해결되나 했지만 그것은 안됨.
  • 12. 德業一致 NEXT - “Chrome API를 Kotlin에서 사용하기"