꼬반 Blog

SVN 설치하기

http://firejune.com/1682/CentOS%EC%97%90+Subversion+%EC%84%A4%EC%B9%98%ED%9B%84+%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

Read More

Sublime Text 3 사용하기

====== 0. intro ====== 이전에 sublime_text2 를 정말 좋은 에디터라고 생각하고 사용해 왔다. 그러나 사용법들을 숙지하지 않고 그냥 필요한 부분만 대충 사용하였었기에 이젠 새로 나오고 있는 3 버전에 대해 정리 및 활용하기 위한 포스트를 작성한다. 참조사이트 목록 http://parkcj.wordpress.com/2013/01/30/sublime-text-2-%EC%84%A4%EC%B9%98-%ED%9B%84-%ED%95%B4%EC%95%BC%ED%95%A0-%EA%B2%83%EB%93%A4/ http://demun.tistory.com/2241 http://blog.daum.net/sman76/15711546 http://martian36.tistory.com/1226 htt..

Read More

Jira Upgrade

새로운 서버에 지라설치하고 기존 지라 마이그레이션 하기 1. 기존 서버의 지라에서 databases를 xml로 백업 한다. 관리자 메뉴의 backup system 실행 2. DB 서버에 새로운 db를 생성한다. (utf8 - utf8-bin) 3. 기존 서버의 jira_home 폴더 (data가 있는 폴더) 를 신규 서버에 복사한다. 4. 최신 버전의 지라를 신규 서버에 다운 받아 설치한다. 5. 설치할 때 home 폴더를 카피한 폴더 위치로 지정한다. 6. 지라가 설치되면 관리자 계정 생성 후 관리자 메뉴에서 restore system 에서 아까 백업해둔 xml 파일을 복구한다. 7. 복구가 완료되면 기존의 data가 모두 정상적으로 마이그레이션 되었는지 확인한다.

Read More

Git 활용하기

…or create a new repository on the command lineecho "# message" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/username/repo_addr.git git push -u origin master …or push an existing repository from the command linegit remote add origin https://github.com/username/repo_addr.git git push -u origin master…or import code from another repo..

Read More

Eclipse 에서 Flex Plugin 설치하기

====== Eclipse 에서 Flex Plugin 설치하기 ====== 기본으로 JDK가 설치 되어 있어야 한다. 이클립스에서 Flex Plugin을 설치하여 개발환경을 준비하는 이유는 실무에 가장 적합하며(제일 많이 사용된다.) Flex Builder의 경우 JDT 의 제한으로 Eclipse 의 다양한 Plugin을 설치하는데 제약이 있으며, Servlet을 작성하고 관리하기 위해 따로 에디터를 사용해야 하기 때문에 직접 Builder가 아닌 Plugin 형태로 설치하는 것을 권장한다. 설치순서 * 목록먼저 Eclipse 를 다운 받는다. 최신 버전의 Helios 의 경우 Flex Plugin 을 설치하면 정상적으로 동작하지 않기 때문에 Galileo R2 버전으로 다운 받아서 원하는 위치에 압축을..

Read More

dhtmlx schedule 사용하기!

====== dhtmlx schedule 사용하기! ====== http://www.dhtmlx.com/index.shtml 기술문서 : http://docs.dhtmlx.com/doku.php?id=dhtmlxscheduler:toc 의 사이트에는 자바스크립트 기반의 다양한 플랫폼들이 있습니다. 그 중 scheduler를 사용하는 방법을 작성하여 보도록 하겠습니다. (원본은 클릭하면 볼 수 있습니다.) 위의 사진처럼 웹 상에서 스케쥴 작성을 할 수 있는데 개인 / 비상업용으로는 오픈소스로 GPL 라이선스를 택하고 있으니 개인이라면 한번 사용해봅시다!

Read More

문자셋과 인코딩

참조 : http://www.jopenbusiness.com/mediawiki/index.php?title=%EB%AC%B8%EC%9E%90%EC%85%8B%EA%B3%BC_%EC%9D%B8%EC%BD%94%EB%94%A9

Read More

Node.js 에서 Hex로 파일 출력하기

사용하다보면 row level 에서 파일 입출력이 필요한 때가 있다. 해당 부분을 nodejs 로 하다가 파싱한 정보를 bmp로 저장해야 되는데 이때 저장을 hex 코드 자체로 저장해야만 정상적으로 동작한다. 그러기 위해서 여러 방법을 찾아보다가 아래를 통해 해결! http://stackoverflow.com/questions/18880301/node-js-convert-hexadecimal-number-to-bytearray?answertab=active#tab-top 역시 스택오버플로우님이 짱이시다. new Buffer("250001000192CD0000002F6D6E742F72", "hex") 해당 버퍼를 파일로 저장하면 끝.

Read More

nodejs + express + cluster 사용하기

