2016년 12월 27일 화요일

파일삭제

1. rm
 -r : 해당 폴더안에 있는 모든 파일들까지 같이 삭제하고 자기자신 즉 폴더까지 삭제하는 옵션
 -i : 각 파일들이나 폴더를 삭제할 때 삭제할 것인가를 묻도록 하는 옵션
 -f : 파일이 있든 없든 오류를 표출하지 않고 무조건 삭제하는 옵션

rm -rf [디렉토리명] // 리눅스 디렉토리(하위 디렉토리, 파일 포함)를 삭제
rm -rf * // 현재 디렉토리의 모든 것을 삭제



2. rmdir
  rmdir은 디렉토리만 삭제하는 명령으로 디렉토리 안에 파일이 존재하는 경우 디렉토리가 삭제되지 않습니다. 따라서, rmdir을 사용하시려면 디렉토리안을 먼저 삭제하신후에 해당 명령을 사용하여 디렉토리를 삭제해야 합니다.

rmdir [디렉토리명]

2016년 12월 15일 목요일

wait_timeout관련


*디폴트 타임아웃 확인
show variables like '%timeout';

*정보 설명
connect_timeout  :  MySQL 서버 접속시에 접속실패를 메시지를 보내기까지 대기하는 시간

delayed_insert_timeout  :  insert시 delay될 경우 대기하는 시간

innodb_lock_wait_timeout  :  innodb에 transaction 처리중 lock이 걸렸을 시 롤백 될때까지 대기하는 시간.
innodb는 자동으로 데드락을 검색해서 롤백시킨다.

innodb_rollback_on_timeout  :  innodb의 마지막 구문을 롤백시킬지 결정하는 파라미터.
timeout은 진행중인 transaction을 중단하고 전체 transaction을 롤백하는 과정에서 발생한다.

interactive_timeout  :  활동중인 커넥션이 닫히기 전까지 서버가 대기하는 시간

net_read_timeout  :  서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

net_write_timeout  :  서버가 클라이언트에 데이터를 쓰는 것을 중단하기까지 대기하는 시간

slave_net_timeout  :  마스터/슬레이브로 서버가 클라이언트로부터 데이터를 읽어들이는 것을 중단하기까지 대기하는 시간

table_lock_wait_timeout  :  테이블 락을 중단하기까지 대기하는 시간

wait_timeout  :   활동하지 않는 커넥션을 끊을때까지 서버가 대기하는 시간

* Solution.

1) autoreconnect=true // 트랜잭션 오류 가능성있음
- 커넥션이 끊어지면 자동 재접속
jdbc:mysql://(host):(port)/(db_name)?autoReconnect=true
ex) jdbc:mysql://127.0.0.1:3306/seoulnetworks?autoReconnect=true

2) validationQuery 사용 //추천
-Mysql
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="${jdbc.driverClassName}"/>
  <property name="url" value="${jdbc.url}"/>
  <property name="username" value="${jdbc.username}"/>
  <property name="password" value="${jdbc.password}"/>
  <property name="validationQuery" value="select 1"/>
 </bean>

- Oracle
validationQuery="select 1 from dual"





Mysql캐릭터셋확인 및 변경

* 캐릭터셋 확인

#database 확인
SELECT default_character_set_name FROM information_schema.SCHEMATA S
WHERE schema_name = "mydb";

#table 확인
SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "mydb"
  AND T.table_name = "mytable";


#column 확인
SELECT character_set_name FROM information_schema.`COLUMNS` C
WHERE table_schema = "mydb"
  AND table_name = "mytable"
  AND column_name = "mycolumn";

#Show 명령어 사용(추천)
SHOW FULL COLUMNS FROM mytable;

*캐릭터셋 변경

#데이터베이스 디폴트 캐릭터셋 변경
alter database [dbname] DEFAULT CHARACTER set utf8;

#utf-8일때는 utf8 , utf8_general_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci

#euc-kr일때는 euckr , euckr_korean_ci
ALTER TABLE 테이블명 MODIFY COLUMN 컬럼 VARCHAR(255) CHARACTER SET euckr COLLATE euckr_general_ci


#테이블의 모든 컬럼의 charset 를 변경할 경우
alter table 테이블명 convert to character set utf8;
alter table 테이블명 convert to character set euckr;




mysql캐릭터셋확인

mysql charater set

* character set 확인
mysql> show variables like 'c%';


