Nodejs, npm 은 설치 되어 있다고 가정 한다.


Step 1.  express 설치 하기

-g 옵션을 주게 되면 전역으로 설치 된다.


whitelife@whitelife:~/work$ sudo npm install -g express


Step 2.  프로젝트 생성 하기

생성하기 전에 도움말부터 보자.


whitelife@whitelife:~/work$ express --help


Usage: express [options]


  Options:


    -h, --help          output usage information

    -V, --version       output the version number

    -s, --sessions      add session support

    -e, --ejs           add ejs engine support (defaults to jade)

    -J, --jshtml        add jshtml engine support (defaults to jade)

    -H, --hogan         add hogan.js engine support

    -c, --css <engine>  add stylesheet <engine> support (less|stylus) (defaults to plain css)

    -f, --force         force on non-empty directory


참고해야 하는 옵션은 보통 view, session 추가 설정 부분 이다. 

이제 프로젝트를 생성해 보자.

view engine 은 따로 설정을 하지 않으면 jade로 설정 된다.


whitelife@whitelife:~/work$ express -s -e whitelife


   create : whitelife

   create : whitelife/package.json

   create : whitelife/app.js

   create : whitelife/public

   create : whitelife/public/javascripts

   create : whitelife/public/images

   create : whitelife/public/stylesheets

   create : whitelife/public/stylesheets/style.css

   create : whitelife/views

   create : whitelife/views/index.ejs

   create : whitelife/routes

   create : whitelife/routes/index.js

   create : whitelife/routes/user.js


   install dependencies:

     $ cd whitelife && npm install


   run the app:

     $ node app


whitelife@whitelife:~/work$ 


Step 3.  의존성 모듈 설치 하기

프로젝트에 대한 정의는 package.json을 참고 하자. 생성한 프로젝트 디덱토리를 보면 찾을 수 있다.


whitelife@whitelife:~/work/whitelife$ ll

합계 28

drwxr-xr-x  5 whitelife whitelife 4096  5월  3 11:24 ./

drwxrwxr-x 25 whitelife whitelife 4096  5월  3 11:24 ../

-rw-rw-r--  1 whitelife whitelife  937  5월  3 11:24 app.js

-rw-rw-r--  1 whitelife whitelife  181  5월  3 11:24 package.json

drwxr-xr-x  5 whitelife whitelife 4096  5월  3 11:24 public/

drwxr-xr-x  2 whitelife whitelife 4096  5월  3 11:24 routes/

drwxr-xr-x  2 whitelife whitelife 4096  5월  3 11:24 views/

whitelife@whitelife:~/work/whitelife$ vim package.json 


package.json

{

  "name": "application-name",

  "version": "0.0.1",

  "private": true,

  "scripts": {

    "start": "node app"

  },  

  "dependencies": {

    "express": "3.1.0",

    "ejs": "*" 

  }

}


npm을 이용하여 의존성 모듈을 설치하는데 위 dependencies 속성을 메타 정보로 활용 한다.

java 진영의 소스 관리 툴 maven 과 흡사하다고 생각 하면 된다.

이제 의존성 모듈을 설치 하자.


whitelife@whitelife:~/work/whitelife$ npm install -d

npm info it worked if it ends with ok

npm info using npm@1.2.18

npm info using node@v0.10.5

npm WARN package.json application-name@0.0.1 No README.md file found!

npm info preinstall application-name@0.0.1

npm info trying registry request attempt 1 at 11:32:05

npm http GET https://registry.npmjs.org/ejs

npm info trying registry request attempt 1 at 11:32:05


// ...... ing

ejs@0.8.3 node_modules/ejs

express@3.1.0 node_modules/express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie-signature@0.0.1
├── buffer-crc32@0.1.1
├── cookie@0.0.5
├── commander@0.6.1
├── debug@0.7.2
├── mkdirp@0.3.3
├── send@0.1.0 (mime@1.2.6)
└── connect@2.7.2 (pause@0.0.1, bytes@0.1.0, formidable@1.0.11, qs@0.5.1)
npm info ok 