====== nodejs + express + cluster 사용하기 ====== nodejs version : v0.10.26 express version : v4.0.0 앞서서 express 가 버전업이 많이 되면서 과거와 다르게 express 만 전역으로 설치해서는 자동으로 프로젝트를 생성해주지 않는다. express-generation 을 설치해야만 이전과 같이 자동으로 프로젝트를 생성할 수 있다. $ npm install express-generation -g 이렇게 설치하고 자동으로 프로젝트를 생성하게 되면 이전 버전과는 실행방법에 약간 차이가 발생한다. 이전버전의 경우는 아래처럼 실행을 했다면 $ node app.js 4. 버전에서는 $ npm start 위와 같이 실행하여 준다. 그러면 b..

Read More

linux rescue 모드에서 software raid 마운트 하기

1. mdadm --examine --scan >> /etc/mdadm.conf 2. mdadm --assemble --scan /dev/md0 3. cat /proc/mdstat 4. mount

Read More

SVN 설치하기

http://firejune.com/1682/CentOS%EC%97%90+Subversion+%EC%84%A4%EC%B9%98%ED%9B%84+%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Sublime Text 3 사용하기

====== 0. intro ======

이전에 sublime_text2 를 정말 좋은 에디터라고 생각하고 사용해 왔다. 그러나 사용법들을 숙지하지 않고 그냥 필요한 부분만 대충 사용하였었기에 이젠 새로 나오고 있는 3 버전에 대해 정리 및 활용하기 위한 포스트를 작성한다.

참조사이트 목록
http://parkcj.wordpress.com/2013/01/30/sublime-text-2-%EC%84%A4%EC%B9%98-%ED%9B%84-%ED%95%B4%EC%95%BC%ED%95%A0-%EA%B2%83%EB%93%A4/
http://demun.tistory.com/2241
http://blog.daum.net/sman76/15711546
http://martian36.tistory.com/1226
http://jalnaga.wordpress.com/2013/08/31/sublime-text%EC%9A%A9-%EC%B6%94%EC%B2%9C-%ED%8C%A8%ED%82%A4%EC%A7%80/
http://devthewild.tistory.com/31

====== 1. install ======

설치는 간단하다. portable 버전도 지원하기 때문에

http://www.sublimetext.com/3

사이트에서 해당하는 운영체제를 받아 설치한다.

====== 2. package control ======

3버전이 나온 초기에는 이 패키지 컨트롤이 2버전과 다르게 직접 파일을 받아 설치해줘야 했는데 최신 릴리즈에서는 사용법이 2와 같이 간단해졌다.

