울트라에디트(UltraEdit)에서 특수문자 사용하기

 

울트라 에디트를 사용하다보면, 찾기나 바꾸기 기능을 이용할 때 특문들 ( ^, 엔터, 탭) 에 대해서 찾기 또는

바꾸기 기능을 이용해야 할 경우가 생기게 되는데요..

 

이때 많이들 놀래거나 긴장을 하실텐데...

 

요때 사용되는 울트라 에디트용 특문 대체 문자를 소개해 드립니다~

 

특수문자 요약:

기호

기능

^^

“^”문자를 검색한다

^s

매크로가 실행될 때 선택된(강조된) 텍스트를 검색한다

^c

매크로가 실행될 때 클립보드의 내용에서 검색한다

^b

페이지를 나눈다

^p

새줄 (CR/LF)을 시작한다 (문단) ( 도스 파일)

^r

새줄(CR만) 을 시작한다 (문단) (맥 파일)

^n

새줄(LF만) 을 시작한다 (문단) (유닉스 파일)

^t

탭 문자를 일치 시킨다

 

예)

[에디터의 내용]

111^222^333^444

 

 

 

 

 

 

[변환 후 결과]

111

222

333

444

 

어때요.. 참쉽죠~~

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

shell Scaript 주요 비교구문

 

 

 

Linux 나 Unix 계열의 OS 에서 쉘 스크립트(shell script)를 생성할 경우 if 문이나 for문 , while 문등의 제어문에서

여러가지의 조건문을 사용할 필요가 있게 된다.

 

이때 참고할만한 몇가지 조건식을 나열함.

 

[문자열 비교]

 

$str1 = $str2  : 양쪽이 같으면 true

$str1 != $str2 : 양쪽이 다르면 true

-n $str : 문자열 길이가 0이 아니면 true

-z $str : 문자열 길이가 0 이면 true

$str1 = "a" -a $str2 = "a" : 양쪽 조건이 전부 true 이면 true (AND)

$str1 = "a" -o $str2 = "a" : 양쪽 조건중에 하나 이상 true 이면 true (OR)

 

[산술 비교]

 

$a -eq $b : 양쪽이 같으면 true

$a -ne $b : 양쪽이 다르면 true

$a -gt $b : $a 가 크다면 true

$a -ge $b : $a 가 크거나 같으면 true

$a -lt $b : $a 가 작으면 true

$a -le $b : $a 가 작거나 같으면 true

 

[파일 비교]

 

-e $file : 파일이 존재하면 true

-d $file : $file 이 디렉토리이면 true

-r $file : 파일에 대한 읽기 권한이 있으면 true

-w $file : 파일에 대한 쓰기 권한이 있으면 true

-x $file : 파일에 대한 실행 권한이 있으면 true

$file1 -nt $file2 : $file1 이 $file2 보다 최근 파일이면 true

$file1 -ot $file2 : $file2 가 $file1 보다 최근 파일이면 true

 

*** 조건식을 사용할때는 스페이스바 한칸씩 띄워야 함.

 

 

 

 

 

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

tar 명령의 활용 - 디렉토리 목록만 묶기

 

 

 

Linux 의 명령어 중 파일이나 디렉토리 구조를 묶어주는 tar 라는 명령어가 있습니다.

 

기본적인 문법은

 

 tar [OPTION...] [FILE]...

 

형태이며,  보통은 z 옵션과 함께하여 gzip + tar 로 압축을 합니다.

 

기본 명령은 아래와 같습니다.

 

tar cvzf test.tgz test

 

test 라는 폴더를 test.tgz 로 압축하여 묶는다는 뜻이죠.

 

오늘 알려드릴 팁은  이때,  test 밑의 하위 디렉토리 구조만 (파일은 빼고) 묶는 방법입니다.

 

tar cvzf test.tgz --exclude=*.* test

 

--exclude  라는 옵션을 이용한 건데요,  --exclude=파일명  이런식으로 옵션을 주게되면,

 

해당 파일은 제외되고 압축이 되어지는 것입니다.

 

이를 이용해서 *.* 이라고 넣어주면 확장자를 가지는 파일들은 모두 제외가 되어지기 때문에..

 

폴더만 압축이 되어지는 것입니다.

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

MySQL Database 를 사용함에 있어서 사용자를 추가하는 예제

 

사용자를 추가하기 위해 user 테이블에 항목을 추가하는 방법을 사용할 수 있으나
여러가지 오류를 발생 시킬 수 있으므로 권하지 않습니다.



