반응형

Web System에서 윈도우의 도스명령어를 실행해야 하는경우가 있다.

 

예를들어, Database를 백업 또는 복구하는 경우에 이러한 기능이 매우 좋은 기능이다.

 

아래 소스를 보고 설명해 보자.

 

 

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Scanner;

public class DosCommandExecute {

 public static void main(String args[]) {

  try {
   Scanner scan = new Scanner(System.in);
   System.out.print("INSERT DOS COMMAND :");
   String command = scan.next();

 

   String cmd[] = new String[3];
   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = command;


   Runtime runTime = Runtime.getRuntime();
   Process process = runTime.exec(cmd);

 

   InputStream is = process.getInputStream();
   InputStreamReader isr = new InputStreamReader(is);
   BufferedReader br = new BufferedReader(isr);


   String line;

   while ((line = br.readLine()) != null) {
    System.out.println(line);
   }

   int execTime = process.waitFor();
   System.out.println("exectiog time: " + execTime);
  } catch (Throwable t) {
   t.printStackTrace();
  }
 }

위 소스에 대해서 분석을 해보도록 하자.

 

우리가 입력하는 DOS명령어는 다음과 같은 형식이다.

 

cmd.exe /C (명령어)

 

/C는 다음과 같은 옵션이다.

(/C옵션)

/C      문자열이 지정한 명령어를 수행한 후에 종료합니다.

 

저 위의 명령어가 String 배열로 입력이 들어가는 것이다.

 

 

내부적으로 실행하는 방법은 Runtime Class를 이용하여 별도로 Thread를 이용하여 실행하는 방법이다.

 

원래 Java의 경우 Java 실행시 Runtime Class 실행하여 1개의 Thread를 생성한다, 내부적으로 Runtime Class를 하나 더 생성하여

 

도스명령어를 이용한 데이터를 가져온다.

 

이상이다. 만약 DB 백업 을 원하신다면 아래와 같이 데이터를 넣으면 쉽게 적용할 수있다.

 

 

   cmd[0] = "cmd.exe";
   cmd[1] = "/C";
   cmd[2] = "mysqldump -u root -papmsetup amt_db_oper > d:/견적서/하이루.sql"; 

 

그럼 깔끔하게 적용된다. 웹의 경우 Servlet에서 위와 같은 기능을 추가하게 된다면 많은 기능을 더 적용할 수 있을 것이다.

 

반응형
반응형
아~~~ 정말 오랜만에 글을 쓴다.

애기들 공부 가르키다가, 새롭게 기억이 쏙쏙 돛아나는 정규식~ 매번 공부해야겠다고 마음은 먹지만 못하는 이놈.ㅋㅋㅋ

정규식이란 놈은 골때린다. 그 이유인즉, Java, 기타 툴, DB 등등 각각의 엔진마다 조금씩 다르기 때문이다.

휴~~ 그래서 우선 Java에서 쓰이는 정규식만 정리를 해보도록 하자.

머 내가 정리한다기 보다는 Java API에 있는것들 어느정도 해석해서 적어보도록 하겠다.

테스트를 위해서는 아래 코드를 활용하면 쉽게 테스트 가능하다.