먼저 콘솔 (단축키 : Ctrl + `)을 열어 아래의 내용을 입력한다.

<code>
import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
</code>

그리고 에디터를 껐다 키면 적용 완료.

참고로 2버전은 아래와 같다.

<code>
import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')
</code>

또한 기타 문제로 자동으로 설치되지 않는경우 아래의 사이트를 참고하여 직접 설치할수 있다.

참조 : http://www.hans.or.kr/2013/11/sublime-text3.html

====== 3. 단축키 ======

출처 : http://juhoi.tistory.com/51

ㅇ 단축키는 자주 사용하는 다른 에디터랑 동일하게 변경해서 사용할 수도 있습니다.
   - Preferences > Key Bindings - Default 로 설정 파일을 열어 직접 수정합니다.

ㅇ 개인적으로 자주 사용하는 단축키를 정리해 봅니다.
   - 전체 화면 : [f11]
   - 한줄 주석/취소 : [Ctrl + /]
   - 블럭 주석/취소 : [Ctrl + Shift + /]
   - 현재라인 한라인 위로 : [Ctrl + Shift + up]
   - 현재라인 한라인 아래로 : [Ctrl + Shift + down]
   - 아래로 한라인 추가 : [Ctrl + Enter]
   - 위로 한라인 추가 : [Ctrl + Shift + Enter]
   - 현재라인 삭제 : [Ctrl + Shift + k]
   - 현재라인 바로 아래 복사 : [Ctrl + Shift + d]
   - 코드 펴기/접기 : [Ctrl + Shift + [, ]]

2차출처 : http://www.hans.or.kr/2013/11/sublime-text.html

Windows


Mac


====== 4. 유용한 플러그인 ======

Ctrl + Shift + p 를 누르면 나오는 팔레트에서 install package 를 선택 후 아래 플러그인을 검색하여 설치한다.

===== Code intelligence plugin : SublimeCodeIntel =====

- JavaScript, Mason, XBL, XUL, RHTML, SCSS, Python, HTML, Ruby, Python3, XML, Sass, XSLT, Django, HTML5, Perl, CSS, Twig, Less, Smarty, Node.js, Tcl, TemplateToolkit, PHP. 언어들에 대해 code intelligence 기능을 지원해준다.

===== Sublime Alignment : Alignment =====

- 아래 코드의 Before 를 작성하고 블럭 지정후 Ctrl + Alt + a 하면 After와 같이 정렬 된다.

<code>
// Before

var joe = 'joe';

var johnny = 'johnny';

var quaid = 'quaid';

 
// After

var joe    = 'joe';

var johnny = 'johnny';

var quaid  = 'quaid';
</code>

===== Sublime Terminal : Terminal =====

Ctrl + Shift + t : 현재 열려있는 파일이 위치한 폴더 경로로 터미널 (cmd 혹은 power shell) 이 실행된다.
Ctrl + Shift + Alt + t : 현재 열려있는 파일의 프로젝트 폴더 경로로 터미널이 실행된다.

===== Bracket Highlighter =====

블럭영역이나 <>, </>의 시작과 끝부분을 눈에 잘 띄도록 표현해 준다.

===== ConvertToUTF8 =====

EUC-KR, UTF8등 흔히 사용하는 언어엣을 쉽게 사용할 수 있게 해준다. Files > SET Fi8le Encoding to > 를 통해 선택

===== AdvancedNewFile =====

원하는 폴더에 원하는 이름으로 파일을 쉽게 생성해준다.

===== Emmet =====

젠코딩을 가능하게 해주는 것. html과 css 코딩에 최적화 되어 있다.

===== Linter =====

SublimeLinter를 설치하면 CoffeeScript, CSS, Haml, Java, JavaScript, Objective-J, Perl, PHP, Python, Ruby 등에서 잘못된 문법 혹은 잘못된 것 같은 문법이 있으면 그 부분을 강조해서 보여준다.

예를 들어 JavaScript에서 라인의 끝에 세미콜론(;)을 붙이지 않았다거나, 괄호의 짝이 맞지 않는다거나, CSS에서 존재하지 않는 style 이름을 사용하거나 혹은 #을 통해 DOM의 ID를 사용하는 경우에도 그렇게 사용하지 말라고 알려준다.

===== DocBlockr =====

JavaScript, PHP, ActionScript, CoffeeScript, Java, Objective-C, C, C++에서 문서화를 쉽게 할 수 있도록 도와주는 패키지다. /** 입력 후 엔터를 치면 아래와 같이 문서화를 해준다.

/**
 * [sum description]
 * @param  {[type]} a [description]
 * @param  {[type]} b [description]
 * @return {[type]}   [description]
 */
function sum(a, b){
return a+b;
}
참고로 함수선언형과 변수할당은 같은 결과가 나온다.

/**
 * [sum description]
 * @param  {[type]} a [description]
 * @param  {[type]} b [description]
 * @return {[type]}   [description]
 */
var sum = function(a, b) {
return a+b;
};
/** 후 shift + enter를 치면 간략한 주석을 달 수 있다.

/** [sum description] */
function sum(a, b){
return a+b;
}

===== Sidebar Enchanter =====

사이드바 기능을 확장해 준다.


반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Jira Upgrade

새로운 서버에 지라설치하고 기존 지라 마이그레이션 하기

1. 기존 서버의 지라에서 databases를 xml로 백업 한다. 관리자 메뉴의 backup system 실행
 
2. DB 서버에 새로운 db를 생성한다. (utf8 - utf8-bin)

3. 기존 서버의 jira_home 폴더 (data가 있는 폴더) 를 신규 서버에 복사한다.

4. 최신 버전의 지라를 신규 서버에 다운 받아 설치한다.

5. 설치할 때 home 폴더를 카피한 폴더 위치로 지정한다.

6. 지라가 설치되면 관리자 계정 생성 후 관리자 메뉴에서 restore system 에서 아까 백업해둔 xml 파일을 복구한다.

7. 복구가 완료되면 기존의 data가 모두 정상적으로 마이그레이션 되었는지 확인한다.

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Git 활용하기

…or create a new repository on the command line

echo "# message" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/username/repo_addr.git
git push -u origin master

…or push an existing repository from the command line

git remote add origin https://github.com/username/repo_addr.git
git push -u origin master

…or import code from another repository

You can initialize this repository with code from a Subversion, Mercurial, or TFS project.


====== Git 활용하기 ======

가입하고 매달 $7 씩 내고 있는 (ㅠㅠ) git을 이제부터라도 잘 사용하기 위해 개발 중인 satm 소스를 git으로 관리하기로 했다.

구성은 아래와 같다.
개발머신 : VM Ubuntu
호스트 : 개인 PC
유저 : 실습생

유저가 내 개인 PC의 아이피로 VM에서 구동한 nodejs 에 접속하여 작업 하는데 이는 매우 불편하다.
일단 VM을 외부에서 접속할 수 있도록 VMware에 NAT 설정 등을 해야 했고 해당 VM을 계속 켜두어야 하고
서비스를 겸하다보니 자유롭게 개발에 어려움이 왔다. 그래서 git에 개발 소스를 commit 하고
서비스할 VM에서 해당 소스를 petch 하여 서비스하기로 결정. 이 서비스VM은 회사 vSpere 에 생성하여
바로 접근이 가능하도록 한다.

아래와 같은 방법으로 git에 소스를 commit 하였다.

1. git 저장소 생성하기
  cd /src folder // 해당 프로젝트 디렉토리로 이동
  git init // git 저장소를 생성한다.
2. git 저장소에 기존 소스 commit 하기
  // 먼저 기존 저장소의 branch 를 초기화 해주어야 정상적으로 동작 된다.
  git commit -m 'Initail Commit' --allow-empty
  git add . // 이러면 기존 폴더에 존재하는 소스들이 git에 쓸 준비가 됨.
  git commit -m 'comment' // 로컬 git에 commit 된다.
 
  // 중요한 것은 --allow-empty 로 한번 커밋 해주는 것
  // 그리고 앞으로도 변경되는 파일은 add 명령어를 통해 스테이지에 기록하여 줄 것
  // 그후 커밋
3. 외부 저장소에 push 하기
  // 외부 저장소를 git에 등록해준다.
  git remote add origin <주소>
  git push origin master
 
  // 정상적으로 잘 설정하였다면 외부 저장소에 push가 된다.
  // 추가 사항. 존재하던 파일을 삭제하는 경우. 스테이지에는 남아있기 때문에 rm 명령어로 삭제해줘야 한다.
  git rm -r <디렉토리>
  git commit -m 'comment' // 로컬 git에 commit 된다.

4. 외부 저장소 pull, merge 하기
http://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%A6%AC%EB%AA%A8%ED%8A%B8-%EB%B8%8C%EB%9E%9C%EC%B9%98
http://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge%EC%9D%98-%EA%B8%B0%EC%B4%88

fatal 에러발생 시 참조 : http://stackoverflow.com/questions/25087532/git-fatal-bad-default-revision-head-with-all-new-repos

참조 : http://www.slideshare.net/einsub/svn-git-17386752
참조 : http://blog.beany.co.kr/archives/2927
참조 : http://rogerdudler.github.io/git-guide/index.ko.html

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Eclipse 에서 Flex Plugin 설치하기

====== Eclipse 에서 Flex Plugin 설치하기 ======

기본으로 JDK가 설치 되어 있어야 한다.

이클립스에서  Flex Plugin을 설치하여 개발환경을 준비하는 이유는 실무에 가장 적합하며(제일 많이 사용된다.)

Flex Builder의 경우 JDT 의 제한으로 Eclipse 의 다양한 Plugin을 설치하는데 제약이 있으며,

Servlet을 작성하고 관리하기 위해 따로 에디터를 사용해야 하기 때문에 직접 Builder가 아닌 Plugin 형태로 설치하는 것을 권장한다.

설치순서

  * 목록먼저 Eclipse 를 다운 받는다. 최신 버전의 Helios 의 경우 Flex Plugin 을 설치하면 정상적으로 동작하지 않기 때문에 Galileo R2 버전으로 다운 받아서 원하는 위치에 압축을 풀어준다.

  * 목록Eclipse 실행 시 JVM terminate. EXIT code=-1 에러가 발생하는 경우 설치 폴더내에 eclipse.ini를 열어 다음과 같이 수정한다.

<code>
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-vm
C:\Program Files\Java\jdk1.6.0_07\bin\javaw.exe
-Dosgi.requiredJavaVersion=1.5
-vmargs
-Xms40m
-Xmx512m
</code>

  * 목록Flex Plugin 을 설치한다. 설치 도중에 Eclipse 의 경로를 반드시 지정하여 준다.

  * 목록설치가 완료되면 eclipse 를 실행하여 정상적으로 동작하는지 확인한다.

참고1. http://blog.jidolstar.com/607 <지돌스타 / Eclipse에 Flash Builder 4 plugin 설치하기>

참고2. http://okm12.springnote.com/pages/5048827 <개발자 오경무님 / 1. 로컬서버에 BlazeDS 설치하고 Flex RemoteObject로 연동하기>

참고3. http://digicom.tistory.com/475 <라딘의 Ti스토ry / Tomcat - Context 경로설정>

참고4. http://playgame.egloos.com/287965 <Play Game!!! / Tomcat - Context 경로설정>

====== Flex4 Project & BlazeDS 프로젝트 생성하고 실행하여 보기 ======

Eclipse 를 실행하여 File > New > Ohter... 에서 다음과 같이 Flex Project를 실행한다.

{{:개발:new.png?direct&300|}}

Project name에 HelloFlex로 입력하고 아래와 같이 설정하고 Next를 누른다.

{{:개발:project.png?direct&300|}}

Context root와 folder 그리고 BlazeDS 의 WAR 파일을 불러온 뒤 Output folder을 아래와 같이 입력한다.

{{:개발:project2.png?direct&300|}}

다시 Target runtime을 보면 방금 등록한 Tomcat 서버가 있을 것이다. 선택하자.

Context root는 자동으로 프로젝트명이 들어가 있을 것이다.

Content folder 역시 자동으로 WebContent가 들어가 있을 것이다.

Flex WAR file은 BlazeDS WAR파일이 위치하면 된다. Browse... 버튼을 눌러 파일 경로를 지정하자.

Output folder는 Context folder\Context root 로 한다. 즉, WebContent\RemoteObj_Test

<code>
Output folder는 정확히 말하자면 WebContent 폴더 안에만 있으면 된다. 즉, 하위 폴더를 정하지 않아도 된다는 것이다.
그러나 서버에서 작업할 때 BlazeDS로 돌릴 플렉스가 두개 이상이라면 하위 폴더로 정리해 놓는 것이 좋다.
Output folder가 WebContent 안에 있어야 하는 이유는 WebContent가 서버의 루트폴더이며,
WebContent>WEB-INF>classes 폴더에 플렉스에서 사용할 JavaBean이 들어있기 때문이다.     
</code>
           
다른 설정들은 되도록 기본 상태를 유지하는 것이 좋다.

Next 버튼을 누르자.

프로젝트 생성!

{{:개발:project3.png?direct&300|}}

Output folder URL 을 입력하고 Finish를 누르면 드디어 프로젝트가 생성된다!

여기서 중간에 생략된 부분이 있는데 그것은 바로 Tomcat 설정이다. 톰캣은 이클립스에서도 연동하여 사용할 수 있지만 context설정이 정확하게 설정되지 못하여 지금과 같이 이클립스내에 플러그인으로 설치한 경우 실행할 때 정상적으로 수행되지 못하는 경우가 발생한다.

이를 위해 context 설정을 수동으로 변경해 주어야 하기 때문에 Tomcat의 경우는 콘솔에서 관리하였다. 

Tomcat의 context 설정

{{:개발:project4.png?direct&300|}}

위처럼 이클립스에서 톰캣 서버에 방금 생성한 HelloFlex를 포함하여 서버를 시작 하였다. 결과는 아래와 같다.

{{:개발:project5.png?direct&300|}}

이 현상이 발생하는 이유는 처음 프로젝트를 생성하며 지정해준 Context 설정이 실제 톰캣에서 제대로 설정되지 못하였기 때문이다.

{{:개발:project6.png?direct&300|}}

콘솔을 살펴보면 context 설정이 잘못되어 매핑을 하지 못했다는 로그를 확인 할 수 있다. 이를 위해 수동으로 Context 를 수정하여 보자.

5.5 버전 이후 부터는 Server.xml 에 Context를 입력하는 것을 강력하게 잘못된 문법으로 정의하고 있다. (실행에는 문제가 없다.)

5.5 이후 버전에는 Context 설정이 [$CATALINA_BASE]/conf/[enginename]/[hostname]/ 로 옮겨졌다. 이것은 context 설정을 server.xml 에서 분리함으로써 변경후에도 톰캣이 재시작 할 필요없이 바로 적용되며 유지보수가 용이하게 하기 위함이다.

즉 호스트 설정을 위해서는 다음 폴더에서 output url로 지정한 HelloFlex 라는 이름을 가지는 HelloFlex.xml 을 생성하여 주고 이 안에 Context설정을 하여 주면 된다.

{{:개발:project7.png?direct&300|}}

다음과 같은 위치에 xml 파일을 생성하여 주고 아래와 같이 내용을 입력한다.

<code>
<Context docBase="C:\flex_development\flex_workspace\HelloFlex\WebContent\HelloFlex(예)" 
      debug="0" privileged="true">
</Context>
</code>

server.xml에 자동으로 context 설정이 되므로 이 부분은 삭제하여 준다.

실행화면

{{:개발:project8.png?direct&300|}}

이로써 context 설정까지 마치고 나면 드디어 생성된 프로젝트가 동작됨을 확인할 수 있다.

다음에는 BlazeDS와 본격적으로 연동하는 방법을 포스팅 해보자.

====== BlazeDS로 RemoteObject 기능 사용해보기 ======

BlazeDS를 사용하는 가장 큰 이유는 바로  RemoteObject 기능을 사용하기 위해서다.

예제를 따라 RemoteObject를 활용하는 간단한 예제를 만들어보고 발생하는 문제를 해결하기 위한 방법을 알아보자.

먼저 지난 포스팅에서 만든 HelloFlex 라는 예제를 활용해보자.

다음 그림처럼 src 폴더 및에 package 아래에 ShowMyString 이라는 간단한 java 파일을 작성하였다.

이 파일은 BlazeDS 서버에서 동작될 것이며 입력된 문자열을 받아서 리턴해주는 역할을 한다. 

{{:개발:helloflex.png?direct&300|}}

통신을 담당할 Class를 작성하였으니 이젠 BlazeDS 서버에 내가 작성한 이 파일이 RO를 수행하기 위한 Class 라는 것을 명시하기 위해

{{:개발:helloflex1.png?direct&300|}}

다음처럼 remote-config.xml 파일에서 <destination id="testRO"> 를 추가하여 준다.

source의 위치는 패키지.클래스명 순으로 정확하게 적어준다. 이로써 BlazeDS를 통한 RO를 할 준비가 완료되었다.

{{:개발:helloflex2.png?direct&300|}}

굉장히 간단하게 구성한 화면이다.

텍스트에 글자를 입력하고 단추버튼을 클릭하면 문자열이 BlazeDS 서버를 통해

우리가 작성한 class에서 문자열을 리턴 받아 Alert를 통해 화면에 보여주게 될 것이다.

소스는 다음과 같다.

{{:개발:helloflex3.png?direct&300|}}

소스의 내용도 큰 어려운 부분이 없으니 실행해보자.

그럼 방금 위의 화면에서 글자를 입력하고 버튼을 입력하면 다시 화면에 호출될 것이다. 그럼 실행.

{{:개발:helloflex4_1_.png?direct&300|}}

!!!!!!

전송이 실패했다. 로그를 잘 살펴보자. 살펴보면 http://localhost:8080/WebContent/messagebroker/amf 로 접속이 실패했다는 것을 알 수 있다. 여기서 WebContent 는 올바른 경로가 아니므로 수정하여 보자.

MessageSend의 설정을 관리하는 부분은 remote-object.xmll 바로 아래에 있는 service-config.xml 에서 담당한다. (다음 프로젝트에서는 WebContent 를 ContextRoot로 설정하지 않고 프로젝트 명을 입력하면 지금처럼 수동으로 수정하지 않아도 된다.)

<code>
        <channel-definition id="my-amf">

            <endpoint url="http://server.name:server.port/context.root/messagebroker/amf"/>

        </channel-definition>이와 같은 소스의 구조에서 context.root를 수정하여 주자.

        <channel-definition id="my-amf">

            <endpoint url="http://server.name:server.port/HelloFlex/messagebroker/amf"/>
        </channel-definition>
</code>

수정하였으면 저장하고 서버를 재 시작하자. 하지만 context는 수정이 된 채 동일한 오류가 발생할 것이다.

원인을 조사해본 결과 이클립스 플러그인형태가 아닌 빌더와 java를 따로 개발했던 경우에는 동일한 증상이 발생하지 않았었다. 플러그인 환경에서는

workspace 안으로 web root 폴더가 설정되고 xml 설정파일이 rewrite 되는 과정상에서 충돌이나 문제가 발생하는 듯 하여 message channel이 정상적으로 동작 되지 못하는 듯 하였다. 수많은 외국 포럼과 관련 에러를 찾아 해결방법을 모색해본 결과 아래와 같은 해결 방법을 찾을 수 있었다.

<code>
import mx.messaging.ChannelSet;

import mx.messaging.channels.AMFChannel;

private var cs:ChannelSet;

private function createChannelSet():ChannelSet {

if (cs == null) cs = new ChannelSet();

var ac:AMFChannel = new AMFChannel("my-AMF","http://localhost:8080/HelloFlex/messagebroker/amf");

cs.addChannel(ac);
}

return cs;
</code>

다음처럼 서버에 대한 채널셋을 직접 지정해주고 RO객체에 이것을 등록시켜 주는것이다.

<code>
srv.channelSet = createChannelSet();

srv.destination = "testRO";
</code>

destination 보다 먼저 선언해줘야 함을 명심하자.

이제 실행하여 보자!

{{:개발:helloflex5.png?direct&300|}}

정상적으로 동작한다!

이젠 RO를 사용하여 다양하게 응용하는 길만 남았다.

추신1. 해당 오류의 원인을 좀더 찾아보니 context 와 root 폴더와 xml 파일들의 위치와 관계가 있다.

해당 root 가 되는 폴더 내에 META-INF와 WEB-INF 폴더가 속해있어야만 정상적으로 동작되었다. 위와 같이 해도 통신이 되지 않는다면

폴더위치들을 살펴보자.

추신2. 이렇게 폴더위치가 모두 정상적으로 맞는다면 직접 채널을 추가 하지 않아도 정상적으로 통신이 된다.

workspace/ContextRoot/안에 history, META-INF, WEB-INF 와 Flex에서 생성된 파일과 RootName.html이

모두 정상적으로 존재하도록 셋팅하면 추가적인 채널 변경 없이 실행이 정상적으로 됨을 확인 할 수 있다.
====== 대용량 파일 업로드 테스트 ======

BlazeDS의 RO 기능을 활용한 대용량 파일 업로드 기능 구현을 위한 테스트 결과 100MB 이하의 파일 업로드의 경우에는 정상적으로 파일이 업로드 되었음.

그러나 100MB 이상의 파일을 업로드할 경우 문제가 발생.

190MB 업로드 테스트 중 JVM에서 Out of Heap Memory 발생

400MB 업로드 테스트 중 테스트 프로젝트가 브라우저 상에서 예기치 못하게 중단

원인 분석.

서버 단에서 파일을 전송받는 class에서의 전송 방식 문제.

일반적인 java.io.File 에서의 Stream 방식은 파일을 memory에 다 받은 다음 디렉토리로 이동

때문에 대용량 파일의 경우 정상적으로 전송되지 않음.

해결방법.

flex에서 Filereference 를 통해 파일을 byte array 형태로 변환 가능하다.

이를 일정한 크기(10M)로 분할하여 바이너리 형태로 서버로 전송한다.

전송이 완료되면 전송이 완료되었다는 메시지를 서버에 전달한다.

서버는 완료 메시지를 전달받으면 전송받은 파일을 하나로 합친다.

파일의 무결성 테스트를 위한 분할 전 MD5 값과 전송 된 파일의 MD5 비교하여 체크.

한번에 하나의 파일이 아닌 다중쓰레드 방식을 구현한다면 한번에 여러 조각 파일도 전송이 가능.

고려사항.

위와 같이 upload Class를 작성했을때 서버에 미치는 부하

타 통신 방법과의 비교 (속도, 안전성 등)

참고.

http://adnaru.com/65

http://biemond.blogspot.com/2008/08/flex-upload-and-download-with-blazeds.html

http://www.albumbang.com/board/board_view.jsp?board_name=dev_tip&no=292

http://www.aboutjsp.com/lec/multipart.jsp
====== BlazeDS 연동 및 사용방식 ======

BlazeDS 연동 및 사용하기

Flex에서의 5가지 Data 연동방식

<code>
HttpService : jsp, php 등으로 url을 호출하여 xml return 결과와 연동
WebService : soap 등의 wsdl 방식으로 연동
RemoteObject : WAS의 Java beans와 연동 (속도 빠름)
MessageObject : push, pull 방식 지원
DataService : DB와 연동하여 바로 View에서 확인
</code>

BlazeDS는 1~4번까지 지원한다.

설치 방법

<code>
톰캣 설치
adobe 에서 BlazeDS 다운 받는다.
압축을 풀어보면 blazeDS.war 파일이 존재
이 파일을 톰캣에 webapps 에 복사
톰캣을 가동 하면 자동으로 blazeds 설치됨
이클립스에서 blazeds.war  를 import
src 폴더에 servlet 단 작성
서버에서 blaze 포함하여 실행하도록 설정
</code>

연동 준비 완료
====== Flex4 with FileBrowser ======

Flex builder 와 BlazdeDS 를 연동한 RemoteObject 사용하기

로그인 로직 (구상)

<code>
클라이언트에서 사용자가 Login Event Handler 호출
서버에서 Event Handler 발생
BlazeDS Sever와 통신하여 Java beans 에서 mysql 접속
mysql 에서 리턴된 결과값이 BlazeDS 서버의 RO를 통해 사용자가 return 받음
return 결과에 따라 로그인이 정상적으로 이루어지면 state2로 변경
틀리면 alter
</code>

Remote Object 개요

<code>
BlazeDS 는 서버의 Servlet 단에서 처리된 결과만을 Binary 형태로 통신.
즉 RO를 위해서는 Server 에서 java/jsp 로 class 작성하여 blazeDS server conf 에 RO Listener 등록
client 쪽 Browser의 Flex 에서는
var svr:RemoteObject = new RemoteObject();
</code>

svr.destination = (서버 conf에 등록한 RO 리스너의 id);

이를 통해 RO 호출

<code>
서버에서는 RO가 호출되면 conf에 정의되어 있는 참조해야 하는 class 파일을 실행하여 동작 수행
결과가 DS서버로 return 된다
return 된 값은 Serialized 되어 DS서버에서 Client 로 전송된다.
전송된 값은 flex 단에서 다시 원래의 형태로 선언하여 처리.
</code>

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

dhtmlx schedule 사용하기!

====== dhtmlx schedule 사용하기! ======

http://www.dhtmlx.com/index.shtml
기술문서 : http://docs.dhtmlx.com/doku.php?id=dhtmlxscheduler:toc

의 사이트에는 자바스크립트 기반의 다양한 플랫폼들이 있습니다.

그 중 scheduler를 사용하는 방법을 작성하여 보도록 하겠습니다.

(원본은 클릭하면 볼 수 있습니다.)



위의 사진처럼 웹 상에서 스케쥴 작성을 할 수 있는데

개인 / 비상업용으로는 오픈소스로 GPL 라이선스를 택하고 있으니 개인이라면 한번 사용해봅시다!

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

문자셋과 인코딩

참조 : http://www.jopenbusiness.com/mediawiki/index.php?title=%EB%AC%B8%EC%9E%90%EC%85%8B%EA%B3%BC_%EC%9D%B8%EC%BD%94%EB%94%A9

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

Node.js 에서 Hex로 파일 출력하기

사용하다보면 row level 에서 파일 입출력이 필요한 때가 있다.

해당 부분을 nodejs 로 하다가 파싱한 정보를 bmp로 저장해야 되는데

이때 저장을 hex 코드 자체로 저장해야만 정상적으로 동작한다.

그러기 위해서 여러 방법을 찾아보다가 아래를 통해 해결!

http://stackoverflow.com/questions/18880301/node-js-convert-hexadecimal-number-to-bytearray?answertab=active#tab-top

역시 스택오버플로우님이 짱이시다.

new Buffer("250001000192CD0000002F6D6E742F72", "hex")
 
해당 버퍼를 파일로 저장하면 끝.

반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

nodejs + express + cluster 사용하기

====== nodejs + express + cluster 사용하기 ======

nodejs version : v0.10.26
express version : v4.0.0

앞서서 express 가 버전업이 많이 되면서 과거와 다르게 express 만 전역으로 설치해서는 자동으로

프로젝트를 생성해주지 않는다. express-generation 을 설치해야만 이전과 같이 자동으로 프로젝트를 생성할 수 있다.

<code>
$ npm install express-generation -g
</code>

이렇게 설치하고 자동으로 프로젝트를 생성하게 되면 이전 버전과는 실행방법에 약간 차이가 발생한다.
이전버전의 경우는 아래처럼 실행을 했다면

<code>
$ node app.js
</code>

4. 버전에서는

<code>
$ npm start
</code>

위와 같이 실행하여 준다. 그러면 bin 폴더내의 www 파일이 실행되어 지는데 살펴보면 기존 버전에서 server를 listen 하는
부분이 실행부분으로 분리가 되고 기존 app.js 는 export.module 로 사용되어지는 것 뿐. 방식은 동일하다.

이를 유의하여 cluster 를 적용하면 아래와 같이 된다. 아래 내용은 www 파일을 수정하여 적용한 것이다.


#!/usr/bin/env node
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var debug = require('debug')('my-application');
var app = require('../app');

if(cluster.isMaster) {  for(var i=0;i    cluster.fork();
  }
  cluster.on('exit', function(worker, code, signal) {
    console.log('worker' + worker.process.pid + ' died');
    cluster.fork();
  });
} else {
  console.log(" worker:="" %s",="" process.pid);
  app.set('port', process.env.PORT || 3000);

  var server = app.listen(app.get('port'), function() {
    debug('Express server listening on port ' + server.address().port);
  });
}
위와 같이 작성하여 실행하여 보면 cpu core 갯수만큼 worker 가 생성되어 지는 것을 확인할 수 있다.
또한 worker 가 호출되는것을 확인하고자 한다면 router 에서 url 이 호출될때의 worker pid 를 확인하면 된다.

<code>
route/index.js

router.get('/', function(req, res) {
  console.log(process.pid);
  res.render('index', { title: 'Express' });
});
</code>

위와 같이 console.log() 로 process.pid 를 출력하여 보면 각기 다른 worker가 호출되는 것을 확인 할 수 있다.

참고1 : https://gist.github.com/ageldama/1546478
참고2: http://eclipse.or.kr/wiki/%ED%8A%B9%EC%A7%91%EA%B8%B0%EC%82%AC:Node_JS_%EB%A9%80%ED%8B%B0%EC%BD%94%EC%96%B4_CPU_%EC%A7%80%EC%9B%90%ED%95%98%EA%B8%B0

다만 cluster 를 사용하여 구성하는 경우 session 이나 socket.io 와 같이 내부 data 가 공유되지 못하는 부분이 발생하는데

이와 같은 부분인 redis 나 memcache 를 통해 해결할 수 있다.

참고3: http://nodeqa.com/nodejs_ref/55


반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post

linux rescue 모드에서 software raid 마운트 하기

1. mdadm --examine --scan >> /etc/mdadm.conf


2. mdadm --assemble --scan /dev/md0


3. cat /proc/mdstat


4. mount


반응형

Article By 꼬반

*certificate* : VCP 5(2012), RHCSA 7 (2014), RHCE 7 (2015), RHCSA in REDHAT OpenStack(2017) *development language* : Javascript, NodeJS, Golang, html5, css3, shell script *middle ware* : NGINX, Apache, Tomcat, Docker, Docker Swarm, Mesos, Kubernetes, HCI,

Discuss about post