따라서 GRANT 문을 이용하여 사용자 계정을 추가하는 방법을 설명합니다.

GRANT 명령문은 사용자 계정에 권한을 부여하는 명령으로 특정 사용자에게 특정 데이터베이스에 대한 권한을 설정할 수 있습니다.

이제 test_user 라는 사용자를 만들고 이 사용자의 비밀번호를 '1234'로 설정하고 my_database에 대한 모든 권한을 부여하는 방법을 설명하겠습니다.

우선 root 권한으로 MySQL DB 에 접속 합니다.

mysql -u root -p

비밀번호를 묻는 프롬프트가 나오면 비밀번호를 입력한 후 접속합니다.

 




접속 후 my_database 라는 DB 를 만들어 봅니다.

create database my_database;

사용자 생성 및 권한을 부여합니다.

grant all privileges on my_database.* to test_user@localhost identified by '1234' with grant option;


상기 명령으로 생성된 유저는 localhost 에서의 접속만 허용하게 됩니다.
이 부분에 별도의 IP 나 hostname 을 주게되면 해당 IP 혹은 hostname 에서만 접속이 가능하게
됩니다.

만약 이부분을 '%' 로 지정하게 된다면, 모든 원격지에서의 접근이 가능해지게 됩니다.

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

 

 

소켓을 통해 네트워크 정보를 보는 기본적인 예제입니다.

 

네트워크 소켓을 열어서 간단한 정보를 확인하는 예제입니다.

 

 

----------network.java-------------

package com.redjava.java.network;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class NetEcho {
 
   public static void main(String[] args) throws IOException {
   
     try {
      Socket echoSocket = new Socket("localhost", 80);
      System.out.println(echoSocket);
     }
     catch(UnknownHostException e) {
      System.err.println("Don't know about host: roseindi.");
      System.exit(1);
     }
     catch (IOException e) {
      System.err.println("I understand about "+ "the host: roseindi.");
      System.exit(1);
     }
   }

}

 

 

실행결과

 

Socket[addr=localhost/127.0.0.1,port=80,localport=51962]

 

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

 

 

도메인으로 IP 주소를 알아내는 간단한 예제소스 입니다.

 

// 변수 선언
String hostname = "www.daum.net";

// 호스트 이름으로 ip 주소값 가져오기
InetAddress ipaddress = InetAddress.getByName(hostname);

 

 

------------ network.java ---------------

package com.redjava.java.network;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class NetFindIp {

   public static void main ( String[] args ) throws IOException   {
  
    String hostname = "www.daum.net";  
   
    try{   
     InetAddress ipaddress = InetAddress.getByName(hostname);
     System.out.println("IP address: " + ipaddress.getHostAddress());
     } catch ( UnknownHostException e )    {    
       System.out.println("Could not find IP address for: " + hostname);   
     }
     }
}

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,


getKeepAlive : 소켓이 살아있는지 죽었는지 확인하는 메소드

 

Server는 socket의 끊어지 상태 확인이 어려운 경우가 많으며
socket보다 방화벽의 connection timeout이 짧은 경우 종종 발생합니다.

서버는 소켓이 끊어진지 여부를 모르기 때문에 아래의 절차를 거쳐 socket close후 처리를 합니다.

if( socket.isConnected() == true && socket.getKeepAlive() == false) {
  socket.setKeepAlive(true);
  if(socket.getKeepAlive() == false) { // Socket 연결이 끊어 졌는지 확인
    socket.close();
    releaseSocket(socket, endpoint);
    socketsPool.clear(socketKey);
    socket = (Socket) socketsPool.borrowObject(socketKey);
  }
}


----- network.java ----
package com.redjava.java.network;

import java.net.*;
import java.io.*;

public class NetGetKeepAlive{
 
 public static final short TIME_PORT = 135;
 
