2013. 10. 22.

Goorm IDE 파헤쳐 보기.

최근 활발하게 개발되고 있는 GoormIDE 내부를 살펴보며 내부 구조를 대략적으로 파악해보고 이 활용에 대해서 포스팅 해본다.

Google Script, Koding 등 Web IDE 수준은 아직 로컬 IDE(IntelliJ, Eclipse, Visual Studio) 수준까지 따라가진 못했지만 환경이 갖춰져 있지 않는 환경에서 급하게 코딩할 수 있다는 점에서 그 활용 용도를 보여주고 있다.

그 중에서 국내에서 개발하고 있는 GoormIDE를 살펴보자. 심지어 오픈소스 프로젝트라 소스코드를 받아 수정하여 사용할 수 있다.
아직 프로젝트를 시작한지 얼마 안되서 그런지 Documentation은 친절하지 않고, node.js는 전혀 개발해본적이 없어 commit log만 슬쩍 보고 지나가본다.



현재 활발하게 facebook에서 활동을 하고 있는 중인데..
소개하고 있는 홈페이지를 들어가본다.

맙소사.. goorm.io를 들어가려고 goo까지 치고 엔터 눌렀다가 google에 들어가져버렸다.

다시..



화면은 이미 로그인 되어있는 것으로 보이지만, 실제 써보려고 하는 사람은 회원가입을 해야한다.
현재 클로즈 베타 서비스 중이라 베타서비스 신청 후, 조금 기다려보면 아래와 같은 메일이 날아온다!. 오오!!



신청 완료가 되었으니 얼른 들어가본다.
"나의 그룸IDE"를 누르면 들어갈 수 있다.


프로젝트 생성을 해본다.
나는 java 개발자이니 java 프로젝트로 생성.
외부에서 개발한 프로젝트도 import를 할 수 있다고는 하지만 현재 개발해둔 프로젝트가 없으므로 그냥 새로 만들었다.




요 샘플 코드를 보니 뭔가 실행해보고 싶어졌다.
뭐든 IDE를 셋업하고 나서는 Hello World를 찍는것이 정석이니 위 실행 버튼을 눌러본다..



오. 뜬다..
실행 후 뭔가 cli가 튀어나오니 뭔가 뒤져보려는 욕구가 불끈불끈 솟아오른다.

