SlideShare a Scribd company logo
Atom Package
Part 1
이강석
gangseok514@gmail.com
10.19.2015
Atom
Electron(Chromium+Nodejs) 기반의 텍스트 에디터
—> 자바스크립트로 개발되었다.
Nuclear + IDE
Facebook가 개발한 패키지 세트(IDE-like)
Nuclide
• 대부분의 패키지들이 React로 작성되어 있다.
• Remote Development
• Flow and JavaScript
• Hack Development
• Using with Mercurial
Atom(Electron)의 특징
• 프론트엔드에서 노드를 사용할 수 있다.
• NPM 을 이용할 수 있다는 소리다.
• 윈도우/맥/리눅스 플랫폼을 지원한다.
• Chromium 기반이므로 크로스 브라우징에서 자유롭다.
• 기본 코드가 커피스크립트로 작성되어 있다.
• 코어는 최소화 되어있고 대부분 패키지로 구성되어 있다.
프론트엔드에서 노드를 사용할 수 있다.
• CommonJS 방식으로 원하는 노드 모듈을 불러와서 사용
• 필요한 모듈은 노드처럼 package.json 에 명시하면 됨
• 서버-클라이언트 방식도 됨

(http서버를 backend로 돌릴수 있다는 의미)
• 정확히 얘기하면 현재 io.js 를 사용중임(곧 노드4.0으로 바뀔듯)
APM
• Atom Package Manager
• NPM 의 기능에 Package 의 설치/삭제 등의 기능을 지원
• Menu > Setting View > Install Package 등에 이용하거
나 CLI로 실행할 수 있다.
• Jasmine Testing Framework 을 지원한다.
커피스크립트
• 기본 코드가 커피스크립트로 구성됨
• 물론, 자바스크립트도 됨(권장이 커피스크립트)

자바스크립트와 커피스크립트를 모두 포용함(단점같은
장점)
• 기본 코드는 빌드시 자바스크립트로 변환됨
• Inspector 에서 지원하는 SourceMap 을 통해 커피스크
립트를 직접 디버깅 가능(컴파일된 자바스크립트로 하고
싶으면 Sourcemap 을 Disable하면 됨)
Atom API
• Atom API 사이트에 간략히 소개되어 있음
• Public API 으로만 따지면 지원하는 기능이 적으나

오픈소스를 보면 Public API 수준의 여러 메서드가 존재
• 즉, 자유자재로 사용하려면 Atom 소스코드를 보고 확인
하는 것이 좋음(커피스크립트라는게 함정)
• Core API를 변형하는 것은 어려움

