몽고 DB 이중소트(multiple sort)
//자바
DBCursor cursor=dbc.find().sort(new BasicDBObject(“group_id”, -1).append(“group_step”,1)).limit(10).skip(skip);
//몽고db
db.board.find().sort({group_id:-1,group_step:1})
당신의 업무력 향상과 칼퇴를 돕는 블로그
몽고 DB 이중소트(multiple sort)
//자바
DBCursor cursor=dbc.find().sort(new BasicDBObject(“group_id”, -1).append(“group_step”,1)).limit(10).skip(skip);
//몽고db
db.board.find().sort({group_id:-1,group_step:1})
1. 추상클래스는 자기 자신의 메소드(이미 구현된 메소드)도 가질 수 있다.
2. 인터페이스는 여러 개를 구현할 수 있다. 반대로 추상클래스는 단 한 개만을 상속할 수 있다.
3. 인터페이스의 변수는 상수형(final)이다.
aop
public class MyAspect{
@Before
public void a(* com.sist.A.*(..)){}
@After
public void b(){}
}
공통 관심사에 해당하는 메소드를 어드바이스라고 함. 다시 말해 a,b 를 어드바이스라고 한다.
언제 실행할 것인가를 조인포인트 라고 한다. 조인포인트는 5가지가 있다. Before, After, After-Throwing, Around, After-Returing
어디서 실행될 것인가, 익스큐션(execution) 어쩌구 해서 시작되는 것을, 포인트컷이라고 한다.
@ 조인포인트
어드바이스(포인트컷)
조인포인트와 어드바이스와 포인트컷을 합쳐 ‘어드바이저’라고 한다.
어드바이저의 집합인 공통 모듈을 Aspect(=공통 모듈)라고 한다.
aop는 프록시 패턴을 이용해서 만들어졌다.
프록시(대리자)가 타겟(핵심로직)과 애스펙트(공통관심사)를 묶어준다. 이를 위빙이라고 한다.
try{
Before or Around
}
catch(Expceion ex){
After-Throwing
}
finally{
After
}
return After-Returning
around
로깅 체크는 around를 많이 씀 (before와 after 둘 다에 속하기 때문)
before와 around를 함께 쓰면 around만 적용됨
after와 around를 함께 쓰면 둘 다 적용됨, after는 finally와 같이 무조건 수행함
자바 퍼시스턴스 API(Java Persistence API, JPA)는 관계형 데이터베이스에 접근하기 위한 표준 ORM 기술을 제공하며, 기존에 EJB에서 제공되던 엔터티 빈(Entity Bean)을 대체하는 기술이다. JPA는 JSR 220에서 정의된 EJB 3.0 스펙의 일부로 정의가 되어 있지만, JPA는 EJB 컨테이너에 의존하지 않으며 EJB, 웹 모듈 및 Java SE 클라이언트에서 모두 사용이 가능하다. 또한, JPA는 사용자가 원하는 퍼시스턴스 프로바이더 구현체를 선택해서 사용할 수 있다.
API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
앵귤러js 2강
<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
pageEncoding=”EUC-KR”%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
<!DOCTYPE html>
<html>
<head>
<meta charset=”EUC-KR”>
<title>Insert title here</title>
</head>
<script type=”text/javascript” src=”</script’>http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js”></script>
<script type=”text/javascript”>
//var a=[]; 배열
//var a={no:1,name:”aaa”} 자바스크립트의 객체.
// a.no => 1
// a.name => aaa
angular.module(‘myApp’,[]).filter(‘Search’,Search).controller(‘BookCtrl’,BookCtrl);
function BookCtrl($scope){
//객체 배열
$scope.books=[
<c:forEach var=”vo” items=”${list}” varStatus=”i”>
{
“auth”:”<c:out value=’${vo.auth}’/>”,
“title”:”<c:out value=’${vo.title}’/>”,
“active”:false
}
<c:if test=”${i.count<count}”>,</c:if>
</c:forEach>
];
}
function Search(){
return function(arr,text){
if(!text)
return arr;
var searchText=text.toLowerCase();
//$http.get(”);
var result=[];
arr.forEach(function(data){
if(data.title.toLowerCase().indexOf(searchText)!=-1){
result.push(data);
}
});
return result;
}
}
</script>
<body>
<div ng-app=”myApp”>
<div ng-controller=”BookCtrl” class=wrap>
<h1>Book List</h1>
<input type=”text” ng-model=”text” placeholder=”검색어 입력”>
<ul>
<li ng-repeat=”book in books | Search:text”
ng-mouseover=”book.active=true”
ng-mouseleave=”book.active=false”
ng-class=”{active:book.active}”>
<span class=”auth”>{{book.auth}}</span>
<span>{{book.title}}</span>
</li>
</ul>
</div>
</div>
</body>
</html>
앵귤러js 1강
<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd“>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<script type=”text/javascript” src=”</script’>http://code.angularjs.org/angular-1.0.0rc10.min.js”></script>
</body>
<div ng-app=””>
<input type=”text” ng-model=”name”>
<p>{{name}}</p>
</div>
</html>
BigData
1) 데이터 검색(수집)
공공데이터, 트위터, Daum, Naver(카페, 블로그), SK, 구글링 => 검색엔진(루씬)
2) 데이터 분석
XML파싱, JSON 파싱, MapReduce, HIVE, PIG
3) 데이터 저장
오라클, 몽고디비(NoSQL)
4) 화면 출력(시각화) => R, 스프렁크(검색엔진과 시각화 포함)
5) 데이터 통계 => 예측
데이트메이트(DateMate) 스크린샷
데이트 메이트 메인페이지
통계페이지

카테고리별로 월 단위 선호도 분석
감성분석
지도에서 이동할 때마다 순위권 명소(식당, 메인이벤트, 카페/주점별)를 보여줌
트위터 수집 데이터(60만 개)
데이터를 감성분석한 결과
감성분석기 스크린샷

몽고DB find화면


jar파일로 만들어서 콘솔로 돌리기
* 프로젝트를 jar 파일로 만든다.
* 이때, 자바소스를 args[0], args[1]을 활용해서 코드를 수정한다.
hadoop fs -put /home/sist/data /user/sist
hadoop fs -ls
hadoop jar /home/sist/bigdataStudy/MapReduceProject1.jar com.sist.mapred.WordCount data/ output/
hadoop fs -ls
hadoop fs -cat /user/sist/output/part-r-00000
localhost:50030 에 들어가면 워드카운트 실행과정을 모두 볼 수 있다. (모니터링)
폴더 지울때는
hadoop fs -rmr /user/sist/output
파일 지울때는
hadoop fs -rm /user/sist/data
스프링과 하둡연동
* xml만들기
<hadoop:configuration>
fs.dafault.name=hdfs://localhost:9000
mapred.job.tracker=localhost:9001
</hadoop:configuration>
<hadoop:job id=”wordCountJob”
input-path=”/data/”
output-path=”/output2/”
jar-by-class=”com.sist.mapred.WordCount”
mapper=”com.sist.mapred.WordCountMapper”
reducer=”com.sist.mapred.WordCountReducer”
/>
<hadoop:job-runner id=”wordCountJobRunner”
job-ref=”wordCountJob”
run-at-startup=”true”
/>
이때, pom.xml에 아래 두 가지가 필요하다.
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.7.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId
<artifactId>spring-data-hadoop</artifactId>
<version>1.1.0.RELEASE</version>
</dependency>
우분투 트위터+맵리듀스

