SlideShare a Scribd company logo
Clojure
개발환경 셋팅 및 개발예
제

김은평
은하수를 여행하는 히치하이커를 위한 안
내서
목차
●

Clojure?

●

Clojure 개발환경 셋팅 및 개발 예제

●

마치며

●

참고자료
Clojure?
●

소개

●

역사

●

창시자

●

Lisp

●

비교

●

개발
Clojure? - 소개

JVM 위에서 돌아가는 Lisp 계통 언어 .
발음은 "closure" 와 같음 .
Clojure? - 역사
●

1930 년
–

●

1958 년
–

●

Java 출현 - James Gosling, Sun Microsystems

2007 년 10 월
–

●

첫번째 Lisp 구현 - Steve Russell

1995 년
–

●

Lisp 언어 소개 - John McCarthy

1959 년
–

●

lambda calculus 소개 - Alonzo Church

Clojure 출현 1.0.x - Rich Hickey

2013 년 3 월 10 일
–

Clojure 1.5.1
Clojure? - 창시자

●

리치히키 (Rich Hickey)

●

20 년 이상의 개발경력
–

scheduling systems, broadcast automation, audio analysis,
fingerprinting, database design, yield management, exit poll
systems, machine listening

●

NYU(New York University) 에서 Advanced C++ 강의

●

다룬 언어들 C, C++, Java, C#

●

맘에드는게 없어 Clojure 를 3 년동안 개발

●