 public static void main(String[] args) throws IOException{
  
  String hostName = null;
  System.out.println();
  
  try{
   Socket socket= new Socket(hostName,TIME_PORT);
   System.out.println("socket =" + socket);
   System.out.println("Keep Alive="+ socket.getKeepAlive());
   System.out.println("Send Buffer size ="+ socket.getSendBufferSize());
   System.out.println("output ="+socket.isOutputShutdown());
   System.out.println("port is =" + socket.getPort());
   System.out.println("socket address ="+socket.getLocalSocketAddress());
   InetAddress in= socket.getInetAddress();
   System.out.println(in);
   System.out.println("\n");
   System.out.print("RAW IP Address - (byte[]) : ");
   byte[] b1 = in.getAddress();
   
   for (int i=0; i< b1.length; i++) {
    if (i > 0) {
     System.out.print(".");}
     System.out.print(b1[i]);
   }

  }
  catch (UnknownHostException  e) {
   e.printStackTrace();
  }
  catch (IOException e) {
   e.printStackTrace();
  }
 }
}


--- 실행결과 ---
socket =Socket[addr=localhost/127.0.0.1,port=135,localport=52195]
Keep Alive=false
Send Buffer size =8192
output =false
port is =135
socket address =/127.0.0.1:52195
localhost/127.0.0.1

RAW IP Address - (byte[]) : 127.0.0.1

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

지정된 폴더에 있는 파일들을 zip으로 압축하는 샘플 예제입니다.

 

지정된 폴더내의 모든 파일들을 zip으로 압축하는 샘플 예제

 

 // 지정된 위치에 압축파일 생성
private static final String OUTPUT_ZIP_FILE = "C:\\Workspace\\folderfile.zip";

 // 압축할 폴더 위치 지정
private static final String SOURCE_FOLDER = "C:\\Workspace";

 // ZipFolder 생성
ZipFolder ZipFolder = new ZipFolder();

 // FileOutputStream 생성
FileOutputStream fos = new FileOutputStream(zipFile);

 // ZipOutputStream 생성
ZipOutputStream zos = new ZipOutputStream(fos);

 // ZipEntry 생성
ZipEntry ze= new ZipEntry(file);

 // FileInputStream 생성
FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file);

 // 읽은 파일 쓰기
zos.write(buffer, 0, len);


---- Compression.java
package com.redjava.java.io.Compression;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFolder {
 
   List<string> fileList;
   
     private static final String OUTPUT_ZIP_FILE = "C:\\Workspace\\folderfile.zip";
     private static final String SOURCE_FOLDER = "C:\\Workspace";
 
     ZipFolder(){
      fileList = new ArrayList<string>();
     }
 
     public static void main( String[] args )  {
      
      ZipFolder ZipFolder = new ZipFolder();
      ZipFolder.generateFileList(new File(SOURCE_FOLDER));
      ZipFolder.zipIt(OUTPUT_ZIP_FILE);
     }
 
     public void zipIt(String zipFile){
 
       byte[] buffer = new byte[1024];
       try{
       FileOutputStream fos = new FileOutputStream(zipFile);
       ZipOutputStream zos = new ZipOutputStream(fos);
  
       System.out.println("ZipFile : " + zipFile);
  
       for(String file : this.fileList){
        System.out.println("File 추가 : " + file);
        ZipEntry ze= new ZipEntry(file);
           zos.putNextEntry(ze);
  
           FileInputStream in = new FileInputStream(SOURCE_FOLDER + File.separator + file);
  
           int len;
           while ((len = in.read(buffer)) > 0) {
            zos.write(buffer, 0, len);
           }
  
           in.close();
       }
  
       zos.closeEntry();
       zos.close();
  
       System.out.println("압축이 완료되었습니다.");
   }catch(IOException ex){
      ex.printStackTrace();  
   }
    }

     public void generateFileList(File node){
   if(node.isFile()){
    fileList.add(generateZipEntry(node.getAbsoluteFile().toString()));
   }
  
   if(node.isDirectory()){
    String[] subNote = node.list();
    for(String filename : subNote){
     generateFileList(new File(node, filename));
    }
   }
 
     }

     private String generateZipEntry(String file){
      return file.substring(SOURCE_FOLDER.length()+1, file.length());
     }


}
</string></string>

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

-- ###################
-- 프로시져 생성
-- ###################

create or replace procedure pr_personal_annual
(
in_year in salary.year%TYPE,
in_no in emp.no%TYPE
)

is

v_emp_no emp.no%TYPE;
v_emp_name emp.name%TYPE;
v_dept_deptname dept.deptname%TYPE;
v_emp_position emp.position%TYPE;
v_sal_year salary.year%TYPE;
sal_n salay.annual%TYPE;
sal_l salay.annual%TYPE;
sal_d salay.annual%TYPE;

begin