log4j.properties
# Root Logger
log4j.rootLogger=INFO, AppFile
# console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] %-5p %l – %m%n
#log4j.appender.console.encoding=EUC-KR
# AppFile
log4j.appender.AppFile=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.AppFile.File=/data1/services/nwofelis/htdocs/logs/app.log
log4j.appender.AppFile.File=app.log
log4j.appender.AppFile.Append=true
log4j.appender.AppFile.layout=org.apache.log4j.PatternLayout
log4j.appender.AppFile.layout.ConversionPattern=%n%d%n\%p : %l%n%m%n%n
log4j.appender.AppFile.DatePattern=’.’yyyy-MM-dd
#log4j.appender.AppFile.encoding=EUC-KR
twitter4j.properties
oauth.consumerSecret=mgfgertt(가짜)
oauth.accessToken=302ertertdJi4Z(가짜)
oauth.accessTokenSecret=2aihnAo1ertertre9trUDyx4wH(가짜)
oauth.consumerKey=tO0ertetQjt7(가짜)
TwitterListner.java
package com.sist.mapred3;
import org.apache.log4j.Logger;
import twitter4j.StallWarning;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
public class TwitterListner implements StatusListener{
private Logger logger=Logger.getLogger(TwitterListner.class);
@Override
public void onException(Exception ex) {
// TODO Auto-generated method stub
System.out.println(ex.getMessage());
}
@Override
public void onDeletionNotice(StatusDeletionNotice arg0) {
// TODO Auto-generated method stub
}
@Override
public void onScrubGeo(long arg0, long arg1) {
// TODO Auto-generated method stub
}
@Override
public void onStallWarning(StallWarning arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatus(Status status) {
// TODO Auto-generated method stub
System.out.println(“ID:”+status.getUser().getScreenName());
System.out.println(“Date:”+status.getCreatedAt());
System.out.println(“Message:”+status.getText());
logger.info(status.getText());
}
@Override
public void onTrackLimitationNotice(int arg0) {
// TODO Auto-generated method stub
}
}
TwitterMain.java
package com.sist.mapred3;
import twitter4j.FilterQuery;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
public class TwitterMain {
public static void main(String[] args) throws Exception{
TwitterStream ts=new TwitterStreamFactory().getInstance();
FilterQuery fq=new FilterQuery();
String[] data={“메르스”,”표절”,”야구”,”연평해전”,”6.25″};
fq.track(data);
TwitterListner listen=new TwitterListner();
ts.addListener(listen);
ts.filter(fq);
}
}
TwitterDriver.java
package com.sist.mapred4;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.*;
import java.nio.file.Files;
public class TwitterDriver {
public static void main(String[] args) throws Exception
{
try
{
//절대 경로명
File dir=new File(“/home/sist/bigdataStudy/MapReduceProject3/output”);
File[] files=dir.listFiles();
if(dir.exists()){
for(File f:files)
{
f.delete();
}
dir.delete();
}
}catch(Exception ex){}
//환경설정
Configuration conf=new Configuration();
//작업설정(이름부여)
Job job=new Job(conf,”Twitter”);
//실행파일 등록
job.setJarByClass(TwitterDriver.class);
//매퍼등록
job.setMapperClass(TwitterMapper.class);
//리듀스등록
job.setReducerClass(TwitterReducer.class);
//결과값 출력 등록
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//파일 읽기 => 파일 출력
FileInputFormat.addInputPath(job, new Path(“./app.log”));
FileOutputFormat.setOutputPath(job, new Path(“./output”));
//실행요청
job.waitForCompletion(true);
System.out.println(“데이터처리 완료”);
}
}
TwitterMapper.java
package com.sist.mapred4;
import java.io.IOException;
import java.util.regex.Pattern;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.util.regex.*;
public class TwitterMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
private final static IntWritable one=new IntWritable(1);
private final String regex1=”메르스”;
private final String regex2=”표절”;
private final String regex3=”야구”;
private final String regex4=”연평해전”;
private final String regex5=”625″;
private Text outkey=new Text();
@Override
protected void map(LongWritable key, Text value,
Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
Pattern p1=Pattern.compile(regex1);
Pattern p2=Pattern.compile(regex2);
Pattern p3=Pattern.compile(regex3);
Pattern p4=Pattern.compile(regex4);
Pattern p5=Pattern.compile(regex5);
Matcher m1=p1.matcher(value.toString());
Matcher m2=p2.matcher(value.toString());
Matcher m3=p3.matcher(value.toString());
Matcher m4=p4.matcher(value.toString());
Matcher m5=p5.matcher(value.toString());
try
{
while(m1.find())
{
outkey.set(regex1);
context.write(outkey, one);
}
while(m2.find())
{
outkey.set(regex2);
context.write(outkey, one);
}
while(m3.find())
{
outkey.set(regex3);
context.write(outkey, one);
}
while(m4.find())
{
outkey.set(regex4);
context.write(outkey, one);
}
while(m5.find())
{
outkey.set(regex5);
context.write(outkey, one);
}
}catch(Exception ex){}
}
}
TwitterReducer.java
package com.sist.mapred4;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import com.sist.mongo.*;
//통합된 상태
public class TwitterReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
private IntWritable result=new IntWritable();
//private Text key=new Text();
private TwitterDAO dao=new TwitterDAO();
@Override
protected void reduce(Text key, Iterable<IntWritable> value,
Reducer<Text, IntWritable, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
int sum=0;
for(IntWritable i:value)
{
sum+=i.get();
}
result.set(sum);
context.write(key, result);
dao.insert(key.toString(), sum);
}
}
TwitterDAO.java
package com.sist.mongo;
import com.mongodb.*;
public class TwitterDAO {
private MongoClient mc;
private DB db;
private DBCollection dbc;
public TwitterDAO(){
try{
mc=new MongoClient(“localhost”);
db=mc.getDB(“mydb”);
dbc=db.getCollection(“tm”);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
public void insert(String key,int value){
try{
BasicDBObject obj=new BasicDBObject();
obj.put(“key”,key);
obj.put(“count”,value);
dbc.insert(obj);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
}
1. 몽고 디비 서버돌리기
cd /usr/local/mongodb/bin
sudo ./mongod –dbpath /usr/local/mongodb/data
2. R 에서 몽고 디비 연동
콘솔에서 sudo R을 써서 R로 접속
library(“KoNLP”)
library(“rmongodb”)
mongo<-mongo.create(host=”localhost”)
mongo.is.connected(mongo)
find_all<-mongo.find.all(mongo,ns=”mydb.tm”)
data<-as.data.frame(find_all)
a<-c(data$count,data$count.2,data$count.3,data$count.4)
a
barplot(a)
names(data)
Hive로 테이블 읽어오기(select table)
1. 프로젝트에서 마우스 우클릭 -> Build Path -> Add Libraries -> User Libraries 로 라이브러리를 추가한다.
이름은 HIVE_LIB 로 하고
Hadoop 폴더의 hadoop-client-1.2.1jar 와 hadoop-core-1.2.1.jar 를 추가.
Hive 폴더 내의 lib폴더 내의 모든 jar파일을 추가한다.



자바프로젝트를 만들어서 아래 소스를 입력한다.

MainClass.java
package com.sist;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.omg.CORBA.portable.ValueOutputStream;
public class MainClass {
private static String driverName=”org.apache.hadoop.hive.jdbc.HiveDriver”;
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
try{
Class.forName(driverName);
}catch(Exception ex){
System.out.println(ex.getMessage());
System.exit(1);
}
String url=”jdbc:hive://localhost:10000/default”;
Connection con=DriverManager.getConnection(url,”hive”,”hive”);
System.out.println(“con: “+con);
String sql=”select * from dept”;
System.out.println(“Running: “+sql);
Statement stmt=con.createStatement();
ResultSet res=stmt.executeQuery(sql);
while(res.next()){
System.out.println(String.valueOf(res.getString(1))+”\t”
+ res.getString(2)+”\t”+res.getInt(3));
}
}
}
우분투 맵/리듀스
data

WordCountReducer.java
package com.sist.map;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
private IntWritable result=new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> value,
Reducer<Text, IntWritable, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
int sum=0;
for(IntWritable val:value){
//System.out.println(sum);
sum+=val.get();
}
result.set(sum);
context.write(key, result);
}
}
WordCountMapper.java
package com.sist.map;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
/*
* java oracle java oracle hadoop
* <맵>
* -> java 1
* oracle 1
* java 1
* oracle 1
* hadoop 1
*
* <셔플>
* ->쇼트 & 병합
* hadoop 1
* java 1,1
* oracle 1,1
*
* <리듀스>
* -> hadoop 1
* java 2
* oracle 2
*
*/
import java.util.*;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
// INPUT INPUT OUTPUT OUTPUT
// 줄 라인번호 실제데이터 단어 1
private final static IntWritable one=new IntWritable(1);
private Text word=new Text();
@Override
protected void map(LongWritable key, Text value,
Mapper<LongWritable, Text, Text, IntWritable>.Context context)
throws IOException, InterruptedException {
StringTokenizer st=new StringTokenizer(value.toString());
while(st.hasMoreTokens()){
String s=””;
word.set(s=st.nextToken());
//System.out.println(s);
context.write(word, one);
}
}
}
WordCount.java
package com.sist.map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.io.Text;
import java.io.*;
public class WordCount {
public static void main(String[] args){
try{
// TODO Auto-generated method stub
String path=”/home/sist/bigDataStudy/MapReduceProject/output”;
File file=new File(path);
if(file.exists()){
System.out.println(“존재”);
File[] list=file.listFiles();
for(File f:list){
f.delete();
}
file.delete();
}
Configuration conf=new Configuration();
//Hadoop => Job
Job job=new Job(conf,”WordCount”);
//실행 클래스 파일
job.setJarByClass(WordCount.class);
//매퍼 클래스
job.setMapperClass(WordCountMapper.class);
//리듀스 클래스
job.setReducerClass(WordCountReducer.class);
//결과값 클래스 (key, value)
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//읽어올 파일 지정
FileInputFormat.addInputPath(job, new Path(“./data”));
//결과값 출력 파일
FileOutputFormat.setOutputPath(job, new Path(“./output”));
//job 실행 요청
job.waitForCompletion(true);
}catch(Exception ex){System.out.println(ex.getMessage());}
}
}
결과

우분투 의사가상모드3: 하이브
1. hive 0.9.0 tar.gz 를 다운로드
2. sudo apt-get install mysql-server 라고 치고
이래처럼 패스워드를 입력하라고 나오면 hive라고 두 번 입력한다.

mysql -u root -p 라고 치면 들어감.
grant all privileges on hive.* to hive@localhost identified by ‘hive’ with grant option;
라고 하면 권한 부여.
grant all privileges on hive.* to hive@’%’ identified by ‘hive’ with grant option;
라고 한 번 더 주면, 로컬호스트 뿐만 아니라 다른 어떤 문자(%)에도 권한 부여
Flush privileges;
exit; 로 빠져나옴.
mysql -u hive -p 라고 치면 hive로 들어감
show databases 하면 데이터 베이스를 볼 수 있음

cd /etc 로 들어가서
sudo nano environment 로 환경설정 파일을 수정할 것.
수정을 다 마치면 source environment 라고 써야함.
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/jdk1.8.0_45/bin:/usr/local/hadoop-1.2.1/bin:/usr/local/zookeeper-3.3.6/bin:/usr/local/hbase/bin:/usr/local/hive/bin”
JAVA_HOME=/usr/local/jdk1.8.0_45
HADOOP_HOME=/usr/local/hadoop-1.2.1
ZOOKEEPER_HOME=/usr/local/zookeeper-3.3.6
HBASE_HOME=/usr/local/hbase
HIVE_HOME=/usr/local/hive
HIVE_CONF_DIR=/usr/local/hive/conf
HIVE_PORT=10000

환경설정
hive 의 conf 폴더로 들어가서 hive-default.xml 의 사본을 만들고 이름을 hive-site.xml 로 바꿀것.
hive-env.sh.template의 사본을 만들고 이름을 hive-env.sh 로 바꿀것.
각 파일들의 내용을 그림과 동일하게 고친다.





아래 저장 경로인 /user/hive/warehouse 를 기억해둘 것.
mvn리포지토리에 들어가서
mysql Java Connector 자르파일을 다운받아 하이브의 lib폴더 안에 넣는다.


cd해서 루트로 간다.
하둡을 돌린 후,(hadoop namenode -format 과 start-all.sh)
터미널에서 아래와 같이 네 줄을 친다.
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod a+w /tmp
hadoop fs -chmod a+w /user/hive/warehouse
cd /usr/local/hive/bin 으로 들어가서
./hive 를 쳐서 하이브를 실행한다.
권한 문제가 생긴다면
hadoop fs -chmod 777 /tmp/hive 를 친다.
csv를 받아와서 home에 넣는다.

/usr/local/hive/bin에서
./hive –service hiveserver & 라고 쓸것.
에러가 길게 나올 경우 ./hive –service hiveserver -p 10001 이라고 쓰면 됨.
우분투 의사가상모드2: 주키퍼, hbase
주키퍼 3.3.6
주키퍼를 다운받은 다음, (3.3.6버젼 tar.gz파일) 압축을 푼다.
sudo mv를 이용해서 /usr/local로 옮긴다.
이 때, 폴더 이름은 zookeeper-3.3.6 으로 한다.
/usr/local/zookeeper-3.3.6/conf 에 들어가서 설정파일을 바꾼다.
zoo_sample.cfg 의 사본을 만들어 zoo.cfg로 이름을 바꾼다.


