SlideShare a Scribd company logo
Javascript as Mini-lang on Perl

        김현승@펄마니아
JavaScript
• ECMA Script

• Web 이 성행하면서 자리를 확고히 함

• AJAX 로 진화하면서 개발패러다임을 변화

• 익숙한 문법의 약형언어

• 인력 수급이 매우 쉽다
Perl 개발자의 고민

• 유지보수인력 확보 어려움

• 사용자의 참여를 끌어들일때의 어려움
 – 보안 문제
 – 학습 문제
Perl과 JavaScript의 만남

• Perl로 핵심기능을 구현하고,



• JavaScript로 흐름을 제어한다.
Perl과 JavaScript의 만남

• Perl로 핵심기능을 구현하고,
  빨리 만들고,

• JavaScript로 흐름을 제어한다.
  누구나 사용한다.
Spider Monkey


• FireFox 에 사용되는 JavaScript Engine

• Math, Array 같은 것은 있다.

• Document, Event 같은 것은 없다.
구조
 Real World
                                       Perl World

                 JavaScript::SpiderMonkey::eval(“JavaScript CODE”)


                                                        JavaScript World

shell              sub print()          BIND          Print()
                                                                    JavaScript
                                                                      CODE
                      “PerlObject”     MAKE         PerlObject


              sub get_hello_string()    BIND         .GetHelloString()
#1. 바인딩할 함수의 정의
#!/usr/bin/perl

use JavaScript::SpiderMonkey;

# perl 로 함수 구현.
sub hello_perl # hello perl 을 리턴하는 함수
{
   return 'Hello Perl';
}

sub _print # 쉘에 글자 출력하는 함수. JS의 유일한 외부통로가 될것임
{
   print @_;
}
#2. JS객체 생성 및 바인딩

my $js = JavaScript::SpiderMonkey->new();
$js->init();