설치가 완료되면 의존성 모듈의 구조를 볼 수 있다.

심심할 때 마다 보다보면 좋은 모듈도 많다. mkdirp 를 여기서 보다가 참고해서 사용하고 있다.~ 


따로 모듈을 추가해야 할 경우 --save 옵션을 주면 package.json 에 같이 적용 된다.

whitelife@whitelife:~/work/whitelife$ npm install --save super

whitelife@whitelife:~/work/whitelife$ vim package.json 


// ...

"dependencies": {

  "express": "3.1.0",

  "ejs": "*" 

  "super": "~0.2.1" 

}

// ...


위와 같이 적용 한다면 해당 프로젝트를 다른 PC에 셋팅을 해야 한다고 해도 npm install -d 로 한번에 의존성 모듈 설치가 완료 된다. 


Step 4.  프로젝트 실행 하기

app.js 가 express의 설정 파일이라고 생각 하면 된다. 실행 해보자.


whitelife@whitelife:~/work/whitelife$ node app.js 

Express server listening on port 3000


브라우저를 띄워서 확인 하자.



여기까지 같이 왔다면 성공이다.~ 


※ 참고 사이트: http://expressjs.com/



Android 개발 환경을 구축해보자.


Step 1.  ADT 다운받기

옛날에는 따로 ADT 설정을 해줬는데 요즘은 통합되서 나온다.

http://developer.android.com/sdk/index.html 주소로 들어가서 다운 받자.

Step 2.  압축 풀고 실행하기

압축을 풀면 eclipse, sdk 폴더가 나온다. Eclipse 클릭

work 경로 지정 후 ok


Step 3.  Project 만들기

File > New > Android Application Project 클릭

Application Name, Project Name, Package Name 작성



Project  경로 설정 하기



앱 실행시 아이콘 설정 하기



Acivity 템플릿 설정 하기



Main Acivity 설정 하기



Finish 하면 Project 가 생성 된다.


Step 4.  HelloWorld 띄우기

만들어진 Project 에서 Run > Run As > Android Application 클릭

  • 단말기가 연결 되어 있는 경우 아래와 같이 해당 단말기가 활성화 되어 있다.

  • 단말기가 연결 되어 있지 않은 경우 Android Virtual Device 설정을 해야 한다.

 


아래와 같은 화면을 볼 수 있다.



여기 까지 따라왔다면 성공이다. !!!


※ 참고 사이트: http://developer.android.com/training/basics/firstapp/creating-project.html

 

'Android' 카테고리의 다른 글

Android ADT 에서 Device 인식을 하지 못하는 경우  (0) 2014.11.27
Android Studio 설치하기  (2) 2014.09.25


눈이 즐겁게 개발을 하기 위해서 필요한 plugin 이다. ~ 설치해보자.


Step 1.  저장소 추가 하기

Help > Install New Software 클릭

http://eclipse-color-theme.github.com/update 주소를 추가 한다.



Step 2.  설치하기

Next > 클릭



아래 팝업이 뜰 경우 OK 한다. 

설치가 완료 되면 재 시작 한다.



Step 3.  설정하기

환경설정,  preferences 클릭 후 아래 메뉴로 이동 원하는 테마를 고른다.



아래와 같이 적용 된다.



보통 브라우저에 403 응답이 올 경우 발생 한다.


default logs 경로:  /var/log/nginx/error.log 중...


2013/04/26 15:13:28 [error] 3390#0: *12 open() "***************" failed (13: Permission denied), client: 10.0.2.2, server: ***************, request: "GET *************** HTTP/1.1", host: "***************", referrer: "***************"
2013/04/26 15:13:28 [error] 3390#0: *7 open() "***************" failed (13: Permission denied), client: 10.0.2.2, server: ***************, request: "GET *************** HTTP/1.1", host: "***************", referrer: "***************"