hbase 0.94.12
hbase를 다운받은 다음, (0.94.12버젼 tar.gz파일) 압축을 푼다.
sudo mv를 이용해서 /usr/local로 옮긴다.
이 때, 폴더 이름은 버젼을 떼고 hbase 로 한다.
/usr/local/hbase/conf 에 들어가서 설정파일을 바꾼다.
hbase-env.sh 는 아래와 같이 바꾼다.
hbase-site.xml은 다음과 같이 바꾼다.
주키퍼 실행방법
cd /usr/local/zookeeper-3.3.6/bin
./zkServer.sh start
주키퍼 끄는 방법
cd /usr/local/zookeeper-3.3.6/bin
./zkServer.sh stop
hbase 실행방법
cd /usr/local/hbase/bin
./start-hbase.sh
hbase 끄는 방법
cd /usr/local/hbase/bin
./stop-hbase.sh
import java.awt.Robot;
import java.awt.Window;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.logging.ConsoleHandler;
import org.xml.sax.InputSource;
public class MainClass {
static Robot robot;
public static void main(String[] args) {
// TODO Auto-generated method stub
//ProcessBuilder pb=new ProcessBuilder();
//String[] com={“gnome-terminal”,”-e”,”./hello <in.txt> out.txt”};
// “gnome-terminal –working-directory=myfolder”
String[] command={
“sudo rm -rf /home/hadoop”,
“sudo mkdir /home/hadoop”,
“sudo chown sist /home/hadoop”,
“sudo mkdir /home/hadoop/hdfs”,
“sudo chown sist /home/hadoop/hdfs”,
“sudo mkdir /home/hadoop/hdfs/temp”,
“sudo mkdir /home/hadoop/hdfs/data”,
“sudo mkdir /home/hadoop/hdfs/name”,
“sudo mkdir /home/hadoop/hdfs/mapred”,
“sudo chown sist /home/hadoop/hdfs/temp”,
“sudo chown sist /home/hadoop/hdfs/data”,
“sudo chown sist /home/hadoop/hdfs/name”,
“sudo chown sist /home/hadoop/hdfs/mapred”
};
//Process proc=Runtime.getRuntime().exec(command);
//String[] command={“wmctrl -l”};
try{
Robot robot=new Robot();
//
ProcessBuilder pb=new ProcessBuilder();
for(int i=0;i<command.length;i++){
pb.command(“gnome-terminal”,”-e”,command[i]);
Process pc=pb.start();
System.out.println((i+1)+”/”+command.length+” “+command[i]);
//끝나지 않았다면 딜레이
if((i+1)<command.length){
robot.delay(3000);
}
}
}
catch(Exception ex){System.out.println(ex.getMessage());}
System.out.println(“end”);
// Runtime rt = Runtime.getRuntime();
// String befehl = “gnome-terminal –command=\”ls\””;
// try{
// rt.exec(befehl);}
// catch(Exception ex){System.out.println(ex.getMessage());}
// System.out.println(befehl);
}
}
우분투 의사가상 모드1
1. jdk 7버젼을 깐다. 8버젼에서는 R java가 되지 않기 때문.
sudo apt-get install openjdk-7-jdk
java -version 했을 때 1.7 이 나와야 한다.
2.
cd /etc
sudo nano environmnet 로 패스를 바꿔준다.
PATH 뒤쪽에 “:/usr/lib/jvm/java-7-openjdk-amd64/bin” 을 붙인다.
다음 줄에
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 라고 쓴다.
3.
sudo nano hosts 에서 내용을
127.0.0.1 localhost
127.0.0.1 sist
로 바꾼다.
4.
sudo nano hostname 내용을
sist
로 바꾼다.
5. /usr/local 안의 hadoop-1.2.1 폴더 안의 conf 안의 파일들을 수정.
hadoop-env.sh
core-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hdfs/temp</value>
</property>
</configuration>
hdfs-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
mapred-site.xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”configuration.xsl”?>
<!– Put site-specific property overrides in this file. –>
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
masters
localhost
slaves
localhost
6. R설치
r자바 설치
sudo apt-get install r-cran-rjava
로 설치한 후
sudo R 로 들어가면
install.packages(“rJava”) 없이
library(rJava) 가 가능함
install.packages(“plyr”)
install.packages(“KoNLP”)
install.packages(“rmongodb”)
몽고 디비 서버 가동
cd /usr/local/mongodb
cd bin
sudo ./mongod –dbpath /usr/local/mongodb/data
(서버 가동이 안될시 /usr/local/mongodb 안에 data 폴더를 만들어야 함)

몽고 디비 실행
몽고디비 서버가 가동된 상태에서
cd /usr/local/mongodb/bin
sudo ./mongo
로 디비 실행가능하다.
use mydb
db.member.insert({no:1,name:”hong”,sex:”m”})
db.member.insert({no:2,name:”park”,sex:”m”})
db.member.insert({no:3,name:”shim”,sex:”w”})
db.find()
R에서 몽고디비 실행
install.packages(“rmongodb”)
library(rmongodb)
m=mongo.create(host=”localhost”)
mongo.is.connected(m)
tmp=mongo.find.all(m,ns=”mydb.member”)
tmp
하면 R에서 몽고 디비 내용을 뿌릴 수 있다.
우분투 명령어 모음
초기화1
sudo rm -rf /home/hadoop
sudo mkdir /home/hadoop
sudo chown sist /home/hadoop
sudo mkdir /home/hadoop/hdfs
sudo chown sist /home/hadoop/hdfs
sudo mkdir /home/hadoop/hdfs/temp
sudo mkdir /home/hadoop/hdfs/data
sudo mkdir /home/hadoop/hdfs/name
sudo mkdir /home/hadoop/hdfs/mapred
sudo chown sist /home/hadoop/hdfs/temp
sudo chown sist /home/hadoop/hdfs/data
sudo chown sist /home/hadoop/hdfs/name
sudo chown sist /home/hadoop/hdfs/mapred
라고 쓰기
sudo mkdir /home/hadoop/zk_data
sudo nano /home/hadoop/zk_data/myid
하고 1이라고 쓰고 저장
sudo chown sist /home/hadoop/zk_data/
sudo chown sist /home/hadoop/zk_data/myid
라고 쓰기
끝.
————————————————————————-
완전초기화(주의)
cd /home/sist
rm -rf .ssh
————————————————————————-
host 파일
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
211.238.142.84 ns1 zookeeper1 NameNode
211.238.142.91 ns2 zookeeper2 SecondaryNode
211.238.142.76 ns3 zookeeper3 DataNode01
211.238.142.94 ns4 zookeeper4 DataNode02
211.238.142.80 ns5 zookeeper5 DataNode03
211.238.142.78 ns6 zookeeper6 DataNode04
————————————————————————-
hostname 파일
ns6
————————————————————————-
cd /etc
sudo chmod 646 hosts
sudo nano hosts
sudo chmod 646 hostname
sudo nano hostname
————————————————————————-
인증키 만들기(처음)
cd /home/sist
rm -rf .ssh
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
(엔터 세번 후)
cat id_rsa.pub >> authorized_keys
more authorized_keys
(쉬고)
ssh sist@SecondaryNode cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sist@DataNode01 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sist@DataNode02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sist@DataNode03 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh sist@DataNode04 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
more authorized_keys
우분투2
1. (마스터만)주키퍼를 다운받는다. (3.3.6버젼) apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.3.6/
2. (모든 컴퓨터 공통) cd /etc 로 들어간 이후로 nano environment 를 써서 환경설정 파일을 수정한다.
path 뒤에 :/usr/local/zookeeper-3.3.6/bin 을 붙인다.
ZOOKEEPER_HOME=/usr/local/zookeeper-3.3.6
라는 새로운 줄을 추가한다. 저장하고 빠져나온다.
source environment 을 써서 적용시킨다.
3.
cd /home/hadoop 으로 가서
mkdir -p zk_data 만든다.
cd zk_data 로 들어가서 nano myid 로 파일을 하나 만들고 나의 숫자를 쓴다.

(내가 ns1이면 1 이라고 쓰고
내가 ns3 이면 3 이라고 쓰면 됨. 딱 한 글자만 쓰고 저장하면 됨)
4. (마스터만)
sudo mv ./zookeeper-3.3.6 /usr/local
이라고 쓰면 주키퍼 폴더를 다운로드에서 local쪽으로 이동시킬 수 있다.
이제 옮겨진 주키퍼의 conf 폴더, 즉
/usr/local/zookeeper-3.3.6/conf 로 들어가서
zoo_sample.cfg 를 복사-붙여넣기-이름바꾸기해서 zoo.cfg 파일을 만든다.
zoo.cfg를 지에디트로 연다.
중간의 dataDir 을 찾는다.
dataDir=/home/hadoop/zk_data 로 바꾼다.
가장 아래쪽의,
server.1=xxx.xxx.xxx.xx:2888:3888 을 여러 줄 만든다(컴퓨터 개수만큼)
server.1=xxx.xxx.xxx.xx:2888:3888
server.2=xxx.xxx.xxx.xx:2888:3888
server.3=xxx.xxx.xxx.xx:2888:3888
server.4=xxx.xxx.xxx.xx:2888:3888
server.5=xxx.xxx.xxx.xx:2888:3888
server.6=xxx.xxx.xxx.xx:2888:3888
이런 식으로, 서버 뒤의 숫자와 아이피만 바꿔주면 된다.
5.
/usr/loca/hadoop-1.2.1/conf 의 hadoop-env.sh 에 아래의 두 줄을 추가한다.
export HBASE_PATH=/usr/local/hbase/
export HBASE_CLASSPATH=/usr/local/hbase/conf