jeonhs0@Goorm:~/jeonhs0_test$ java -cp /goorm/workspace/jeonhs0_test/bin/ project/main 
Hello goorm! 
jeonhs0@Goorm:~/jeonhs0_test$ uname -a 
Linux Goorm 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
jeonhs0@Goorm:~/jeonhs0_test$ cat /etc/*-release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.04
DISTRIB_CODENAME=raring
DISTRIB_DESCRIPTION="Ubuntu 13.04" 
NAME="Ubuntu"
VERSION="13.04, Raring Ringtail" 
ID=ubuntu
ID_LIKE=debian 
PRETTY_NAME="Ubuntu 13.04" 
VERSION_ID="13.04" 
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" 
jeonhs0@Goorm:~/jeonhs0_test$

Linux 버전은 Ubuntu 13.04

jeonhs0@Goorm:~/jeonhs0_test$ whoami 
jeonhs0
jeonhs0@Goorm:~/jeonhs0_test$ sudo su -
[sudo] password for jeonhs0: 
Sorry, try again.
[sudo] password for jeonhs0: 
sudo: 1 incorrect password attempt 
jeonhs0 is not in the sudoers file.This incident will be reported. 
jeonhs0@Goorm:~/jeonhs0_test$ 

음 root 권한을 막혀있는 듯 하다.
 ps -ef 로 돌려봤을때 별다른 프로세스는 없고....

jeonhs0@Goorm:~/jeonhs0_test$ df
Filesystem1K-blocksUsed Available Use% Mounted on
/dev/xvda18125880 1360684 634576818% / 
none4 0 4 0% /sys/fs/cgroup
udev 292488 8292480 1% /dev
tmpfs 60384 184 60200 1% /run
none 5120 05120 0% /run/lock 
none 301920 0301920 0% /run/shm
none 102400 0102400 0% /run/user 
goormStorage:/goorm 8257024 1047424 679014414% /goorm
jeonhs0@Goorm:~/jeonhs0_test$ mount
/dev/xvda1 on / type ext4 (rw) 
proc on /proc type proc (rw,noexec,nosuid,nodev) 
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw) 
none on /sys/fs/fuse/connections type fusectl (rw) 
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) 
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) 
none on /run/shm type tmpfs (rw,nosuid,nodev)
none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755) 
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw) 
goormStorage:/goorm on /goorm type nfs4 (rw,proto=tcp,port=2049,addr=172.31.24.0,clientaddr=172.31.23.59)
jeonhs0@Goorm:~/jeonhs0_test$
위 결과를 봤을때, 서비스는 저기 어딘가 돌고 있고, nfs에 프로젝트 파일들만 올려다 주는 것 같다.
nfs에 있는 다른 디렉토리에는 접근이 안된다.

/etc/passwd 파일을 보니 내 계정정보가 없고, pam 설정들이 보이는거 보니, LDAP 과 같은 류에서 인증 정보를 받아오는 듯 하다.

jeonhs0@Goorm:~/jeonhs0_test$ ifconfig
eth0      Link encap:Ethernet  HWaddr 0a:f1:7d:cd:e8:20
          inet addr:172.31.23.59  Bcast:172.31.31.255  Mask:255.255.240.0
          inet6 addr: fe80::8f1:7dff:fecd:e820/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:164542 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96108 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:184076429 (184.0 MB)  TX bytes:157189121 (157.1 MB)
          Interrupt:26

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1042 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1042 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:287435 (287.4 KB)  TX bytes:287435 (287.4 KB)

jeonhs0@Goorm:~/jeonhs0_test$

172.x.x.x 로 나오는거 보니 cloud 서버인거 같다.
그럼 공인 IP는 무엇일까?

jeonhs0@Goorm:~/jeonhs0_test$ curl "http://www.hashemian.com/whoami/" | grep "Your IP"                                                                                                                         
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                                                                                                                
                                 Dload  Upload   Total   Spent    Left  Speed                                                                                                                                  
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0Your IP address is: <span style='background-color:yellow;font-size:22px;font-weight:bold;font-family:verdana;'>54.238.150.197</sp
an>. You may be reaching this page from: <i>UNITED STATES</i> <small>[<a style="text-decoration:none;" href="/tools/google-yahoo-maps.php?country=UNITED STATES" title="Map it!">Map it!</a>]</small><p><hr wid
th='50%'>&bull; Other information about your connection:<br /><b>HTTP_USER_AGENT:</b> curl/7.29.0<br />
100 23193    0 23193    0     0  24034      0 --:--:-- --:--:-- --:--:-- 24059


IP : 54.238.150.197
whois로 이 IP를 검색해보니..


amazon ec2로 서비스하는것을 확인할 수 있다..

근데 VM 하나를 받은거 치고는 뭔가 활용용도가 떨어진다.
사실 java 코딩을 여기서 지금 당장 해보고 싶은건 없고...
여기서 뭘 해볼 수 있을까...

하아.....

하아....

그러고 보니 여기에........

아악........
룸메이트랑 잠깐 이야기하고 화장실 갔다온 사이에 로그아웃 됐어.
session timeout이 너무 짧은거 같다..
일단 다시 로그인 하고..

tomcat이나 한번 띄워봐야겠다.
먼저 tomcat을 다운로드 받아본다.

아... shell 창에서는 ctrl+v가 안된다. ㅠㅠ
프랑스 장인의 손길로 하나하나 입력해서 tomcat을 다운로드 한다.

ec2에서 한국서버로 뭔가 다운받으려고 하니 좀 느린듯 하지만 참고 기다려본다.

jeonhs0@Goorm:~/jeonhs0_test$ wget http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz
--2013-10-21 16:10:14--http://apache.tt.co.kr/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz
Resolving apache.tt.co.kr (apache.tt.co.kr)... 121.125.79.185
Connecting to apache.tt.co.kr (apache.tt.co.kr)|121.125.79.185|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 7955948 (7.6M) [application/x-gzip]
Saving to: ‘apache-tomcat-7.0.42.tar.gz’ 
100%[=====================================================================================================================================================================>] 7,955,948128KB/s in 53s 
2013-10-21 16:11:08 (146 KB/s) - ‘apache-tomcat-7.0.42.tar.gz’ saved [7955948/7955948] 
jeonhs0@Goorm:~/jeonhs0_test$

압축을 풀고.. 실행..

total 7800
drwxrwx---  5 jeonhs0 jeonhs0_test    4096 Oct 21 16:13 .
drwx-----x 50 root    root            4096 Oct 21 15:41 ..
drwxr-xr-x  9 jeonhs0 goorm_user      4096 Oct 21 16:13 apache-tomcat-7.0.42
-rw-r--r--  1 jeonhs0 goorm_user   7955948 Jul  2 08:41 apache-tomcat-7.0.42.tar.gz
drwxrwx---  3 jeonhs0 jeonhs0_test    4096 Oct 21 15:43 bin
-rwxrwx---  1 jeonhs0 jeonhs0_test     228 Oct 21 15:41 make
-rwxrwx---  1 jeonhs0 jeonhs0_test     335 Oct 21 15:41 project.json
drwxrwx---  3 jeonhs0 jeonhs0_test    4096 Oct 21 15:41 src
jeonhs0@Goorm:~/jeonhs0_test$ apache-tomcat-7.0.42/bin/startup.sh
Using CATALINA_BASE:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_HOME:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar
jeonhs0@Goorm:~/jeonhs0_test$ ps -ef | grep tomcat
jeonhs0   4546     1 69 16:14 pts/13   00:00:03 /usr/bin/java -Djava.util.logging.config.file=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/conf/logging.properties -Djava.util.logging.manager=org.apa
che.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/endorsed -classpath /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/ho
me/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar -Dcatalina.base=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42 -Dcatalina.home=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42 -D
java.io.tmpdir=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp org.apache.catalina.startup.Bootstrap start
jeonhs0   4566  4382  0 16:14 pts/13   00:00:00 grep --color=auto tomcat
jeonhs0@Goorm:~/jeonhs0_test$

오.. 실행이 잘 된다.....
........
..........
........
..........
.........
.......

잊고 있었다.
여기는 private network이라는것을..
tomcat을 접속할 방법이 없다......
내 컴퓨터 방향으로 reverse socket을 열어주는 방법이 있지만 그짓까진 하긴 싫고..
그냥 curl로 던져보는 정도로 만족한다.

jeonhs0@Goorm:~/jeonhs0_test$ curl http://localhost:8080
<!DOCTYPE html>
<html lang="en"> 
<head> 
<title>Apache Tomcat/7.0.42</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" /> 
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
<body> 
<div id="wrapper"> 
<div id="navigation" class="curved container"> 
<span id="nav-home"><a href="http://tomcat.apache.org/">Home</a></span>
<span id="nav-hosts"><a href="/docs/">Documentation</a></span> 
<span id="nav-config"><a href="/docs/config/">Configuration</a></span> 
<span id="nav-examples"><a href="/examples/">Examples</a></span> 
<span id="nav-wiki"><a href="http://wiki.apache.org/tomcat/FrontPage">Wiki</a></span>
<span id="nav-lists"><a href="http://tomcat.apache.org/lists.html">Mailing Lists</a></span>
......
......
......

tomcat이 잘 뜨는 거보니.. 기분이 좋지만 웹브라우저로 열어볼 수 없는 HTML 소스코드가 다 무슨 소용이겠는가.
하지만 추후 이부분에 대한 보완이 있을꺼라고 믿고...
다음 테스트로 넘어가본다...


java project라면 빼먹을 수 없다는... 그..
maven!!

실제로 IDE에서 지원을 하진 않지만 maven을 한번 실행해본다.

먼저 maven을 다운로드 받아야한다.
아씨..
붙여넣기 안된다...
한자 한자 입력하는 장인의 손길이 필요하다.

jeonhs0@Goorm:~/jeonhs0_test$ wget http://apache.tt.co.kr/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz 
--2013-10-21 16:27:57--http://apache.tt.co.kr/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz 
Resolving apache.tt.co.kr (apache.tt.co.kr)... 121.125.79.185
Connecting to apache.tt.co.kr (apache.tt.co.kr)|121.125.79.185|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 5494427 (5.2M) [application/x-gzip]
Saving to: ‘apache-maven-3.1.1-bin.tar.gz’ 
100%[=====================================================================================================================================================================>] 5,494,427132KB/s in 29s 
2013-10-21 16:28:27 (182 KB/s) - ‘apache-maven-3.1.1-bin.tar.gz’ saved [5494427/5494427] 
jeonhs0@Goorm:~/jeonhs0_test$ tar -xvf apache-maven-3.1.1-bin.tar.gz

압축까지 풀었으니 mvn을 실행해본다.

jeonhs0@Goorm:~/jeonhs0_test$ apache-maven-3.1.1/bin/mvn
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.187s
[INFO] Finished at: Mon Oct 21 16:29:50 UTC 2013 
[INFO] Final Memory: 2M/9M 
[INFO] ------------------------------------------------------------------------
[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal
>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, gener
ate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-sit
e, site, post-site, site-deploy, pre-clean, clean, post-clean. -> [Help 1] 
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoGoalSpecifiedException

잘 실행된다.
만족스럽다..
그럼 이제 maven 프로젝트를 만들어봐야겠다.
pom.xml부터 만든다.

드디어 Google IDE가 IDE라는 것이 빛을 보이고 있다.
XML 파일을 작성하는데 자동완성 따윈 껌으로 해주고 있다.
생각보다 XML 파일 작성하는데 자동완성이라는 껌따위 버려버리는 경우가 많은데, code highlighting도 잘 되어있다.

하지만 Java Web 프로젝트를 지원하지 않는 IDE에서 손으로 구성하는건 좀 짜증나는 일이긴 하다..
아.. shift+tab 키 없다... 실수로 tab 올린거 내리고 싶었는데..
ctrl+shift+오른쪽 방향키에 대한 매핑도 날 난처하게 한다.

아...... 이번엔 코딩하고 있는데 날 로그아웃 시키고 있다.
session timeout에 대한 정책을 어떻게 만들어 두었는지 의심이 된다.

하지만 난 굴하지 않는다.

?!
자동 저장 기능이 없는듯 하다..
IntelliJ를 오래 쓰다 보니... 저장하는게 습관이 되질 않아서일까..

코드가 날아갔다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
시봑 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

sample project를 만드는 과정에서도 우여곡절이 많다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그래도 굴하지 않는다.

비록 내가 "pom.xml부터 만든다."라는 글을 쓴지 30분이 지났지만......
난 ..... 굴하지 않을 것이다.

아 드디어 성공했다.
tomcat과 maven 디렉토리는 그냥 무시하자...



이제 maven으로 war 파일을 묶어본다.

jeonhs0@Goorm:~/jeonhs0_test$ apache-maven-3.1.1/bin/mvn war:war 
[INFO] Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.3/maven-war-plugin-2.3.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.3/maven-war-plugin-2.3.pom (8 KB at 9.4 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/23/maven-plugins-23.pom (9 KB at 36.4 KB/sec) 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/22/maven-parent-22.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/22/maven-parent-22.pom (30 KB at 86.7 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/11/apache-11.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/apache/11/apache-11.pom (15 KB at 60.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.3/maven-war-plugin-2.3.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/2.3/maven-war-plugin-2.3.jar (82 KB at 155.0 KB/sec) 
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building gubug 0.0.1
[INFO] ------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom 
Downloaded: http://repo.maven.apache.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom (998 B at 4.0 KB/sec)
[INFO] 
[INFO] --- maven-war-plugin:2.3:war (default-cli) @ gubug ---
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/2.0.6/maven-plugin-api-2.0.6.pom (2 KB at 5.4 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven/2.0.6/maven-2.0.6.pom (9 KB at 33.7 KB/sec) 
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/5/maven-parent-5.pom (15 KB at 59.8 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/3/apache-3.pom
.....
.....
.....
.....
[INFO] Packaging webapp
[INFO] Assembling webapp [gubug] in [/goorm/workspace/jeonhs0_test/target/gubug-0.0.1] 
[INFO] Processing war project
[INFO] Copying webapp webResources [/goorm/workspace/jeonhs0_test/src/main/webapp/WEB-INF] to [/goorm/workspace/jeonhs0_test/target/gubug-0.0.1] 
[INFO] Copying webapp resources [/goorm/workspace/jeonhs0_test/src/main/webapp]
[INFO] Webapp assembled in [108 msecs] 
[INFO] Building war: /goorm/workspace/jeonhs0_test/target/gubug-0.0.1.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 29.352s 
[INFO] Finished at: Mon Oct 21 17:01:00 UTC 2013 
[INFO] Final Memory: 5M/14M
[INFO] ------------------------------------------------------------------------
jeonhs0@Goorm:~/jeonhs0_test$ ls -al target/
total 20
drwxr-xr-x 4 jeonhs0 goorm_user   4096 Oct 21 17:01 .
drwxrwx--- 7 jeonhs0 jeonhs0_test 4096 Oct 21 17:01 ..
drwxr-xr-x 4 jeonhs0 goorm_user   4096 Oct 21 17:01 gubug-0.0.1
-rw-r--r-- 1 jeonhs0 goorm_user   2276 Oct 21 17:01 gubug-0.0.1.war
drwxr-xr-x 2 jeonhs0 goorm_user   4096 Oct 21 17:01 maven-archiver
이제 war를 만들었으니 tomcat에 배포를 해본다.

jeonhs0@Goorm:~/jeonhs0_test$ mv target/gubug-0.0.1.war apache-tomcat-7.0.42/webapps/gubug.war
jeonhs0@Goorm:~/jeonhs0_test$ apache-tomcat-7.0.42/bin/startup.sh
Using CATALINA_BASE:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_HOME:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar
jeonhs0@Goorm:~/jeonhs0_test$ ps -ef | grep tomcat
jeonhs0   1697     1 73 17:06 pts/2    00:00:03 /usr/bin/java -Djava.util.logging.config.file=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/conf/logging.properties -Djava.util.logging.manager=org.apa
che.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/endorsed -classpath /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/ho
me/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar -Dcatalina.base=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42 -Dcatalina.home=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42 -D
java.io.tmpdir=/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp org.apache.catalina.startup.Bootstrap start
jeonhs0   1717  1166  0 17:06 pts/2    00:00:00 grep --color=auto tomcat
jeonhs0@Goorm:~/jeonhs0_test$

역시나 확인해볼 방법이 따로 없으므로 curl로 확인해보도록 한다.

jeonhs0@Goorm:~/jeonhs0_test$ curl http://localhost:8080/gubug/index.jsp
Hello... This is Gubug World
jeonhs0@Goorm:~/jeonhs0_test$

드디어 자바의 꽃인 maven으로 컴파일을 완료하였다.
눈물이 날 지경이지만 maven으로 멈출순 없으므로, gradle도 한번 돌려본다.
gradle을 무시해선 안된다.
아직 IntelliJ에서도 기본 제공이 아닌 plugin을 따로 설치해야하지만.
매우 매력적인 녀석이다.

먼저 gradle을 다운로드 해본다.
그래도 gradle 다운로드는 빠른편이다.

jeonhs0@Goorm:~/jeonhs0_test$ wget http://services.gradle.org/distributions/gradle-1.6-all.zip 
--2013-10-21 17:10:48--http://services.gradle.org/distributions/gradle-1.6-all.zip 
Resolving services.gradle.org (services.gradle.org)... 207.223.250.26
Connecting to services.gradle.org (services.gradle.org)|207.223.250.26|:80... connected. 
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://downloads.gradle.org/distributions/gradle-1.6-all.zip [following] 
--2013-10-21 17:10:48--http://downloads.gradle.org/distributions/gradle-1.6-all.zip
Resolving downloads.gradle.org (downloads.gradle.org)... 54.230.113.44, 54.230.114.78, 54.240.164.93, ...
Connecting to downloads.gradle.org (downloads.gradle.org)|54.230.113.44|:80... connected.
HTTP request sent, awaiting response... 200 OK 
Length: 51393607 (49M) [application/zip] 
Saving to: ‘gradle-1.6-all.zip’
100%[=====================================================================================================================================================================>] 51,393,60717.4MB/s in 2.8s
2013-10-21 17:10:55 (17.4 MB/s) - ‘gradle-1.6-all.zip’ saved [51393607/51393607] 
jeonhs0@Goorm:~/jeonhs0_test$

그리고 unzip..

jeonhs0@Goorm:~/jeonhs0_test$ unzip gradle-1.6-all.zip
The program 'unzip' is currently not installed. To run 'unzip' please ask your administrator to install the package 'unzip'
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아 unzip이 없다.

어쩌지... gradle에서는 zip파일밖에 안주는데...
어쩔수 없다...
내 컴퓨터에서 받아서 tar로 다시 압축해서 서버로 전송...
다행히 파일 업로드 기능이 있다...
........
.......
좀 느려도 참는다...
.........
?!!!!!
알수 없다...
파일 업로드 되고 있는거 맞겠지?
progress bar가 그냥 혼자 숨쉬고 있다.........

"10여분 뒤..... 결국 chrome은 인코딩마저 깨져있는 에러메시지를 뱉어내고 죽었다"
그래서 결국 내 컴퓨터에 apache를 켜서 wget으로 해결보았다...
40Mb 업로드 하는데 죽어버린...

jeonhs0@Goorm:~/jeonhs0_test$ wget http://pc.gubug.kr/gradle-1.6-bin.tar 
--2013-10-21 17:20:08--http://pc.gubug.kr/gradle-1.6-bin.tar 
Resolving pc.gubug.kr (pc.gubug.kr)... 1.235.210.141 
Connecting to pc.gubug.kr (pc.gubug.kr)|1.235.210.141|:80... connected.
HTTP request sent, awaiting response... 401 Authorization Required 
Reusing existing connection to pc.gubug.kr:80. 
HTTP request sent, awaiting response... 200 OK 
Length: 43335168 (41M) [application/x-tar] 
Saving to: ‘gradle-1.6-bin.tar’
100%[=====================================================================================================================================================================>] 43,335,1681014KB/s in 44s 
2013-10-21 17:20:53 (972 KB/s) - ‘gradle-1.6-bin.tar’ saved [43335168/43335168]
jeonhs0@Goorm:~/jeonhs0_test$

gradle 압축을 풀고 실행해본다.

jeonhs0@Goorm:~/jeonhs0_test$ gradle-1.6/bin/gradle
:help
Welcome to Gradle 1.6. 
To run a build, run gradle <task> ...
To see a list of available tasks, run gradle tasks 
To see a list of command-line options, run gradle --help 
BUILD SUCCESSFUL 
Total time: 10.459 secs
jeonhs0@Goorm:~/jeonhs0_test$

잘 돌아가니 이것도 한번 maven과 똑같이 build.gradle 파일을 만들어 task를 실행시켜본다.

jeonhs0@Goorm:~/jeonhs0_test$ gradle-1.6/bin/gradle war
:compileJava UP-TO-DATE
:processResources UP-TO-DATE 
:classes UP-TO-DATE
:war 
BUILD SUCCESSFUL 
Total time: 14.196 secs
jeonhs0@Goorm:~/jeonhs0_test$

그리고 war 파일을 다시 한번 deploy 해본다.

jeonhs0@Goorm:~/jeonhs0_test$ apache-tomcat-7.0.42/bin/shutdown.sh
Using CATALINA_BASE:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_HOME:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar
jeonhs0@Goorm:~/jeonhs0_test$ rm -rf apache-tomcat-7.0.42/webapps/gubug*
jeonhs0@Goorm:~/jeonhs0_test$ ls apache-tomcat-7.0.42/webapps/
docs  examples  host-manager  manager  ROOT
jeonhs0@Goorm:~/jeonhs0_test$ mv build/libs/jeonhs0_test.war apache-tomcat-7.0.42/webapps/gubug.war
jeonhs0@Goorm:~/jeonhs0_test$ apache-tomcat-7.0.42/bin/startup.sh
Using CATALINA_BASE:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_HOME:   /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/bootstrap.jar:/goorm/home/jeonhs0/jeonhs0_test/apache-tomcat-7.0.42/bin/tomcat-juli.jar
jeonhs0@Goorm:~/jeonhs0_test$ curl http://localhost:8080/gubug/index.jsp
Hello... This is Gubug World
jeonhs0@Goorm:~/jeonhs0_test$ 

잘 실행된다.

여기까지 GoormIDE의 간략한 소개와 GoormIDE에서 제공하지 않는 기능이지만 maven, gradle을 적용하는 방법을 소개하였다.




GoormIDE는 local IDE에서 구현되어있는 단축키나 자동완성, shell 제공과 같이 로컬에서 개발하는 정도 수준의 기능들이 세세하게 잘 들어가 있는 IDE 이다.
하지만 사용하는데 불편한점이 적진 않았다.

정리를 해본다.

1. 예기치 않은 Session Timeout..
IDE를 사용하는 중에도 별안간 세션이 죽어버리는 문제가 있었다.
후에 IDE를 사용할때는 이 세션 30초뒤에 죽일꺼라며 메시지 박스가 떴지만 해당 오류가 발생했을땐 뜨지 않았었다.

2. 자동저장
여러 로컬IDE(Eclipse, Visual Studio, IntelliJ)는 자동저장 기능을 제공하고 있다.
하지만 이 IDE에서는 제공하지 않는듯 하다.

3. CLI에서 copy & paste 불가능
아.. 이거 정말 불편하다.

4. VM환경이 private network 임
웹 개발에도 사용한다고 하면... 외부에서도 개인 VM에 접속해볼 수 있도록 해주었으면 좋겠다.  방법이 쉽지만은 않지만 하다못해 vpn으로 접속하든 뭐든.. 어떻게든 접속할 수 있었으면 좋겠다.
이 때문에 VM의 활용용도가 뚝 떨어지는 것은 사실이다.

5. Java에서 Web Template 프로젝트 제공
웹 개발을 지원한다면 이건 자연스럽게 제공할꺼라 믿는다.

6. 단축키의 불편함..
위에서 말했듯이 ctrl+shift+오른쪽 방향키가 IDE의 ctrl+오른쪽 방향키 와 duplicate되어 이벤트가 발생하고 있다.
shift+tab도 없어서 좀 아쉬웠다.

7. 필수 패키지가 설치되어 있지 않음
unzip과 같은 필수 패키지가 설치되어있지 않다.
사실 unzip밖에 못찾았지만 개발자들이 미처 확인하지 못한 패키지들이 있을꺼라 생각한다.
그냥 sudo 권한을 줄 수 있는 방안을 생각하는것도 나쁘진 않을것 같다.
내부적으로는 사용자별로 항상 같은 vm을 주는것 같지 않은데 mount directory를 잘 조정하면 sudo 권한을 줘도 상관이 없을꺼 같다는 생각을 조심스레 꺼내본다.

뭐 나름 리뷰라고 문제점을 잔뜩 적긴했지만.
GoormIDE는 최근 꾸준히 버그픽스, 기능 개선이 이루어지고 있으니, 이러한 문제들도 머지않아 고쳐질꺼라 믿는다.

2013. 7. 10.

redmine 설치

yum -y install vim make wget
wget http://mirror.nus.edu.sg/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -i epel-release-6-8.noarch.rpm
yum install ruby
yum install ruby-devel
yum install rubygems
gem install rubygems-update -v=1.8.25
gem update --system
yum -y install gcc gcc-c++
gem install rails -v=3.2.13
cd /var/www/
wget http://rubyforge.org/frs/download.php/76867/redmine-2.3.0.tar.gz
tar -xf redmine-2.3.0.tar.gz
mv redmine-2.3.0 redmine
cd redmine/config
/etc/init.d/mysqld start
/usr/bin/mysqladmin -u root password '???'
/etc/init.d/mysqld restart
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'iXAi95xsHOUPaPb';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
mv database.yml.example database.yml
vim database.yml
gem install bundle
yum -y install mysql-devel
bundle install --without development test rmagick
yum install ImageMagick-devel
gem install rmagick -v=2.13.2
bundle install --without development test
rake generate_secret_token
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
ko
chown apache:apache /var/www/redmine -R

gem install passenger
yum -y install httpd-devel

2012. 12. 28.

Cain&Abel에서 Couldn't bind https acceptor socket가 발생하였을때.

!@$!%^#$^@&@%&@$

내 컴퓨터는 뭔가 서비스가 잔뜩 돌고 있어서 Cain&Abel을 사용할 때 에러가 발생한다.

이때 문제해결에 도움을 줄 수 있는 동영상이다.


알수없는 언어를 사용하고 있지만 메뉴위치를 보고 따라하면 충분히 가능하다.


2012. 11. 1.

byobu 설치

이동하는 과정에서 쉘작업을 하다가 인터넷이 끊겨서 여태까지 작업한걸 날려먹는 일이 가끔 발생하여서 screen을 쓰려고 찾아보다 byobu를 쓰는게 좋다고 해서 설치해본다.

screen과 byobu 설치
$ yum -y install screen
$ yum -y install byobu

shell 접속시 자동으로 byobu가 구동되게 설정
$ vim ~/.bash_profile
아래 내용 추가
_byobu_sourced=1 . byobu-launch

screen 단축키(생각나는거만)
* 화면이동 관련
^a+a : 이전 화면
^a+c : 화면 생성
^a+n : 다음 화면
^a+p : 이전 화면(^a+a와는 다름. 화면 여러개 두고 테스트해보면 무슨 뜻인지 이해됩니다.)
^a+0~9 : 0~9번째 화면 이동

* 탭 관련
^a+S : 상하 화면 분할
^a+tab : 화면 이동
^a+X : 분할 화면 종료

* byobu detach/attach
^a+d : byobu detach
$ byobu -R : byobu reattach

2012. 10. 27.

Linux가 설치된 Virtual Machine에 디스크 용량 늘이기

ESXi에서 Virtual Machine의 용량을 늘이는건 어렵지 않다.

설정편집 -> Hard Disk -> 용량 증가.

하지만 아쉽게도 Linux에서 자동으로 용량을 늘여주진 않는다.

(그랬으면 참 좋을텐데)

인터넷 열심히 찾았는데 쓸만한 자료가 없다가 자료를 하나 겨우 찾았다.

혹시나 또 필요할지 모르니 기록해둔다.












1. PV(Physical Volume) 생성

현재 파티션이 없는 경로를 선택하여 아래를 실행한다.




$ mknod /dev/sda3 b 8 3

$ chown root:disk /dev/sda3




2. fdisk를 이용하여 파티션을 생성한다.

$ fdisk /dev/sda









- 완료후 재부팅




3. 재부팅 후 /dev/sda3에 PV(Physical Volume)을 생성

$ pvcreate /dev/sda3









4. VG(Volume Group) 확장

VG(Volume Group) 이름을 알기 위해서는 아래를 실행한다.

$ vgdisplay

(VG Name 항목에 적혀있는 것이 VG 이름이다)




$ vgextend vg_name /dev/sda3

(vg_name은 위에서 확인한 VG 이름이다.)

(pvscan 명령을 이용하여 /dev/sda3이 vg_name에 제대로 추가 됐는지 확인)









5. LV(Logical Volume) 늘이기

LV(Logical Volume) 이름 확인하기.

$ ls -l /dev/vg_name/




- 기존 LV에 추가된 용량의 PV를 확장. (예는 gigabyte 단위)

$ lvextend -L +용량g /dev/vg_name/lv_root




6. 파일 시스템 크기 조정

$ resize2fs /dev/vg_name/lv_root

Linux 파일명 인코딩 변경


요즘 서버 이전작업으로 인해 이래저래 서버를 만질수 있는 기회가 있다.

서버 이전 중 기존 데이터를 이전시키는게 큰 문제점이 발생하였다.
그것은 파일명 인코딩이 모두 깨진다는것..
기존 서버에서 지원하고 있던 인코딩은 EUC-KR..
현재 서버는 UTF-8..
파일명 인코딩을 변경하려고 인터넷을 검색해보니
쨔라란~ convmv 라는 고마운 녀석이 있다.


$ convmv --notest --nosmart -f euc-kr -t utf-8 -r *

몇가지 옵션들을 찾아서 요런 명령을 수행했다.

혹시 모르니 테스트 과정을 꼭 거쳐야할듯 하다.

gcc에서 stack boundary, stack protector 관련 옵션


-fno-stack-protector
stack protector를 없애는 옵션

-mpreferred-stack-boundary=2
stack boundary를 없애는 옵션\


gcc crackme.c -fno-stack-protector -mpreferred-stack-boundary=2 -o crackme