# JavaScript 환경에 PerlObject 를 생성한다.
my $obj = $js->object_by_path( "PerlObject“ );

# PerlObject에 hello_perl 함수를 HelloPerl()로 바인딩한다.
$js->function_set( "HelloPerl" , &hello_perl , $obj);

# inline 으로 Print 함수를 선언한다.
$js->function_set( "Print" , &_print            );
#3. 자바스크립트 eval
# 자바스크립트 작성
$JS = <<END_OF_JS;

  // here is JavaScript world

  var hello = PerlObject.HelloPerl(); // perl 의 scalar 를 그대로 받는다.

  hello = hello + " in JavaScript world!!n"; // scalar 를 가공하고

  Print(hello); // 외부세계로 보낸다.

END_OF_JS

# 자바스크립트로 제어 시작
$js->eval( $JS );
#4. 실행
[실행결과]
$ perl sample.pl
Hello Perl in JavaScript world!!
$
Mini-Lang 으로써의 가능성
• JavaScript 는 진입장벽이 높지 않다.

• JavaScript 는 삼각함수, 정규표현식등을 사용
  할 수 있는 풍부한 Core를 가지고 있다.

• 외부와 단절되어 안전하다.

• 그래서
  핵심코어와 비지니스로직을 분리하여, 항상
  내가 나설 필요가 없다.

More Related Content

What's hot

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
DK Lee
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Daum DNA
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
DK Lee
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
근호 최
 
Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발
Sukjoon Kim
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
Taegon Kim
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2destinycs
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
DK Lee
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
Han Jung Hyun
 
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
DK Lee
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
Arawn Park
 
아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장
Woo Yeong Choi
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
Myungjin Lee
 
Node.js
Node.jsNode.js
Node.js
ymtech
 
Ngui3 5 5 localization
Ngui3 5 5 localizationNgui3 5 5 localization
Ngui3 5 5 localization
Je Lyoung Kim
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
Dong Jun Kwon
 
Node.js intro
Node.js introNode.js intro
Node.js intro
Chul Ju Hong
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
shanka2
 

What's hot (20)

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
자바 웹 개발 시작하기 (3주차 : 스프링 웹 개발)
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
 
Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발Ruby on Rails와 함께 하는 애자일 웹 개발
Ruby on Rails와 함께 하는 애자일 웹 개발
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 
자바와 사용하기2
자바와 사용하기2자바와 사용하기2
자바와 사용하기2
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
자바 웹 개발 시작하기 (9주차 : 프로젝트 구현 – 추가적인 뷰)
 
Vert.x
Vert.xVert.x
Vert.x
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장아꿈사 발표 Node JS 프로그래밍 8장
아꿈사 발표 Node JS 프로그래밍 8장
 
JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본JSP 프로그래밍 #04 JSP 의 기본
JSP 프로그래밍 #04 JSP 의 기본
 
Node.js
Node.jsNode.js
Node.js
 
Ngui3 5 5 localization
Ngui3 5 5 localizationNgui3 5 5 localization
Ngui3 5 5 localization
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Node.js intro
Node.js introNode.js intro
Node.js intro
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
 

Similar to Javascript 를 perl에서 mini-language 로 사용하기

React native 개발 및 javascript 기본
React native 개발 및 javascript 기본React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
Tj .
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicknight1128
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
Sungchul Park
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육준일 엄
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XpressEngine
 
Java script
Java scriptJava script
Java script
영남 허
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
Tommy C. Kang
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
JinKyoungHeo
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
jongho jeong
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
Hyosang Hong
 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & Beyond
Jay Lee
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
Jaehyeuk Oh
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
Sungchul Park
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
Leonardo YongUk Kim
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
JeongHun Byeon
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
DK Lee
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발
JavaCommunity.Org
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
Lee Ji Eun
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차Seong Bong Ji
 

Similar to Javascript 를 perl에서 mini-language 로 사용하기 (20)

React native 개발 및 javascript 기본
React native 개발 및 javascript 기본React native 개발 및 javascript 기본
React native 개발 및 javascript 기본
 
Jdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamicJdk(java) 7 - 5. invoke-dynamic
Jdk(java) 7 - 5. invoke-dynamic
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육엄준일 04일차 HTML/Javascript 교육
엄준일 04일차 HTML/Javascript 교육
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
 
Java script
Java scriptJava script
Java script
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Javascript 교육자료 pdf
Javascript 교육자료 pdfJavascript 교육자료 pdf
Javascript 교육자료 pdf
 
Java 8 & Beyond
Java 8 & BeyondJava 8 & Beyond
Java 8 & Beyond
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 
Anatomy of Realm
Anatomy of RealmAnatomy of Realm
Anatomy of Realm
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
자바 웹 개발 시작하기 (7주차 : 국제화, 확인검증, 예외처리)
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
Hacosa js study 4주차
Hacosa js study 4주차Hacosa js study 4주차
Hacosa js study 4주차
 

Javascript 를 perl에서 mini-language 로 사용하기

  • 1. Javascript as Mini-lang on Perl 김현승@펄마니아
  • 2. JavaScript • ECMA Script • Web 이 성행하면서 자리를 확고히 함 • AJAX 로 진화하면서 개발패러다임을 변화 • 익숙한 문법의 약형언어 • 인력 수급이 매우 쉽다
  • 3. Perl 개발자의 고민 • 유지보수인력 확보 어려움 • 사용자의 참여를 끌어들일때의 어려움 – 보안 문제 – 학습 문제
  • 4. Perl과 JavaScript의 만남 • Perl로 핵심기능을 구현하고, • JavaScript로 흐름을 제어한다.
  • 5. Perl과 JavaScript의 만남 • Perl로 핵심기능을 구현하고, 빨리 만들고, • JavaScript로 흐름을 제어한다. 누구나 사용한다.
  • 6. Spider Monkey • FireFox 에 사용되는 JavaScript Engine • Math, Array 같은 것은 있다. • Document, Event 같은 것은 없다.
  • 7. 구조 Real World Perl World JavaScript::SpiderMonkey::eval(“JavaScript CODE”) JavaScript World shell sub print() BIND Print() JavaScript CODE “PerlObject” MAKE PerlObject sub get_hello_string() BIND .GetHelloString()
  • 8. #1. 바인딩할 함수의 정의 #!/usr/bin/perl use JavaScript::SpiderMonkey; # perl 로 함수 구현. sub hello_perl # hello perl 을 리턴하는 함수 { return 'Hello Perl'; } sub _print # 쉘에 글자 출력하는 함수. JS의 유일한 외부통로가 될것임 { print @_; }
  • 9. #2. JS객체 생성 및 바인딩 my $js = JavaScript::SpiderMonkey->new(); $js->init(); # JavaScript 환경에 PerlObject 를 생성한다. my $obj = $js->object_by_path( "PerlObject“ ); # PerlObject에 hello_perl 함수를 HelloPerl()로 바인딩한다. $js->function_set( "HelloPerl" , &hello_perl , $obj); # inline 으로 Print 함수를 선언한다. $js->function_set( "Print" , &_print );
  • 10. #3. 자바스크립트 eval # 자바스크립트 작성 $JS = <<END_OF_JS; // here is JavaScript world var hello = PerlObject.HelloPerl(); // perl 의 scalar 를 그대로 받는다. hello = hello + " in JavaScript world!!n"; // scalar 를 가공하고 Print(hello); // 외부세계로 보낸다. END_OF_JS # 자바스크립트로 제어 시작 $js->eval( $JS );
  • 11. #4. 실행 [실행결과] $ perl sample.pl Hello Perl in JavaScript world!! $
  • 12. Mini-Lang 으로써의 가능성 • JavaScript 는 진입장벽이 높지 않다. • JavaScript 는 삼각함수, 정규표현식등을 사용 할 수 있는 풍부한 Core를 가지고 있다. • 외부와 단절되어 안전하다. • 그래서 핵심코어와 비지니스로직을 분리하여, 항상 내가 나설 필요가 없다.