 public class Test {
 public static void main(String argsp[]) {

  String tmp = "0A가B1abc나2C32dd2ⓔ34DDD다d";

  for (int i = 0; i < tmp.length(); i++) {
   String tt = tmp.substring(i, i + 1);
   if (tt.matches("
\\p{Lower}")) {   // ==> 요기에 정규표현식을 섞어서 넣어주면 쉽게 테스트가능하다.
    System.out.println(tt);
   }
  }
 }
}


우선 Java에서 아주 쉽게 사용할 수 있는것 부터 소개 하도록 하겠다.

정규식에 대해서 기타 다른 프로그램도 동일하게 적용되는 부분이다. API에서는 이 부분을 "Predefined character classes"

라고 명명하였다.

[1] Predefined character classes

.       Any character                                                 : 어떤 문자든 . 으로 표현한다.
\d       A digit: [0-9]                            : 0부터 9까지의 숫자
\D       A non-digit: [^0-9]                       : 0~9까지의 숫자 가 아닌 것
\s       A whitespace character: [ \t\n\x0B\f\r]    : 띄워쓰기
\S       A non-whitespace character: [^\s]          : 띄워쓰기가 아닌문자
\w       A word character: [a-zA-Z_0-9]            : 대.소문자 영문자 + 숫자
\W       A non-word character: [^\w]               : (대.소문자 영문자 + 숫자) 가 아닌것

위의 Pattern은 모든 정규식에서 공통적으로 이용되는 정규식이기 때문에 외우두면 개발하기 매우 편하다.

다음으로 POSIX 에서 정의한 정규표현식을 알아보도록 하자. POSIX에서 정의한 정규표현식도 Java에서는 사용가능하다.

[2] POSIX character classes

\p{Lower} A lower-case alphabetic character: [a-z]                  : 영어 소문자
\p{Upper} An upper-case alphabetic character:[A-Z]                  : 영어 대문자
\p{ASCII} All ASCII:[\x00-\x7F]                                  : 아스키코드로 표현가능한 모든 문자
\p{Alpha} An alphabetic character:[\p{Lower}\p{Upper}]            : 모든 알파벳(대.소문자 포함)
\p{Digit} A decimal digit: [0-9]                                  : 0~9까지의 숫자
\p{Alnum} An alphanumeric character:[\p{Alpha}\p{Digit}]          : 알파뉴메릭(대.소문자 영문자 + 숫자)
\p{Punct} Punctuation: One of !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~    : 키보드로 표현가능한 특수문자
\p{Graph} A visible character: [\p{Alnum}\p{Punct}]                : 알파뉴메릭 + 키보드로 표현가능한 특수문자
\p{Print} A printable character: [\p{Graph}\x20]                   : 알파뉴메릭 + 키보드로 표현가능한 특수문자
\p{Blank} A space or a tab: [ \t]                                 : 띄워쓰기 또는 Tab
\p{Cntrl} A control character: [\x00-\x1F\x7F]                     : 요건 나도 뭔지 잘 모름 ????
\p{XDigit} A hexadecimal digit: [0-9a-fA-F]                         : 16진수로 표현가능한 문자
\p{Space}

A whitespace character: [ \t\n\x0B\f\r]                 : Tab , Enter, Carrige Return 문자



위의 POSIX Pattern 자체가 좀 더 눈으로 식별하기는 쉬운 느낌이 든다.

[1] 과 [2] 외에도 여러가지 정규 표현식 들이 존재한다.

하지만, 내 생각에는 [1]과 [2]의 표현식 정도면 외우고 있고 적당히 조합을 하면 왠만한 문자열 패턴을 찾는

것은 쉬울것이라 생각한다.



 마지막으로, 한글을 어떻게 하면 걸러낼 수 있을까? 라는 의문점이 든다. 모든 정규표현식은 한글이 아닌 US 문자를 기준

으로 구현되었기 때문에 한글의 경우는 과연 어떻게 할까?

우선 정답은 다음과 같다.


matches("[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]")

대략 보면 다음과 같다.

(1) 모든 한글은 ㄱ 으로 시작해서 ㅎ 으로 끝난다.
(2) 모든 모음은 ㅏ 로 시작해서 ㅣ 로 끝난다.
(3) (1)과 (2)을 모두 조합해 보았을때 모든 문자는 가 로 시작해서 힣 으로 끝이 난다.



정규표현식은 잘쓰면 복잡한 코드를 상당히 줄 일 수 있는 아주 유용한 표현식이다. 어느정도 익혀 놓는다면

개발자가 퀀텀점프 할 수 있는 좋은 계기가 될 것이라 생각한다.