* my.cnf 수정
[root@localhost local]# vi /etc/my.cnf


[client]
#추가
default-character-set = utf8

[mysqld]
#추가
init_connect= SET collation_connection = utf8_general_ci
init_connect= SET NAMES utf8
default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
#추가
default-character-set = utf8

[mysql]
#추가
default-character-set = utf8

* mysql 재시작
[root@localhost local]# service mysqld restart

mysqld 를 정지 중:                                         [  OK  ]
mysqld (을)를 시작 중:                                     [  OK  ]
[root@localhost local]#

2016년 12월 6일 화요일

ORA-12516

Problem
ORA-12516: TNS:리스너가 프로토콜 스택과 일치하는 처리기를 찾을 수 없습니다.

Cause
Oracle DB를 이동하여 Application을 가동하다 보면 위와 같은 Message와 마주칠 수 있습니다.

이는 동시 처리 가능한 Processes parameter 값을 초과했기 때문에 더 이상 Session을 연결할 수 없다는 message입니다.

Resolution
Processes parameter 값을 변경해주면 됩니다.

1. Oracle에 접속합니다.

<oracle @ oracle ~># sqlplus / as sysdba


2. Processes parameter 값을 확인합니다.

  1) show parameter를 이용하는 방법

SQL > show parameter processes;

NAME                                   TYPE     VALUE
-------------------------------------------------
aq_tm_processes               integer      1
db_writer_processes           integer      1
job_queue_processes          integer     10
log_archive_max_processes  integer      2
processes                          integer    150

  * 현재 동시 처리 가능한 Processes 값은 150입니다.

  2) select 문을 사용하는 방법

SQL > select * from v$resource_limit

RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION INITIAL_ALLOCATION LIMIT_VALUE
processes                119 150        150        150
sessions                 76 166        256        256
enqueue_locks         90 256       3350       3350
enqueue_resources 48 145       1344  UNLIMITED
ges_procs                 0 0          0          0
ges_ress                 0 0          0  UNLIMITED
ges_locks                 0 0          0  UNLIMITED
ges_cache_ress           0 0          0  UNLIMITED
ges_reg_msgs         0 0          0  UNLIMITED
ges_big_msgs         0 0          0  UNLIMITED
ges_rsv_msgs           0 0          0          0
gcs_resources           0 0          0          0
gcs_shadows         0 0          0          0
dml_locks               2 2       1124  UNLIMITED
temporary_table_locks 0 111  UNLIMITED  UNLIMITED
transactions         1 1        281  UNLIMITED
branches                 0 0        281  UNLIMITED
cmtcallbk                 0 10        281  UNLIMITED
max_rollback_segments 12 36        281      65535



  * 첫 번째 줄의 processes에서 가장 오른쪽이 Limit 값입니다.

3. Processes parameter 변경

SQL > alter system set processes = 500 scope = spfile;
System Altered.


동시에 처리 가능한 Process의 숫자를 500개로 증가시켰습니다.

4. DB 재시작

SQL > shutdown immediate

Database closed.
Database dismounted.
Oracle instance shut down.

SQL > startup

ORACLE instance started.

Total System Global Area 219223120 bytes
Fixed Size 451664 bytes
Variable Size 201326592 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.

설정 값 적용을 위해 DB를 재시작합니다.


5. 설정 적용 확인

2번에서 알려드린 QUERY 문으로 확인하시면 설정이 변경 된 것을 알 수 있습니다.

2016년 10월 5일 수요일

FormData한글깨짐

var form = new FormData(); 사용시.

-각종 파라미터및 blob 파일까지 넘길수 있다.
-한글은 깨지기 때문에 인코딩해서 넘긴다.
// 클라이언트
var data = new FormData();
data.append("thumb_name",encodeURIComponent(name));
data.append("thumb_true_Name",trueName);
data.append("thumb_total_page",pages);

$.ajax({
url:_url,
processData: false,
                contentType: false,
        type: 'POST',
        data: data,
dataType: "json",
async: false, // false => 비동기를 동기로
        success:function(createResult){   // 결과변수 중복되면 안됨                            
            //console.log(uploadResult.result);        
        //console.log("1");
        value = createResult.result;        
        },      
        error:function(e){
            //alert(e.responseText);
        console.log("error");
        }
    });

// 서버
URLDecoder.decode(tDTO.getThumb_name(),"UTF-8")