6. (마스터만)
hbase 를 다운받고 파일들을 설정한다. (hbase 버젼 0.94.12)
hase
regionservers
파일에
DataNode01
DataNode02
DataNode03
DataNode04
드
라고 데이터노드만 올린다. (로컬호스트는 지워야 한다)
7.
hbase-env.sh 를 찾아서 수정한다.
우분투 풀모드 1
컴퓨터를 세 가지로 구분한다.
(1) 마스터(=네임노드) 1대
(2) 세컨더리 1대
(3) 데이터노드 n대(나머지 컴퓨터들)
1. 우분투 설치 후 접속
※ 한글 입력이 안되면 환경설정 -> 언어 지원 에서 패키지를 전부 설치/업데이트.
그래도 안되면 터미널에서 sudo apt-get install ibus-hangul 이라고 치고 컴퓨터 재시작
<각종 다운로드>
2. JDK 다운로드 (oracle 사이트에 들어가서 JDK 를 Linux x64 tar.gz 로 다운로드)
3. Spring 다운로드 (spring.io 로 접속해서 Linux 용 tar.gz를 다운)
(나중에 sts 가 다 설치 된후 메뉴(단축키alt+w) 중의 properties에 들어가서 content Assist 를 Crtl+Space로 바꿔줘야 한다)
4. 아파치 톰캣 다운로드(tomcat.apache.org 에 접속해서 tar.gz 다운로드)
이때, 7.0 버젼을 받아야 함 (8.0 호환안됨)
5. 몽고DB를 다운로드한다. (mongodb.org 에서 콤보박스를 Ubuntu 14.04 Linux 64-bit 를 다운로드)
——————————————————————————————————
<apt-get 업그레이드와 업데이트>
6. 터미널에서 sudo apt-get upgrade
7. 터미널에서 sudo apt-get update
8. 터미널에서 sudo apt-get install r-base
9. 이제 터미널에서 R 이라고 쓰면 통계프로그램 R을 쓸 수 있음.
(예)
a<-10
a
q() 라고 쓰면 R에서 나감
<세션 열기>
10. sudo apt-get install openssh-server
——————————————————————————————————
11. 다운로드된 모든 파일들을 압축을 풀고, 아래처럼 옮긴다.
cd 다운로드
sudo mv ./jdk1.8.0_45 /usr/local
위와 같이 하면 다운로드 폴더의 jdk폴더를 /usr/local 로 옮길 수 있다.
이렇게 jdk를 포함한 몽고DB, 톰캣, 스프링 폴더들을 /usr/local 로 옮겨야 한다.

12. environment 파일의 권한 수정.
cd /etc
sudo chmod 646 environment 로 쓰기 권한 수정

13. sudo nano environment 로 파일 수정.
path 끝에 :/usr/local/jdk1.8.0_45/bin 을 추가해서 붙여준다.
두번째 줄을 만들어서 JAVA_HOME=/usr/local/jdk1.8.0_45 를 쓴다.
수정 후 반드시 source environment 를 써서 적용시킨다.
나중에 하둡을 다 다운받았다면,
path 끝에 :/usr/local/hadoop-1.2.1/bin 을 붙이고,
세번째 줄을 만들어서 HADOOP_HOME=/usr/local/hadoop-1.2.1 을 쓴다.
14. <ssh 암호화키 설정>
sudo chmod 646 hosts 로 권한을 수정한후,
sudo nano hosts로 내용을 수정.
아래처럼 다섯줄을 적고 저장.(모든 컴퓨터에 동일하게 적용. 4대 기준)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
211.238.142.xxx ns1 zookeeper1 NameNode
211.238.142.xxx ns2 zookeeper2 SecondaryNode
211.238.142.xxx ns3 zookeeper3 DataNode01
211.238.142.xxx ns4 zookeeper4 DataNode02
sudo chmod 646 hostname 으로 권한 수정.
sudo nano hostname 으로 내용을 수정.
마스터는 ns1, 세컨더리노드는 ns2, 첫번째 데이터노드는 ns3, 두번째 데이터노드는 ns4 식으로 쓰면 됨.
15. <ssh 암호화키 생성> (모든 컴퓨터에 동일하게 적용)
mkdir .ssh 로 폴더 생성
cd .ssh 로 폴더에 진입
ssh-keygen -t rsa 라고 쓴 후 엔터를 3번 누르면 암호화됨.

ls -al로
id_rsa 파일과 id_rsa.pub 파일 존재를 확인할것.

16. <암호화키 조합> (마스터 컴퓨터만)
.ssh 폴더 에 위치한 상태에서,
cat id_rsa.pub >> authorized_keys 라고 치면 해당 파일이 생성됨.
(ls -al로 authorized_keys파일이 생성되었는지 확인할 수 있음)
more authorized_keys 로 갖고 있는 암호화키를 확인할 수 있음.
17. ssh sist@SecondaryNode cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 로 하나를 조합.
more authorized_keys 로 갖고 있는 암호화키를 확인.
ssh sist@DataNode01 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 로 하나를 또 조합.
more authorized_keys 로 갖고 있는 암호화키를 확인.
ssh sist@DataNode02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 로 하나를 또 조합.
more authorized_keys 로 갖고 있는 암호화키를 확인.
18. <통합된 암호화키를 모두에게 배포> (마스터 컴퓨터만)

.ssh 폴더에 위치한 상태에서,
scp -rp authorized_keys sist@SecondaryNode:~/.ssh/authorized_keys 라고 쓰면 100%가 떠야함.
scp -rp authorized_keys sist@DataNode01:~/.ssh/authorized_keys 라고 쓰면 100%가 떠야함.
scp -rp authorized_keys sist@DataNode02:~/.ssh/authorized_keys 라고 쓰면 100%가 떠야함.
이때, ‘비밀번호를 넣으라’고 나오면서 안된다면 세컨더리노드와 데이터노드 컴퓨터에서 권한을 수정해줘야함.
마스터가 아니라, 세컨더리노드와 데이터노드 컴퓨터에서 각자 sudo chmod 777 을 적용해야 함. (sudo chmod 777 .ssh 였나?)
19. 제대로 보냈다면 ‘마스터 컴퓨터’는 ssh SecondaryNode date, ssh DataNode01 date, ssh DataNode02 date 로 날짜를 출력해볼 수 있음.

제대로 받았다면 ‘세컨더리노드’와 ‘데이터노드’는 각자 컴퓨터에서
cd /.ssh
ls -al
로
authorized_keys 파일이 생겨났는지 확인할 수 있음. 생겼어야 함.
20. 디렉토리를 만든다.

/home/hadoop/hdfs/data
/home/hadoop/hdfs/name
/home/hadoop/hdfs/temp
이렇게 세 개의 폴더를 만든다.
21. cd /home 으로 가서
sudo chown sist hadoop 으로 hadoop 폴더에 소유권을 준다.
이어서 cd hadoop 으로 가서
sudo chown sist hdfs 로 hdfs에 소유권을 주고,
cd hdfs 로 가서
sudo chown sist * 로 안쪽 폴더에 모두 소유권을 준다.
22. 맵리듀스용 폴더를 만든다.
루트 디렉토리에서 sudo mkdir -p /home/hadoop/hdfs/mapred 로 폴더를 만든 후,
sudo chown sist mapred 로 소유권을 부여한다.

23. 탐색기를 이용해 hadoop 폴더 내 파일들을 아래와 같이 수정한다(지에디트로 열기). (마스터만 할것)
마스터만 수정하는 이유는 다음과 같다. 마스터가 수정한 후 해당 파일들을 압축해서 각 노드에 전송해주고, 각 노드는 압축을 품으로써 하둡환경을 완전히 동일하게 만들 수 있다.
hdfs-site.xml, core-site.xml, mapred-site.xml





24.
sudo tar cvfpz hadoop-1.2.1.tar.gz ./hadoop-1.2.1 로 타르파일을 만든다.
![]()
의미: c: 새로운 아카이브를 생성
v: verbose. 압축되거나 해제되는 파일 이름을 화면에 보여줌(진행상황 보이기)
f: 아카이브의 이름을 명시
p: permission. 허가권을 유지
z: gzip이라는 의미 (그냥 tar가 아닌 tar.gz)
※ tar의 옵션은 tar -cvfpz 라 써도 되고, tar cvfpz 라 써도 된다.

25. scp -rp hadoop-1.2.1.tar.gz SecondaryNode:/usr/local
scp -rp hadoop-1.2.1.tar.gz DataNode01:/usr/local
scp -rp hadoop-1.2.1.tar.gz DataNode02:/usr/local
위 명령어로 아까 만든 tar.gz를 각 노드의 /usr/local 폴더로 전송할 수 있다.

만약 아래 처럼 denied가 나온다면, 마스터가 아니라, 세컨더리노드와 데이터노드 컴퓨터에서 각자 sudo chmod 777 을 적용해야 한다. (sudo chmod 777 /usr/local)

26. 각 노드는 전달받은 tar.gz를 압축품으로써 마스터와 똑같은 하둡환경을 설정할 수 있다.
27. 데이터노드를 포함하여 모든 컴퓨터는
hadoop namenode -format
./start-all.sh 를 써서 하둡을 실행한다. (실행이 안될 경우 cd /usr/local/hadoop-1.2.1/bin 으로 이동해서 쓰며 된다)
터미널 창을 새로 열어서 jps 라고 쓰면 상태를 확인할 수 있다.
네임노드는 JobTracker가 나와야 하며,
세컨더리 노드는 SecondaryNode가 나와야 하고,
나머지 데이터 노드는 TaskTracker가 나와야 한다.
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd“>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sist</groupId>
<artifactId>web</artifactId>
<name>SpringWebProject</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>4.1.6.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<repositories>
<repository>
<id>mesir-repo</id>
<url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
</repository>
</repositories>
<dependencies>
<!– Spring –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!– Exclude Commons Logging in favor of SLF4j –>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!– AspectJ –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!– <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.1.6.RELEASE</version>
</dependency> –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>Rserve</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.13.0-rc1</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>JRI</artifactId>
<version>0.9-6</version>
</dependency>
<dependency>
<groupId>com.github.lucarosellini.rJava</groupId>
<artifactId>JRIEngine</artifactId>
<version>0.9-7</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>Rserve</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<!– End –>
<!– hadoop –>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
<!– AspectJ –>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.5</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
<!– tiles –>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId>
<version>3.5.2</version>
</dependency>
<!– XML –>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<!–
jaxb-core
jaxb-impl
jaxb-api
json-simple
commons-lang
ezmorph
–>
<!– JSON –>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>net.sf.ezmorph</groupId>
<artifactId>ezmorph</artifactId>
<version>1.0.6</version>
</dependency>
<!– Logging –>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!– @Inject –>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!– Servlet –>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!– Test –>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
우분투에서 한글 안될때
환경설정에서 언어지원을 업데이트해도 한글이 안된다면,
터미널(terminal)에서 sudo apt-get install ibus-hangul 이라 써서 패키지를 설치한 후 우분투를 재시작한다.
우분투 멀티부팅
1. USB에 우분투를 실어서 부팅USB를 만든다. 내용은 아래와 같다. 이때, USB 포맷을 한다면 NTFS가 아니라, FAT32로 포맷해야 한다.
2. 제어판->전원 옵션->좌측의 ‘절전 모드 해제 시 암호 사용’ -> ‘현재 사용할 수 없는 설정 변경’ -> 하단의 ‘종료설정’ 탭에서 ‘빠른 시작 켜기(권장)’을 체크 해제한다.

3. 작업표시줄의 윈도우 아이콘 위에서 마우스 우클릭-> ‘디스크 관리(K)’ 로 들어간다.