권한이 없다. 


해결 방법


1.  /etc/nginx/conf.d/xxxx.conf 확인


// ...

root /home/xxxxx/work/

// ...


2.  root 그룹 확인


drwxr-xr-x 14 xxxxx 

xxxxx 4096  x월 xx xx:xx xxxxx

drwxr-xr-x 11 xxxxx xxxxx 4096  x월 xx xx:xx xxxxx

[xxxxx@localhost work]$ 


3.  /etc/nginx/nginx.conf 수정

해당 그룹으로 user 수정


#user  nginx;

user  xxxxx;

worker_processes  1;


error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;



events {

    worker_connections  1024;

}



http {

    include       /etc/nginx/mime.types;

    default_type  application/octet-stream;


    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';


    access_log  /var/log/nginx/access.log  main;


    sendfile        on;

    #tcp_nopush     on;


    keepalive_timeout  65;


    #gzip  on;


    include /etc/nginx/conf.d/*.conf;

}


4.  서버 재 시작



[xxxxx@localhost work]$ sudo /etc/init.d/nginx restart





기본 적으로 설치가 되지 않기 떄문에 추가로 설치 해줘야 한다.


sudo npm install -g node-gyp



root 로 작업 해야 한다.


[root@localhost ~]# vim /etc/sysconfig/iptables


# Firewall configuration written by system-config-securitylevel

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -p 50 -j ACCEPT

-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT


Case 1.  방화벽 Open 하기

원하는 port 로 한줄 추가한다.


-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport [port] -j ACCEPT


Case 2.  방화벽 막기

원하는 port 로 한줄 추가한다.


-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport [port] -j REJECT


적용하기


[root@localhost ~]# /etc/init.d/iptables restart

방화벽 규칙을 삭제하는 중:                                 [  OK  ]

chains를 ACCEPT 규칙으로 설정함: filter                    [  OK  ]

iptables 모듈을 제거하는 중:                               [  OK  ]

iptables 방화벽 규칙들을 적용하는 중:                      [  OK  ]

추가 iptables 모듈을 읽어오는 중: ip_conntrack_netbios_ns  [  OK  ]



 

Https 를 적용해야 할 경우 간단하게 만들어서 테스트를 해볼 수 있다.

그 준비물인 사설 인증서를 생성해 보자.

 

Step 1. private key 생성하기

 

whitelife@whitelife:~/openssl/test$ openssl genrsa > key.pem

 

-----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBAKoBPDY0MJvDwAOsH1D3ITHtHiH/38HX0FwDT3T3wTJRerr8rwUl
bqnWuD8v054z/Kx+PlDRTVoNICkkiFgJKv8CAwEAAQJBAJCCFEiO/HKrZmC4wrX0
G8dwo5iLBAymAnr0ZWor35GAxbG3KFh6cj7M0oeUIJSniIKhUBWg4eq64tS/0sTX
62ECIQDfUWa8GoQxr26TPmLUBVXyxw9fb+2BVYffvawkJoGJIwIhAMLidX73oZMu
k/XHcCcFoWkx1jxtVsHfcPODVfJRD2p1AiB+ti922AzeLE6vmZx19TkZcj2Ux2ua
ES/xkivUr0ycxQIhAIbqM6E0WZ0E79WEvjWlhjrHD6NBpoAM6asLTyKzz1JJAiEA
j1pwThKycdp2s1q8AWLIeKxOGGTVfQfHtt2r58wpF9o=
-----END RSA PRIVATE KEY-----

 

Step 2-1.  CSR 생성

 

whitelife@whitelife:~/openssl/test$ openssl req -new -key key.pem > csr.pem


You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:82
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
-----BEGIN CERTIFICATE REQUEST-----
MIH/MIGqAgEAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwXDANBgkqhkiG9w0BAQEF
AANLADBIAkEAqgE8NjQwm8PAA6wfUPchMe0eIf/fwdfQXANPdPfBMlF6uvyvBSVu
qda4Py/TnjP8rH4+UNFNWg0gKSSIWAkq/wIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
QQBoQBxqUzqQij8nVk6evB48s+HEfwOVlXjN91Lljq+Pt0flBQk0Bcyg7st6LFI0
f3lUp2NH2Buwz1rHvHvksPG1
-----END CERTIFICATE REQUEST-----

 

Step 2-2.  X.509 인증서 생성

private key, csr 을 이용하여 공인 인증서 생성 x509 구조로 변환 sha1 을 적용 한다.

 

whitelife@whitelife:~/openssl/test$ openssl req -x509 -nodes -sha1 -key key.pem -days 3600 -in csr.pem -out cert.pem


-----BEGIN CERTIFICATE-----
MIIB0zCCAX2gAwIBAgIJAO0e6iF6uOhjMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTMwNDI0MDkzOTM1WhcNMjMwMzAzMDkzOTM1WjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoB
PDY0MJvDwAOsH1D3ITHtHiH/38HX0FwDT3T3wTJRerr8rwUlbqnWuD8v054z/Kx+
PlDRTVoNICkkiFgJKv8CAwEAAaNQME4wHQYDVR0OBBYEFKMjMlhvCA1jlu6rv9T0
SEKuMOWEMB8GA1UdIwQYMBaAFKMjMlhvCA1jlu6rv9T0SEKuMOWEMAwGA1UdEwQF
MAMBAf8wDQYJKoZIhvcNAQEFBQADQQB528m7Ytn0DEtGDaj7NyWrjFBQgCsYMikf
VMdqJtsh44t+gnslVlSfpszWFWJGwpPdWosGSbeAUx0l89B6mw0m
-----END CERTIFICATE-----

 

결과.

파일이 생성된 모습을 확인 할 수 있다.

 

drwxrwxr-x 2 whitelife whitelife 4096  4월 24 18:36 ./
drwxrwxr-x 3 whitelife whitelife 4096  4월 24 18:19 ../
-rw-rw-r-- 1 whitelife whitelife  692  4월 24 18:39 cert.pem
-rw-rw-r-- 1 whitelife whitelife  420  4월 24 18:30 csr.pem
-rw-rw-r-- 1 whitelife whitelife 9655  4월 24 18:36 help
-rw-rw-r-- 1 whitelife whitelife  497  4월 24 18:22 key.pem

 

 

 

Java 실행 시 아래 와 같은 예외가 발생 할 경우 Java Version 을 맞춰 줘야 한다.

 

Exception in thread "main" java.lang.UnsupportedClassVersionError: httpsclient : Unsupported major.minor version 51.0
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
 at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: httpsclient. Program will exit.

 

버전 예외 표

 version

exception 

 1.7

 51.0

 1.6

 50.0

 1.5

 49.0

 

해결 방법

- Linux

 

whitelife@whitelife:~/work_java/myapp$ sudo update-alternatives --config java
[sudo] password for whitelife:
대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다.

  선택       경로                                          우선순  상태
------------------------------------------------------------
* 0            /usr/lib/jvm/java-7-oracle/jre/bin/java          1063      자동 모드
  1            /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java   1061      수동 모드
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          1063      수동 모드

기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오: 1
update-alternatives: /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 사용해서 수동 모드에서 /usr/bin/java (java) 제공. 

 

위 표에 맞는 버전으로 적용 한 후 다시 실행 하면 해결 된다.

 

'Java' 카테고리의 다른 글

Java Console 게시판 만들기 - 3  (0) 2013.11.12
Java Console 게시판 만들기 - 2  (0) 2013.11.11
Java Console 게시판 만들기  (1) 2013.11.10
JDBC로 Query 작성하기 (Mysql)  (0) 2012.12.19
Date 함수 관련  (0) 2012.12.03

+ Recent posts