2016년 8월 9일 화요일

아파치, 톰캣설치

리눅스 우분투 아파치 톰캣 연동하기

오늘은 아파치를 설치하고 톰캣과 연동해 보려고 한다.
연동해 보기 전에 아파치와 톰캣을 연동하는 이유는 뭘까?

톰캣은 정적인 페이지를 로드하기에 아파치 보다 느린 처리속도를 보인다.
톰캣은 설정할 수 있는 내용들이 아파치에 비해 부족하다.
톰캣은 아파치보다 부하에 약하다.
톰캣만으로는 서블릿/JSP밖에 서비스할 수 없다.
톰캣과 아파치를 연동하여 부하분담이 가능하다.(다수의 톰캣 구성으로의 로드밸런싱의 의미가 아닌 톰캣만으로 처리가능한 static page를 apache에서 대신함으로써의 부하 분담)


개발할때는 톰캣하나로만 돌려서 상관없을 것 같고 실제 운영할 때는 아파치와 톰캣을 연동하는게 성능이나 퍼포먼스를 향상시켜준다.

이제 아파치 톰캣을 연동해 보겠다.

1. 아파치 설치

apt-get install apache2


apache2 설치는 apt-get 패키지로 설치한다.
저 한줄만 입력하면 설치가 끝난다. 정말로 간단하다.







2. mod_jk 설치

apt-get install libapache2-mod-jk


mod_jk모듈은 톰캣과 아파치를 연결시켜주는 모듈이다.
이 모듈도 apt-get 명령어로 설치한다.



3. mod_jk 설정

vi /etc/libapache2-mod-jk/workers.properties

// 톰캣이 설치되어 있는 경로
workers.tomcat_home=/usr/local/tomcat8

// 자바가 설치되어 있는 경로
workers.java_home=/usr/local/java

// 사용할 worker의 이름을 셋팅한다.
// 아파치에 톰캣을 하나 이상 연결할 때는 woker.list=prj1,prj2 이런식으로 설정하면 된다.
// 그냥 기본으로 설정으로 셋팅
worker.list=ajp13_worker

// 각각의 worker list별로 설정.
// 여기서 포트는 톰캣에 설정되어 있는 ajp port를 적어준다.
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1


위에서 바꿔준 부분은 tomcat과 java 설치 경로만 바꿔주고 나머지는 default셋팅 그대로 두었다. 각자 상황에 맞게 설정하자.





4. 톰캣 설정

vi /usr/local/tomcat8/conf/server.xml

// 혹시 이부분이 주석처리 되어 있다면 주석을 제거한다. 위에서 worker.properties 파일에서 지정한 port번호이다.
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


// docBase는 톰캣에 올릴 프로젝트 경로, path는 도메인/path명이 된다.
// docBase를 지정하지 않으면 기본적으로 톰캣의 디폴트 디렉토리가 설정된다.

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
    <Context  path="/" reloadable="true" />
    ......
</Host>


톰캣과 커넥터를 연결하기 위한 설정이다.
http://localhost/path 경로로 접근시에 apache에서 tomcat으로 docBase에 설정된 경로로 연결을 해준다.
docBase설정을 하지 않을경우 기본적으로 톰캣 설치 경로의 webapps의 ROOT폴더를 바라본다.

5. 아파치 설정

vi /etc/apache2/sites-enabled/000-default.conf
ServerAdmin webmaster@localhost
DocumentRoot /usr/local/tomcat8/webapps/ROOT
ServerName monchertongtong.com      // 설정된 도메인
ServerAlias www.monchertongtong.com

JkMount /* ajp13_worker
JkMount / ajp13_worker


설정들이 많이 되어 있을텐데 제일 아래 부분쯤에 위와 같이 JkMount를 추가해 준다.
http://ip/PATH경로로 시작하는 주소는 모두 커넥터 설정에서 지정한 WORKER_LIST로 연결을 해준다.





6. 아파치, 톰캣 재시작

service apache2 restart
cd /usr/local/tomcat8/bin
./shutdown.sh
./startup.sh


7. 브라우저 확인






주소 입력창을 보면 8080port가 빠져있다. 아파치 톰캣 연동 성공했다.







물론 8080port를 붙인 주소로도 접속이 가능하다.
다음번에는 프로젝트 하나 다운받아서 톰캣에 올려보도록 하겠다.