C드라이브 위에서 마우스 우클릭 -> 볼륨 축소(H) 로 축소창을 켠다.
아래처럼 축소창이 뜨면 축소할 공간 입력에 ‘102400’ 이라고 쓰고 ‘축소(S)’를 클릭한다. 100GB를 축소한다는 뜻이다.

4. 컴퓨터를 재시작하여 F2키를 계속 누르면 BIOS 로 넘어간다.
‘Boot’메뉴에 들어가서 ‘Fast Boot’를 ‘Disabled’로, ‘Booting By Lan’를 ‘Disabled’로, ‘Secure Boot’를 ‘Disabled’로 바꾼다. 이어서 바로 밑의 ‘OS Mode Selection’ 을 ‘CSM and UEFI OS’로 바꾼다.
F10키를 누르고 -> Yes를 선택하여 Save 및 재시작을 한다.
5. 컴퓨터가 재시작되면 다시 F2키를 계속 눌러 BIOS로 넘어간다.
‘Boot Device Priority’ 로 들어가서 Boot Option의 #1 (첫번째 부팅순서) 를 UEFI 로 바꿔준다.
6. 1번에서 만들어둔 우분투 부팅USB를 꽂고 재시작을 한다. Ubuntu Install을 선택해서 설치한다.
7-1. ‘Welcome’에서 원하는 언어를 선택
7-2. ‘Ubuntu 설치 준비 중’에서는 ‘계속’을 선택
7-3. ‘설치 형식’에서는 ‘기타’를 선택
7-4. 이어서 100기가 쯤되는 공간을 찾아서 좌측의 ‘+’기호를 클릭하여 파티션을 만든다.
크기를 ‘20480’ MB로, 새 파티션의 종류를 ‘주 파티션’으로, 새 파티션의 위치를 ‘이 공간이 시작하는 지점’으로, 용도를 ‘EXT4 저널링 파일 시스템’으로, 마운트 위치를 ‘/’로 하고 OK를 누른다.
다시 ‘+’기호를 눌러 또 추가한다.
크기를 ‘2048’ MB로, 새 파티션의 종류를 ‘논리 파티션’으로, 새 파티션의 위치를 ‘이 공간이 시작하는 지점’으로, 용도를 ‘스왑 공간’으로 하고 OK를 누른다.
지금 설치(I)을 누른다.
7-5. ‘어디에 살고 계신가요?’에서 ‘Seoul’을 선택하고 넘어간다.
7-6. ‘키보드 배치’는 ‘한국어’ -> ‘한국어-한국어(101/104키 호환)’을 선택하고 ‘계속’을 누른다.
7-7. ‘당신은 누구십니까?’에서 ‘이름’은 ‘aaa’, ‘컴퓨터 이름’은 ‘aaa’, ‘사용자 이름 선택’은 ‘aaa’, 암호선택은 ‘1234’, ‘암호확인’은 ‘1234’로 만든다.
여기서 컴퓨터 이름을 전부 똑같이 맞춰야, 나중에 하둡 연결을 하기 쉽다. 뒤에 알파벳이나 숫자는 지워준다.
‘계속’을 눌러 설치한다.
7-8. 설치가 진행되고, 끝나면 ‘설치 완료’창이 나온다. ‘지금 다시 시작’을 눌러 재시작한다.
8. 컴퓨터가 켜지고 맨 처음 화면에서 ubuntu를 선택하면 우분투로 부팅이 되고, Window를 선택하면 윈도우로 부팅이 된다. 부팅이 다 되면 USB를 빼도 된다.
r에서 명사 자르기
f<-file(“c:/image/tm.txt”)
textLines<-readLines(f)
library(KoNLP)
※ 에러날시에는 sys.setenv(JAVA_HOME=”C:/Program Files/java/jre7″)
library(RColorBrewer)
library(wordcloud)
nouns<-sapply(textLines,extractNoun,USE.NAMES=F)
nouns
빈도수 세기 (맵리듀스)
wordcount<-table(unlist(nouns))
wordcount
워드클라우드 뿌리기
wordcloud(names(wordcount),freq=wordcount,min.freq=2,rot.per=.1,random.order=F,scale=c(6,0,2),colors=rainbow(15))
min.freq: 빈도 최소값
rot.per: 모양잡기
random.order: 순차적으로 뿌릴거냐
scale=c(큰글자,작은글자): 글자크기. 가장 큰 글자는 10
png로 만들기
png(“c:/image/tm.png”)
wordcloud(names(wordcount),freq=wordcount,min.freq=2,rot.per=.1,random.order=F,scale=c(6,0,2),colors=rainbow(15))
dev.off()
try{
RConnection rc=new RConnection();
rc.voidEval(“sys.setenv(JAVA_HOME=’C:/Program Files/java/jre7′)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“library(RColorBrewer)”);
rc.voidEval(“library(wordcloud)”);
rc.voidEval(“f<-file(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringFinalProject/data/tm.txt’)”);
rc.voidEval(“textLines<-readLines(f)”);
rc.voidEval(“nouns<-sapply(textLines,extractNoun,USE.NAMES=F)”);
rc.voidEval(“wordcount<-table(unlist(nouns))”);
rc.voidEval(“png(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/SpringFinalProject/data/tm.png’)”);
rc.voidEval(“wordcloud(names(wordcount),freq=wordcount,min.freq=2,rot.per=.1,random.order=F,scale=c(6,2),colors=rainbow(15))”);
rc.voidEval(“dev.off()”);
rc.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
스프링(Spring)
Container
1) BeanFactory : 객체생성~소멸, DI
<bean id=”a” class=”A”>
=> 클래스 객체 요청(DL) : getBean(“a”)
=> 멤버변수나 생성자 매개변수 값주입
<bean>
<property name=”” value=””/>
</bean>
=> setter DI
<bean>
<construct-arg value=””/>
</bean>
=> construct DI
<bean init-method=”” destory-method=”” factory-method=””/>
=> 단점:OOP를 파괴
@Autowired
private BoardDAO da
DI: 클래스와 클래스의 관계 설정
2) ApplicationContext : AOP,국제화
AOP: 중복제거(공통모듈)
공통으로 사용되는 기능 구현
=>언제 사용 ==> pointcut
=>사용되는 위치 ==>joinpoint
Validation
Transaction
Security
3) WebApplicationContext
MVC
=> library
ORM, JDBC, JMS, WebSocket, WebService(Restful)
Spring-Data(MongoDB…)
txt파일 읽기
BufferedReader br=new BufferedReader(new FileReader(csvfile));
forEach의 varStatus
forEach와 forTokens에 사용가능한 varStatus. varStatus=”j” 식으로 쓰고, ${j.index} ${j.count} 를 int형으로 사용할 수 있으며, ${not j.first} ${j.first} 를 boolean으로 사용할 수 있다.
* index: 숫자값. items 에 정의한 목록(Collection)의 항목의 순서. begin과 관계없이, 0부터 시작
* count: 숫자값. 루핑을 돌 때 현재 몇 번째 반복인지를 나타냄. begin부터 시작(begin이 쓰여있지 않다면 1부터 시작)
* first: boolean 값. 현재 반복이 첫번째인지 여부를 나타냄.
* last: boolean 값. 현재 반복이 마지막인지 여부를 나타냄.
pom.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<project xmlns=”http://maven.apache.org/POM/4.0.0” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd“>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sist</groupId>
<artifactId>bigdata</artifactId>
<name>SpringFinalProject</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.6</java-version>
<org.springframework-version>4.1.6.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<repositories>
<repository>
<id>mesir-repo</id>
<url></url>”>http://mesir.googlecode.com/svn/trunk/mavenrepo</url>
</repository>
</repositories>
<dependencies>
<!– Spring –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!– Exclude Commons Logging in favor of SLF4j –>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!– AspectJ –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!– <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId>
<version>4.1.6.RELEASE</version> </dependency> –>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-instrument</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>10.2.0.4.0</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>Rserve</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>2.13.0-rc1</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>JRI</artifactId>
<version>0.9-6</version>
</dependency>
<dependency>
<groupId>com.github.lucarosellini.rJava</groupId>
<artifactId>JRIEngine</artifactId>
<version>0.9-7</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.18.2-GA</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>Rserve</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.nuiton.thirdparty</groupId>
<artifactId>REngine</artifactId>
<version>1.7-3</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-stream</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<!– JAXB XML 파싱 –>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<!– JSON 파싱 –>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!– End –>
<!– AspectJ –>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.5</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!– AOP추가 –>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
<!– tiles –>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr-runtime</artifactId>
<version>3.5.2</version>
</dependency>
<!– Logging –>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!– @Inject –>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!– Servlet –>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!– Test –>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!– Security –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core-tiger</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-openid</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
스프링 보안 jars(메이븐용)
spring-security-core
spring-security-web
spring-security-config
spring-security-taglibs
spring-security-ldap
spring-security-acl
spring-security-crypto
spring-security-core-tiger
spring-security-openid
<!– 보안 –>
<!– Spring Security Core » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Web » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Config » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Taglibs » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Ldap » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Acl » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Openid » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!– Spring Security Java 5 (Tiger) » 2.0.8.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core-tiger</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<!– Spring Security Openid » 4.0.1.RELEASE –>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-openid</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
스프링 aop 메소드 실행시간 계산
@Component
@Aspect
public class LogAspect {
@Around(“within(com.sist.dao.*)”)
public Object timeCheck(ProceedingJoinPoint p) throws Throwable{
String str=p.getSignature().toShortString();
System.out.println(str+”시작”);
long start=System.currentTimeMillis();
try{
Object result=p.proceed();
return result;
}
finally{
long end=System.currentTimeMillis();
System.out.println(str+”종료”);
System.out.println(str+”실행시간:”+(end-start)+”ms”);
}
}
}
스프링 properties파일(프로퍼티스 파일) 갖다 쓰기
1. Java Resources/db.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:ORCL
username=scott
password=tiger
2. appServlet-servlet.xml
<util:properties id=”db” location=”classpath:/db.properties”/>
<bean id=”ds” class=”org.apache.commons.dbcp.BasicDataSource”
p:driverClassName=”#{db[‘driver’]}”
p:url=”#{db[‘url’]}”
p:username=”#{db[‘username’]}”
p:password=”#{db[‘password’]}”
p:maxActive=”10″
p:maxIdle=”5″
p:maxWait=”-1″>
</bean>
스프링 bean xml 만들기
aop : aop쓸때
beans : 클래스 메모리 할당할 때
context : 어노테이션 쓸때
mvc : 메세지 컨버터(한글 처리) 할 때
p : 프로퍼티: 속성값 지정
tx : 트랜잭션
util : 프로퍼티스 파일 읽어올 때 사용
jms: 자바 메시지 서비스
task: 스케쥴러
스프링 AOP: JoinPoint
1. JoinPoint 5가지
1. Before
2. After
3. AfterReturning
4. AfterThrowing
5. Around
2. 사용법 3가지
1. 애너테이션Annotation(요즘 것)
2. XML(예전 것)
3. 포조(잘 사용하지 않는다)
3-1. 호출 순서(오류 없을 때)
Before
Around
After
AfterReturning
3-2. 호출 순서(오류 났을 때)
Before
Around는 실행되지 않음
After
(AfterReturning)
AfterThrowing
참고)
Before는 메소드 실행 이전에 반드시 실행한다. ex) 오토커밋을 false로 바꾼다.
AfterReturning은 오류가 났을 때만 실행된다. 따라서 트랜잭션의 롤백용으로 자주 사용한다. ex) 롤백
After는 에러가 나든 안나든 꼭 수행된다. 따라서 오토커밋 설정용으로 자주 사용한다. ex) 오토커밋을 true로 돌려 놓는다.
4. pointcut
크게 execution과 within 이 있다.
4-1. within: 패키지로 적용
1) 특정 패키지의 모든 메소드에 대해서 적용: within(패키지.*)
ex) @AfterThrowing(pointcut=”within(com.sist.dao.*)”)
2) 특정 패키지 및 하위 패키지까지 모두 적용 within(패키지..*)
ex) @AfterThrowing(pointcut=”within(com.sist.dao..*)”)
4-2. execution: 메소드로 적용
@Before(“execution(* com.sist.aop2.MyDAO.tx*(..))”)
이것은
@Before(value=”execution(* com.sist.aop2.MyDAO.tx*(..))”) 와 동일하다. (After와 Before는 매개변수 value를 씀)
“execution(리턴형 클래스명.메소드명(매개변수))” 으로 쓰면된다. 여기서 매개변수가 (*)이면 매개변수 1개, (*,*)는 매개변수 2개, (*,*,*)는 매개변수 3개, (..)는 0개 이상, (String,..)은 String 한 개가 있고 이후에는 상관없음을 의미한다.
참고)
@After(“execution(* com.sist.aop2.MyDAO.tx*(..))”)
@Before(“execution(* com.sist.aop3.EmpDAO.*(..))”)
@After(“execution(* com.sist.aop3.EmpDAO.*(..))”)
5. 에러 처리
에러가 났을 때 가져올 객체이름이 ex 라면 throwing=”ex”라고 써주어야 한다.
@AfterThrowing(pointcut=”execution(* com.sist.dao.BoardImpl.get*())||execution(* com.sist.dao.BoardImpl.check*(..))”,throwing=”ex”)
public void afterThrowing(JoinPoint p,Throwable ex){
System.out.println(“==AfterThrowing 수행==”);
//어떤 메소드에서 실행되었느냐
System.out.println(“Method Name:”+p.getSignature().getName());
//무슨 에러냐
System.out.println(“Exception:”+ex.getMessage());
}
6. 자바 소스
@Aspect
public class TestAspect2 {
@Before(“within(com.sist.dao.*)”)
public void aaa(JoinPoint p){
System.out.println(“==Before==”);
}
@After(“within(com.sist.dao.*)”)
public void bbb(JoinPoint p){
System.out.println(“==After==”);
}
@Around(“within(com.sist.dao.*)”)
public Object ccc(ProceedingJoinPoint p) throws Throwable{
Object obj=null;
try{
obj=p.proceed();//getBoardName()
System.out.println(“==Around==”);
}catch(Exception ex){System.out.println(ex.getMessage());}
return obj;
}
@AfterReturning(pointcut=”within(com.sist.dao.*)”,returning=”ret”)
public void ddd(JoinPoint p,Object ret){
System.out.println(“==AfterReturning==”);
System.out.println(“return Value:”+ret.toString());
}
@AfterThrowing(pointcut=”within(com.sist.dao.*)”,throwing=”ex”)
public void eee(JoinPoint p,Throwable ex){
System.out.println(“==AfterThrowing==”);
}
}
7. XML로 만들 때
<bean id=”testAspect” class=”com.sist.aspect.TestAspect”/>
<aop:config>
<aop:aspect ref=”testAspect”>
<aop:after method=”bbb” pointcut=”within(com.sist.dao.*)”/>
<aop:after-returning method=”ddd” pointcut=”within(com.sist.dao.*)” returning=”ret”/>
<aop:after-throwing method=”eee” pointcut=”within(com.sist.dao.*)” throwing=”ex”/>
<aop:before method=”aaa” pointcut=”within(com.sist.dao.*)”/>
<aop:around method=”ccc” pointcut=”within(com.sist.dao.*)”/>
</aop:aspect>
</aop:config>
스프링 리스폰스 바디
@RequestMapping(“emp/find.do”)
@ResponseBody
public String emp_find(int empno,Model model){
EmpVO vo=dao.empFindData(empno);
String msg=”<ul>”
+”<li>EmpNO:”+vo.getEmpno()+”</li>”
+”<li>EmpName:”+vo.getEname()+”</li>”
+”<li>EmpJob:”+vo.getJob()+”</li>”
+”<li>Sal:”+vo.getSalary()+”</li>”
+”<li>DeptNO:”+vo.getDeptno()+”</li></ul>”
+”<a href=\”javascript:history.back()\”>list(목록)</a>”;
return msg;
}
R그래프(R차트) 2
1. PGA 골프 투어 분석
players<-read.csv(‘c:/image/players.csv’)
kor<-subset(players,Country==’KOR’)
kor.o<-kor[order(kor$Ht),]
par(mar=c(5,10,5,5))
barplot(kor.o$Ht,names.arg=kor.o$Players,horiz=TRUE,border=NA,xlim=c(0,200),las=1,main=’Korea Playes’,col=rainbow(10))

