2016년 11월 19일 토요일

라즈베리파이 - 아파치 톰캣 연동

1. libapache2-mod-jk 설치
- 사전 준비사항
아파치, 톰캣 모두 설치가 된 상태에서 진행해야 합니다.


- 설치
root@raspberrypi:~# apt-get install libapache2-mod-jk



2. 아파치 설정
- apache2.conf 수정
/usr/lib/apache2/modules/mod_jk.so 파일이 있는지 확인 한 후 
/etc/apache2/apache2.conf 파일 맨 아래 다음과 같이 수정합니다.

root@raspberrypi:~# vi /etc/apache2/apache2.conf

추가 내용
#JK_MODULE
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so


- 000-default.conf 설정
/etc/apache2/sites-enabled/000-default.conf  파일 <VirtualHost *:80> 다음 행에 다음 내용을 추가합니다.

root@raspberrypi:~# vi /etc/apache2/sites-enabled/000-default.conf

추가내용
JkMount /*      loadbalancer


- workers.properties 파일 생성
root@raspberrypi:~# vi /etc/apache2/workers.properties

추가내용
vi /etc/apache2/workers.properties

workers.java_home=/usr/lib/jvm/java-8-openjdk-armhf

worker.list=loadbalancer
 
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=instance1
worker.loadbalancer.sticky_session=1

worker.instance1.type=ajp13
worker.instance1.host=localhost
worker.instance1.port=8009
worker.instance1.lbfactor=1


- 톰캣 설정 확인
worker.loadbalancer.balanced_workers=instance1 라인 내용 중 instance1이 톰캣과 동일해야 합니다.

톰캣 설정 파일 server.xml을 수정합니다.

root@raspberrypi:~# vi /opt/tomcat/instance1/conf/server.xml

문서 중간 쯤
<Engine name="Catalina" defaultHost="localhost">
라인에 jvmRoute가 있는지 확인하고 수정합니다.

확인 및 수정
<Engine name="Catalina" defaultHost="localhost" jvmRoute="instance1">


- httpd-jk.conf 설정
root@raspberrypi:~# vi /etc/libapache2-mod-jk/httpd-jk.conf

JkWorkersFile /etc/libapache2-mod-jk/workers.properties 내용을 다음과 같이 수정합니다.

#JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkWorkersFile /etc/apache2/workers.properties



3. 서비스 재시작
- 톰캣 실행
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/startup.sh

톰캣이 이미 실행중이라면 
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/shutdown.sh
root@raspberrypi:~# sh /opt/tomcat/instance1/bin/startup.sh


- 아파치 재실행
root@raspberrypi:~# service apache2 restart


- 접속 확인

80포트로 접속을 했을 때 톰캣으로 이동합니다.






2016년 11월 17일 목요일

라즈베리파이 - 아파치2와 톰캣 설치

1. 안내사항
2016-09-23 이미지 기준으로 작성했습니다.
라즈베리파이3 B+ 모델 기준입니다.
apt-get로 설치하는 패키지는 apache2, openjdk-8-jdk 입니다.
톰캣은 apache-tomcat-8.5.8을 수동으로 설치했습니다.



2. 아파치2 설치
- 설치
root@raspberrypi:~# apt-get install apache2

- 접속 확인
root@raspberrypi:~# ifconfig
IP 주소 확인 후 브라우저에서 확인 하시면 됩니다.

html 경로 : /var/www/html/index.html



3. 자바 설치
- 설치 확인
root@raspberrypi:~# java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b04)
OpenJDK Zero VM (build 25.40-b08, interpreted mode)

- 설치(설치가 안된 경우 설치)
root@raspberrypi:~# apt-get install openjdk-8-jdk



4. 톰캣 설치
- 설치
아파치 톰캣 사이트 : http://tomcat.apache.org/

/opt 디렉토리에 tomcat 디렉토리를 생성 후 톰캣을 다운로드합니다.
다운로드한 압축파일은 압축을 풀고 디렉토리 이름을 instance1 로 수정합니다.

root@raspberrypi:/opt# mkdir tomcat
root@raspberrypi:/opt# cd tomcat/
root@raspberrypi:/opt/tomcat# wget http://mirror.apache-kr.org/tomcat/tomcat-8/v8.5.8/bin/apache-tomcat-8.5.8.tar.gz
root@raspberrypi:/opt/tomcat# tar -zxvf apache-tomcat-8.5.8.tar.gz
root@raspberrypi:/opt/tomcat# mv apache-tomcat-8.5.8 instance1


- 파일수정
root@raspberrypi:/opt/tomcat# which java
/usr/bin/java
root@raspberrypi:/opt/tomcat# readlink /usr/bin/java
/etc/alternatives/java
root@raspberrypi:/opt/tomcat# readlink /etc/alternatives/java
/usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java

readlink로 경로를 확인한 후 startup.sh, shutdown.sh 파일을 수정합니다.

root@raspberrypi:/opt/tomcat# cd instance1/bin/
root@raspberrypi:/opt/tomcat/instance1/bin# vi startup.sh
root@raspberrypi:/opt/tomcat/instance1/bin# vi shutdown.sh


#!/bin/sh에 아래 내용 추가

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-armhf
export CATALINA_HOME=/opt/tomcat/instance1
export CATALINA_BASE=/opt/tomcat/instance1



- 실행 확인
실행
root@raspberrypi:/opt/tomcat/instance1/bin# sh startup.sh
종료
root@raspberrypi:/opt/tomcat/instance1/bin# sh shutdown.sh

root@raspberrypi:~# ifconfig
IP 주소 확인 후 브라우저에서 포트번호 8080을 추가해서 확인 하시면 됩니다.





마치며..
아파치와 톰캣을 연동하려면 mod-jk를 사용해야 합니다.




2016년 11월 12일 토요일

자바 String 기본 예제 - 문자열 다루기

1. 문자열 포함 - contains
System.out.println("ABCD123".contains("CD"));



2. 시작문자열 - startsWith
System.out.println("https://www.google.com".startsWith("https://"));



3. 끝 문자열 - endsWith
System.out.println("image.jpg".endsWith(".jpg"));



4. 비교 - equals, equalsIgnoreCase
- 대소문자 구분
System.out.println("image.jpg".equals("image.jpg"));

- 대소문자 무시
System.out.println("image.jpg".equalsIgnoreCase("IMAGE.jpg"));



5. 문자열 자르기 - substring
- index 부터 자르기
System.out.println("www.google.com".substring(3));
> 결과 : google.com

- 구간 자르기
System.out.println("www.google.com".substring(4, 10));
> 결과 : google



6. 문자열 위치 찾기 - indexOf, lastIndexOf
- 왼쪽 기준에서 위치 찾기
System.out.println("www.google.com".indexOf("google"));

- 오른쪽 기준에서 위치 찾기
System.out.println("www.google.com".lastIndexOf(".com"));


예) 구간 자르기와 함께 쓰기
String value = "www.google.com";
int beginIndex = value.indexOf(".") + 1;
int endIndex = value.lastIndexOf(".");
System.out.println(value.substring(beginIndex, endIndex));

> 결과 : google
> +1을 하는 이유 : 10 11 12 13 m



7. 정규식 - matches
- 특정 문자가 포함되는 여부 판단
System.out.println("Qwer123".matches(".*[a-z][A-Z].*"));
> 대소문자 포함 여부 확인



8. 문자열 분리(배열) - split
System.out.println(Arrays.asList("www.google.com".split("\\.")));
> 결과 : [www, google, com]



9. 문자열 바꾸기 - replace, replaceAll
- 바꾸기
System.out.println("www.google.com".replace("www", "https://www"));

- 모두 바꾸기
System.out.println("w w w . g o o g l e . c o m".replaceAll(" ", ""));
> 공백 모두 제거



10. 대소문자 변경 - toLowerCase, toUpperCase
- 모두 소문자
System.out.println("www.google.com".toLowerCase());

- 모두 대문자
System.out.println("www.google.com".toUpperCase());

소수 구하기 예제 - 素數, prime number

- 소수
1과 그수 자신 이외의 자연수로는 나눌 수 없는, 1보다 큰 자연수


1. 소스코드
public class PrimeNumber {

public static void main(String[] args) {
for (long i = 1; i < Long.MAX_VALUE; i++) {
check(i);
}
}

public static void check(long value) {
for (long i = 2; i < value; i++) {
if (value % i == 0)
return;
}
System.out.println(value);
}
}

2. 결과
1
2
3
5
7
11
13
17
19
23
29
31
...

소스코드 - 구구단

- 심심해서 짜보는 구구단 소스


1. for문 2개로 출력하기
public static void step1() {
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.println(i + " * " + j + " = " + (i * j));
}
System.out.println();
}
}



2. for문 1개로 출력하기
public static void step2() {
for (int i = 2, j = 1; i <= 9; j++) {
System.out.println(i + " * " + j + " = " + (i * j));

if (j == 9) {
j = 1;
i++;
System.out.println();
}
}
}



3. 재귀호출을 이용한 방법 - for문 없음.
public static void step3(int i, int j) {
if (i > 9)
return;

System.out.println(i + " * " + j + " = " + (i * j));
if (j < 9) {
j++;
step3(i, j);
} else {
System.out.println();

j = 1;
i++;
step3(i, j);
}
}

아두이노 개발 시작하기

1. 아두이노 선택 
아두이노 보드는 UNO(우노) 버전을 추천합니다.
아두이노 우노는 정품은 3만원 이내, 정품호환 버전은 5천원 전후로 구매가 가능합니다.

정품과 정품호환버전은 동일한 성능입니다.
차이점은 제품의 퀄리티 입니다.


- 아두이노 우노 정품

이미지 출처 - https://store.arduino.cc/


- 아두이노 우노 호환보드





2. 아두이노 IDE설치
- 아두이노 IDE 설치
다운로드 경로1(추천)
https://www.arduino.cc/en/Main/Software

다운로드 경로2
http://www.arduino.org/downloads

윈도우 환경이나 맥 환경 어디서든 쉽게 설치가 가능합니다.



3. 기본코드 구조
- 코드 구조 설명
void setup() {
  // 가장 먼저 실행되는 메소드

}

void loop() {
  // 반복적으로 호출 되는 메소드
}

아두이노는 setup과 loop 두 메소드로 기본 구성을 이룹니다.
아두이노가 실행되면 setup 메소드를 호출한 뒤 loop 메소드를 반복적으로 호출합니다.

setup < 어떤 형태로 동작할 것인지 정의(초기화)
loop < 주기적으로 기능 실행



4.  기능 구현 및 실행
- 구현 기능
2초 마다 LED 다이오드(전구)의 불을 깜박거리는 기능 구현

setup - LED 다이오드 사용을 지정
loop - 2초 간격으로 LED 다이오드에 전원을 공급/차단


- 코드 작성
void setup() {
  pinMode(13, OUTPUT);  // LED 다이오드 사용 설정
}

void loop() {
  digitalWrite(13, HIGH); // LED ON
  delay(2000);            // 2초간 휴식
  digitalWrite(13, LOW); // LED OFF
  delay(2000);            // 2초간 휴식
}

- 컴파일 및 실행
저장 후 업로드를 실행하시면 코드가 컴파일되고 아두이노 보드에 업로드 됩니다.
USB 연결상태 확인해 주세요.

보드종류 선택



연결된 보드 선택



컴파일 및 업로드



- 실행결과


업로드 후 LED가 깜박이는 것을 확인하시면 됩니다.



LED 다이오드 연결방법(LED 다이오가 있는 경우)



LED 다이오드가 있는 경우 극성을 맞춰서 13번 핀에 연결해주시면 됩니다.
주황색 불빛이 13번 핀에 연결된 LED 입니다.

LED 다이오드 다리가 긴쪽이 +/짧은 쪽이 - 입니다.
다리가 긴쪽을 13번핀에 연결하고 짧은쪽을 GND에 연결합니다.

연결된 모습





- 코드설명
pinMode : 아두이노 pin을 통해 입출력을 결정, 입력은 INPUT/출력은 OUTPUT
digitalWrite : 디지털 출력을 설정, HIGH(디지털 출력 ON)/LOW(디지털 출력 OFF)
delay : 딜레이, 1초는 1000, 0.5초는 500

레퍼런스 문서 링크
https://www.arduino.cc/en/Reference/HomePage









2015년 12월 13일 일요일

라즈베리파이 무선공유기 설정

작업전 확인.
root 권한에서 작업 합니다.(sudo su -)
- 개발자를 위한 환경으로 설치합니다.
apt-get update 명령어 실행 후 진행합니다.



1. 패키지 설치
hostapd와 bridge-utils을 설치합니다.

apt-get install -y hostapd bridge-utils




2. 네트워크 인터페이스 수정
- wifi 드라이버 인식 확인
lsusb

wifi가 인식되지 않을 경우 드라이버 설치가 필요합니다.


- 네트워크 인터페이스 백업
수정하기 전 백업
cp /etc/network/interfaces /etc/network/interfaces.bak


- 인터페이스 내용 수정
vi /etc/network/interfaces

브릿지를 사용하도록 아래 내용으로 수정

auto lo
iface lo inet loopback

iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0



3. hostapd 설정
- hostapd.conf 생성
vi /etc/hostapd/hostapd.conf

아래 내용을 추가
bridge=br0
interface=wlan0
driver=nl80211
ssid=AP
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=00000001
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

브릿지와 인터페이스는 네트워크 인터페이스 설정과 일치해야 합니다.
사용하는 WiFi 모듈에 맞게 드라이버를 설정합니다.
ssid와 password를 설정합니다.


- hostapd 수정
vi /etc/default/hostapd

DAEMON_CONF  주석 해제 후 hostapd.conf 경로 지정
DAEMON_CONF="/etc/hostapd/hostapd.conf"



4. 서비스 재시작
service networking restart
service hostapd restart

서비스 재시작 후 WiFi 연결 테스트를 진행합니다.