(어차피 자바스크립트이기 때문에 해킹이 가능하나 급속
한 버전업데이트로 안정성에 문제가 있을 수 있음)
Package 작성예제
• Menu > Packages > Package Generator > Generate
Atom Package 를 선택하면 기본 템플릿이 생성됨
- keymaps : 단축키를 등록하는 곳(cson은 json 의 coffeescript 버전)
- lib : 구현 코드가 들어가는 곳
- menus: 메뉴, 컨텍스트 메뉴를 등록하는 곳(API 를 이용해서 동적으로

도 추가할 수 있다.
- spec : Jasmine Test 코드
- style : 스타일시트를 등록하는 곳(less 포맷이다)
- package.json : Node 포맷과 비슷하게 작성한다.
Package.json
• 특별히 중요한 속성만 설명

- version : semantic versioning

기준으로 작성하면 됨

- activateCommands : Main 객체의

activate 메서드를 호출하는 command

속성은 발생 엘레먼트이고, 값은 명령어이다.

이 속성이 없으면 패키지설치후 항상 자동

으로 Activate가 호출된다.

- 그외, 다른 패키지의 서비스를 제공할 수 있는 속성도 지정할 수 있다.



Main Module
• Main Module 은 Object 임
• activate : 패키지 로딩시 최초
로 불리는 메서드, serialize에서
저장된 state가 인수로 주어진
다.
• deactivate : Atom 을 리로드
한다거나 패키지를 Disable 시
킬때 호출되는 메서드
• serialize : activate 시마다 초
기화를 방지하기 위한 저장방식
을 제공하는 메서드. 단, 모든
어플리케이션(여러개의 Atom)
에서 공유되는 것이 아니고,
project 기준으로만 공유됨
View?
• 대부분의 Atom 패키지는 HTML을 View로서 사용하지 않음

(하려면 할수는 있으나 권장하지 않음)
• Atom 자체적으로 View 클래스를 제공. 이를 상속받아 작성
• {View} = require ‘atom-space-pen-views’ 로 클래스를 받아올 수 있음
• View 는 jQuery 를 상속하고 있어서 jQuery를 바로 사용 할수 있는 편리함을
제공
• View 이외에도 다양하게 UI를 구현할 수 있음
• HTMLElement 를 상속받아 View를 구성할 수도 있음

(by Atom-utils npm module)

View - 구조
• @content : DOM을 구성해주
는 템플릿 메서드, @가 붙어 있
다는 것에 주의. 객체 생성시
constructor 호출후 불림

여기서 outlet은 jQuery DOM
Object로 생성해주는 역할을 함
• initialize : @content 호출 후
불리는 메서드로 생성된 DOM
에 접근할 수 있음
• 그외, attach, detach 를 통해
DOM의 append, remove를 조
정할 수 있음
개발하면서 발견한 단점
• 웹 전용 스펙인 경우 노드를 사용할 수 없다.

예: Worker 를 사용할 경우 require 키워드 등은 인식안됨. 실행시에도
Coffee 포맷을 실행시킬수는 없다.

실행 기준 디렉토리도 상대경로를 지정할수 없다.

(상대경로의 기준경로는 Atom public 디렉토리임)

이 경우 커뮤니티에서는 Worker 가 아닌 BufferedProcess를 사용할 것을
권장하고 있다.
• 텍스트에디터 기본 기능이 부족하며, 커스터마이징에 한계가 있다. (브라켓
에 비교해서 속도는 매우 빠름)
• 크롬이라서 메모리 점유가 크다(에디터인데..ㅠㅠ)
• API에 대한 매뉴얼이 성의없게 작성되어 있다(나아지겠죠?)
그럼에도 불구하고...
• Atom 은 1.0이 배포된 뒤에 빠른 속도로 버전업이 이루어지고
있음(9월 현재 1.1.0베타까지 나옴)
• Coffeescript 및 기본 구조에 대한 러닝커브를 지나면

개발속도가 현저히 빨라짐

(Javascript 로도 가능하나 매뉴얼만으로는 한계가 있어 다른
패키지를 참고해야함)
• Core 코드는 다듬을 필요가 많아 컨트리뷰션의 기회가 많음
• 또한 생각보다 현재 개발된 패키지의 수준이 높지 않고,

살펴보면 개발이 필요한 아이템들이 많다.
Atom 은...
• 텍스트 에디터이다. IDE 가 아니다.

다만 여러 패키지들을 붙여 IDE-like 화 할수 있다.
• 서브라임등에 비하면 아직 많이 부족하나 패키지 확장성
을 고려하면 웹이 브라우저를 벗어나 어플리케이션 제작
도 할수 있다는 가능성을 제시하고 있다.

More Related Content

PDF
2014년 02월 XE세미나 XE서버서능개선
PPTX
Nodejs 발표자료
PDF
portfolio-subtitle-convert-김남운
PPTX
Go revel 구성_루팅_정리
PDF
Node.js 기본
PPTX
Rb vs wp 로드타임 성능비교
PDF
05_동기화_개요
PDF
웹 프론트엔드 테스팅
2014년 02월 XE세미나 XE서버서능개선
Nodejs 발표자료
portfolio-subtitle-convert-김남운
Go revel 구성_루팅_정리
Node.js 기본
Rb vs wp 로드타임 성능비교
05_동기화_개요
웹 프론트엔드 테스팅

What's hot (20)

PPTX
Chrome DevTools로 JS 메모리릭 디버깅하기.pptx
PDF
오픈소스 성능 최적화 보고서 ch07. Infinispan
PDF
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
PDF
동시성 프로그래밍 기초 in GO
PPTX
Front end 웹사이트 성능 측정 및 개선
PDF
맛만 보자 Undertow
PDF
이승재, 실시간 HTTP 양방향 통신, NDC2012
PDF
High performance networking in chrome
PPTX
모바일 Rpg 게임서버 리팩토링
PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PPTX
Mem shrink
PDF
[120316] node.js 프로그래밍 5장
PDF
[C5]deview 2012 nodejs
PPTX
Leadweb Nodejs
PPTX
공성대전 C# 사용기
PDF
테라로 살펴본 MMORPG의 논타겟팅 시스템
PPTX
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
PDF
Golang 개발 환경(profile) 다르게 잡아주기
PPTX
Webpack&babel
PDF
NET 최선단 기술에 의한 고성능 웹 애플리케이션
Chrome DevTools로 JS 메모리릭 디버깅하기.pptx
오픈소스 성능 최적화 보고서 ch07. Infinispan
게임서버프로그래밍 #4 - 멀티스레드 프로그래밍
동시성 프로그래밍 기초 in GO
Front end 웹사이트 성능 측정 및 개선
맛만 보자 Undertow
이승재, 실시간 HTTP 양방향 통신, NDC2012
High performance networking in chrome
모바일 Rpg 게임서버 리팩토링
서버 아키텍처 이해를 위한 프로세스와 쓰레드
Mem shrink
[120316] node.js 프로그래밍 5장
[C5]deview 2012 nodejs
Leadweb Nodejs
공성대전 C# 사용기
테라로 살펴본 MMORPG의 논타겟팅 시스템
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Golang 개발 환경(profile) 다르게 잡아주기
Webpack&babel
NET 최선단 기술에 의한 고성능 웹 애플리케이션
Ad

Viewers also liked (10)

PPTX
Wpf study with charles fetzold 2
PPTX
웹표준(XHTML+CSS)
PPTX
장치 문맥을 이용한Direct2D
PPTX
[0602 박민근] direct2 d
PDF
웹브라우저는 어떻게 동작하나?
PDF
Mobile App, Mobile Web : Introduction
PDF
(C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌
PDF
CSS 실무테크닉
PDF
World Energy Outlook 2015: Presentation to Press
Wpf study with charles fetzold 2
웹표준(XHTML+CSS)
장치 문맥을 이용한Direct2D
[0602 박민근] direct2 d
웹브라우저는 어떻게 동작하나?
Mobile App, Mobile Web : Introduction
(C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌
CSS 실무테크닉
World Energy Outlook 2015: Presentation to Press
Ad

Similar to Atom package part1 (20)

PPTX
Electron forge
PDF
도구를 활용한 더 나은 웹 개발: Yeoman
PDF
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
PPTX
빠르게훓어보는 Node.js와 Vert.x
PDF
Polymer따라잡기
PDF
[데브루키] 게임 엔진 아키텍쳐_2장_도구 (Game Engine Architecture Chapter.2-Tools)
PPTX
[123] electron 김성훈
PPTX
CUDA 프로그래밍 기초 MODUCON2018
PPTX
Sonatype nexus 로 docker registry 관리하기
PPTX
Single-page Application
PDF
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
PDF
Node.js intro
PDF
[IoT] MAKE with Open H/W + Node.JS - 3rd
PDF
웹 IDE 비교
PDF
Electron
PDF
메이븐 기본 이해
PDF
코드잇-타스-특강.pdf
PDF
[17.01.19] docker introduction (Korean Version)
PPTX
Backend Master | 3.1.2 Build - Java build tool - Maven
PPTX
Web assembly 맛보기
Electron forge
도구를 활용한 더 나은 웹 개발: Yeoman
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
빠르게훓어보는 Node.js와 Vert.x
Polymer따라잡기
[데브루키] 게임 엔진 아키텍쳐_2장_도구 (Game Engine Architecture Chapter.2-Tools)
[123] electron 김성훈
CUDA 프로그래밍 기초 MODUCON2018
Sonatype nexus 로 docker registry 관리하기
Single-page Application
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Node.js intro
[IoT] MAKE with Open H/W + Node.JS - 3rd
웹 IDE 비교
Electron
메이븐 기본 이해
코드잇-타스-특강.pdf
[17.01.19] docker introduction (Korean Version)
Backend Master | 3.1.2 Build - Java build tool - Maven
Web assembly 맛보기

Atom package part1

  • 2. Atom Electron(Chromium+Nodejs) 기반의 텍스트 에디터 —> 자바스크립트로 개발되었다.
  • 3. Nuclear + IDE Facebook가 개발한 패키지 세트(IDE-like)
  • 4. Nuclide • 대부분의 패키지들이 React로 작성되어 있다. • Remote Development • Flow and JavaScript • Hack Development • Using with Mercurial
  • 5. Atom(Electron)의 특징 • 프론트엔드에서 노드를 사용할 수 있다. • NPM 을 이용할 수 있다는 소리다. • 윈도우/맥/리눅스 플랫폼을 지원한다. • Chromium 기반이므로 크로스 브라우징에서 자유롭다. • 기본 코드가 커피스크립트로 작성되어 있다. • 코어는 최소화 되어있고 대부분 패키지로 구성되어 있다.
  • 6. 프론트엔드에서 노드를 사용할 수 있다. • CommonJS 방식으로 원하는 노드 모듈을 불러와서 사용 • 필요한 모듈은 노드처럼 package.json 에 명시하면 됨 • 서버-클라이언트 방식도 됨
 (http서버를 backend로 돌릴수 있다는 의미) • 정확히 얘기하면 현재 io.js 를 사용중임(곧 노드4.0으로 바뀔듯)
  • 7. APM • Atom Package Manager • NPM 의 기능에 Package 의 설치/삭제 등의 기능을 지원 • Menu > Setting View > Install Package 등에 이용하거 나 CLI로 실행할 수 있다. • Jasmine Testing Framework 을 지원한다.
  • 8. 커피스크립트 • 기본 코드가 커피스크립트로 구성됨 • 물론, 자바스크립트도 됨(권장이 커피스크립트)
 자바스크립트와 커피스크립트를 모두 포용함(단점같은 장점) • 기본 코드는 빌드시 자바스크립트로 변환됨 • Inspector 에서 지원하는 SourceMap 을 통해 커피스크 립트를 직접 디버깅 가능(컴파일된 자바스크립트로 하고 싶으면 Sourcemap 을 Disable하면 됨)
  • 9. Atom API • Atom API 사이트에 간략히 소개되어 있음 • Public API 으로만 따지면 지원하는 기능이 적으나
 오픈소스를 보면 Public API 수준의 여러 메서드가 존재 • 즉, 자유자재로 사용하려면 Atom 소스코드를 보고 확인 하는 것이 좋음(커피스크립트라는게 함정) • Core API를 변형하는 것은 어려움
 (어차피 자바스크립트이기 때문에 해킹이 가능하나 급속 한 버전업데이트로 안정성에 문제가 있을 수 있음)
  • 10. Package 작성예제 • Menu > Packages > Package Generator > Generate Atom Package 를 선택하면 기본 템플릿이 생성됨 - keymaps : 단축키를 등록하는 곳(cson은 json 의 coffeescript 버전) - lib : 구현 코드가 들어가는 곳 - menus: 메뉴, 컨텍스트 메뉴를 등록하는 곳(API 를 이용해서 동적으로
 도 추가할 수 있다. - spec : Jasmine Test 코드 - style : 스타일시트를 등록하는 곳(less 포맷이다) - package.json : Node 포맷과 비슷하게 작성한다.
  • 11. Package.json • 특별히 중요한 속성만 설명
 - version : semantic versioning
 기준으로 작성하면 됨
 - activateCommands : Main 객체의
 activate 메서드를 호출하는 command
 속성은 발생 엘레먼트이고, 값은 명령어이다.
 이 속성이 없으면 패키지설치후 항상 자동
 으로 Activate가 호출된다.
 - 그외, 다른 패키지의 서비스를 제공할 수 있는 속성도 지정할 수 있다.
 

  • 12. Main Module • Main Module 은 Object 임 • activate : 패키지 로딩시 최초 로 불리는 메서드, serialize에서 저장된 state가 인수로 주어진 다. • deactivate : Atom 을 리로드 한다거나 패키지를 Disable 시 킬때 호출되는 메서드 • serialize : activate 시마다 초 기화를 방지하기 위한 저장방식 을 제공하는 메서드. 단, 모든 어플리케이션(여러개의 Atom) 에서 공유되는 것이 아니고, project 기준으로만 공유됨
  • 13. View? • 대부분의 Atom 패키지는 HTML을 View로서 사용하지 않음
 (하려면 할수는 있으나 권장하지 않음) • Atom 자체적으로 View 클래스를 제공. 이를 상속받아 작성 • {View} = require ‘atom-space-pen-views’ 로 클래스를 받아올 수 있음 • View 는 jQuery 를 상속하고 있어서 jQuery를 바로 사용 할수 있는 편리함을 제공 • View 이외에도 다양하게 UI를 구현할 수 있음 • HTMLElement 를 상속받아 View를 구성할 수도 있음
 (by Atom-utils npm module)

  • 14. View - 구조 • @content : DOM을 구성해주 는 템플릿 메서드, @가 붙어 있 다는 것에 주의. 객체 생성시 constructor 호출후 불림
 여기서 outlet은 jQuery DOM Object로 생성해주는 역할을 함 • initialize : @content 호출 후 불리는 메서드로 생성된 DOM 에 접근할 수 있음 • 그외, attach, detach 를 통해 DOM의 append, remove를 조 정할 수 있음
  • 15. 개발하면서 발견한 단점 • 웹 전용 스펙인 경우 노드를 사용할 수 없다.
 예: Worker 를 사용할 경우 require 키워드 등은 인식안됨. 실행시에도 Coffee 포맷을 실행시킬수는 없다.
 실행 기준 디렉토리도 상대경로를 지정할수 없다.
 (상대경로의 기준경로는 Atom public 디렉토리임)
 이 경우 커뮤니티에서는 Worker 가 아닌 BufferedProcess를 사용할 것을 권장하고 있다. • 텍스트에디터 기본 기능이 부족하며, 커스터마이징에 한계가 있다. (브라켓 에 비교해서 속도는 매우 빠름) • 크롬이라서 메모리 점유가 크다(에디터인데..ㅠㅠ) • API에 대한 매뉴얼이 성의없게 작성되어 있다(나아지겠죠?)
  • 16. 그럼에도 불구하고... • Atom 은 1.0이 배포된 뒤에 빠른 속도로 버전업이 이루어지고 있음(9월 현재 1.1.0베타까지 나옴) • Coffeescript 및 기본 구조에 대한 러닝커브를 지나면
 개발속도가 현저히 빨라짐
 (Javascript 로도 가능하나 매뉴얼만으로는 한계가 있어 다른 패키지를 참고해야함) • Core 코드는 다듬을 필요가 많아 컨트리뷰션의 기회가 많음 • 또한 생각보다 현재 개발된 패키지의 수준이 높지 않고,
 살펴보면 개발이 필요한 아이템들이 많다.
  • 17. Atom 은... • 텍스트 에디터이다. IDE 가 아니다.
 다만 여러 패키지들을 붙여 IDE-like 화 할수 있다. • 서브라임등에 비하면 아직 많이 부족하나 패키지 확장성 을 고려하면 웹이 브라우저를 벗어나 어플리케이션 제작 도 할수 있다는 가능성을 제시하고 있다.