                                                                                            - 2012.01.20 랑이씀 -


반응형

'Program > JAVA' 카테고리의 다른 글

ShellScript를 이용한 jar파일만들기  (0) 2012.08.09
JAVA에서 윈도우 명령어 실행하기  (0) 2012.06.14
[ Vector와 ArrayList의 차이점]  (2) 2010.11.22
POJO(Plain Old Java Object) 란?  (5) 2010.11.05
Abstract Class란?  (0) 2010.09.16
반응형
Mysql에서 Process 관리를 하기 위해 종종 툴을 사용한다.

Mysql Administrator 란 Tool을 쓰기도 하는데, GUI 환경이어서 아주 편하게 되어있다.

오늘 이시간에는 콘솔에서 Process list를 보여주고 죽이고 하는 등등의 내용과 Tool 상에서

할 수 있는 것들에 대해 알아보겠다.

[1] 콘솔에서 접속 후 알아보기

콘솔이던 어디던 확실하게 전체 user의 상태를 체크해보기 위해서는 root 계정으로 들어가
확인해 보는것이 제일 확실하다.

로그인 하였다 가정하고 아래 메시지를 보도록 하자.

[1-1] Process List 를 조회하는 방법

 mysql> show full processlist;
+-------+--------+-----------------------+--------------+---------+------+-------+-----------------------+
| Id       | User   | Host                          | db               | Command | Time | State | Info                               |
+-------+--------+-----------------------+--------------+---------+------+-------+-----------------------+
| 48892 | testu    | localhost:33072           | gxxxxxxxe    | Sleep        | 5360 |           | NULL                           |
| 48899 | mxxxx | xxx.1xx.217.139:49333  | paxxxxxxxd  | Sleep        | 3582 |           | NULL                           |
| 48901 | mxxxx | xxx.1xx.217.139:49336  | paxxxxxxxd  | Sleep        | 3573 |           | NULL                           |
| 48903 | mxxxx | xxx.1xx.217.139:49343  | paxxxxxxxd  | Sleep        |     8 |            | NULL                           |
| 48961 | root     | localhost                    | NULL           | Query        |     0 |  NULL  | show full processlist     |
+-------+--------+-----------------------+--------------+---------+------+-------+-----------------------+

위 내용을 보면 show full processlist 란 명령어를 입력시 다음과 같이 현재 수행중인 Thread의 종류가 나오게 된다.

[1-2] Process List를 삭제하는 방법
mysql> kill 48899;

linux와 동일하게 kill이라는 명령어를 사용해서 상대방의 Thread를 강제 종료 가능하다.

[2] GUI를 통해서 확인하는 방법

Mysql Administrator를 이용하여 보면 위에 내용보다 조금 더 쉽게 조회 할 수 있다.
역시나 root계정으로 접속했을때 전체 유저에 대해 조회 가능하다.


위 내용에서 보듯이 각 유저별로 접속현황을 GUI환경에서 아주 쉽게 조회가능하다. 오른쪽 끝에 INFO 를 보면 알겠지만,
콘솔에서 show full processlist 명령어를 한것과 같은 효과이다.

지금까지 Mysql 상에서 Thread 조회 , 삭제 방법을 알아보았다. 다양한 view방법이 옵션별로 존재하지만, 크게 신경안써도
될듯하다. 추가적으로, 필요한 부분이 생기면 다시금 기록 하도록 하겠다.


                                                                                                         - 2012.12.27 랑이씀 -
반응형
반응형
대한생명은 다른 보험사와는 틀리게 fax를 통해서 보험료납부 관련

서류를 받지 않는다.

(서류 제공방법)
1. 방문접수(가까운지점)
2. 설계사를 통한 접수

2번의 경우는 나처럼 가입한지 대략 10년이 다되어 간이상 찾기 힘들다.

1번 경우를 보도록 하자.

(( 필요서류 ))
1) 자신의 신분증 원본
2) 보험료 입금받을 통장 사본
3) 진단서 or 수술확인서 둘중 1개

   (병명,수술명,수술일자,질병코드,입원기간, 병원도장날인) 반드시 포함되어야함
4) 초진기록지(사고경위가 나온걸로)
    (원본 대조필 도장이 찍혀있어야 한다)
5) 보험금 청구서 사이트에서 다운로드 가능하다.
   (
http://www.korealife.com/ : 요건 자필 이어야 한다.)



요렇게 해서 가까운 영업지점을 방문 하면된다. (지점검색 또한 웹사이트에 기재되어있으니)

참고하길 바란다.
반응형

+ Recent posts