2. 대륙별 선수들의 평균키로 세로 막대그래프 만들기
players<-read.csv(‘c:/image/players.csv’)
par(mar=c(5,5,5,5))
ah<-aggregate(Ht~Continent,data=players,mean)
ah.o<-ah[order(ah$Ht,decreasing=FALSE),]
barplot(ah.o$Ht,ylim=c(0,200),names.arg=ah.o$Continent,border=NA,las=1,col=rainbow(10))

3. 선수 키에 대한 히스토그램 만들기
players<-read.csv(‘c:/image/players.csv’)
hist(players$Ht,main=’PGA Players Height’,ylim=c(0,250),xlab=’cm’,col=rainbow(10))

4. 선수 키에 대한 히스토그램 (키의 분포 범위를 조정)
players<-read.csv(‘c:/image/players.csv’)
par(mflow=c(1,3),mar=c(3,3,3,3))
hist(players$Ht,main=’PGA Players Height’,ylim=c(0,160),xlab=’cm’,breaks=seq(160,200,1),col=rainbow(10))
//hist(players$Ht,main=’PGA Players Height’,ylim=c(0,160),xlab=’cm’,breaks=seq(160,200,2),col=rainbow(10))
//hist(players$Ht,main=’PGA Players Height’,ylim=c(0,160),xlab=’cm’,breaks=seq(160,200,5),col=rainbow(10))

5. 선수 키에 대한 히스토그램 (키의 분포 범위를 조정)
players<-read.csv(‘c:/image/players.csv’)
par(mflow=c(1,3),mar=c(3,3,3,3))
//hist(players$Ht,main=’PGA Players Height’,ylim=c(0,0.05),xlab=’cm’,breaks=c(seq(160,170,2),185,200),col=rainbow(10))
//hist(players$Ht,main=’PGA Players Height’,ylim=c(0,0.05),xlab=’cm’,breaks=c(160,170,seq(185,200,2)),col=rainbow(10))
hist(players$Ht,main=’PGA Players Height’,ylim=c(0,0.05),xlab=’cm’,breaks=c(160,seq(170,185,1),200),col=rainbow(10))