.clj(C#, Lisp, Java)
Clojure - Lisp
Clojure? - 비교 - scala
●

중위표기법

●

정적타입

●

객체지향

●

타입시스템
Clojure? - 비교 - clojure
●

전위표기법

●

동적타입

●

데이터지향

●

코드 역시 데이터
Clojure - 개발 - Java
Clojure - 개발 - Clojure
목차
●

Clojure?

●

Clojure 개발환경 셋팅 및 개발 예제

●

마치며

●

참고자료
Setting and Development
●

Leiningen

●

nRepl

●

LightTable

●

Eclipse

●

Vim

●

Emacs
Leiningen

https://github.com/technomancy/leiningen
Leiningen
Ant: Java 프로젝트 관리도구
Leiningen: Clojure 프로젝트 관리도구
라이닝겐 (Leiningen) 은 끝내 개미 (Ant) 들을 물리치고
자신의 농장을 지켰다 .
“Leiningen Versus the Ants” - Carl Stephenson
Leiningen - command
lein new

새로운 프로젝트

lein deps

의존성 dependencies

lein uberjar

모두 jar 로 묶기

lein repl

REPL 실행
Leiningen - 설치 및 REPL
Leiningen - JAVA 환경설정
JAVA_HOME
C:Program FilesJavajdk1.7.0_40

PATH
%PATH%;%JAVA_HOME%bin
Leinin – new hello
> cd prj
> lein new hello
> tree hello

hello
├─doc
├─resources
├─src
│

└─hello

└─test
└─hello
nRepl
https://github.com/clojure/tools.nrepl

Clojure *n*etwork REPL.
Read–Eval–Print-Loop
nRepl
> lein repl
LightTable
장점 : 쉽게 사용할 수 있다 .
단점 : 버전이 너무 낮다 .

CHRIS GRANGER
Kickstarter: $316,270
Joined Y combinator
LightTable
http://www.lighttable.com/
LightTable - 셋팅
http://www.lighttable.com/
1. 위 사이트에서 압축파일을 다운받는다 .
2. 압축을 푼다 .
3. 폴더에 있는 Light Table 을 실행한
다.
LightTable - 시연
Literal
Instarepl
LightTable - 조작키
Ctrl+Space

메뉴부르기

Ctrl+Enter

표현식 평가하기
CounterClockwise
장점 : eclipse 기반 . Java 사용자들이 많
다.
단점 : 다른 에디터에 비해 무겁다 .
CounterClockwise
http://code.google.com/p/counterclockwise/
CounterClockwise - 셋팅
하나 . Eclipse 로 하는 방법 .
1. http://eclipse.org/downloads/
2. Help> Install New Software>
http://updatesite.ccw-ide.org/stable/
CounterClockwise - 셋팅
둘 . 미리 package 된 것으로 하는 방법 .

1.
http://code.google.com/p/counterclockwise/wi

2. 압축풀고 실행 .
CounterClockwise - 시연
Java interop
lein javac
lein uberjar
Eclipse - 조작키
Ctrl+Enter

현재 표현식 평가

F3

정의로 이동
Vim
장점 : 리눅스 유저들의 친숙함 .
단점 : 확장 기능이 아직은 미숙함 .
Vi - Bill Joy

Vim - Bram Moolenaar
Vim - vim-fireplace
https://github.com/tpope/vim-fireplace
Vim - 셋팅
1. init-loader
2. NeoBundle
3. vim-fireplace
Vim - 시연
Quil
Vim - 조작키
Shift + k

문서 보기

[ + d

정의 보기

[ + C-d

정의로 이동

C-o

정의에서 되돌아오기

cpp

표현식 평가

cmm

매크로확장

C-x C-o

자동완성 - 입력모드
Emacs
장점 : 자유로움 .
단점 : 익히는데 시간이 많이 든다 .
Richard Stallman

Guy L. Steele, Jr.
Emacs – CIDER
https://github.com/clojure-emacs/cider
Clojure IDE and REPL for Emacs
(formerly nrepl.el)
Emacs - 셋팅
0. M-x list-packages
1. init-loader
2. cider
3. auto-complete
4. ac-nrepl
Emacs - 시연
Macro 확장
Emacs - 시연
String interpolation 소개

https://github.com/clojure/core.incubato
infix 소개
https://github.com/liebke/incanter/b
lob/master/modules/incantercore/src/incanter/infix.clj
Emacs - 조작키
C-c M-j

cider 접속

C-c M-n

namespace 설정

C-M-x

표현식 평가

C-c M-m

매크로 확장

M-.

정의로 이동

M-,

정의에서 되돌아오기
목차
●

Clojure?

●

Clojure 개발환경 셋팅 및 개발 예제

●

마치며

●

참고자료
단점들
전위표기법 : 익숙치 않다 . 그러므로 어렵다 .
디버깅 : 알아보기 힘든 stacktrace.
색다름 : OOP,Mutable <> Data,Immutable
커뮤니티 : 언어 사용자가 적은 만큼 작다 .
다른 시각으로 세상을 보면 ?
오늘날의 대부분의 언어
Java, C#, Python, Ruby, Scala
statefull OO
OOP 역시 지원은 하지만 ...
지향은 아닌
보다 다른 방식으로 문제를 해결하려는
하나의 실험 .
새로운 시도
idea 를 구현 ( 혹은 구경 ) 할 수 있는 언어 .
새로운걸 시도해 볼 수 있는 언어 .
Clojurescript, core.logic, core.typed
....
추천 도서
Joy of Clojure

Clojure Programming
놀이터

http://www.4clojure.com/
if you give someone Fortran,
he has Fortran.
if you give someone Lisp,
he has any language he pleases
- guy steele.
환영합니다
한국 Clojure 위키
http://clojure.or.kr
한국 K-lisp 그룹

https://groups.google.com/forum/?fromgro
목차
●

Clojure?

●

Clojure 개발환경 셋팅 및 개발 예제

●

마치며

●

참고자료
참고자료
wiki:Lisp(programming_lanugage)
http://en.wikipedia.org/wiki/Lisp_%28programming_language%29

wiki:Clojure
http://en.wikipedia.org/wiki/Clojure

github:clojure-1.0.x
https://github.com/clojure/clojure/tree/1.0.x

Lisp 의 car 와 cdr 의 기원
http://www.iwriteiam.nl/HaCAR_CDR.html
참고자료
리치히키가 설명하는 Clojure
http://www.infoq.com/presentations/hickey-clojure

Rich Hickey Q&A. Fogus 가 질문 , Hickey 가 답변하는 식으로 진행 .
http://www.codequarterly.com/2011/rich-hickey/

리치히키의 뇌를 들여다 보고 싶다면 ...

http://www.flyingmachinestudios.com/programming/the-unofficial-guide-to-rich-hi

데이터를 다룸에 있어 , OOP 접근법과는 다른 Clojure 의 접근법에 대해 설명 .
http://www.infoq.com/presentations/clojure-data-state-value
http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey

More Related Content

Similar to Clojure development environment

1. klaytn intro
1. klaytn intro1. klaytn intro
1. klaytn intro
전 민규
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드
JavaCommunity.Org
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Dan Kang (강동한)
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
Youngjae Kim
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
Changyeop Kim
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
Kenu, GwangNam Heo
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
Jeongkyu Shin
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
Chanwoong Kim
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발
Terry Cho
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324
종인 전
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
rockplace
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
hoondong kim
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
Dexter Jung
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
YoungSu Son
 
Macro for Game
Macro for GameMacro for Game
Macro for Game
Jeong-Hoon Mo
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
Ji-Woong Choi
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER Engineering
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
Nomad Connection, Inc.
 
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Platform
 

Similar to Clojure development environment (20)

1. klaytn intro
1. klaytn intro1. klaytn intro
1. klaytn intro
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기Kubernetes를 통한 laravel 개발프로세스 개선하기
Kubernetes를 통한 laravel 개발프로세스 개선하기
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼오픈 소스 사용 매뉴얼
오픈 소스 사용 매뉴얼
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발제13회컨퍼런스 조대협 서버사이드개발
제13회컨퍼런스 조대협 서버사이드개발
 
망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324망고100 메뉴얼 환경부터포팅까지-2011-0324
망고100 메뉴얼 환경부터포팅까지-2011-0324
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
Macro for Game
Macro for GameMacro for Game
Macro for Game
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
NAVER TECH CONCERT_FE2019_빠르게 훑어보는 웹 개발 트렌드
 
[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08[Nomad connection]docker seminar 15.10.08
[Nomad connection]docker seminar 15.10.08
 
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발 Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
Clova Extension 음성기반 게임 기획 및 설계 / FaaS를 이용한 개발
 

More from EunPyoung Kim

Clojure with panama
Clojure with panamaClojure with panama
Clojure with panama
EunPyoung Kim
 
Interop with c in clojure
Interop with c in clojureInterop with c in clojure
Interop with c in clojure
EunPyoung Kim
 
Using FXML on Clojure
Using FXML on ClojureUsing FXML on Clojure
Using FXML on Clojure
EunPyoung Kim
 
On lisp ch18
On lisp ch18On lisp ch18
On lisp ch18
EunPyoung Kim
 
On lisp ch09
On lisp ch09On lisp ch09
On lisp ch09
EunPyoung Kim
 
(Lisp)
(Lisp)(Lisp)

More from EunPyoung Kim (6)

Clojure with panama
Clojure with panamaClojure with panama
Clojure with panama
 
Interop with c in clojure
Interop with c in clojureInterop with c in clojure
Interop with c in clojure
 
Using FXML on Clojure
Using FXML on ClojureUsing FXML on Clojure
Using FXML on Clojure
 
On lisp ch18
On lisp ch18On lisp ch18
On lisp ch18
 
On lisp ch09
On lisp ch09On lisp ch09
On lisp ch09
 
(Lisp)
(Lisp)(Lisp)
(Lisp)
 

Clojure development environment