select n.no,n.name,n.deptname,n.position,n.year,
n.annual,l.annual,n.annual-l.annual
into v_emp_no,v_emp_name,v_dept_deptname,v_emp_position,v_sal_year,
sal_n,sal_l,sal_d
from
(select emp.no,emp.name,annual,deptname,position,year
from emp,dept,salary sn
where emp.no=in_no and sn.no=in_no and emp.dept=dept.dept and year=in_year) n,
(select emp.no,emp.name,annual,deptname,position,year
from emp,dept,salary sn
where emp.no=in_no and sn.no=in_no and emp.dept=dept.dept and year=in_year-1) l;

DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');
DBMS_OUTPUT.PUT_LINE('emp no : ' || v_emp_no);
DBMS_OUTPUT.PUT_LINE('emp name : ' || v_emp_name);
DBMS_OUTPUT.PUT_LINE('dept : ' || v_dept_deptname);
DBMS_OUTPUT.PUT_LINE('position : ' || v_emp_position);
DBMS_OUTPUT.PUT_LINE('year : ' || v_sal_year);
DBMS_OUTPUT.PUT_LINE('cur annual : ' || sal_n);
DBMS_OUTPUT.PUT_LINE('last annual : ' || sal_l);
DBMS_OUTPUT.PUT_LINE('annual gap : ' || sal_d);
DBMS_OUTPUT.PUT_LINE('---------------------------------------------------');
DBMS_OUTPUT.PUT_LINE('no name dept posi year c_yr l_yr gap');
DBMS_OUTPUT.PUT_LINE('v_emp_no || ',' || v_emp_name || ',' || v_dept_deptname || ',' ||
v_emp_position || ',' || v_sal_year || ',' || sal_n || ',' ||
sal_l || ',' || sal_d);

EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('해당 데이터가 없습니다!');


END;
/


-- 프로시져 실행
SQL> set serveroutput on
SQL> execute pr_personal_annual('2006','1')
SQL> set serveroutput off

 

* 출처 : http://www.redjava.co.kr

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,

 

Oracle View(뷰) 의 생성 및 사용

 

VIEW 란 무엇인가?

하나또는 하나이상의 테이블로부터 데이터의 부분집합을 논리적으로 표현하는것으로 실제
데이타를 가지고 있는것이 아니라 해당 데이타의 결과를 하나의 SQL 쿼리 정보로 가지고
있습니다.


※ VIEW는 생성시 SQL쿼리문(SELECT * FROM TABLE) 형태로 저장이 됩니다.

※ 뷰테이블이란 표현은 잘못된 표현입니다. 뷰쿼리가 맞는 표현입니다.


VIEW 의 장점과 단점

뷰를 사용하면 코딩 라인이 짧아지고 결과에 대한 오류 발생시 빠르게 대응 할수 있다는 장점을
갖고 있습니다. 뷰는 상수값을 받지 못합니다. 즉, parameter 값을 받을수 없어 Scan 범위를 줄일수 없습니다.


VIEW 사용의 목적

데이터베이스 액세스를 제한하기위해
view는 선택적인 내용을 보여주기 때문에 액세스를 제한합니다.

복잡한 질의를 쉽게 만들어 준다.

group나 order by와 같은 복잡한 질의의 정보를 view로 저장시켜놓으면 다음부터는 view의 정보만 가져오면 되므로 쉽게 사용가능하다.

데이터의 독립성을 허용하기 위해 다양하고 빠른 조회를 위해 사용

테이블의 수를 줄이고 성능향상을 가져온다.


VIEW 사용시점

해당 프로젝트에서 관리차원이나 유지보수차원을 중요시 여긴다면 VIEW를 사용하는게 좋다.


VIEW의 종류


1. 단순뷰

 하나의 TABLE에서 뽑아오며 함수를 사용안한다.
 DML(INSERT,UPDATE,DELETE)사용 가능

2. 복합뷰

 하나이상의 TABLE에서 뽑아오며 함수를 사용합니다.
 DML(INSERT,UPDATE,DELETE)사용 불가능

[예제]

CREATE OR REPLACE VIEW AAA AS
 SELECT
 D.DNAME,
 MIN(E.SAL),
 MAX(E.SAL),
 AVG(E.SAL)
 FROM EMP E , DEPT D
 WHERE E.DEPTNO=D.DEPTNO
 GROUP BY D.DNAME;


VIEW 생성하기

사용방식

CREATE [OR REPLACE] VIEW VIEW_NAME AS QUERY_STRING [WITH READ ONLY];