6. PGA 선수 키에 대한 히스토그램 – 대륙별 평균키
players<-read.csv(‘c:/image/players.csv’)
par(mfrow=c(2,3), las=1, mar=c(5,5,4,1))
continent<-unique(players$Continent)
for (i in 1:length(continent)) {
currPlayers <- subset(players, Continent==continent[i])
hist(currPlayers$Ht,main=continent[i],breaks=160:200,xlab=’cm’,border=’#ffffff’,col=rainbow(10),lwd=0.4)
}

7. 회귀분석
regression <-read.csv(‘c:/image/regression.csv’)
plot(regression$height ~ regression$weight, main=’평균키와 몸무게’, xlab=’Height’, ylab=’Weight’, col=rainbow(100))

8. 회귀분석과 단순(선형)회귀분석
regression <-read.csv(‘c:/image/regression.csv’)
plot(regression$height ~ regression$weight, main=’평균키와 몸무게’, xlab=’Height’, ylab=’Weight’, col=rainbow(100))
r<-lm(regression$height ~ regression$weight)
abline(r)

9. 월별 평균온도의 박스 플롯
install.packages(‘ggplot2’)
library(ggplot2)
seoul<-read.csv(‘c:/image/converted-weather-seoul.csv’)
ggplot(seoul,aes(factor(Month),MeanTemp))+geom_boxplot()
스프링 response body에서 한글 깨질 때
<mvc:annotation-driven>
<mvc:message-converters>
<!– @ResponseBody로 String 처리할 때 한글처리 –>
<bean class=”org.springframework.http.converter.StringHttpMessageConverter”>
<property name=”supportedMediaTypes”>
<list>
<value>text/html;charset=EUC-KR</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
스프링 AOP 기초
클래스 A, B, C가 있다고 가정하자. 메소드 insert를 갖고 있는 클래스 A, 메소드 getConnection, disConnection을 갖고 있는 클래스 B, 두 개 클래스를 가져다 쓰는 클래스 C가 있다.
여기서 insert는 ‘핵심관심사’이고, getConnection, disConnection은 ‘공통관심사'(Aspect)이다. 이들을 묶어주는 것을 ‘위빙’이라고 한다. 클래스 A와 클래스 B를 가져다 쓰는 클래스 C를 프록시(proxy, 대리자)라고 한다.
언제 호출할지 결정해주는 것을 ‘조인 포인트’라고 한다. before라고 한다면 이전에 호출하는 것이다.
행단지향적 프로그램: 프로그램 10개가 있다면 10개를 동시에 적용시킬 수 있음
특정 폴더 내의 모든 폴더명 가져오기
1) 특정 폴더 내의 모든 폴더명 가져오기
2) 단, 폴더 안에 폴더를 갖고 있을 경우 안쪽 폴더들만 가져오기
1과 2를 arrayList<String>에 담는다.
File file=new File(“C:\\data\\”);
List<String> allList=new ArrayList<String>();
boolean conDir=false;
//안에 들어있는 모든 파일 검사
String[] fList=file.list();
for(int i=0;i<fList.length;i++){
//디렉토리일경우
File dir=new File(“C:\\data\\”+fList[i]);
if(dir.isDirectory()){
//디렉토리 안쪽의 파일을 배열에 담음
conDir=false;
String[] dList=dir.list();
for(int j=0;j<dList.length;j++){
//다시 디렉토리일 경우
if(new File(“C:\\data\\”+fList[i]+”\\”+dList[j]).isDirectory()){
allList.add(dList[j]);
//System.out.println(fList[i]+”폴더 내의 “+dList[j]);
conDir=true;
}
}
if(conDir==false){
allList.add(fList[i]);
//System.out.println(fList[i]);
}
}
}
[JAVA] URLConnection 403에러 해결법
아래 코드를 추가한다.
|
conn.setRequestProperty(“User-Agent”, “Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2”); |
자바 초성중성종성 분리
원본: 설연수님
class ChoJungJong {
/* **********************************************
* 자음 모음 분리 설연수 -> ㅅㅓㄹㅇㅕㄴㅅㅜ, 바보 -> ㅂㅏㅂㅗ
* *********************************************
*/
/** 초성 – 가(ㄱ), 날(ㄴ) 닭(ㄷ) */
public char[] arrChoSung = { 0x3131, 0x3132, 0x3134, 0x3137, 0x3138,
0x3139, 0x3141, 0x3142, 0x3143, 0x3145, 0x3146, 0x3147, 0x3148,
0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e };
/** 중성 – 가(ㅏ), 야(ㅑ), 뺨(ㅑ) */
public char[] arrJungSung = { 0x314f, 0x3150, 0x3151, 0x3152,
0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a,
0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162,
0x3163 };
/** 종성 – 가(없음), 갈(ㄹ) 천(ㄴ) */
public char[] arrJongSung = { 0x0000, 0x3131, 0x3132, 0x3133,
0x3134, 0x3135, 0x3136, 0x3137, 0x3139, 0x313a, 0x313b, 0x313c,
0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3144, 0x3145,
0x3146, 0x3147, 0x3148, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e };
/* **********************************************
*
* 알파벳으로 변환
*
* 설연수 -> tjfdustn, 멍충 -> ajdcnd
*
* *********************************************
*/
/** 초성 – 가(ㄱ), 날(ㄴ) 닭(ㄷ) */
public String[] arrChoSungEng = { “r”, “R”, “s”, “e”, “E”, “f”, “a”,
“q”, “Q”, “t”, “T”, “d”, “w”, “W”, “c”, “z”, “x”, “v”, “g” };
/** 중성 – 가(ㅏ), 야(ㅑ), 뺨(ㅑ) */
public String[] arrJungSungEng = { “k”, “o”, “i”, “O”, “j”, “p”,
“u”, “P”, “h”, “hk”, “ho”, “hl”, “y”, “n”, “nj”, “np”, “nl”, “b”,
“m”, “ml”, “l” };
/** 종성 – 가(없음), 갈(ㄹ) 천(ㄴ) */
public String[] arrJongSungEng = { “”, “r”, “R”, “rt”, “s”, “sw”,
“sg”, “e”, “f”, “fr”, “fa”, “fq”, “ft”, “fx”, “fv”, “fg”, “a”, “q”,
“qt”, “t”, “T”, “d”, “w”, “c”, “z”, “x”, “v”, “g” };
/** 단일 자음 – ㄱ,ㄴ,ㄷ,ㄹ… (ㄸ,ㅃ,ㅉ은 단일자음(초성)으로 쓰이지만 단일자음으론 안쓰임) */
public String[] arrSingleJaumEng = { “r”, “R”, “rt”, “s”, “sw”,
“sg”, “e”, “E”, “f”, “fr”, “fa”, “fq”, “ft”, “fx”, “fv”, “fg”, “a”,
“q”, “Q”, “qt”, “t”, “T”, “d”, “w”, “W”, “c”, “z”, “x”, “v”, “g” };
public String toChoJungJong(String allStr, boolean eng) {
String res = “”;// 최종 반황
String result = “”; // 결과 저장할 변수
String resultEng = “”; // 알파벳으로
for (int i = 0; i < allStr.length(); i++) {
/* 한글자씩 읽어들인다. */
char chars = (char) (allStr.charAt(i) – 0xAC00);
if (chars >= 0 && chars <= 11172) {
/* A. 자음과 모음이 합쳐진 글자인경우 */
/* A-1. 초/중/종성 분리 */
int chosung = chars / (21 * 28);
int jungsung = chars % (21 * 28) / 28;
int jongsung = chars % (21 * 28) % 28;
/* A-2. result에 담기 */
result = result + arrChoSung[chosung] + arrJungSung[jungsung];
/* 자음분리 */
if (jongsung != 0x0000) {
/* A-3. 종성이 존재할경우 result에 담는다 */
result = result + arrJongSung[jongsung];
}
/* 알파벳으로 */
resultEng = resultEng + arrChoSungEng[chosung]
+ arrJungSungEng[jungsung];
if (jongsung != 0x0000) {
/* A-3. 종성이 존재할경우 result에 담는다 */
resultEng = resultEng + arrJongSungEng[jongsung];
}
} else {
/* B. 한글이 아니거나 자음만 있을경우 */
/* 자음분리 */
result = result + ((char) (chars + 0xAC00));
/* 알파벳으로 */
if (chars >= 34097 && chars <= 34126) {
/* 단일자음인 경우 */
int jaum = (chars – 34097);
resultEng = resultEng + arrSingleJaumEng[jaum];
} else if (chars >= 34127 && chars <= 34147) {
/* 단일모음인 경우 */
int moum = (chars – 34127);
resultEng = resultEng + arrJungSungEng[moum];
} else {
/* 알파벳인 경우 */
resultEng = resultEng + ((char) (chars + 0xAC00));
}
}// if
}// for
// System.out.println(“============ result ==========”);
// System.out.println(“전체 문장 : ” + allStr);
// System.out.println(“자음분리 : ” + result);
// System.out.println(“알파벳 : ” + resultEng);
if (eng == true) {
res = resultEng;
} else {
res = result;
}
return res;
}
}
R 각종통계3: 워드클라우드
0. csv 파일 준비
x<-read.table(“c:/image/sales.csv”,sep=”,”,header=TRUE)
sales.csv
|
no,id,sex,age,goods_name,account,sale_price,total_price,sale_day,sale_week,sale_wh_day |
1. R 소스
library(wordcloud)
item.x <-sort(x$goods_name, decreasing = TRUE)
item.df <-x[x$goods_name%in% names(item.x[1:450]), ]
item.table <-table(x$goods_name)
word.name <-names(item.table)
item.table <-as.matrix(item.table)
freqs <-rowSums(item.table)
col <-brewer.pal(8, ‘Dark2’)
wordcloud(x$goods_name, min.freq = 1, scale = c(5, 0.2), col = col , random.order = FALSE)
2. 자바 소스
//구매횟수 상위 450개의 세분류 상품추출
rc.voidEval(“library(wordcloud)”);
rc.voidEval(“item.x <-sort(x$goods_name, decreasing = TRUE)”);
rc.voidEval(“item.df <-x[x$goods_name%in% names(item.x[1:450]), ]”);
//woldcloud 수행
rc.voidEval(“item.table <-table(x$goods_name)”);
//세분류명지정
rc.voidEval(“word.name <-names(item.table)”);
//빈도수지정
rc.voidEval(“item.table <-as.matrix(item.table)”);
rc.voidEval(“freqs <-rowSums(item.table)”);
//색지정
rc.voidEval(“col <-brewer.pal(8, ‘Dark2’)”);
//wordcloud 함수실행
rc.voidEval(“wordcloud(words = word.name, freq = freqs, min.freq = 1, scale = c(5, 0.2), col = col , random.order = FALSE)”);
3. 짧은 버젼
3-1. R 소스
library(wordcloud)
wordcloud(x$goods_name, min.freq = 1, scale = c(5, 0.2), col = rainbow(100) , random.order = FALSE)
3-2. 자바 소스
rc.voidEval(“library(wordcloud)”);
rc.voidEval(“wordcloud(x$goods_name, min.freq = 1, scale = c(5, 0.2), col = rainbow(100) , random.order = FALSE)”);
R 각종통계2: 주별 고객단위 구매금액
1. R 소스
1. 주별 고객단위 구매금액
import.df=data.frame(x)
x<-read.table(“c:/image/sales.csv”,sep=”,”,header=TRUE)
aggdata<-aggregate(total_price~no + sale_week,data=import.df,sum)
p<-ggplot(aggdata,aes(sale_week,total_price)); p+geom_boxplot(aes(fill=sale_week))
2. 5만원 미만으로 필터링한 구매금액
import.df=data.frame(x)
x<-read.table(“c:/image/sales.csv”,sep=”,”,header=TRUE)
aggdata<-aggregate(total_price~no + sale_week,data=import.df,sum)
p<-ggplot(subset(aggdata, total_price< 50000), aes(sale_week, total_price)); p + geom_boxplot(aes(fill = sale_week))
2. 자바 소스
2-1. 주별 고객단위 구매금액
try{
RConnection rc=new RConnection();
rc.voidEval(“Sys.setenv(JAVA_HOME=’C:/Program Files/Java/jre7′)”);
rc.voidEval(“library(ggplot2)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“x<-read.table(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.csv’,sep=’,’,header=TRUE)”);
rc.voidEval(“png(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.png’)”);
//////////////////////
//1. 주별 고객단위 구매금액
rc.voidEval(“import.df=data.frame(x)”);
rc.voidEval(“aggdata<-aggregate(total_price~no + sale_week,data=import.df,sum)”);
rc.voidEval(“print(ggplot(aggdata,aes(sale_week,total_price))+geom_boxplot(aes(fill=sale_week)))”);
break;
//////////////////////
rc.voidEval(“dev.off()”);
rc.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
2-2. 5만원 미만으로 필터링한 구매금액
try{
RConnection rc=new RConnection();
rc.voidEval(“Sys.setenv(JAVA_HOME=’C:/Program Files/Java/jre7′)”);
rc.voidEval(“library(ggplot2)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“x<-read.table(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.csv’,sep=’,’,header=TRUE)”);
rc.voidEval(“png(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.png’)”);
//////////////////////
//2. 5만원 미만으로 필터링한 구매금액
rc.voidEval(“import.df=data.frame(x)”);
rc.voidEval(“aggdata<-aggregate(total_price~no + sale_week,data=import.df,sum)”);
rc.voidEval(“print(ggplot(subset(aggdata, total_price< 50000), aes(sale_week, total_price))+geom_boxplot(aes(fill = sale_week)))”);
break;
//////////////////////
rc.voidEval(“dev.off()”);
rc.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
R 각종통계1: 상품별/나이별/성별
1. 기본예제
x<-read.table(“c:/image/sales.csv”,sep=”,”,header=TRUE)
ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~sex)

2. 자바 소스
public void createImage(int no){
try{
RConnection rc=new RConnection();
rc.voidEval(“Sys.setenv(JAVA_HOME=’C:/Program Files/Java/jre7′)”);
rc.voidEval(“library(ggplot2)”);
rc.voidEval(“library(KoNLP)”);
rc.voidEval(“x<-read.table(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.csv’,sep=’,’,header=TRUE)”);
rc.voidEval(“png(‘C:/Spring/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/GoodsProject/shop/sales.png’)”);
switch(no) {
case 1:
rc.voidEval(“print(qplot(sale_day,data=x,geom=’bar’,fill=sex,xlab=’SALESDAY’,ylab=’ACCOUNT’))”);
break;
case 2:
rc.voidEval(“print(qplot(sale_day,data=x,geom=’bar’,fill=sale_week,xlab=’SALESDAY’,ylab=’ACCOUNT’))”);
break;
case 3:
rc.voidEval(“print(ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~sex))”);
break;
case 4:
rc.voidEval(“print(ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~age))”);
break;
case 5:
rc.voidEval(“print(ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~sale_week))”);
break;
case 6:
rc.voidEval(“print(ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~sale_day))”);
break;
case 7:
rc.voidEval(“print(ggplot(x,aes(sale_day))+geom_bar()+facet_wrap(~sale_wh_day))”);
break;
}
rc.voidEval(“dev.off()”);
rc.close();
}catch(Exception ex){System.out.println(ex.getMessage());}
}
자바 타이머
메인 메소드——————————-
Timer timer = new Timer();
timer.schedule(new WorkTask(), 1, 1000);
타이머 메소드——————————-
public static class WorkTask extends TimerTask {
@Override
public void run() {
//이곳에 타이머 수행시 실행할 내용을 작성
}
}
R 컬럼 셀렉트
install.packages(‘sqldf’)
install.packages(‘data.table’)
install.packages(‘ggplot2’)
install.packages(‘KoNLP’)
library(sqldf)
library(data.table)
emp<-read.csv
emp<-read.csv(“c:/image/emp.csv”,header=TRUE)
sqldf(“SELECT ename,sal,hiredate FROM emp”)
컬럼 가져오기: emp$ename
중복 제거하고 컬럼 가져오기: data.table(unique(emp$job))
표로 정리하기: 테이블명[열,행] emp[,c(“ename”,”sal”)]
emp[emp$hiredate==’1981-09-08′,c(“ename”,”hiredate”)]
emp[emp$sal<=1000&emp$sal>=300,c(“ename”,”sal”)]
emp[emp$job!=’MANAGER’,c(“ename”,”job”,”sal”)]
ename job
1 홍길동2 MANAGER
3 ALLEN SALESMAN
4 WARD SALESMAN
5 JONES MANAGER
6 MARTIN SALESMAN
7 BLAKE MANAGER
8 CLARK MANAGER
11 TURNER SALESMAN
emp[emp$job %in% c(“MANAGER”,”SALESMAN”),c(“ename”,”job”)]
emp[!emp$job %in% c(“MANAGER”,”SALESMAN”),c(“ename”,”job”)]
ename sal
3 ALLEN 1600
12 ADAMS 1100
A로 시작하는
emp[grep(“^A.*”,emp$ename),c(“ename”,”sal”)]
ename sal
3 ALLEN 1600
12 ADAMS 1100
T로 끝나는 모든 사람
emp[grep(“*.T$”,emp$ename),c(“ename”,”sal”)]
ename sal
9 SCOTT 3000
널값 가져오기
emp[is.na(emp$comm),c(“ename”,”comm”)]
ename comm
2 SMITH NA
8 CLARK NA
10 KING NA
12 ADAMS NA
13 JAMES NA
14 FORD NA
낫널 가져오기
emp[!is.na(emp$comm),c(“ename”,”comm”)]
R그래프(R차트)
0. c:\image\score.txt
no name kor eng math
1 홍길동 67 89 50
2 심청이 80 99 55
3 춘향이 90 80 70
4 이순신 78 59 80
5 박문수 56 89 90
6 강감찬 87 65 67
7 을지문덕 57 79 50
8 김유신 36 58 40
9 유관순 76 60 52
10 이성계 92 100 80
메모장에서 UTF-8 로 저장하면 된다.
1. 테이블 가져오기
score<-read.table(“c:/image/score.txt”,header=TRUE)
2. 테이블에서 kor 칼럼만 가져오기
i<-score$kor
i
3. 파이차트 그리기(PIE)

pie(score$kor)
pie(score$kor,labels=paste(score$name,”\n”,score$kor),col=rainbow(10))
3-1. 파이차트 자바소스
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
RConnection rc=new RConnection();
rc.voidEval(“score<-read.table(‘c:/image/score.txt’,header=TRUE)”);
rc.voidEval(“png(‘c:/image/score3.png’)”);
rc.voidEval(“pie(score$kor,labels=paste(score$name,’\n’,score$kor),col=rainbow(10))”);
rc.voidEval(“dev.off()”);
rc.close();
System.out.println(“완료”);
}catch(Exception ex){ex.getMessage();}
}
4. R에서 plotrix 설치하기
install.packages(“plotrix”)
5. plotrix : 바 플롯(barplot)

barplot(score$eng,col=rainbow(10))
6. plotrix : fan.plot(팬 플롯)

try{
RConnection rc=new RConnection();
rc.voidEval(“library(plotrix)”);
rc.voidEval(“score<-read.table(‘c:/image/score.txt’,header=TRUE)”);
rc.voidEval(“png(‘c:/image/score6.png’)”);
rc.voidEval(“fan.plot(score$eng,labels=paste(score$name,’\n’,score$eng),col=rainbow(10),align=’left’,max.span=pi)”);
rc.voidEval(“dev.off()”);
rc.close();
System.out.println(“완료”);
}catch(Exception ex){ex.getMessage();}
}
7. plotrix : pie3D
rc.voidEval(“library(plotrix)”);
rc.voidEval(“pie3D(score$eng,labels=paste(score$name,’\n’,score$eng),explode=0.3,radius=pi/5)”);

8. plotrix : 레이더 차트(radial.pie)

rc.voidEval(“library(plotrix)”);
rc.voidEval(“radial.pie(score$eng,labels=paste(score$name,’\n’,score$eng),radius=TRUE)”);
9. plotrix : 버블 차트(symbols)
rc.voidEval(“library(plotrix)”);
rc.voidEval(“symbols(score$kor,score$eng,circles=score$math)”);

9-1. 버블 차트 색깔
rc.voidEval(“symbols(score$kor,score$eng,circles=score$math,fg=’blue’,bg=rainbow(10))”);

스프링의 타일즈(Tiles)

1. pom.xml
(전략)
<!– tiles –>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-api</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-servlet</artifactId>
<version>2.2.2</version>
</dependency>
(후략)
2. WEB-INF/web.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″ xmlns=”http://java.sun.com/xml/ns/javaee“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd“>
<!– Processes application requests –>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>EUC-KR</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3. WEB-INF/tiles.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE tiles-definitions PUBLIC
“-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN”
“http://tiles.apache.org/dtds/tiles-config_2_0.dtd“>
<tiles-definitions>
<definition name=”layout” template=”/WEB-INF/tiles/layout.jsp”>
<put-attribute name=”header” value=”/WEB-INF/tiles/header.jsp”></put-attribute>
<put-attribute name=”menu” value=”/WEB-INF/tiles/menu.jsp”></put-attribute>
<put-attribute name=”body” value=”/WEB-INF/tiles/body.jsp”></put-attribute>
<put-attribute name=”footer” value=”/WEB-INF/tiles/footer.jsp”></put-attribute>
</definition>
<definition name=”*/*” extends=”layout”>
<put-attribute name=”body” value=”/WEB-INF/{1}/{2}.jsp”></put-attribute>
</definition>
</tiles-definitions>
4. WEB-INF/dispatcher-servlet.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans“
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“
xmlns:aop=”http://www.springframework.org/schema/aop“
xmlns:context=”http://www.springframework.org/schema/context“
xmlns:p=”http://www.springframework.org/schema/p“
xmlns:task=”http://www.springframework.org/schema/task“
xmlns:tx=”http://www.springframework.org/schema/tx“
xmlns:util=”http://www.springframework.org/schema/util“
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd“>
<context:annotation-config/>
<context:component-scan base-package=”com.*”/>
<bean id=”viewResolver”
class=”org.springframework.web.servlet.view.UrlBasedViewResolver”
p:requestContextAttribute=”requestContext”
p:viewClass=”org.springframework.web.servlet.view.tiles2.TilesView”>
</bean>
<bean id=”tilesConfigurer”
class=”org.springframework.web.servlet.view.tiles2.TilesConfigurer”
p:definitions=”/WEB-INF/tiles.xml”></bean>
</beans>
정규식
Regular Expressions
메타 문자 : 정규표현식에서 특별한 의미를 가지는 문자
정규표현식에서 메타문자 및 기호문자를 찾고자하는 문자에 대응하려면 “\”(escape)를 붙혀 사용한다.
모든 문자 : .(마침표) – 모든 문자에 대응되는 한 문자
공백 문자 : \n, \r, \t, \f-form feed, \v-vertical tab
특별한 문자 형태
숫자와 숫자 아닌문자 : \d – [0-9], \D – [^0-9]
영숫자 문자와 영숫자 문자가 아닌 문자 : \w – [a-zA-Z0-9_], \W – [^a-zA-Z0-9_]
공백문자와 공백이 아닌문자 : \s – [\f\n\r\t\v], \S – [^\f\n\r\t\v]
16진수 8진수 : \x, \0
* 유용한 정규 표현식 예
– IP : (((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
– URL : https?://(\w*:\w*@)?[-\w.]+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?
– Email : (\w+\.)*\w+@(\w+\.)+[A-Za-z]+
– HTML 주석 : <!-{2,}.*?-{2,}>
– 주민등록번호 : \d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-[1-4]\d{6}
– 한글 : [가-힣]
– 유니코드 : \ucodenumber