주의할점

1. QUERY_STRING 에는 ORDER BY절 빼고 모두 사용가능하다.
2. "OR REPLACE" 옵션을 사용하게되면 생성할 VIEW와 같은 VIEW_NAME이 있어도 무시하고 새로운것으로 갱신하게 됩므로 주의하여 사용해야 합니다.
3. "WITH READ ONLY" 옵션을 사용하게 되면 해당 VIEW 에 DML 언어를 사용할수 없으며 DML 언어를 사용하게되면 에러가 발생합니다.


사용예제 :
CREATE VIEW VIEW1 AS
 SELECT NAME, AGE, ADDRESS
 FROM SCHOOL
 WHERE NAME = '이준식';
CREATE OR REPLACE VIEW LEE AS
 SELECT * FROM DEPT;


CREATE OR REPLACE VIEW LEE AS
 SELECT * FROM DEPT
WITH READ ONLY;


 VIEW에 DML한후의 반응


VIEW을 생성후 INSERT을 하게되면 VIEW에는 안들어가지고 원본 TABLE에 입력된다.
VIEW을 생성후 UPDATE을 하게되면 VIEW는 데이타가 없어지면서 원본 TABLE내용이 갱신된다.


뷰는 실테이블을 적당히 가공하여 보여주는 역할을 합니다.
실제 테이블의 자료를 보기 위한 하나의 틀 정도로 생각하시면 됩니다.
뷰중에는 자료 입력,수정,삭제가 가능한 뷰도 있습니다.
뷰의 자료를 수정하게 되면 실제 테이블의 자료가 수정되는 것입니다.
테이블이 수정되면 뷰 또한 수정된 값을 보여줍니다.


VIEW 지우기

사용형식 : DROP VIEW VIEW_NAME;

사용예제 : DROP VIEW EXAMPLE1;


생성된 VIEW보기


SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE='VIEW';


인라인 뷰란?


SQL문에서 사용가능한 별칭을 사용하는 서브쿼리입니다.
인라인뷰는 기본 질의의 FROM절에 명명된 서브쿼리를 사용하는것과 유사합니다.
Oracle 7.1 이상에서 사용가능하다.

※ 단점 : 인라인뷰를 사용한다는것은 가상메모리를 더 사용한다는 것이다.

※ 대용량에서 인라인뷰를 출력항목에 사용하게되면 성능이 많이 떨어진다. 왜냐하면
   조회되는 건수만큼 인라인뷰가 실행되기 때문이다.

ex)

 SELECT (SELECT NAME FROM MEMBER) AS NAME FROM TRADE;


인라뷰를 응용한 Top-N 분석

 회사에서 월급많이 받는 3명뽑아라
 회사에서 가장 최근에 입사한 직원 3명뽑아라

 사용형식:

SELECT COLUMN_LIST ,ROWNUM FROM
 (SELECT COLUMN_LIST FROM TABLE ORDER BY TOP_N_COLUMN)
 WHERE ROWNUM<=N;

사용예제:

SELECT * FROM
 (
 SELECT * FROM DEPT ORDER BY DNAME
 )
 WHERE ROWNUM <= 3;

 
VIEW의 내부 동작

1. VIEW 생성

CREATE VIEW TEST_VIEW AS SELECT NAME, AGE FROM MEMBER WHERE AGE > 5;

2. VIEW 갱신명령

UPDATE TEST_VIEW SET AGE = AGE + 10 WHERE NAME = 'JUNSIK';

3. VIEW 내부적 변환

UPDATE MEMBER SET AGE = AGE + 10 WHERE NAME = 'JUNSIK' AND AGE > 5;


※ VIEW에 갱신명령을 내리면 겉으로는 2번과 같이 처리되는것 처럼 보이지만 DBMS가 명령을
   받은후에 3번과 같이 변환후 실행한다.

서로 다른계정에서 View 접근권한

create or replace view test
 as
 select * from uer.temp
 where deptid =11;

위의 명령을 A계정에서 할경우 당연히 권한이 없다고 나온다. 이때는 SYSTEM 계정에서
A계정에 uer.temp 테이블에 대한 SELECT 권한을 주면 된다.
그리고 SYSTEM계정으로 접속을 해도 권한이 없으면 다른 유저의 자료는 액세스 할수 없다.

 

블로그 이미지

슬픈외로움

개발이 어려워? 모든것엔 답이있다...

,