'분류 전체보기'에 해당되는 글 2491건

  1. 2009.04.07 Javascript 에서 알아야할 기초사항
  2. 2009.04.07 프로젝트 나가서 주로 공통으로 쓰는 javascript common.js 내용
  3. 2009.04.07 Log4sql 설치와 쿼리의 실제 내용을 log로 볼수 있는 방법
  4. 2009.04.07 자바에서 C/C++ 사용하기
  5. 2009.04.07 [String 비교하기] .equals()와 ==은 다른가요?
  6. 2009.04.07 System.out.println()은 잊어라 log4sql이 온다.
  7. 2009.04.06 Oracle9i Dataguard 구성 방법
  8. 2009.04.06 tns/listener 설정하기
  9. 2009.04.06 query를 수행하는 두가지 방법
  10. 2009.04.06 connection pool 만들기
  11. 2009.04.06 WAS에 대해서 모든 것을 말한다.
  12. 2009.04.06 자바스크립트 옆에는 <noscript>를 넣자
  13. 2009.04.06 [java]File에 이어쓰기
  14. 2009.04.06 클래스 PrintWriter 1
  15. 2009.04.06 KADO-WAH 2.0 (웹 접근성 평가도구)
  16. 2009.04.04 [펌] 이클립스(Eclipse) 사용법
  17. 2009.04.04 Flex 링크
  18. 2009.04.04 [Oracle] 언어설정 변경 charset
  19. 2009.04.04 GET POST 방식 깔끔 정리
  20. 2009.04.04 HTML Codes
  21. 2009.04.04 oracle 페이지당 10개씩 게시물 확인
  22. 2009.04.04 oracle 파일구조
  23. 2009.04.04 oracle 윈도우 환경에서 메모리 설정하기
  24. 2009.04.04 리스너가 실행 중인지 확인하는 방법
  25. 2009.04.04 tns/listener 설정하기
  26. 2009.04.04 startup/shutdown immediate
  27. 2009.04.04 oracle 설치시 ModName: ntdll.dll 문제 1
  28. 2009.04.04 솔라리스에 오라클 설치하기 (9i)
  29. 2009.04.03 벨로시티(velocity)에서 브라우저 캐쉬없애기
  30. 2009.04.03 location.replace() 와 location.href 의 차이
반응형

DOM 객체의 기본 구조도를 알아야한다. 이객체들이 어디에 속해있는지 표를 보고 알아야할것이다


1.
내장함수

(1) 내장메시지 함수

alert("Hello."); confirm("정말로 삭제할껴?"); prompt(메시지, 초기값);

 

(2) 일반내장 함수

isFinite(number) : number한수이면 true, 아니면 false를 리턴

isNaN(value) : value가 순수한 문자이면 true, 숫자형태의 문자이면 false를 리턴

number(obj) : obj를 숫자로 변환하여 리턴

string(obj) : obj를 문자로 변환하여 리턴

eval(수식문자열 또는 Object 문자열) : 수식을 처리한 결과를 리턴, Object로 변환하여 리턴

parseInt(문자열, [진수]) : 문자열을 정수로 변환하여 리턴

parseFloat(문자열) : 문자열을 float-실수형으로 변환하여 리턴

escape(string) : ASCII 스트링을 URL로 인코딩

unescape(string) : ASCII 스트링을 URL로 디코딩

encodeURI(string) : 주어진 문자열을 URI encoding 한다.

decodeURI(string) : 주어진 문자열에서 encoding URI decoding 한다.

encodeURIComponent(string) : 주어진 문자열을 URI encoding 한다.

decodeURIComponent(string) :  주어진 문자열에서 encoding URI decoding 한다.

 

(3) 문자인코딩 함수

encodeURI() / decodeURI() : 다음문자만 인초딩한다  è  ; / ? : @ & = + $ , - _ . ! ~ * ' ( ) #

encodeURIComponent() / decodeURIComponent() :

알파벳과 숫자 Alphanumeric Characters 외의, 대부분의 문자를 모두 인코딩한다.

escape() / unescape() : encodeURI() encodeURIComponent() 의 중간 정도의 범위로 문자 인코딩

 

2. 내장 객체

(1) Object 객체

var book = new Object(); // empty Object --> var book = {};

book.title = "내장객체";

book.author = "kspark";

book.published_date = new Array('2006', '2007');

book.getInformation = function() { return this.title + ", " + this.author; }

 

function DisplayPropertyNames(obj){

             var names = "";

             for( var name in obj ) names += name + "\n";

             alert(names);

             alert(obj.getInformation());

}.

 

(2) Function 객체 : 함수 객체, 객체변수 = new Function([매개변수 리스트], 함수의 처리 내용)

var square = function(x) { return x*x }

var sports = new Object();

sports.soccer = new Function('var name = "soccer"; return name;');

var sum = new Function( "x", "y", "return x+y" );

function execute(){

   alert( "Sports name : " + sports.soccer() );

   alert( "sum : " + sum(5,10) );

}

 

(3) Array 배열 객체

length 속성, join(문자열),reverse(),sort(compareFunction),slice(시작위치,종료위치),concat(배열객체)

var list = new Array();

 

(4) Date 날짜 객체

var date = new Date();

 

getDate, getDay, getFullYear, getHours, getMilliseconds, getMinutes, getMonth,

getSeconds, getTime,  getTimezoneOffset, getUTCDate, getUTCDay,

getUTCFullYear, getUTCHours, getUTCMilliseconds, getUTCMinutes,

getUTCMonth, getUTCSeconds, getYear, parse, setDate, setFullYear, setHours,

setMilliseconds, setMinutes, setMonth, setSeconds, setTime, setUTCDate,

setUTCHours, setUTCMilliseconds, setUTCMinutes,  setUTCMonth, setUTCSeconds,

setYear, goGMTString, toLocaleString, toString, toUTCString, UTC, valueOf

 

(5) String 객체

문자열 조작 메소드

toLowerCase(), toUpperCase(), charAt(인덱스), substring(인덱스1, 인덱스2), slice(인덱스1, 인덱스2),

substr(시작인덱스, 길이), indexOf(문자열), lastIndexOf(문자열), concat(문자열), split(분리자, [개수]), charCodeAt([인덱스]), fromCharCode(숫자)

 

글자 모양을 변경하는 메소드

big(), small(), blink(), bold(), fixed(), italics(), strike(가운데줄), sub(아래첨자),sup(위첨자),

fontcolor(""), fontsize(크기)

 

위치 이동하는 메소드

anchor("책갈피명"), link("이동위치");

 

var str = "Hello! David";

str.slice(6, str.length);   str.link(#david);

 

(6) 수학관련 객체 Math : 각종 수학적 계산을 돕는 Math 객체

Math.PI, Math.sin(x), Math.abs(x), Math.max(x,y)

 

(7) 수치관련 객체 Number

수치 형태의 문자열을 수치 데이터로 변환하는 객체, new Number(수치 형태의 문자열);

var Ten = new Number("10");

 

(8) 논리형 객체 Blooean : 논리 객체, new Boolean(논리값);

 

(9) 스크린 화면 객체 Screen : Screen.availWidth, availHeight(화면의 실제 너비, 높이 ),

Screen.width, height(스크린 실제 너비, 높이), pixelDepth(익스플로워 지원안됨),

colorDepth(사용가능색상수)

 

(10) Event : 이벤트 객체

이벤트 함수의 종류

Abort (onAbort) : 문서를 읽다가 중단시켰을때(브라우저에서 멈춤을 눌렀을때)

Blur (onBlur) : 사용자가 입력을 포커스를 원도우나 입력양식 요소에서 제거했을때

Click (onClick) : 사용자가 입력 양식의 요소나 링크를 클릭 했을때

Change (onChange) : 사용자가 요소의 값을 바꾸었을 때

DblClick (onDblclk) : 사용자가 입력 양식의 요소나 링크를 더블 클릭 했을때

DragDrop (onDragDrop) : 마우스를 드래그 하는 순간 발생

Error (onError) : 문서나 이미지를 읽는 중에 강제로 중지하는 순간 발생

Focus (onFocus) : 사용자가 입력 포커스를 원도우나 입력 양식의 요소로 이동했을 때

KeyDown (onKeyDown) : 사용자가 키를 눌렀을때

KeyPress (onKeyPress) : 사용자가 키를 누르고 있을때

KeyUp( onKeyUp) : 사용자가 눌렀던 키를 놓았을때

Load(onLoad) : 브라우저에서 문서을 읽었을때

MouseDown(onMouseDown) : 마우스를 누르는 순간 발생함

MouseMove(onMouseMove) : 마우스가 움직일 때

MouseOver(onMouseOver) : 사용자가 link anchor위로 마우스로 옮겼을때

MouseOut(onMouseOut) : 마우스가 특정 영역 안에 있다가 나갔을때

MouseUp(onMouseUp) : 마우스 커서를 이미지 맵이나 링크 위에서 내려 놓을 때

Move(onMove) : 윈도우나 프레임의 위치가 이동되는 순간 발생

Reset (onReset) : 사용자가 입력 양식을 초기화 했을 때

 

이벤트에서 발생하는 객체들의 종류이며 , 네스케이프와 익스플로어의 경우를 따로 분리했다.

[네스케이프  에서의 이벤트 객체]

data : DragDrop 이벤트로 인해 드롭된 객체의 URL이 들어있는 스트링 배열

height, width : 윈도우나 프레인의 길이와 너비(픽셀표시)

pageX, pageY : 픽셀로 나타낸 커서의 수평/수직 위치(페이지에서의 상대적위치)

screenX, screenY : 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)

layerX, layerY : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 레이어에 대한 상대적 위치.

target : 이벤트가 전송된 원래 객체

type : 발생한 이벤트 유형

which : 눌려진 마우스 버튼(left:1, middle:2, right:3)이나 눌려진 키의 ASCII

modifiers : 마우스나 키 이벤트와 연관된 수정자 키

(ALT_MASK,CONTROL_MASK,SHIFT_MASK,META_MASK) 를 식별

 

[익스플로어 에서의 이벤트 객체]

screenX, screenY : 픽셀로 나타낸 커서의 수평/수직 위치(화면에서의 상대적 위치)

clientX, clientY : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 웹페이지에서의 상대적 위치

offsetX, offsetY : 픽셀로 나타낸 커서의 수평/수직 위치,이벤트가 발생한 컨테이너에 대한 상대적 위치

X, Y : 픽셀로 나타낸 커서의 수평/수직 위치, 이벤트가 발생한 문서에 대한 상대적 위치

srcElement : 이벤트가 전송된 원래 객체

type : 발생한 이벤트 유형

keyCode : 키 누름과 연관된 Unicode 키 코드를 식별

button : 이벤트가 발생했을 때 눌려진 마우스 버튼 식별(0:눌려진버튼없음, 1:, 2:, 4:)

altkey,ctrlkey,shiftkey : true false로 설정하여 이벤트가 발생했을 때 Alt키와 Control, Shift 키 중에 어떤 것이 눌려졌는지 알려준다.

cancelBubble : true false로 설정하여 이벤트 버블링을 취소하거나 활성화한다.

fromElement, toElement : 이동 중인 HTML 요소 지정

reason : 데이터 소스 객체에 대한 데이터 전송 상태를 나타내는데 사용

returnValue : true false로 설정하여 이벤트 핸들러의 리턴값을 나타낸다. 이벤트 핸들러에서 true false를 리턴하는 것과 같다.

 

위에서 열거한 이런 내용을 암기는 하지 못하더라도 모두 이해하고 어떤경우에 쓰이는지를

파악하고 있어야하겠다. 자바스크립트를 사용하는 사람들의 가장 기본적으로 갖추어야 하는 지식이다.



출처 : http://mainia.tistory.com/entry/Javascript-에서-알아야할-기초사항

Posted by 1010
반응형
프로젝트에 나가 주로 쓰이는 자바스크립트 함수를 모아 놓은것이다. 필요하다 싶으면 이 페이지에
업데이트하여 필요할때 복사해 쓸 작정이다.

 

/**

 * 입력값이  null 인지 체크한다

 */

function isNull(input){

       if (input.value == null || input.value == ""){

             return true;

       }else{

             return false;

       }

}

/**

 * 입력값이 스페이스 이외의 의미있는 값이 있는지 체크한다

 * if (isEmpty(form.keyword)){

 *       alert('값을 입력하여주세요');

 * }

 */

function isEmpty(input){

       if (input.value == null || input.value.replace(/ /gi,"") == ""){

             return true;

       }else{

             return false;

       }

}

/**

 * 입력값에 특정 문자가 있는지 체크하는 로직이며

 * 특정문자를 허용하고 싶지 않을때 사용할수도 있다

 * if (containsChars(form.name, "!,*&^%$#@~;")){

 *       alert("특수문자를 사용할수 없습니다");

 * }

 */

function containsChars(input, chars){

       for (var i=0; i < input.value.length; i++){

             if (chars.indexOf(input.value.charAt(i)) != -1){

                    return true;

             }

       }

       return false;

}

/**

 * 입력값이 특정 문자만으로 되어있는지 체크하며

 * 특정문자만을 허용하려 할때 사용한다.

 * if (containsChars(form.name, "ABO")){

 *    alert("혈액형 필드에는 A,B,O 문자만 사용할수 있습니다.");

 * }

 */

function containsCharsOnly(input, chars){

       for (var i=0; i < input.value.length; i++){

             if (chars.indexOf(input.value.charAt(i)) == -1){

                    return false;

             }

       }

       return true;

}

/**

 * 입력값이 알파벳인지 체크

 * 아래 isAlphabet() 부터 isNumComma()까지의 메소드가 자주 쓰이는 경우에는

 * var chars 변수를 global 변수로 선언하고 사용하도록 한다.

 * var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 * var lowercase = "abcdefghijklmnopqrstuvwxyz";

 * var number = "0123456789";

 * function isAlphaNum(input){

 *       var chars = uppercase + lowercase + number;

 *    return containsCharsOnly(input, chars);

 * }

 */

function isAlphabet(input){

       var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

       return containsCharsOnly(input, chars);

}

/**

 * 입력값이 알파벳 대문자인지 체크한다

 */

 function isUpperCase(input){

       var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

       return containsCharsOnly(input, chars);

 }

/**

 * 입력값이 알파벳 소문자인지 체크한다

 */

function isLowerCase(input){

       var chars = "abcdefghijklmnopqrstuvwxyz";

       return containsCharsOnly(input, chars);

}

/**

 * 입력값이 숫자만 있는지 체크한다.

 */

function isNumer(input){

       var chars = "0123456789";

       return containsCharsOnly(input, chars);

}

/**

 * 입려값이 알파벳, 숫자로 되어있는지 체크한다

 */

function isAlphaNum(input){

       var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

       return containsCharsOnly(input, chars);

}

/**

 * 입력값이 숫자, 대시"-" 되어있는지 체크한다

 * 전화번호나 우편번호, 계좌번호에 -  체크할때 유용하다

 */

function isNumDash(input){

       var chars = "-0123456789";

       return containsCharsOnly(input, chars);

}

/**

 * 입력값이 숫자, 콤마',' 되어있는지 체크한다

 */

function isNumComma(input){

       var chars = ",0123456789";

       return containsCharsOnly(input, chars);

}

/**

 * 입력값이 사용자가 정의한 포맷 형식인지 체크

 * 자세한 format 형식은 자바스크립트의 'reqular expression' 참고한다

 */

function isValidFormat(input, format){

       if (input.value.search(format) != -1){

             return true; // 올바른 포멧형식

       }     

       return false;

}

/**

 * 입력값이 이메일 형식인지 체크한다

 * if (!isValidEmail(form.email)){

 *       alert("올바른 이메일 주소가 아닙니다");

 * }

 */

function isValidEmail(input){

       var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/;

       return isValidFormat(input, format);

}

/**

 * 입력값이 전화번호 형식(숫자-숫자-숫자)인지 체크한다

 */

function isValidPhone(input){

       var format = /^(\d+)-(\d+)-(\d+)$/;

       return isValidFormat(input, format);

}

/**

 * 입력값의 바이트 길이를 리턴한다.

 * if (getByteLength(form.title) > 100){

 *    alert("제목은 한글 50 (영문 100) 이상 입력할수 없습니다");

 * }

 */

function getByteLength(input){

       var byteLength = 0;

       for (var inx = 0; inx < input.value.charAt(inx); inx++)     {

             var oneChar = escape(input.value.charAt(inx));

             if (oneChar.length == 1){

                    byteLength++;

             }else if (oneChar.indexOf("%u") != -1){

                    byteLength += 2;

             }else if (oneChar.indexOf("%") != -1){

                    byteLength += oneChar.length / 3;

             }

       }

       return byteLength;

}

/**

 * 입력값에서 콤마를 없앤다

 */

function removeComma(input){

       return input.value.replace(/,/gi,"");

}

/**

 * 선택된 라디오버튼이 있는지 체크한다

 */

function hasCheckedRadio(input){

       if (input.length > 1){

             for (var inx = 0; inx < input.length; inx++){

                    if (input[inx].checked) return true;

             }

       }else{

             if (input.checked) return true;

       }

       return false;

}

/**

 * 선택된 체크박스가 있는지 체크

 */

function hasCheckedBox(input){

       return hasCheckedRadio(input);

}



Posted by 1010
반응형

Log4sql 설치와 쿼리의 실제 내용을 log로 볼수 있는 방법
ORM 이나 Spring JDBC 등을 통해서 쿼리를 날리게 되면 로그로 쿼리의 조합된 모양을 보기가
상당히 힘들다. 그리고 log4sql 를 중간에 설치해 쿼리의 내용을 로그로 찍어줄수가 있다.

사이트 : http://log4sql.sourceforge.net
한국 국기를 클릭하면 한글 사이트로 번역이 된다.
 


다운받은 파일을 열게 되면 log4sql.jar, log4sql_conf.jsp있다.
log4sql.jar 라이브러리 폴더에 넣으면 되고 , jsp 페이지는 설정값을 변경할수 있는 방법을 제공한다.

다음은 프로젝트 파일에서 설정값을 변경한다.
Jdbc driverClassName 설정값을 변경해야되는데 그 값은 value 값을
core.log.jdbc.driver.OracleDriver 설정하면된다. Log4jsql.jar열어보면 여러종류의 드라이버가
있으니 그에 맞는 클래스를 선택하면된다.



Jdbc connect 정보를 설정한 곳에 보통 xml 파일에 설정이 되어있는데
<
property name="driverClassName" value="core.log.jdbc.driver.MssqlDriver"/>
<property name="url" value="jdbc:microsoft:sqlserver://xxx.xxx.xxx.xxx:1433;DatabaseName=spring"/>
<property name="username" value="xxxxx"/>
<property name="password" value="xxxxx"/>

아래그림과 같이 elapsed time 처럼 쿼리가 걸리는 시간도 찍히게 된다

Posted by 1010
01.JAVA/Java2009. 4. 7. 11:08
반응형

출처 : http://sinuk.egloos.com/2676307

1. JNI (Java Native Interface) 란 ?

- 자바가 다른 언어로 만들어진 어플리케이션과 상호 작용할 수 있는 인터페이스를 제공한다.

- 자바가상머신(JVM)이 원시 메소드(native method)를 적재(locate)하고 수행(invoke)할 수 있도록 한다

- JNI가 자바가상머신내에 포함됨으로써, 자바가상머신이 호스트 운영체제상의 입출력, 그래픽스, 네트워킹, 그리고 스레드와 같은 기능들을 작동하기 위한 로컬시스템호출(local system calls)을 수행할 수 있도록 한다.

* 쉽게 말해 Java와 다른 언어를 연동하는 솔루션입니다.


[그림1] C로 만들어진 Library와 JAVA를 연결해주는 JNI




2. Why do you need JNI ?


자 바 네이티브 메쏘드(Java Native method, 이하 JNI)는 다른 언어로 작성된 코드를 자바에서 호출하도록 만들어진 규약이다. 현재는 C/C++에 대한 호출만을 정확하게 지원한다. 어떻게 보면 JNI는 자바가 만들어진 철학과 정반대되는 것이다.


그러나. Java에도 한계가 있다.


1. 속도 문제가 있는 계산 루틴
 > 자바가 Native Code(플랫폼에 종속적인 기계어 코드)에 비해 느리다.

2. 자바에서 하드웨어 제어

3. 자바에서 지원되지 않은 특정 운영체제 서비스
 > 자바의 클래스 라이브러리는 방대하고 다양한 서비스를 제공하지만, 특정 플랫폼에서 제공하는 고유의 서비스의 기능을 모두 포함할 수는 없다. 특히, 특수한 목적으로 제작된 하드웨어를 자바에서 제어해야 할 필요가 있다고 한다면, 자바만으로 해결하기는 힘들다.

4. 기존의 프로그램에서 자바가 제공하는 서비스를 이용
 > 기존에 작성된 프로그램이나 기존의 시스템(legacy)과의 연계 문제


∴ JNI를 써서 해결해보자.



3. C를 이용한 JNI 예제

VC++을 이용해 C문법으로 작성되어 만들어진 DLL을 로딩하여 Java에서 사용해보겠습니다.


1단계 : Native Method를 선언하는 자바 클래스 작성
2단계 : 1단계에서 작성한 클래스 컴파일
3단계 : javah를 사용해서 Native Method가 사용할 헤더 파일 생성
4단계 : C언어로 Native Method 실제 구현
5단계 : C 코드와 헤더 파일을 컴파일
6단계 : 자바 프로그램 실행


 

1단계 : Native Method를 선언하는 자바 클래스 작성

Java 소스 파일 : HelloJni_Jsource.java


import java.util.*;

class HelloJniClass {
   native void Hello();

  static {  System.loadLibrary("Hello_DLL");   }

  public static void main(String args[]) {   
      HelloJniClass myJNI=new HelloJniClass();
      myJNI.Hello();
   }
}


// 아래는 좀 위의 내용 보충 그림





2단계 : 1단계에서 작성한 클래스 컴파일



* 컴파일시에는 일반 java 컴파일때와 마찬가지로 환경변수 셋팅이 되어 있어야 합니다.
 -> Path가 JDK의 Javac.exe가 있는 폴더에 설정되어 있어야 합니다.



3단계 : javah를 사용해서 Native Method가 사용할 헤더 파일 생성


HelloJniClass.h을 열어보면

JNIEXPORT void JNICALL Java_HelloJniClass_Hello  (JNIEnv *, jobject);
위의 함수를 Implement만 해서 DLL을 만들면 됩니다. (4단계)


4단계 : C언어로 Native Method 실제 구현(1)

1) VC++ 프로젝트 만들기 : Win32용 DLL 프로젝트로 만듭니다.
New - Projects : Win32 Dynamic-Link Library

2) Add Files Projects : HelloJniClass.h 파일 추가

3) Projects Setings(Alt+F7)
   - Link탭에 Output file Name : 1단계의 2. 라이브러리 적재시 작성한 DLL파일명(Hello_DLL.dll)
   - C/C++탭 Preprocessor 카테고리의 Additional Include directories
       JDK의 Include폴더와 Include폴더 밑의 win32폴더

          예) C:\Program Files\Java\jdk1.5.0_03\include\,
             C:\Program Files\Java\jdk1.5.0_03\include\win32




 


4. 값의 전달과 리턴

 

1단계 : Java 소스 파일 StringPass_Jsource.java
* 일반 자바 메쏘드 선언과 동일합니다.

class JNI_Message {
   native byte[] Message(String input);

  // 라이브러리 적재(Load the library) 

  static {
    System.loadLibrary("Msg_DLL");
  }


  public static void main(String args[]) {   
 byte buf[];

    // 클래스 인스턴스 생성(Create class instance)
    JNI_Message myJNI=new JNI_Message();

    // 원시 메소드에 값을 주고 받음
    buf = myJNI.Message("Apple");
 
 System.out.print(buf); // 받은값 출력
 }
}



2단계 : 컴파일
 javac StringPass_Jsource.java


3단계 : header파일 생성
 javah JNI_Message


4단계 : method구현 : StringJNIDLLSource.c

#include <stdio.h>
#include <jni.h>
#include <string.h>
#include "JNI_Message.h"

JNIEXPORT jbyteArray JNICALL Java_JNI_1Message_Message (JNIEnv * env, jobject jobj, jstring input)
{
    jbyteArray jb;
    jboolean iscopy;
    char* buf;
    static char outputbuf[20];

    buf=(*env)->GetStringUTFChars(env, input, &iscopy);  // 입력 String 읽어오는 함수
    printf ("\nDLL receive Data from JAVA : %s\n",buf);   // 입력받은 내용을 출력
    strcpy(outputbuf,"Delicious !!\n");
    jb=(*env)->NewStringUTF(env, outputbuf);  // 출력할 내용의 java버퍼에 output버퍼값을 셋팅

   return(jb); // java버퍼 리턴
}



(*env)->함수명 형태로, JAVA의 메쏘드를 C에서 이용할수 있습니다.
* JAVA는 C로 문자열을 넘겨줄때 UTF-8형태를 사용합니다.



5단계 : 실행

C:\test\C_JNI\Paramerter Pass>java JNI_Message

DLL receive Data from JAVA : Apple
Delicious !!





5. KVM ? KNI ?

KVM은 J2ME의 일부로서 작고 자원이 한정된 기계장치를 위해 설계된 소형 JVM.
JVM에서는 JNI가 KVM의 KNI가 있다.


 

6. 기타프로그래밍 이슈들
참고 URL :http://www.javastudy.co.kr/docs/jhan/javaadvance/jni.html

언어적 이슈(Language Issues)
메소드 호출(Calling Methods)
필드의 참조(Accessing Fields)
스레드와 동기화(Threads and Synchronization)
메모리 이슈(Memory Issues)
수행(Invocation)
스레드 연결(Attaching Threads)

Posted by 1010
01.JAVA/Java2009. 4. 7. 11:05
반응형
우리는 코딩을 하면서 String을 비교할 때 무의식적으로 아래와 같이 코딩을 합니다.
  1.  
  2. aString.equals(bString)  


 하지만 왜 String을 비교할 때만 이렇게 비교하는지 우리는 알고 코딩을 하고 있는 것일까? int, boolean, long 등은 == 로 비교를 하면서 String은 왜 다를까?

 지금부터  String을 비교할 때 .equals()와 == 이 어떻게 다른지 알아보자.

 일단 코드를 실행해보고 결과를 보면서 진행하겠습니다. 저는 백문이불여일견이라는 말을 좋아하거든요.^^
  1. public class Test {  
  2.  
  3.     /**  
  4.      * @param args  
  5.      */ 
  6.     public static void main(String[] args) {  
  7.         // TODO Auto-generated method stub  
  8.         new Test().testString();  
  9.     }  
  10.  
  11.     public void testString() {  
  12.         String a = "TEST";  
  13.         String b = "TEST";  
  14.         String c = new String("TEST");  
  15.         String d = new String("TEST");  
  16.         System.out.println("1:"+System.identityHashCode(a));  
  17.         System.out.println("2:"+System.identityHashCode(b));  
  18.         System.out.println("3:"+System.identityHashCode(c));  
  19.         System.out.println("4:"+System.identityHashCode(d));  
  20.         System.out.println("5:"+(a == b));  
  21.         System.out.println("6:"+a.equals(b));  
  22.         System.out.println("7:"+(c == d));  
  23.         System.out.println("8:"+c.equals(d));  
  24.     }  
  25. }  


위 코드를 실행해 보면 결과는 다음과 같이 나옵니다.

사용자 삽입 이미지

결과를 보면 a,b는 hashcode값이 같지만 c,d는 값이 다른 것이 보입니다.
그럼 이번엔 비교한 결과를 볼까요? a,b는 equals()로 비교를 하거나 ==로 비교를 해도 결과는 항상 true 입니다. 하지만 c,d는 equals() 비교를 하면 트루지만 ==로 비교를 하면 false죠.

왜 이런 결과가 나올까요?

 이런 결과가 나오는 이유는 equals()는 비교대상의 문자열 리터럴(값)을 비교하고 ==는 대상 객체를 비교하기 때문입니다. 또한 자바에서는 a,b처럼 같은 값을 가지면 하나의 메모리 주소를 참조하게 됩니다. 즉, a,b의 "TEST"라는 문자열 리터럴은 컴파일되면 String 객체가 되는데 a,b는 같은 메모리 주소를 가지게 됩니다. 하지만 c,d는 처음부터 별도의 String 객체로 생성되었기 때문에 동일한 "TEST"라는 문자열 리터럴을 가지지만 서로 다른 객체가 됩니다.
 무슨말인지 모르시겠다구요? 그럼 그림으로 한번 볼까요?
사용자 삽입 이미지
간단하게 정리하자면 a,b는 문자열 리터럴이 컴파일시에 자동으로 하나의 String 객체가 되고 b,c는 별도의 객체가되어서 문자열 리터럴(값)으로 비교를 하면 a,b,c,d 모두 같지만 객체로 비교를 하게 되면 (a,b),c,d의 3개의 객체가 되는 것입니다.

 여기서 이어지는 또다른 의문점... 프리미티브 타입과 Wrapper 클래스의 비교는 어떻게 될까요?
아래 코드를 한번 돌려 보세요. 8번까지는 위 내용과 비슷하지만 9번 결과는 어떻게 나올까요?
 다음에는 프리미티브 타입과 Wrapper 클래스, 자동 Boxing, 자동 UnBoxing에 대해서 알아 보도록 하겠습니다.

  1. package net.westzero;  
  2.  
  3. public class Test {  
  4.  
  5.     /**  
  6.      * @param args  
  7.      */ 
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         new Test().testInteger();  
  11.     }  
  12.      
  13.     public void testInteger() {  
  14.         int a = 1;  
  15.         int b = 1;  
  16.         Integer c = new Integer(1);  
  17.         Integer d = new Integer(1);  
  18.         System.out.println("1:"+System.identityHashCode(a));  
  19.         System.out.println("2:"+System.identityHashCode(b));  
  20.         System.out.println("3:"+System.identityHashCode(c));  
  21.         System.out.println("4:"+System.identityHashCode(d));  
  22.         System.out.println("5:"+(a == b));  
  23. //        System.out.println("6:"+a.equals(b));  
  24.         System.out.println("7:"+(c == d));  
  25.         System.out.println("8:"+c.equals(d));  
  26.         System.out.println("9:"+(a == c));  
  27.     }  
  28. }  




출처 : http://westzero.net/21?category=6
Posted by 1010
반응형
log4sql은 많이 알려지진 않았지만 상당히 유용한 sql 로거입니다. 만든 분은 송인섭이라는분인데 한국분이신것 같습니다.

 기존에 우리는 sql을 디버깅 하기 위해서 대부분 System.out.println()을 사용했습니다. log4j를 이용해서 sql을 콘솔에 찍기도 하고 jdbc관련 클래스를 만들어서 사용하는 경우에도 결국엔 System.out.println()을 사용하게 됩니다. 하지만 sql을 이렇게 콘솔로 표현하게 되면 여러가지 불편한 점들이 생깁니다.
 가장 큰 문제점이 바로 소스는 소스대로, 콘솔은 콘솔대로 가독성이 떨어지게 됩니다. 소스상에서 System.out을 사용하게되면 개발이 끝나도 운영에 들어가게되면 이 부분을 주석처리하거나 다른 설정을 하게됩니다.
 또한 콘솔에서 보여질때 sql을 소스상에서 들여쓰기를 해주지 않았다면 단순한 sql은 괜찮지만 복잡한 sql은 볼때마다 매번 들여쓰기를 해주어야 한다는 단점이 있습니다. log4sql은 이러한 문제를 해결하기 위해서 간단히 드라이버 설정만 바꿔주면 System.out.println()을 사용하지 않아도, 소스상에서 들여쓰기를 해주지 않아도 콘솔에 예쁘게 들여쓰기가 된 sql을 보여줍니다.

log4sql이 뭔가요?

간단하게 log4sql이 무엇인지 백번 설명을 하기보다는 한번 보는게 확실히 이해하기 쉬울꺼 같습니다.
사용자 삽입 이미지
저 노란색 박스안에 나타난 내용이 log4sql에서 자동으로 찍어준 내용입니다. sql이 실행된 시간과 실행된 메소드, sql이 실행되는데 소요된 시간, 실행된 sql을 자동으로 들여쓰기를 해서 보여주고 있습니다.

log4sql의 장점

1. 자동 들여쓰기
일반적으로 콘솔에 들여쓰기가 된 sql을 보려면 다음과 같은 코드를 작성해야 했습니다.
  1. StringBuffer  var11 = new StringBuffer();  
  2. var11.append("SELECT * \n");  
  3. var11.append(" FROM   emp \n");  
  4. var11.append(" WHERE  deptno = '30' \n");  

하지만 더이상 이런 부분은 신경 쓰지않아도 됩니다. log4sql을 사용한다면 말이죠.

2. 페이지 반응속도가 느리다구요?
log4sql은 쿼리가 실행되는데 걸린 시간을 표시해줍니다. 어느 부분이 느린지 어느 쿼리가 느린지 콘솔을 보기만 하면 알 수 있습니다.

3. 이 쿼리가 어디서 날린 쿼리지?
log4sql은 쿼리가 실행된 메소드도 표시해 줍니다. 하지만 쿼리를 날리는 클래스를 별도로 두고 해당 클래스를 이용해서 쿼리를 날리게 되면 log4sql도 어쩔수 없답니다.^^;;

어떻게 사용하나요?

간단합니다. JDBC 관련 설정에서 드라이버 설정만 바꿔주면 됩니다. 예를 들어 오라클을 사용하는 경우 기존에 'oracle.jdbc.drirver.OracleDriver' 드라이버를 사용했다면 'core.log.jdbc.driver.OracleDriver'로 바꿔주기만 하면 됩니다. 이제 log4sql을 사용할 준비가 된겁니다. 이제 WAS를 올리고 콘솔을 한번 보세요. sql이 깔끔하게 정리되어서 나타날꺼에요.^^
다른 디비를 사용하시는 경우에는 log4sql 홈페이지에서 확인하시면 됩니다.

다음에는 log4sql의 상세 설정에 대해서도 알아보도록 하겠습니다.



출처 : http://westzero.net/16
Posted by 1010
02.Oracle/DataBase2009. 4. 6. 15:58
반응형

Oracle9i Dataguard 구성 방법
2006년 1월 22일
민연홍(Oracle OCM), DBA LG카드 중형서버운영파트


미국의 911테러 이후 전세계 IT시스템의 화두는, 자연재해 또는 테러로 인해 서비스 손실을 입게 될 경우에도 이를 복구할 수 있는 Standby 시스템을 구축하는 것이 되었다. 서버뿐만 아니라 디스크 및 백업장비까지 손실되었을 경우에도 다른 지역에서 서비스를 기동할 수 있는 시스템 구성이 각광받게 된 것이다. 이러한 Standby시스템에서 오라클의 dataguard는 데이터 무손실을 구현할 수 있는 방법으로, 한국에서는 여러 금융기관에서도 사용하고 있다. 여기서는 dataguard에 대한 간단한 소개와 그 구성방법에 대해서 알아본다.

Part 1. dataguard 개요 및 아키텍처

  1) dataguard 란 무엇인가?
  2) switchover and failover
  3) standby DB의 종류
  4) dataguard의 서비스 종류
  5) protection mode
  6) dataguard의 시스템 구성(2가지 종류)

Part 2. standby DB 기동방법

Part 3. 시스템 구축 (실습)
  1) 리스너 설정 및 기동
  2) tnsnames.ora 설정
  3) 오라클 초기화 파라미터 설정
  4) primary DB를 online backup으로 standby DB 위치로 restore
  5) primary DB에서 standby control file을 생성해서 standby DB로 전송
  6) standby DB에서 사용할 control file을 배치
  7) standby DB 기동
  8) standby DB에 standby redo log file 생성
  9) primary DB에 standby redo log file 생성
  10) standby DB를 recovery managed mode로 기동
  11) log switch 적용
  12) primary DB 점검
  13) standby DB 점검
  14) primary DB 테이블스페이스 생성 및 데이터 입력
  15) standby DB예 데이터 입력 여부 확인
  16) takeover 하기
  17) 서비스 원복(takeover)
  18) failover 하기

PartⅠ. dataguard 개요 및 아키텍처

 1) dataguard 란 무엇인가?

   - primary DB와 standby DB를 동기화시켜, primary DB가 하드웨어 장애 등의 문제가 생겼을 경우 standby DB로 failover 또는
     switchover 시킬 수 있는 시스템 구성을 말한다.
   - Oracle Net을 통해서 primary DB의 변경정보를 standby DB로 적용시켜 운영된다.

      

 2) switchover and failover

   ① 자동실행이 아니라 DBA가 action을 취해야 한다.

   ② switchover
     - OS 작업 또는 서버 PM작업 시 사용(primary -> standby , standby -> primary)

   ③ failover
     - 디스크 fail 등 긴급상황에서 사용, dataguard 재구성 필요

 3) standby DB의 종류

   ① Physical standby database
     - block 대 block 기반으로 primary DB의 redo log를 적용시켜 standby DB를 동기화

   ② Logical standby database
     - 같은 schema 정의로 공유
     - primary DB의 sql 문장을 standby DB에 적용

 4) dataguard의 서비스 종류

   ① Log transport Services
     - primary DB에서 standby DB로 redo log 정보를 자동으로 전송

   ② Log Apply Services
     - redo log를 standby DB에 적용

   ③ Role Management Service
     - 데이터베이스는 primary/standby로 두 가지의 상대적으로 배타적인 role을 가진다.
       Role Management Service는 log transport service와 log apply service를 failover 또는 switchover의 상황에 동적으로
       변경할 수 있다.

 5) protection mode

   ① Maximum Protection - primary    DB와 standby DB의 redo log를 동기화 시킨다.
      standby DB가 네트워크 이상 등의 이유로 standby로의 전송이 안될 경우 primary DB를 halt시킨다.
      데이터는 서로 동기화되어 primary DB에서 commit을 하게 되면 standby DB에서 commit이 완료될 때까지 primary DB에서 commit 완료를 하지 않는다.
      성능에는 문제를 줄 소지가 있으나 failover 상황이 오더라도 데이터 손실은 없다. physical standby DB에만 가능하다.

   ② Maximum availability - Maximum Protection과 마찬가지로 primary DB와 standby DB를 동기화시킨다.
      단, standby DB가 네트워크 문제 등의 이유로 전송이 안될지라도 halt되지는 않는다.
      데이터는 maximum protection과 마찬가지로 primary DB에서 commit을 하게 되면 standby DB에서 commit이 완료될 때까지
      primary DB에서 commit 완료를 하지 않는다. 만약 standby DB가 unavailable상태일 경우 임시로 불일치 시킨다.
      또 다시 standby DB가 available하면 자동으로 동기화 시킨다. 성능에는 문제를 줄 소지가 있으나 failover 상황이 오더라도
      데이터 손실은 거의없다. physical standby, logical standby DB 모두 가능하다.

   ③ Maximum Performance - default protection mode이다. primary data에 대한 protection이 가장 낮다.
      primary database에 transaction이 수행되면 이것을 asynchronous 하게 standby DB에 적용한다.
      즉, maximum protection, maximum availability의 경우에는 standby DB에 적용(commit) 될 때까지 primary db의 transaction 이 적용(commit)되지 않았으나,
      Maximum Performance 모드에서는 비 동기화 시키므로 primary DB에서 standby DB가 transaction 적용이 끝날 때까지
      기다리지 않는다. 즉 standby db의 문제로 인해서 primary DB에 성능영향이 가지 않는다.
      단, failover시에는 약간의 데이터 손실을 가져올 수 있다.

 6) dataguard의 시스템 구성(2가지 종류)

  ① physical standby database 구성 (LGWR process를 사용한 Physical standby DB)
      Archiving to a Physical standby Destination Using the Logwriter Proces


      


     - primary db의 LGWR 프로세스가 standby DB로 redo log를 보내고, standby DB의 RFS 프로세스가 redo log를 standby redo
      log에 적용시킨다. archiving되면 archived redo logs가 되고 이것을 MRP process가 standby DB에 적용시킨다.

   ② logical standby DB 구성
     Archiving to a Logical standby Destination Using the Logwriter Process

      

     - logical standby DB는 primary DB에서 수행된 SQL문장을 LGWR프로세스가 standby DB로 보내고 RFS 프로세스가 받아서
      Archived redo logs에 쓴다. LSP (Logical standby process)가 standby DB에 적용시킨다.

     - primary DB에서 log switch가 일어나게 되면 standby DB의 RFS 프로세스에 이를 알려주어 log switch가 되도록 한다.

TOP
PartⅡ. standby DB 기동방법

  - 주의 standby db의 startup 방식을 보면 아래와 같다. 아래 그림을 기억해두면 편하다.
    

   ① standby DB를 read only mode에서 managed recovery mode로 변경
     - 그대로 명령 또는 shutdown immediate 이후 재기동

     - 첫번째 방법

      SQL> alter database open read only;
      SQL> recover managed standby database disconnect; 

     - 두번째 방법

      SQL> shutdown immediate 
      SQL> startup nomount
      SQL> alter database mount standby database;
      SQL> recover managed standby database disconnect;

   ② shutdown 에서 managed recovery mode 로 변경

      SQL> startup nomount
      SQL> alter database mount standby database;
      SQL> recover managed standby database disconnect;

   ③ managed recovery mode 에서 read only mode 로 변경

      SQL> recover managed standby database cancel;
      SQL> alter database open read only;

   ④ read only standby DB 에서 managed recovery mode로 변경
      (먼저 standby DB에 연결된 모든 세션을 종료)

      SQL> recover managed standby database disconnect;

     - 만약 유저의 세션 때문에 실패할 경우

      SQL> shutdown immediate
      SQL> startup nomount
      SQL> alter database mount standby database;
      SQL> recover managed standby database disconnect;

TOP
PartⅢ. 시스템 구축 (실습)

  - 실습에서 사용 할 primary DB 이름은 MIN 이고, standby DB 이름은 STBY 이다.
  - 여기서는 하나의 서버에서 2개 DB를 구성하는 방법으로 수행한다.
  - 서로 다른 두 대의 서버에서도 같은 방법으로 구성 할 수 있다.
  - primary DB는 /data1/oradata/MIN에 구성되어 있다.
  - standby DB는 /data1/oradata/STBY에 구성되어 있다.

 1) 리스너 설정 및 기동

  아래와 같은 네트워크 설정을 해준다. 각 서버마다 설정해준다.
    - MIN DB에서 설정(primary DB)

vi $ORACLE_HOME/network/admin/listener.ora
smsvr1_MIN =
   (ADDRESS_LIST =
         (ADDRESS= (PROTOCOL= TCP)(Host= smsvr1)(Port=2001))
   )
SID_LIST_smsvr1_MIN =
 (SID_LIST =
   (SID_DESC =
     (ORACLE_HOME= /u/pkg/oracle/product/9.2.0)
     (SID_NAME = MIN)
   )
 )



  -STBY DB 에서 설정(physical standby DB)

vi $ORACLE_HOME/network/admin/listener.ora
smsvr1_STBY =
   (ADDRESS_LIST =
         (ADDRESS= (PROTOCOL= TCP)(Host= smsvr1)(Port=2002))
   )
SID_LIST_smsvr1_STBY =
   (SID_LIST =
    (SID_DESC =
     (ORACLE_HOME= /u/pkg/oracle/product/9.2.0)
    (SID_NAME= STBY)
   )
  )

 2) tnsnames.ora 설정

  tnsnames.ora 파일을 설정한다. 서로 네트워크가 가능하도록 하는데 이름을 재대로 써야 한다.
  초기화 파라미터에서 log_archvie_dest_2='service=STBY LGWR SYNC AFFIRM' 일 경우
  STBY는 tnsnames.ora 에서의 접속이름을 말한다.

- MIN DB 설정 primary DB에서 설정 ( standby DB로 가는 네트워크 구성)

vi $ORACLE_HOME/network/admin/tnsnames.ora
STBY =
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL= TCP)(Host= smsvr1)(Port= 2002))
     (CONNECT_DATA = (SID = STBY))
  )



- STBY DB 설정, standby DB에서 설정 (primary DB로 가는 네트워크 구성)

vi $ORACLE_HOME/network/admin/tnsnames.ora
MIN=
  (DESCRIPTION =
     (ADDRESS = (PROTOCOL= TCP)(Host= smsvr1)(Port= 2001))
     (CONNECT_DATA = (SID = MIN))
  )

 3) 오라클 초기화 파라미터 설정

- MIN DB (primary DB)

vi $ORACLE_HOME/dbs/initMIN.ora

db_name=MIN
compatible=9.2.0
control_files=('/data1/oradata/MIN/control01.ctl','/data1/oradata/MIN/control02.ctl')
shared_pool_size=64M
db_cache_size=16M
undo_management=auto
background_dump_dest=/data1/oradata/MIN/bdump
user_dump_dest=/data1/oradata/MIN/udump
core_dump_dest=/data1/oradata/MIN/cdump
log_archive_start=true
log_archive_dest_1="location=/data1/oradata/MIN/archive1"
log_archive_format=%t_%s.arc

#### 데이터가드를 위해서 변경하지 말 것
remote_archive_enable=true
dg_broker_start=true
log_archive_dest_state_1=enable
log_archive_max_processes=3
standby_file_management=auto
db_file_name_convert='/data1/oradata/STBY','/data1/oradata/MIN'
log_file_name_convert='/data1/oradata/STBY','/data1/oradata/MIN'
standby_archive_dest='/data1/oradata/MIN/archive2'

##### standby DB이면 열고, primary DB이면 닫는다.
#fal_server=STBY
#fal_client=MIN
#lock_name_space=STBY

## primary DB이면 열고, standby DB이면 닫는다.
log_archive_dest_2='SERVICE=STBY LGWR SYNC'



- STBY DB (standby DB) -주의할 것은 DB이름은 MIN 이며 instance 이름과 SID는 STBY 이다.
즉, 기동을 할 때에도 ORACLE_SID=STBY 로 설정하여 기동한다.

vi $ORACLE_HOME/dbs/initSTBY.ora

db_name=MIN
compatible=9.2.0
control_files=('/data1/oradata/STBY/control01.ctl','/data1/oradata/STBY/control02.ctl')
shared_pool_size=64M
db_cache_size=16M
undo_management=auto
background_dump_dest=/data1/oradata/STBY/bdump
user_dump_dest=/data1/oradata/STBY/udump
core_dump_dest=/data1/oradata/STBY/cdump
log_archive_start=true
log_archive_dest_1="location=/data1/oradata/STBY/archive1"
log_archive_format=%t_%s.arc

### 데이터가드를 위해서 변경하지 말 것
remote_archive_enable=true
dg_broker_start=true
log_archive_dest_state_1=enable
log_archive_max_processes=3
standby_file_management=auto
db_file_name_convert='/data1/oradata/MIN','/data1/oradata/STBY'
log_file_name_convert='/data1/oradata/MIN','/data1/oradata/STBY'
standby_archive_dest='/data1/oradata/STBY/archive2'

## standby DB일 경우 아래를 열기, primary DB일 경우 닫기
fal_server=MIN
fal_client=STBY
lock_name_space=STBY

##primary DB이면 열고, standby DB이면 닫는다.
#log_archive_dest_2='SERVICE=MIN LGWR SYNC'

-초기화 파라미터 설정에서 주의해야 할 것을 먼저 보면,
standby_file_management=auto 로 되어 있어야 primary DB에서 물리적인 테이블스페이스 및 데이터파일 추가할 경우 standby DB에 자동으로 생성된다.

standby_file_management=auto로 되어 있을 경우
db_file_name_convert='/data1/oradata/STBY','/data1/oradata/MIN'

log_file_name_convert='/data1/oradata/STBY','/data1/oradata/MIN'
의 파라미터에서 ' A 부분','B 부분'에서 B부분이 자신의 primary DB의 경로를 말하고 A부분이 변환할 standby DB의 경로를 말한다. 파라미터를 확인해보자.

fal_server, fal_client 는 standby DB에서만 사용한다. fal_server는 primary DB를 설정하고 fal_client는 standby DB를 설정해둔다. 이것을 설정할 경우 primary DB와 standby DB에 redo log의 gap이 발생했을 경우 자동으로 맞추어주는 역할을 한다.
fal_server=MIN
fal_client=STBY
lock_name_space는 한 대의 서버에서 primary, standby DB를 운영할 경우 사 용한다. 앞에서 말한 바와 같이 primary , standby DB
db_name은 같으며 instance_name(SID)만 다를 뿐이다. 같은 DB이름을 가진 instance를 한 대의 서버에서 기동하기 위해서는
lock_name_space를 지정해 주어야 한다. 만약 두 대의 서버에서 구성한다면 lock_name_space파라미터는 지정할 필요가 없다.
이것은 standby DB에서만 지정한다.
lock_name_space=STBY

 4) primary DB를 online backup으로 standby DB 위치로 restore

   
<MIN DB primary DB>

- primary DB를 24시간 서비스 이므로 shutdown이 불가능한 것을 가정하에 구성한다.
- primary DB를 online backup으로 복사한다.
- online backup을 하는 것이므로 primary DB의 redo log는 standby DB로 전송하지 않는다. standby DB구성 시 자동으로
standby DB에서 redo log가 생성된다.
SQL> select tablespace_name, file_name, bytes/1024/1024 mega from dba_data_files; 
TABLESPACE_NAME FILE_NAME MEGA
------------------------------------------------------------------------------------------------------------
SYSTEM /data1/oradata/MIN/system01.dbf 250
UNDOTBS /data1/oradata/MIN/undotbs.dbf 100
USERS /data1/oradata/MIN/users01.dbf 100
SQL> select name , bytes/1024/1024 mega from v$tempfile;
NAME MEGA
------------------------------------------------------------
/data1/oradata/MIN/temp01.dbf 100

- 여기서는 cp 명령이 standby DB로 전송하는 것을 뜻한다. ftp로 primary db의 백업을 전송한다.
   SQL> alter tablespace system begin backup;
   SQL> !cp /data1/oradata/MIN/system01.dbf /data1/oradata/STBY/system01.dbf
   SQL> alter tablespace system end backup;
   SQL> alter tablespace undotbs begin backup;
   SQL> !cp /data1/oradata/MIN/undotbs.dbf /data1/oradata/STBY/undotbs.dbf
   SQL> alter tablespace undotbs end backup;
   SQL> alter tablespace users begin backup;
   SQL> !cp /data1/oradata/MIN/users01.dbf /data1/oradata/STBY/users01.dbf
   SQL> alter tablespace users end backup;

- tempfile은 그대로 복사를 한다. begin backup, end backup 이 필요 없다. 단 tempfile 이어야 한다.
   SQL> !cp /data1/oradata/MIN/temp01.dbf /data1/oradata/STBY/temp01.dbf

 5) primary DB에서 standby control file을 생성해서 standby DB로 전송

    <MIN DB primary DB>

- primary DB에서 standby control file을 생성해서 standby DB로 전송한다
   SQL> alter database create standby controlfile as '/data1/oradata/STBY/stbyctl.ctl';

 6) standby DB에서 사용할 control file을 배치

    <STBY DB standby DB의 control file>

- standby DB에서 사용할 control file을, standby DB의 초기화 퍼라미터(initSTBY.ora)파일에 있는 control file 위치에 배치한다.
SQL> !cp /data1/oradata/STBY/stbyctl.ctl /data1/oradata/STBY/control01.ctl
SQL> !cp /data1/oradata/STBY/stbyctl.ctl /data1/oradata/STBY/control02.ctl

 7) standby DB 기동

    <STBY DB standby DB 에서 수행>

- standby DB를 기동시킨다. startup mount standby database 라는 명령은 없다. nomount까지 기동한 후 standby DB로 mount를 한다.

   SQL> startup nomount
   SQL> alter database mount standby database;

 8) standby DB에 standby redo log file 생성

    <STBY DB standby DB에서 수행>

우리는 처음으로 standby DB를 구성하였으므로 standby redo log를 추가해 주어야 한다.
여기서 중요한 것은 primary redo log와 standby redo log가 같은 크기를 가지고 있어야 한다.
만약 다를 경우에는 차후에 ORA-16139 media recovery required
에러가 발생하면서 takeover나 failover가 정상적으로 수행되지 않을 수 있다.

SQL> select * from v$logfile;

GROUP#

STATUS TYPE

MEMBER

---------------------------------------------------------------

1

ONLINE

/data1/oradata/STBY/log01a.log

2

ONLINE

/data1/oradata/STBY/log02a.log

3

 

/data1/oradata/STBY/log03a.log

SQL> alter database add standby logfile
           '/data1/oradata/STBY/stbylog01a.log' size 10M;
SQL> alter database add standby logfile
           '/data1/oradata/STBY/stbylog02a.log' size 10M;
SQL> alter database add standby logfile
           '/data1/oradata/STBY/stbylog03a.log' size 10M;
SQL> select * from v$logfile;


GROUP#STATUS

TYPE

MEMBER

------------------------------------------------------------------

1

ONLINE

/data1/oradata/STBY/log01a.log

2

ONLINE

/data1/oradata/STBY/log02a.log

3

ONLINE

/data1/oradata/STBY/log03a.log

4

STANDBY

/data1/oradata/STBY/stbylog01a.log

5

STANDBY

/data1/oradata/STBY/stbylog02a.log

6

STANDBY

/data1/oradata/STBY/stbylog03a.log



 9) primary DB에 standby redo log file 생성

    <MIN DB primary DB 에서 수행>

서버문제가 발생했을 경우 takeover를 해야 하므로 primary DB도 standby DB가 될 수 있기 때문에
미리 standby redo log를 만든다.

SQL> select * from v$logfile;


GROUP#>

STATUS TYPE

MEMBER

---------------------------------------------------------------

1

ONLINE

/data1/oradata/MIN/log01a.log

2

ONLINE

/data1/oradata/MIN/log02a.log

3

ONLINE

/data1/oradata/MIN/log03a.log


SQL> alter database add standby logfile
          '/data1/oradata/MIN/stbylog01a.log' size 10M;
SQL> alter database add standby logfile
          '/data1/oradata/MIN/stbylog02a.log' size 10M;
SQL> alter database add standby logfile
          '/data1/oradata/MIN/stbylog03a.log' size 10M;

SQL> select * from v$logfile;

GROUP#

STATUS TYPE

MEMBER

-------------------------------------------------------------

1

ONLINE

/data1/oradata/MIN/log01a.log

2

ONLINE

/data1/oradata/MIN/log02a.log

3

ONLINE

/data1/oradata/MIN/log03a.log

4

STANDBY

/data1/oradata/MIN/stbylog01a.log

5

STANDBY

/data1/oradata/MIN/stbylog02a.log

6

STANDBY

/data1/oradata/MIN/stbylog03a.log

 10) standby DB를 recovery managed mode로 기동

    <STBY DB standby DB 에서 수행>

standby DB를 recovery managed mode로 변경한다.
standby DB서버에서 MRP 프로세스가 생긴다.

   SQL> recover managed standby database disconnect;

 11) log switch 적용

    <MIN DB primary DB 에서 수행>

standby DB를 구성하는 동안 primary DB와 gap이 생겼을 것이다.
current redo log를 적용시킨다.

   SQL> alter system archive log current;

 12) primary DB 점검

            PROCESS STATUS
           ------------- ---------------
           ARCH       CLOSING
          ARCH       CLOSING
           LGWR       WRITING SQL> select dest_id "ID",destination,status,target, schedule,process,mountid mid from v$archive_dest order by dest_id;
=> destination 2번에 우리는 service=STBY로 설정하였다. STBY는 tnsnames.ora에 나오는 접속이름이었다. STATUS=VALID 상태이고 STANDBY 이어야 한다.


=> 아무런 에러도 나와서는 안된다. 여기에서 에러가 났다면 primary DB를 먼저 기동하고 standby DB를 기동했을 경우 발생할 수도 있으나, standby로 전송이 안된 것일 수도 있으므로 다른 것도 확인을 해보아야 한다. 만약 standby DB를 먼저 기동하고 recovery managed mode에서 MRP 프로세스를 띄우고 그리고 나서야 primary DB를 기동시켰다면 아래에서는 아무런 메세지도 나와서는 안된다. 예제에서는 primary DB를 먼저 기동했으므로 메세지가 발생했을 것이다.

        MESSAGE         TIMESTAMP
        --------------------------
        --------------------------- SQL> select dest_id id,database_mode db_mode,recovery_mode, protection_mode,standby_logfile_count "SRLs", standby_logfile_active ACTIVE, archived_seq# from v$archive_dest_status;
==> db_mode가 MOUNTED_STANDBY 이어야 한다. recovery_mode 가 managed가 되어 있어야 primary DB에서 전송된 redo log정보를 standby DB에 적용시킬 수 있다.

        ID DB_MODE         RECOVER PROTECTION_MODE      SRLs ACTIVE ARCHIVED_SEQ#
        --- --------------- ------- -------------------- ---- ------ -------------
       1 OPEN            IDLE    MAXIMUM PERFORMANCE     0      0        45
       2 MOUNTED-STANDBY MANAGED MAXIMUM AVAILABILITY    2      0        45
       3 OPEN            IDLE    MAXIMUM PERFORMANCE     0      0         0

13) standby DB 점검
14) primary DB 테이블스페이스 생성 및 데이터 입력
        <MIN DB primary DB>
test 테이블스페이스를 만들고 테이블을 만들고 데이터를 넣어본다. 주의할 것은 db_file_name_convert 에서 나오는 것처럼 /data1/oradata/MIN 안에만 생성을 해야 한다. 그래야 standby DB에 데이터파일이 자동으로 생기게 된다.
또한 파라미터에서 standby_file_management=auto로 되어 있어야 standby DB에 테이블스페이스의 데이터파일이 생긴다.
SQL> create tablespace test datafile '/data1/oradata/MIN/test01.dbf' size 10M; SQL> select tablespace_name, file_name, bytes/1024/1024 mega from dba_data_files;

            

15) standby DB예 데이터 입력 여부 확인 <STBY DB standby DB>
- primary DB에서 만든 테이블스페이스가 있는지 데이터는 들어갔는지 확인한다.
recovery managed mode를 해제하고 read only로 open한다.
SQL> recover managed standby database cancel; SQL> alter database open read only;
==> 정상적으로 primary DB에서 만든 테이블스페이스가 적용되었으며, test 라는 테이블에 데이터 insert가 정상적으로 된 것을 확인할 수 있다.


- 다시 recovery managed mode로 만들어서 primary 에서 전송된 redo log 정보가 standby DB에 적용되도록 한다. fal_server, fal_client 파라미터가 설정되어 있으므로 자동으로 gap이 생긴 부분을 맞추어 준다.
DB를 open 상태에서도 recovery managed mode로 변경이 가능하다.
SQL> recover managed standby database disconnect;
16) takeover
시스템 문제가 발생하였다. takeover를 수행한다.
①<MIN DB primary DB>
가장 먼저 primary DB를 standby로 변경을 한 후 standby DB를 primary DB로 변경 해야한다. standby DB를 primary로 먼저 변경하면 primary DB가 standby DB로될 때까지 기다리게 된다.
이제 primary DB를 standby DB로 변경한 후 기존의 primary DB를shutdown 한다.
SQL> alter database commit to switchover to physical standby with session shutdown wait; SQL> shutdown immediate
② <STBY DB standby DB>
standby DB를 primary DB로 바꾸고 shutdown 한다. 유저접속은 없으므로 with session shutdown 절은 안 들어가도 된다.
SQL> alter database commit to switchover to primary; SQL> shutdown immediate
③ 파라미터를 변경한다. # 을 붙인 것을 빼거나 추가해서 설정해준다.
<MIN DB primary DB>

vi $ORACLE_HOME/dbs/initMIN.ora
<
변경전
>
#####standby DB
이면 열고, primary DB이면 닫는다
.
#fal_server=STBY
#fal_client=MIN
#lock_name_space=STBY


##primary DB
이면 열고, standby DB이면 닫는다.
log_archive_dest_2='SERVICE=STBY LGWR SYNC'

<변경후>
#####standby DB
이면 열고, primary DB이면 닫는다
.
fal_server=STBY
fal_client=MIN
lock_name_space=STBY

##primary DB이면 열고, standby DB이면 닫는다.
#log_archive_dest_2='SERVICE=STBY LGWR SYNC'


<STBY DB standby DB>
>vi $ORACLE_HOME/dbs/initSTBY.ora <변경전> ##standby 이면 열고, primary DB이면 닫는다. fal_server=MIN fal_client=STBY lock_name_space=STBY
##primary DB
이면 열고, standby DB이면 닫는다. #log_archive_dest_2='SERVICE=MIN LGWR SYNC'

<변경후>
##standby
이면 열고, primary DB이면 닫는다. #fal_server=MIN #fal_client=STBY #lock_name_space=STBY

##primary DB이면 열고, standby DB이면 닫는다. #log_archive_dest_2='SERVICE=MIN LGWR SYNC'



④ <MIN DB , new standby DB> - 새롭게 standby DB가 된 MIN DB를 recovery managed mode로 변경한다. SQL> startup nomount SQL> alter database mount standby database; SQL> recover managed standby database disconnect; SQL> select process, status from v$managed_standby; ==> MRP 프로세스 기동 확인

        PROCESS STATUS
        ---------------- ------------
        ARCH    CONNECTED
        ARCH    CONNECTED
       MRP0    WAIT_FOR_LOG
     RFS     WRITING
     RFS     ATTACHED

⑤ <STBY DB, new primary DB> - new primary DB를 기동한다. SQL> startup
- 확인하기 SQL> select i.instance_name, i.status instance_status, d.name dbname, d.database_role db_role, d.switchover_status switchover_status , d.protection_mode from v$database d, v$instance i;
=> 중요한 점검포인트 이다. TO_STANDBY 인지 확인한다.

   

(17) 서비스 원복(takeover) 다시 원복을 시킨다. STBY DB를 standby DB로 변경한 후 MIN DB를primary DB로 변경한다.

<STBY DB, new primary DB> - primary DB를 standby DB로 만들고 나서 standby DB를 primary DB로 만든다.
순서를 잊지 말자.
SQL> alter database commit to switchover to physical standby with session shutdown wait; SQL> shutdown immediate
<MIN DB new standby DB> - MIN DB를 primary DB로 변경한다. SQL> alter database commit to switchover to primary ; SQL> shutdown immediate
<MIN DB primary DB> - 초기화 파라미터를 변경한다.

vi $ORACLE_HOME/dbs/initMIN.ora
<원복시킨다>
#####standby DB이면 열고, primary DB이면 닫는다.
#fal_server=STBY
#fal_client=MIN
#lock_name_space=STBY

##primary DB이면 열고, standby DB이면 닫는다.
log_archive_dest_2='SERVICE=STBY LGWR SYNC'


<STBY DB standby DB>
vi $ORACLE_HOME/dbs/initSTBY.ora <원복시킨다> ##standby 이면 열고, primary DB이면 닫는다. fal_server=MIN fal_client=STBY lock_name_space=STBY
##primary DB
이면 열고, standby DB이면 닫는
.
#log_archive_dest_2='SERVICE=MIN LGWR SYNC'




18) failover

- primary DB가 있는 건물이 무너지고 디스크 이상으로 인해서 DB 데이터파일이 손상되었다.
standby DB를 긴급하게 기동시켜야 한다. MIN DB를 shutdown abort로 Down시키고(디스크 fail 장애),
standby DB를 primary DB로 기동시킨다.

- failover을 한 후에 시스템을 복구해서 MIN DB를 primary DB, STBY DB를 standby DB로 원래대로 구성하려면 Dataguard를 재구성 해야 한다.

즉, failover을 했다면 failover이후에 new primary DB인 STBY DB를 통해서 MIN DB를 standby DB로 구성하고
takeover 시키면 된다.

<MIN DB primary DB>
- 디스크장애상황
SQL> shutdown abort

<STBY DB standby DB>
- recovery managed mode를 해제(cancel)가 아닌 끝내도록(finish) 한다. primary DB로 변경한다.
SQL> recover managed standby database finish;
SQL> alter database commit to switchover to primary;
$ORACLE_HOME/dbs/initSTBY.ora 파일에서 primary DB로 파라미터를 설정하고 기동한다.
SQL> startup

<주의> 만약 standby DB인 STBY DB를 primary DB로 failover하던 도중 ORA-16139 media recovery required
에러가 나면서 recovery 하라고 나온다면?

이럴 경우엔 아래와 같은 명령을 사용하도록 한다.
Log stream을 standby DB에 적용하지 못한 경우에 발생할 수 있다.
이러한 사항은 여러 문제로 인해서 발생할 수 있으므로 발생했다면 오라클에 공식적으로 문의 해야한다.
아래와 같이 skip하면 skip하는 만큼의 gap을 DB에 적용하지 못할 수 있으니 주의해야 한다.
SQL> alter database recover managed standby database finish skip wait;
SQL> alter database commit to switchover to primary;
$ORACLE_HOME/dbs/initSTBY.ora 파일에서 primary DB로 파라미터를설정하고 기동한다.
SQL> startup
Posted by 1010
02.Oracle/DataBase2009. 4. 6. 15:16
반응형

//tnsnames.ora : 클라이언트 측 설정


# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\Hsck\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

RESP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP_ADDRESS)(PORT = PORT_NUMBER))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SIP)    
    )  
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )



////////////////////////////////////////////////////

//listener.ora ; Server 측 설정


# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\Hsck\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =    
     (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_2\Hsck)
      (PROGRAM=PLSExProc)
    )  
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = b)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      (
       (CONNECT_DATA =
        (SERVICE_NAME = RESP)    
        (SID_NAME=RESP)
    )
    )
  )

Posted by 1010
01.JAVA/Java2009. 4. 6. 15:02
반응형

PreparedStatement 를 이용

<%@ page import = "java.sql.PreparedStatement" %>


<%

String query = "select ? from table_name where x = ?";

PreparedStatement pstmt = conn.prepareStatement(query);

pstmt.setString(1, value_1);

pstmt.setString(2, value_2);


pstmt.close();

>%



Statement를 이용

<%@ page import = "java.sql.Statement" %>


<%


String query = "select ? from table_name where x = ?";

Statement stmt = conn.createStatement();

stmt.executeUpdate(query);

stmt.close();

%>

Posted by 1010
02.Oracle/DataBase2009. 4. 6. 14:54
반응형
  • server.xml 파일에 아래의 내용을 추가/변경한다.


MySQL 기반

<Context docBase="프로젝트이름" path="/프로젝트이름" reloadable="true" source="org.eclipse.jst.j2ee.server:프로젝트이름">
     
           <Resource name="jdbc/MySQL" auth="Container" type="javax.sql.DataSource"
           maxActive="5" maxIdle="3" maxWait="10000" username="접속할유저" password="접속할유저의비밀번호"
           driverClassName="com.mysql.jdbc.driver.OracleDriver" url="jdbc:mysql://ip_address:3306/접속할DB이름?toReconnect=true"/>
     
</Context>


오라클 기반

<Context docBase="프로젝트이름" path="/프로젝트이름" reloadable="true" source="org.eclipse.jst.j2ee.server:프로젝트이름">
     
           <Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource"
           maxActive="5" maxIdle="3" maxWait="10000" username="접속할유저" password="접속할유저의비밀번호"
           driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@ip_address:1521:sid"/>
     
</Context>


  • web.xml에 추가할 내용

<resource-ref>

<res-ref-name>jdbc/mysql</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>


  • jsp 파일에 추가될 내용

<%@ page import = "java.sql.*, javax.sql.*, javax.naming.*" %>

<%
    Context ct = new InitialContext();
    DataSource ds = (DataSource)ct.lookup("java:comp/env/jdbc/oracle");
    Connection conn = ds.getConnection();
 %>


Posted by 1010
98..Etc/Server2009. 4. 6. 14:50
반응형
이 글은 인터넷 검색을 통해서 정리했음을 밝힙니다.

WAS(Web Application Server)란?
-데이터베이스 조회나 일반적인 비즈니스 로직에 대한 처리를 위해 다양한 언어로 개발된 인터넷/인트라넷 환경의 소프트웨어를 지짗한다.
-서버기반의 application system을 위한 최적화된 실행환경을 제공하는 엔진
-Web Server와 DBMS를 연계 3-tier을 구현하는 Middle ware
-Web 비지니스 로직을 구현하는 가장 효과적인 Solution

WAS의 기능
- 환경에서의 최적의 트랜잭션 처리
- 웹 기반 애플리케이션들에 대한 분석 처리
- 분산된 웹 기반 어플리케이션 통합관리
- 웹 환경에서의 트랜잭션 모니터링

WAS의 역할
- 웹서버는 사용자(클라이언트)가 요청을 보내오면 그 명령에 대한 처리를 실행하고 다시 사용자에게 답변을 보내주는 역할을 수행합니다. 그런데 요청한 것들 중에 자체적으로 처리할 수 없는 것들을 톰캣과 같은 컨테이너나 아님 php 모듈과 같이 처리할 수 있는 곳으로 넘겨 처리 결과를 받아와서 사용자에게 넘겨주는 역할을 수행하는게 꼭 해야되는 기능 중에 하나입니다.

톰켓은 jsp를 실행 할 수 있는 컨테이너입니다. 웹서버에서 jsp를 요청하면 톰켓에서는 jsp파일을 servlet으로 변환하여 컴파일을 수행하고 서블릿의 수행 결과를 웹서버에 전달하게 됩니다.

- Tomcat
Java진영 Open Source Group인 Apache Software Foundation에서 공식적으로 사용하고 있는 Servlet-Container입니다.
또 Web server인 Apache의 기능을 내장하고 있어서, 그 자체로도 Web server기능을 할 수 있습니다. 하지만 분명히 톰캣은 WAS입니다.
(참고: IIS의 경우에는 출발은 web server이었는데, WAS로 구분하지 않고 그 자체로 WAS기능으로 포함시켜 왔습니다. 그래서 구분하자면 Web+WAS입니다.)

- 밴더별 WAS
크게 마이크로소프트 플랫폼과 비 마이크로소프트 플랫폼으로 나뉘어 볼 수 있다.
비 마이크로소프트 플랫폼은 유닉스나 솔라리스 등의 운영체제에 오라클 DBMS, 그리고 별도의 미들웨어 제품을 얹어서 사용하며, 이 때문에 비 마이크로 소프트 플랫폼은 하나같이 표준 J2EE스펙을 완벽하게 준수한다는 사실을 장점으로 내세움.

- JSP가 컴파일되어 Servlet에 적재되는 시점
더 자세한 정보는 링크를 통해..

[출처] JSP가 컴파일되어 Servlet Container에 적재되는 시점|작성자 행복마녀

http://blog.naver.com/tjddhr1168/10026420652

클라이언트에서 JSP를 요청했을 때 해당 JSP의 Servlet 객체가 Servlet 컨테이너에 있는지 없는지 검사하게 되고, 있다면 바로 실행에 들어가지만 없다면 다시 Servlet 생성루틴을 거치게 됩니다. 만약, 여러분이 JSP파일을 수정하였다면 Java Server Page는 수정 검사루틴을 가지고 있기 때문에 JSP파일이 수정되었는지 검사한 후 수정되었다면 .jsp파일을 .class로 컴파일하고 Servlet Container에 다시 적재하는 과정을 밟게 됩니다. 다음의 그림은 JSP실행루틴을 도식화한 그림입니다.

사용자 삽입 이미지
위의 그림은 JSP의 작업 흐름도를 보여 주고 있습니다. 제일 먼저 Webserver나 Servlet 엔진에서 클라이언트의 요청을 받게 됩니다. 서버에서 요청을 받게되면 바로 JSP Handler즉, JSP Container Process라고 불리우는 루틴을 거치게 되면서 Servlet 객체존재여부와 파일변경여부를 확인하게 됩니다. 변경되었다면 새로 source파일을 생성하고 그리고 compile과정을 거쳐 실행하게 되고 그리고 이미 로딩되어 있는데 변경처리되지 않았다면 기존에 존재하는 것을 이용하게 됩니다. 로딩을 하지않았다면 처음부터 로딩을 시작하여 source파일을 만들고 compile과정을 거쳐 새로 실행합니다. 다른 서블릿들도 Servlet Container에 적재하는 과정을 반복하게 됩니다.
Posted by 1010
01.JAVA/Java2009. 4. 6. 14:47
반응형

<noscript> 태그는 브라우저에서 <script> 태그가 작동하지 않을 때 대신 내보낼 내용을 담기 위해 쓰인다.

즉, 방문객이 브라우저에서 자바스크립트가 실행되도록 설정해 두었다면 자바스크립트는 실행되고 <noscript> 태그 안의 내용은 나오지 않는다. 하지만 자바스크립트 기능을 꺼두고 있다면 자바스크립트가 실행되지 않는 대신에 <noscript> 태그 안의 내용이 출력된다.


<script type="text/javascript">
document.write('안녕하십니까?')
</script>
<noscript><p>자바스크립트를 꺼두셨군요.</p></noscript>

위의 예에서, 보통은 자바스크립트가 실행되기 때문에 화면에는 다음 문장이 나올 것이다.

안녕하십니까?

하지만 자바스크립트가 실행되지 않는다면 화면에는 다음 문장이 나오게 된다.

자바스크립트를 꺼두셨군요.

브라우저에서 자바스크립트 기능을 꺼두고 쓰는 사람도 있기 때문에 자바스크립트를 쓴 곳에는 <noscript> 태그를 써서 자바스크립트가 필요하다는 걸 알려주는 게 좋다.


<p><a href="#" onclick="window.open('photo.html'; return false">사진 보기</a></p>
<noscript><p>사진 보기를 하려면 자바스크립트가 필요합니다.</p></noscript>

위 예에서는 자바스크립트를 써서 사진 보기 창을 뜨도록 하고 있으므로, 자바스크립트를 꺼두면 새 창을 뜨게 할 수 없기 때문에 사진을 볼 수 없다. 만약 <noscript> 태그를 쓰지 않는다면 모르는 사람은 왜 사진 보기가 안 되는 걸까 의아해 할지도 모른다. 하지만 <noscript> 태그를 써서, 위와 같이 사진을 보기 위해서는 자바스크립트가 필요하다는 걸 알려준다면 자바스크립트 기능을 꺼두었기 때문에 사진 보기가 안 된다는 걸 알고 사진을 보기 위해 자바스크립트 기능을 켜게 될 것이다.

위 코드의 결과는 다음과 같다. 브라우저에서 자바스크립트 기능을 꺼서 어떻게 보이는지 직접 확인해 보기 바란다.

사진 보기

참고로 photo.html 파일은 만들지 않았으므로 사진 보기를 눌러도 새 창은 뜨지 않을 것이며, <noscript> 태그 안의 글씨는 현재 이곳의 CSS 설정에 따라 크기나 색깔이 다르게 보일 수도 있다.

<noscript> 태그 안의 내용은 웹 문서의 내용과는 상관 없는 것이므로 웹 문서의 내용과는 다르게 보이도록 하는 게 좋다. 예를 들어, CSS에서 설정을 다음과 같이 해 두면 <noscript> 태그 안의 글씨는 돋움 글꼴에 본문 글씨보다 작게 녹색으로 보이게 되므로 웹 문서에 쓰인 글씨가 검은 색이면 서로 구별될 것이다.


noscript { font-family: 돋움, Dotum; 
           font-size: 75%; 
           color: green; }

끝으로 한 가지 주의사항은, <noscript> 태그는 <p> 태그를 감쌀 수 있지만 그 반대는 되지 않고, <noscript> 태그 안에 들어 있는 글씨를 <p> 같은 형님 태그로 감싸주지 않으면 웹 표준 검사에서 오류가 난다는 것이다.

Posted by 1010
01.JAVA/Java2009. 4. 6. 14:47
반응형
public void makeLog(){
               
        String filePath = "D:/SQLException.log";       
        try {
            PrintWriter pw= new PrintWriter(new FileWriter(filePath, true));
            pw.write(getLogTime());
            pw.write(" : SQLException");
            pw.write("\n");
            pw.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }              
    }

값이 true일 경우는 File이어쓰기
값이 false일 경우는 File새로쓰기

File이 없는 경우 자동으로 생성도 해준다.
Posted by 1010
01.JAVA/Java2009. 4. 6. 14:44
반응형

java.io
클래스 PrintWriter

java.lang.Object 
  상위를 확장 java.io.Writer 
      상위를 확장 java.io.PrintWriter
모든 구현된 인터페이스:
Closeable , Flushable , Appendable

객체의 서식 첨부 표현을 텍스트 출력 스트림에 출력합니다. 이 클래스는,PrintStream 에 있는 print 메소드를 모두 구현합니다. 다만, raw 바이트를 기입하는 메소드는 포함되지 않습니다. raw 바이트에 대해서는, encode되어 있지 않은 바이트 스트림을 프로그램으로 사용해 주세요.

PrintStream 클래스와는 달라, 자동 플래시가 유효한 경우는, 개행 문자가 출력될 때는 아니고,println,printf,format 의 몇개의 메소드가 불려 갔을 때에 마셔 실행됩니다. 이러한 메소드는, 개행 문자는 아니고, 플랫폼에 고유의 행 단락의 표기를 사용합니다.

이 클래스의 메소드는, 생성자 의 일부를 제외해, 입출력 예외를 throw 할 것은 없습니다. 클라이언트는,checkError() 를 호출하는 것에 의해, 에러가 발생했는지의 여부를 조회할 수 있습니다.

도입된 버젼:
JDK1. 1

필드의 개요
protected  Writer out
          이 PrintWriter 의 기본이 되는 문자 출력 스트림입니다.
 
클래스 java.io. Writer 로부터 상속된 필드
lock
 
생성자 의 개요
PrintWriter (File  file)
          행의 자동 플래시는 실시하지 않고 , 지정된 파일로 새로운 PrintWriter 를 작성합니다.
PrintWriter (File  file, String  csn)
          행의 자동 플래시는 실시하지 않고 , 지정된 파일과 캐릭터 세트로 새로운 PrintWriter 를 작성합니다.
PrintWriter (OutputStream  out)
          행의 자동 플래시는 실시하지 않고 , 기존의 OutputStream 로부터 새로운 PrintWriter 를 작성합니다.
PrintWriter (OutputStream  out, boolean autoFlush)
          기존의 OutputStream 로부터 새로운 PrintWriter 를 작성합니다.
PrintWriter (String  fileName)
          행의 자동 플래시는 실시하지 않고 , 지정된 파일명으로 새로운 PrintWriter 를 작성합니다.
PrintWriter (String  fileName, String  csn)
          행의 자동 플래시는 실시하지 않고 , 지정된 파일명과 캐릭터 세트로 새로운 PrintWriter 를 작성합니다.
PrintWriter (Writer  out)
          행의 자동 플래시는 실시하지 않고 , 새로운 PrintWriter 를 작성합니다.
PrintWriter (Writer  out, boolean autoFlush)
          새로운 PrintWriter 를 작성합니다.
 
메소드의 개요
 PrintWriter append (char c)
          지정된 문자를 이 라이터에 추가합니다.
 PrintWriter append (CharSequence  csq)
          지정된 문자 순서를 이 라이터에 추가합니다.
 PrintWriter append (CharSequence  csq, int start, int end)
          지정된 문자 순서의 서브 순서를 이 라이터에 추가합니다.
 boolean checkError ()
          스트림이 닫혀지지 않은 경우는, 그 스트림을 플래시 해, 에러 상태를 체크합니다.
protected  void clearError ()
          이 스트림의 에러 상태를 해제합니다.
 void close ()
          스트림을 닫아, 거기에 관련하는 모든 system resource를 해제합니다.
 void flush ()
          스트림을 플래시 합니다.
 PrintWriter format (Locale  l, String  format, Object ... args)
          지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입합니다.
 PrintWriter format (String  format, Object ... args)
          지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입합니다.
 void print (boolean b)
          boolean 형의 값을 출력합니다.
 void print (char c)
          문자를 출력합니다.
 void print (char[] s)
          문자의 배열을 출력합니다.
 void print (double d)
          배정밀도의 부동 소수점수(실수)를 출력합니다.
 void print (float f)
          부동 소수점수(실수)를 출력합니다.
 void print (int i)
          정수를 출력합니다.
 void print (long l)
          long 정수를 출력합니다.
 void print (Object  obj)
          객체를 출력합니다.
 void print (String  s)
          캐릭터 라인을 출력합니다.
 PrintWriter printf (Locale  l, String  format, Object ... args)
          지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입하는 편리한 메소드입니다.
 PrintWriter printf (String  format, Object ... args)
          지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입하는 편리한 메소드입니다.
 void println ()
          행의 단락 캐릭터 라인을 기입하는 것으로, 현재의 행을 종료시킵니다.
 void println (boolean x)
          boolean 치를 출력해, 행을 종료시킵니다.
 void println (char x)
          문자를 출력해, 행을 종료시킵니다.
 void println (char[] x)
          문자의 배열을 출력해, 행을 종료시킵니다.
 void println (double x)
          배정밀도 부동 소수점수(실수)를 출력해, 행을 종료시킵니다.
 void println (float x)
          부동 소수점수(실수)를 출력해, 행을 종료시킵니다.
 void println (int x)
          정수를 출력해, 행을 종료시킵니다.
 void println (long x)
          long 형의 정수치를 출력해, 행을 종료시킵니다.
 void println (Object  x)
          Object 를 출력해, 행을 종료시킵니다.
 void println (String  x)
          캐릭터 라인을 출력해, 행을 종료시킵니다.
protected  void setError ()
          에러가 발생한 것을 나타냅니다.
 void write (char[] buf)
          문자의 배열을 기입합니다.
 void write (char[] buf, int off, int len)
          문자의 배열의 일부를 기입합니다.
 void write (int c)
          단일의 문자를 기입합니다.
 void write (String  s)
          캐릭터 라인을 기입합니다.
 void write (String  s, int off, int len)
          캐릭터 라인의 일부를 기입합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

필드의 상세

out

protected Writer  out
PrintWriter 의 기본이 되는 문자 출력 스트림입니다.

도입된 버젼:
1.2
생성자 의 상세

PrintWriter

public PrintWriter(Writer  out)
행의 자동 플래시는 실시하지 않고 , 새로운 PrintWriter 를 작성합니다.

파라미터:
out - 문자 출력 스트림

PrintWriter

public PrintWriter(Writer  out,
                   boolean autoFlush)
새로운 PrintWriter 를 작성합니다.

파라미터:
out - 문자 출력 스트림
autoFlush - boolean 치. true 의 경우,println 메소드,printf 메소드, 또는 format 메소드는 출력 버퍼를 플래시 한다

PrintWriter

public PrintWriter(OutputStream  out)
행의 자동 플래시는 실시하지 않고 , 기존의 OutputStream 로부터 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간의 OutputStreamWriter 를 작성합니다. 이것은, 디폴트의 문자 인코딩을 사용해 문자를 바이트로 변환합니다.

파라미터:
out - 출력 스트림
관련 항목:
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)

PrintWriter

public PrintWriter(OutputStream  out,
                   boolean autoFlush)
기존의 OutputStream 로부터 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간의 OutputStreamWriter 를 작성합니다. 이것은, 디폴트의 문자 인코딩을 사용해 문자를 바이트로 변환합니다.

파라미터:
out - 출력 스트림
autoFlush - boolean 치. true 의 경우,println 메소드,printf 메소드, 또는 format 메소드는 출력 버퍼를 플래시 하는
관련 항목:
OutputStreamWriter.OutputStreamWriter(java.io.OutputStream)

PrintWriter

public PrintWriter(String  fileName)
            throws FileNotFoundException 
행의 자동 플래시는 실시하지 않고 , 지정된 파일명으로 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간 OutputStreamWriter 를 작성합니다. 이것은, 이 Java 가상 머신 인스턴스의디폴트 캐릭터 세트를 사용해, 문자를 encode 합니다.

파라미터:
fileName - 이 라이터의 행선지로서 사용되는 파일의 이름. 파일이 존재하는 경우는, 사이즈 0 에 절약할 수 있다. 그렇지 않은 경우는, 신규 파일이 작성된다. 출력은 파일에 기입해져 버퍼에 넣어진다
예외:
FileNotFoundException - 지정된 캐릭터 라인이 기존의 파일을 나타내지 않는 경우, 기입해 가능한 일반적으로 파일 및 신규의 일반적으로 파일이 그 이름으로 작성할 수 없는 경우, 또는 파일의 오픈 또는 작성중에 그 외의 에러가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해,checkWrite(fileName) 가 파일에의 기입해 액세스를 거부했을 경우
도입된 버젼:
1.5

PrintWriter

public PrintWriter(String  fileName,
                   String  csn)
            throws FileNotFoundException ,
                   UnsupportedEncodingException 
행의 자동 플래시는 실시하지 않고 , 지정된 파일명과 캐릭터 세트로 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간 OutputStreamWriter 를 작성합니다. 이것은, 제공된 캐릭터 세트를 사용해 문자를 encode 합니다.

파라미터:
fileName - 이 라이터의 행선지로서 사용되는 파일의 이름. 파일이 존재하는 경우는, 사이즈 0 에 절약할 수 있다. 그렇지 않은 경우는, 신규 파일이 작성된다. 출력은 파일에 기입해져 버퍼에 넣어지는
csn - 지원하는 charset 의 이름
예외:
FileNotFoundException - 지정된 캐릭터 라인이 기존의 파일을 나타내지 않는 경우, 기입해 가능한 일반적으로 파일 및 신규의 일반적으로 파일이 그 이름으로 작성할 수 없는 경우, 또는 파일의 오픈 또는 작성중에 그 외의 에러가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해,checkWrite(fileName) 가 파일에의 기입해 액세스를 거부했을 경우
UnsupportedEncodingException - 지정된 캐릭터 세트가 지원되어 있지 않은 경우
도입된 버젼:
1.5

PrintWriter

public PrintWriter(File  file)
            throws FileNotFoundException 
행의 자동 플래시는 실시하지 않고 , 지정된 파일로 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간 OutputStreamWriter 를 작성합니다. 이것은, 이 Java 가상 머신 인스턴스의디폴트 캐릭터 세트를 사용해, 문자를 encode 합니다.

파라미터:
file - 이 라이터의 행선지로서 사용되는 파일. 파일이 존재하는 경우는, 사이즈 0 에 절약할 수 있다. 그렇지 않은 경우는, 신규 파일이 작성된다. 출력은 파일에 기입해져 버퍼에 넣어진다
예외:
FileNotFoundException - 지정된 파일 객체가 기존의 파일을 나타내지 않는 경우, 기입해 가능한 일반적으로의 파일 및 신규의 일반적으로 파일이 그 이름으로 작성할 수 없는 경우, 또는 파일의 오픈 또는 작성중에 그 외의 에러가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해,checkWrite(file.getPath()) 가 파일에의 기입해 액세스를 거부했을 경우
도입된 버젼:
1.5

PrintWriter

public PrintWriter(File  file,
                   String  csn)
            throws FileNotFoundException ,
                   UnsupportedEncodingException 
행의 자동 플래시는 실시하지 않고 , 지정된 파일과 캐릭터 세트로 새로운 PrintWriter 를 작성합니다. 이 간이 생성자 은, 필요한 중간 OutputStreamWriter 를 작성합니다. 이것은, 제공된 캐릭터 세트를 사용해 문자를 encode 합니다.

파라미터:
file - 이 라이터의 행선지로서 사용되는 파일. 파일이 존재하는 경우는, 사이즈 0 에 절약할 수 있다. 그렇지 않은 경우는, 신규 파일이 작성된다. 출력은 파일에 기입해져 버퍼에 넣어지는
csn - 지원하는 charset 의 이름
예외:
FileNotFoundException - 지정된 파일 객체가 기존의 파일을 나타내지 않는 경우, 기입해 가능한 일반적으로의 파일 및 신규의 일반적으로 파일이 그 이름으로 작성할 수 없는 경우, 또는 파일의 오픈 또는 작성중에 그 외의 에러가 발생했을 경우
SecurityException - 시큐리티 매니저가 존재해,checkWrite(file.getPath()) 가 파일에의 기입해 액세스를 거부했을 경우
UnsupportedEncodingException - 지정된 캐릭터 세트가 지원되어 있지 않은 경우
도입된 버젼:
1.5
메소드의 상세

flush

public void flush()
스트림을 플래시 합니다.
정의:
인터페이스 Flushable 내의 flush
정의:
클래스 Writer 내의 flush
관련 항목:
checkError()

close

public void close()
스트림을 닫아, 거기에 관련하는 모든 system resource를 해제합니다. 벌써 닫혀지고 있는 스트림을 닫아도, 무슨 영향도 없습니다.
정의:
인터페이스 Closeable 내의 close
정의:
클래스 Writer 내의 close
관련 항목:
checkError()

checkError

public boolean checkError()
스트림이 닫혀지지 않은 경우는, 그 스트림을 플래시 해, 에러 상태를 체크합니다.
반환값:
기본이 되는 출력 스트림상 또는 형식 변환중에, 출력 스트림로 에러가 검출되었을 경우는 true

setError

protected void setError()
에러가 발생한 것을 나타냅니다.

이 메소드를 사용하면(자),clearError() 가 불려 갈 때까지,checkError() 가 계속해 불려 가 true 가 돌려주어집니다.


clearError

protected void clearError()
이 스트림의 에러 상태를 해제합니다.

이 메소드를 사용하면(자), 다른 기입 처리가 실패해,setError() 가 불려 갈 때까지,checkError() 가 계속해 불려 가 false 가 돌려주어집니다.

도입된 버젼:
1.6

write

public void write(int c)
단일의 문자를 기입합니다.
오버라이드(override):
클래스 Writer 내의 write
파라미터:
c - 기입하는 문자를 지정하는 int

write

public void write(char[] buf,
                  int off,
                  int len)
문자의 배열의 일부를 기입합니다.
정의:
클래스 Writer 내의 write
파라미터:
buf - 문자의 배열
off - 문자의 기입 개시 오프셋(offset)
len - 기입하는 문자수

write

public void write(char[] buf)
문자의 배열을 기입합니다. 입출력 예외를 억제해야 하기 때문에, 이 메소드를 Writer 클래스로부터 상속할 수 없습니다.
오버라이드(override):
클래스 Writer 내의 write
파라미터:
buf - 기입하는 문자의 배열

write

public void write(String  s,
                  int off,
                  int len)
캐릭터 라인의 일부를 기입합니다.
오버라이드(override):
클래스 Writer 내의 write
파라미터:
s - 캐릭터 라인
off - 문자의 기입 개시 오프셋(offset)
len - 기입하는 문자수

write

public void write(String  s)
캐릭터 라인을 기입합니다. 입출력 예외를 억제해야 하기 때문에, 이 메소드를 Writer 클래스로부터 상속할 수 없습니다.
오버라이드(override):
클래스 Writer 내의 write
파라미터:
s - 기입해지는 캐릭터 라인

print

public void print(boolean b)
boolean 형의 값을 출력합니다. String.valueOf(boolean) 에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
b - 출력되는 boolean

print

public void print(char c)
문자를 출력합니다. 문자는 플랫폼의 디폴트의 문자 인코딩에 따라 1 개 이상의 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
c - 출력되는 char

print

public void print(int i)
정수를 출력합니다. String.valueOf(int) 에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
i - 출력되는 int
관련 항목:
Integer.toString(int)

print

public void print(long l)
long 정수를 출력합니다. String.valueOf(long) 에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
l - 출력되는 long
관련 항목:
Long.toString(long)

print

public void print(float f)
부동 소수점수(실수)를 출력합니다. String.valueOf(float) 에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
f - 출력되는 float
관련 항목:
Float.toString(float)

print

public void print(double d)
배정밀도의 부동 소수점수(실수)를 출력합니다. String.valueOf(double) 에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
d - 출력되는 double
관련 항목:
Double.toString(double)

print

public void print(char[] s)
문자의 배열을 출력합니다. 문자는 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
s - 출력되는 char 의 배열
예외:
NullPointerException - snull 의 경우

print

public void print(String  s)
캐릭터 라인을 출력합니다. 인수가 null 의 경우는, 캐릭터 라인 「null」가 출력됩니다. 그렇지 않은 경우, 캐릭터 라인의 문자는 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
s - 출력되는 String

print

public void print(Object  obj)
객체를 출력합니다. String.valueOf(Object) 메소드에 의해 작성된 캐릭터 라인은, 플랫폼의 디폴트의 문자 인코딩에 따라 바이트에 변환되어 이러한 바이트는 write(int) 메소드와 완전히 같은 방법으로 기입해집니다.
파라미터:
obj - 출력되는 Object
관련 항목:
Object.toString()

println

public void println()
행의 단락 캐릭터 라인을 기입하는 것으로, 현재의 행을 종료시킵니다. 행의 단락 캐릭터 라인은, 시스템 프로퍼티 line.separator 로 정의되어 반드시 단일의 개행 문자 ('\n')이다고는 할 수 없습니다.

println

public void println(boolean x)
boolean 치를 출력해, 행을 종료시킵니다. 이 메소드는,print(boolean) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 boolean

println

public void println(char x)
문자를 출력해, 행을 종료시킵니다. 이 메소드는,print(char) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 char

println

public void println(int x)
정수를 출력해, 행을 종료시킵니다. 이 메소드는,print(int) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 int

println

public void println(long x)
long 형의 정수치를 출력해, 행을 종료시킵니다. 이 메소드는,print(long) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 long

println

public void println(float x)
부동 소수점수(실수)를 출력해, 행을 종료시킵니다. 이 메소드는,print(float) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 float

println

public void println(double x)
배정밀도 부동 소수점수(실수)를 출력해, 행을 종료시킵니다. 이 메소드는,print(double) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 double

println

public void println(char[] x)
문자의 배열을 출력해, 행을 종료시킵니다. 이 메소드는,print(char[]) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 char 치의 배열

println

public void println(String  x)
캐릭터 라인을 출력해, 행을 종료시킵니다. 이 메소드는,print(String) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 String

println

public void println(Object  x)
Object 를 출력해, 행을 종료시킵니다. 이 메소드는, 최초로 String.valueOf(x)를 호출해, 출력된 객체의 캐릭터 라인치를 가져옵니다. 다음에,print(String) 를 호출하고 나서 println() 를 호출하는 것과 같이 동작합니다.
파라미터:
x - 출력되는 Object

printf

public PrintWriter  printf(String  format,
                          Object ... args)
지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입하는 편리한 메소드입니다. 자동 플래시가 유효한 경우는, 이 메소드를 호출하면(자) 출력 버퍼가 플래시 됩니다.

이 메소드를 out.printf(format, args) 의 형식에서 호출하면(자), 다음의 호출과 같은 결과가 됩니다.

out.format(format, args) 
파라미터:
format - 「서식 캐릭터 라인의 구문」으로 설명한 서식 캐릭터 라인
args - 서식 캐릭터 라인내의 서식 지시자에 의해 참조되는 인수. 서식 지시자 이외에도 인수가 존재하는 경우, 여분의 인수는 무시된다. 인수의 수는 변동해, 제로의 경우도 있다. 인수의 최대수는,Java 가상 머신 스펙으로 정의된 Java 배열의 최대 사이즈의 제한을 받는다. 인수가 null 의 경우, 동작은변환에 응해 다르다
반환값:
이 라이터
예외:
IllegalFormatException - 서식 캐릭터 라인에 부정한 구문, 지정된 인수와 호환성이 없는 서식 지시자, 인수의 지정이 불충분한 서식 캐릭터 라인, 또는 다른 부정한 조건이 포함되는 경우. 가능성이 있는 서식 에러 모든 자세한 것은, Formatter 클래스 스펙의「상세」섹션을 참조
NullPointerException - formatnull 의 경우
도입된 버젼:
1.5

printf

public PrintWriter  printf(Locale  l,
                          String  format,
                          Object ... args)
지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입하는 편리한 메소드입니다. 자동 플래시가 유효한 경우는, 이 메소드를 호출하면(자) 출력 버퍼가 플래시 됩니다.

이 메소드를 out.printf(l, format, args) 의 형식에서 호출하면(자), 다음의 호출과 같은 결과가 됩니다.

out.format(l, format, args) 
파라미터:
l - 서식 설정시에 적용하는로케일 . lnull 의 경우, 로컬라이제이션은 적용되지 않는
format - 「서식 캐릭터 라인의 구문」으로 설명한 서식 캐릭터 라인
args - 서식 캐릭터 라인내의 서식 지시자에 의해 참조되는 인수. 서식 지시자 이외에도 인수가 존재하는 경우, 여분의 인수는 무시된다. 인수의 수는 변동해, 제로의 경우도 있다. 인수의 최대수는,Java 가상 머신 스펙으로 정의된 Java 배열의 최대 사이즈의 제한을 받는다. 인수가 null 의 경우, 동작은변환에 응해 다르다
반환값:
이 라이터
예외:
IllegalFormatException - 서식 캐릭터 라인에 부정한 구문, 지정된 인수와 호환성이 없는 서식 지시자, 인수의 지정이 불충분한 서식 캐릭터 라인, 또는 다른 부정한 조건이 포함되는 경우. 가능성이 있는 서식 에러 모든 자세한 것은, Formatter 클래스 스펙의「상세」섹션을 참조
NullPointerException - formatnull 의 경우
도입된 버젼:
1.5

format

public PrintWriter  format(String  format,
                          Object ... args)
지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입합니다. 자동 플래시가 유효한 경우는, 이 메소드를 호출하면(자) 출력 버퍼가 플래시 됩니다.

이 객체에 대해서 다른 서식 설정 메소드가 먼저 불려 가고 있었는지 어떠했는지에 관계없이,Locale.getDefault() 에 의해 반환되는 로케일이 항상 사용됩니다.

파라미터:
format - 「서식 캐릭터 라인의 구문」으로 설명한 서식 캐릭터 라인
args - 서식 캐릭터 라인내의 서식 지시자에 의해 참조되는 인수. 서식 지시자 이외에도 인수가 존재하는 경우, 여분의 인수는 무시된다. 인수의 수는 변동해, 제로의 경우도 있다. 인수의 최대수는,Java 가상 머신 스펙으로 정의된 Java 배열의 최대 사이즈의 제한을 받는다. 인수가 null 의 경우, 동작은변환에 응해 다르다
반환값:
이 라이터
예외:
IllegalFormatException - 서식 캐릭터 라인에 부정한 구문, 지정된 인수와 호환성이 없는 서식 지시자, 인수의 지정이 불충분한 서식 캐릭터 라인, 또는 다른 부정한 조건이 포함되는 경우. 가능성이 있는 서식 에러 모든 자세한 것은, Formatter 클래스 스펙의「상세」섹션을 참조
NullPointerException - formatnull 의 경우
도입된 버젼:
1.5

format

public PrintWriter  format(Locale  l,
                          String  format,
                          Object ... args)
지정된 서식 캐릭터 라인 및 인수를 사용해, 서식 첨부 캐릭터 라인을 이 라이터에 기입합니다. 자동 플래시가 유효한 경우는, 이 메소드를 호출하면(자) 출력 버퍼가 플래시 됩니다.
파라미터:
l - 서식 설정시에 적용하는로케일 . lnull 의 경우, 로컬라이제이션은 적용되지 않는
format - 「서식 캐릭터 라인의 구문」으로 설명한 서식 캐릭터 라인
args - 서식 캐릭터 라인내의 서식 지시자에 의해 참조되는 인수. 서식 지시자 이외에도 인수가 존재하는 경우, 여분의 인수는 무시된다. 인수의 수는 변동해, 제로의 경우도 있다. 인수의 최대수는,Java 가상 머신 스펙으로 정의된 Java 배열의 최대 사이즈의 제한을 받는다. 인수가 null 의 경우, 동작은변환에 응해 다르다
반환값:
이 라이터
예외:
IllegalFormatException - 서식 캐릭터 라인에 부정한 구문, 지정된 인수와 호환성이 없는 서식 지시자, 인수의 지정이 불충분한 서식 캐릭터 라인, 또는 다른 부정한 조건이 포함되는 경우. 가능성이 있는 서식 에러 모든 자세한 것은, Formatter 클래스 스펙의「상세」섹션을 참조
NullPointerException - formatnull 의 경우
도입된 버젼:
1.5

append

public PrintWriter  append(CharSequence  csq)
지정된 문자 순서를 이 라이터에 추가합니다.

이 메소드를 out.append(csq) 의 형식에서 호출했을 경우, 다음의 호출과 같은 결과를 얻을 수 있습니다.

out.write(csq.toString()) 

문자 순서 csqtoString 의 스펙에 따라서는, 그 순서 전체가 추가되지 않을 가능성도 있습니다. 예를 들어, 문자 버퍼의 toString 메소드를 호출했을 경우, 그 버퍼의 위치와 리밋트에 의해 정해지는 내용을 가지는 서브 순서가 돌려주어집니다.

정의:
인터페이스 Appendable 내의 append
오버라이드(override):
클래스 Writer 내의 append
파라미터:
csq - 추가되는 문자 순서. csqnull 의 경우는, 이 라이터에 「null」라고 하는 4 문자가 추가된다
반환값:
이 라이터
도입된 버젼:
1.5

append

public PrintWriter  append(CharSequence  csq,
                          int start,
                          int end)
지정된 문자 순서의 서브 순서를 이 라이터에 추가합니다.

이 메소드를 out.append(csq, start, end) (csqnull 가 아니다)의 형식에서 호출했을 경우, 다음의 호출과 같은 결과를 얻을 수 있습니다.

out.write(csq.subSequence(start, end). toString()) 
정의:
인터페이스 Appendable 내의 append
오버라이드(override):
클래스 Writer 내의 append
파라미터:
csq - 문자 서브 순서의 추가원이 되는 문자 순서. csqnull 의 경우,csq 에 「null」의 4 문자가 포함되는것 같이 문자가 추가되는
start - 문자 서브 순서의 최초의 문자의 인덱스
end - 문자 서브 순서의 마지막 문자에 계속되는 문자의 인덱스
반환값:
이 라이터
예외:
IndexOutOfBoundsException - start 또는 end 가 0 보다 작은 값의 경우,startend 보다 큰 경우, 또는 endcsq.length() 보다 큰 경우
도입된 버젼:
1.5

append

public PrintWriter  append(char c)
지정된 문자를 이 라이터에 추가합니다.

이 메소드를 out.append(c) 의 형식에서 호출했을 경우, 다음의 호출과 같은 결과를 얻을 수 있습니다.

out.write(c) 
정의:
인터페이스 Appendable 내의 append
오버라이드(override):
클래스 Writer 내의 append
파라미터:
c - 추가하는 16 비트 문자
반환값:
이 라이터
도입된 버젼:
1.5
Posted by 1010
반응형

KADO-WAH란?

  • 웹 페이지의 접근성(Accessibility) 제공 여부를 국내외 웹 접근성 지침에 따라 자동으로 점검한 후에 그 문제점을 보고서로 제공하고 수정을 지원하여 웹 디자이너 및 프로그래머들이 쉽게 접근성이 있는 웹 페이지를 제작할 수 있도록 도와주는 프로그램입니다.

 

웹 접근성(Web Accessibility)이란?

  • 어떠한 사용자(장애인, 노인 등), 어떤 기술 환경에서도 전문적인 능력 없이도 웹사이트에서 제공하는 모든 정보에 접근하고 이용할 수 있도록 보장하는 것을 말합니다.

 

개발 기관

  • 한국정보문화진흥원(Korea Agency for digital Opportunity & Promotion)

    「정보격차해소에관한법률 제16조」에 근거하여 설립된 정보격차 해소 전담 특별 법인입니다.

 

평가 지침

  • 한국 웹 접근성 지침 (Korean Web Content Accessibility Guidelines 1.0)

  • 미국 재활법 508조의 지침

  • W3C의 Web Content Accessibility Guidelines 1.0

 

특징

  • 한국형 웹 접근성 지침(KWCAG 1.0)을 기준으로 접근성 평가 기능

  • 다수 페이지를 평가

  • 접근성 미비 부분에 대한 수정기능 제공

  • 평가 보고서를 제공 (접근성이 미비 위치 및 통계자료 포함)

 

기대효과

  • 국내 웹 접근성 저변 확대를 통해 모든 이가 제약 없이 쉽게 인터넷 정보에 접근

  • 장애인 및 노인 등 정보취약계층이 일반인과 동등하게 웹 사이트에 접근하여 모든 이가 정보화의 혜택을 함께 누릴 수 있는 기반환경 조성

다운로드

출처
 
Web Content Accessibility Guidelines (WCAG) 2.0

웹표준/웹접근성 점검 리스트



검사 도구

------------------------------------------------------------------------------------------

1)W3C html Validator: Xhtml 1.0 Transitional 표준 문법 준수 판단(http://validator.w3.org)

2)W3C CSS Validator: CSS2.1표준 문법 준수 판단(http://jigsaw.w3.org/css-validator)

3)Kado-Wah:웹접근성 자동 검증툴(http://www.iabf.or.kr/Lab/Kadowah/Kadowah.asp)

4)AIS: IE에서 작동하는 웹접근성 툴바(http://www.visionaustralia.org.au/ais/toolbar/)

5)Firefox Webdeveloper Toolbar: 파이어폭스 웹접근성 툴바(https://addons.mozilla.org/ko/firefox/addon/60)






번호

구분

점검 리스트

점검 방법

비고

1

웹표준

구조(xhtml),표현(CSS),동작(DOM/Script)의 분리

정성검사/html Validator


2


Xhtml 1.0 Transitional 표준 문법 준수

html Validator


3


CSS 표준 문법 준수

CSS Validator


4


브라우저 호환성

(IE6/7/8,사파리3.0,파이어폭스2.0~,오페라9)

정성검사


5


운영체제 호환성

(윈도우2000/XP/Vista,맥OSX10.4/10.5,리눅스Kernel2.6/glib2.4이상)

정성검사


6

웹접근성

대체텍스트 제공

AIS:images->Toggle image/alt


7


적절한 대체 텍스트 제공

정성검사


8


동영상에 동기화된 자막/원고 등을 제공

정성검사


9


색상 이외에 명암,패턴 등으로 콘텐츠 구분 가능

AIS:Color->Grayscale

http://jigsaw.w3.org/css-validator

10


전경색과 배경색 충분한 대비

(상단메뉴,본문콘텐츠,하단 카피라이트 정보 중심)

AIS:Colour->contrast Analyser


11


충분한 텍스트 크기(12픽셀) 및 텍스트 축소/확대 가능

정성검사


12


프레임 사용 제한(4개 이하)

AIS:Structure->Frame Name/Title


13


각 프레임에 타이틀 속성 제공



14


깜빡거리는 객체 사용 제한

AIS:Images->Gif Flicker test


15


동영상 자동 재생 금지 및 제어기능 사용자 선택

정성검사


16


키보드로만 운용가능 및 이동 순서 논리적

AIS:CSS->Disable CSS

AIS:Structure->Show Tab Order

정성검사(탭키/스크린리더)

17


목록상자에서 항목선택후 버튼 클릭해야 기능 작동

정성검사


18


키보드만으로 하위 메뉴 이용 가능

정성검사(탭키/스크린리더)


19


적절한 스킵 네비게이션 제공

AIS:CSS->Disable CSS


20


이용에 시간 제한 있는 경우 경고 및 시간 조절 기능 제공

정성검사


21


불필요한 팝업창 사용 지양(title 속성 제공으로 새창임을 알림)

정성검사

AIS:Structure->JavaScript / New Window Links

22


데이터 테이블은  summary 와 caption 제공

AIS: Structure->Simple Data Table (Complex Data Table)

23


데이터 테이블을 의미적으로 이해할 수 있도록 적절한 태그 사용

AIS: Structure->Show Table Headers


24


페이지의 논리적 구성/선형화

AIS:CSS->Disable CSS

AIS:Structure->Show Tab Order

정성검사(탭키/스크린리더)

25


링크의 목표 위치 명확화

정성검사


26


온라인 서식 구성시 각 서식 제어 요소를 설명하는 레이블 사용

AIS: Structure->Fieldset/Labels


27


키보드 만으로 온라인 서식 입력 및 서식간 이동 가능(서식간 이동 순서 논리적)

정성검사(탭키/스크린리더)


28


부가 어플리케이션의 자체적 접근성 확보(플래시 등)

정성검사


29


부가 어플리케이션이 작동하지 않는 경우에도 대체 콘텐츠 제공

정성검사

Firefox Webdeveloper Toolbar->Disadle->Disable JavaScript->All JavaScript

30


어플리케이션의 링크나 어플리케이션을 다운 받을 수 있는 페이지 링크 제공

정성검사


저작자 표시
Posted by 1010
반응형
1. 개요
문서는 IBM 이클립스의 기본적인 사용법을 설명한 것으로, 따라하기 식으로 서술되어 있다. 이클립스 홈페이지(www.eclipse.org) FAQ 이클립스 도움말을 참조하였다.
2. 화면 구성
이클립스에는 작업의 성격에 따라 여러 perspective 존재한다. 이클립스를 실행시켜보면 화면 왼쪽에 다음과 같은 버튼들이 보인다.
자바 perspective로서 자바 패키지를 기준으로 자바 파일들이 보여진다.
리소스 perspective로서 디렉토리와 파일명을 기준으로 자바 파일들이 분류된다.
자바 브라우징 perspective로서 자바 퍼스펙티브처럼 자바 패키지를 기준으로 분류가 이루어지지만, 그러한 분류가 이루어지는 모양새가 다음과 같다.
CVS 저장소 perspective인데, CVS 대해 모르는 관계로 설명을 하지 않겠다.
디버그 perspective로서 디버깅을 , 유용한 정보들이 보여지는 화면이다.
지금까지 15 정도 사용해 결과로는 자바 perspective 가장 사용빈도가 높았으며, 앞으로 대부분의 설명 화면은 자바 perspective에서 이루어질 것이다.
3.새로운 프로젝트 만들기
이클립스에서는 어떤 작업을 하든지 프로젝트 먼저 만들어져야 한다. 프로젝트를 만들기 위해서는 File 메뉴 -> New -> Project 선택하든가, 아래 왼쪽 그림처럼 도구모음에서 New -> Project 선택할 있다. Project 선택하면, 아래 오른쪽 그림과 같은 화면이 보이는데, 왼쪽 패널에서 [Java], 오른쪽 패널에서 [Java Project] 선택하고, [Next]버튼을 누른다.
이제 프로젝트의 이름을 지어주어야 한다.
왼쪽 그림처럼 프로젝트 이름을 입력해주면 된다. 그리고라는 체크 박스가 보이는데, 이것을 체크하면 이클립스 프로젝트 기본 경로인 <이클립스설치경로/workspace/> 프로젝트 이름에 해당하는 디렉토리가 생성된다.
물론 체크 박스를 언체크하여 이미 존재하는 다른 클래스 패키지들을 연결시킬 수도 있다. 이에 대한 내용은 다음에 다시 언급될 것이다. 지금은 그냥 기본값으로 시작하도록 한다.
[Next]버튼을 누르면 자바 빌드에 관련된 설정을 해주는 대화상자가 뜬다.
다른 것들은 별로 손댈 것이 없으나 [Libraries]탭은 내용 추가가 필요할 수도 있다.
우리는 현재 서블릿 스터디를 하고 있기 때문에 기본 자바 런타임 패키지인 rt.jar외에도 서블릿 패키지인 servlet.jar 제이슨헌터 아저씨가 작성한 cos.jar 필요하다. 추가하고 싶으면 [Add External JARs...]버튼을 선택해서 추가하면 된다. 이렇게 외부 라이브러리를 추가해주어야 이클립스에서 컴파일할 에러가 발생하지 않으며, 코딩시 서블릿 클래스에 대한 코드 어시스트(code assist) 가능해진다.
하지만, 이렇게 외부 JAR 파일을 추가하는 것은 추후에도 가능하므로 지금은 그냥 [Finish] 버튼을 눌러서 프로젝트 생성을 완료하도록 한다. (프로젝트 선택 -> File 메뉴 -> Properties -> Java Build Path 선택하면 위와 똑같은 탭들을 있다.)
4.새로운 클래스 추가하기
좀전에 생성한 프로젝트에 새로운 클래스를 추가해보도록 하겠다. 자바 perspective 왼쪽 패키지 트리( 패널을 ‘Packages 라고 한다)에서 TestProject 선택한다. 상태에서 마우스 오른쪽 버튼을 클릭하여 팝업 메뉴에서 New->Class 선택한다.
이렇게 새로운 클래스를 생성한다고 선택하면 다음 그림과 같이 새로운 자바 클래스를 만들어내는데 필요한 옵션을 설정해야 한다.
현재, 별도의 패키지 구조를 만들지는 않을 것이기 때문에 [Package] 상태(디폴트 패키지) 둔다.
[Name]에는 클래스의 이름을 입력해야 한다. 다른 체크 박스는 손댈 것이 없어 보인다.
마지막에 보이는 세가지 체크 박스에 대해 설명하자면,
첫번째 것은 main 메소드를 자동으로 추가해 것인가?,
두번째 것은 생성자 코드에 상위 클래스의 생성자를 호출하는 super() 메소드를 추가할 것인가?,
세번째 것은 상위 클래스가 추상 클래스로 지정되어 있을 , 추상 메소드를 상속받아서 메소드로 보여줄 것인가를 결정한다.
[Finish]버튼을 누르면 새로운 클래스가 생성될 것이다.
다음 그림과 같이 HelloWorld.java 생성되어야 하며, main 메소드도 자동으로 추가되어 있는 것을 있을 것이다.
5. 소스 입력하기
이제 자바 소스를 컴파일하고 실행시켜볼 예정이기 때문에, 다음과 같은 간단한 소스 파일을 입력해 보도록 하자. 소스는 역시나 헬로우.
이클립스에는 재미있게도, 컴파일 과정이 별도의 메뉴로 제공되지 않는다. 단지 소스 입력을 마치고 저장(Ctrl+s) 하면 자동으로 컴파일이 이루어진다. 그리고 코딩 중에 실시간으로 문법 검사를 해주기 때문에 오타에 의한 에러가 확실히 줄어든다. 만약 코딩을 했는데, 줄의 부분에 전구 마크나 빨간 X 마크가 보이면, 뭔가 잘못되었음을 의미한다.
예를 들어, sayHello() 메소드에 리턴형인 void 빼먹었다고 하자. 그러면 이클립스는 즉각적으로 다음과 같이 sayHello 메소드 앞에 전구 마크를 보여준다. 도대체 무슨 문제인가 궁금하면 전구 마크를 살짝 클릭해 보자. 다음 그림과 같은 화면이 보일 것이다.
외에도 클래스명 오타나 public, static 등과 관련된 문법 사항, import 빠진 경우 거의 완벽한 수준의 실시간 검사를 제공하고 있다. 참고로, 가끔씩 노란 전구 마크가 들어와서 분명히 수정했는데도 불구하고 노란 전구 마크가 빨간 X 마크로 변해, 순간 당혹스럽게 만들기도 한다. 때는 살짝 Ctrl+s 눌러서 저장을 한번 해주면 컴파일을 하면서 아무 문제 없음을 이클립스에서 알게 것이다.
6. 실행하기
앞에서 이미 컴파일이란 별도의 명시적인 단계는 없음을 알았다. 코딩을 완료했고, 화면에 아무런 에러가 보이지 않는다면 이제 위의 클래스를 실행시켜볼 있다.
메뉴에서 [Run]->[Run...] 선택하거나, 도구모음의 [달리기하고 있는 사람]버튼에서 아래 화살표를 클릭한 , [Run...] 선택해보자.
다음과 같은 화면이 것이다.
위의 그림에서 [Java Application] 선택하고, 아래 있는 [New]버튼을 클릭하거나,
또는 [Java Application] 더블 클릭하면, 다음과 같은 화면이 보일 것이다.
현재 작업 중이던 프로젝트가 TestProject이고 메인 클래스가 HelloWorld였다는 사실을 이클립스에서 알고 있기 때문에 스스로 적당한 값들을 채워넣었다. 오른쪽에 여러 탭이 보이는데, 지금은 건드리지 않고 그냥 [Run] 버튼을 눌러보자.
화면 하단이나 어딘가에 [Console ] 보일 것이고, 결과는 위와 같이 “Hello? Kim” 것이다.
7. 디버깅하기
일반적으로 디버깅은 어느 순간 어떤 메소드에 전달된 파라미터의 값이 무엇인지 알고 싶을 , 제어문이 도대체 어떤 순서로 수행되는지 알고 싶을때, 혹은 어떠한 논리적인 오류는 없는지 확인하기 위해 사용한다.
디버깅을 하기 위해서는 컴파일 에러가 발생한 지점 근처나 에러의 근원지라고 의심이 되는 부분에 미리 표시를 해두어야 한다. 디버깅 실행을 하면 이클립스는 이런 표시가 있는 부분에서 잠시 정지하여 프로그래머가 각종 변수의 현재 상태를 파악할 있도록 해준다.
위에서 작성했던 예제로 디버깅을 해보도록 하겠다.
디버깅 과정을 통해 우리는 sayHello에서 인사말 출력을 위해 사용하는 m_to라는 변수에 “Kim”이란 올바른 값이 저장되어 있는지 확인하고자 한다.
먼저 26라인에서 줄번호가 보이는 공간에서 오른쪽 마우스 버튼을 클릭하면 다음과 같은 팝업 메뉴가 보일 것이다. 여기서 [Add Breakpoint] 선택하도록 한다. 선택하고 나면 하늘색 마크가 보일 것이다.
도구모음에서 선택하면 자바 perspective에서 자동으로 디버그 perspective 변경되고, 좀전에 표시한 지점까지 실행이 되며 breakpoint 지점에서 대기하고 있음을 있을 것이다. 다음 그림에서 보는 바와 같이 우측 상단의 [variables ] 통해 현재 m_to 변수가 String 타입이며 값은 “Kim”이란 사실을 있다.
이상의 자세한 디버깅 요령에 대해서 아직은 나도 모르기 때문에 여기까지만 설명하고 차후에 자세한 내용을 익히게 되면 다시 설명할 기회가 있겠지? ^^
8. 프로젝트에 기존의 클래스를 추가하기
항상 클래스를 새로 만드는 것은 아니며 기존의 클래스 파일을 그대로 가져다가 쓰거나, 혹은 어떤 클래스 파일을 테스트해 보기 위해 프로젝트에 포함시킬 수도 있다. 예제에서는 퍼포먼스 튜닝 예제 파일 일부를 TestProject 추가해 보도록 하겠다. 예제 파일은 “F:\STUDY\eclipse_test” 저장되어 있다고 가정하며, 디렉토리 구조는 다음과 같다.
참고로 클래스(PrintWrapper, Dict) 각각 tuning.console, tuning.dict 패키지화 되어있다.
클래스를 TestProject 추가하도록 하겠다. 먼저 [package ]에서 TestProject 선택하고 오른쪽 마우스 버튼을 클릭하여 [Import] 메뉴를 선택한다. 그러면 아래의 왼쪽 그림과 같은 대화상자가 뜨는데, 여기서 [File System] 선택하면, 오른쪽과 같은 대화상자가 뜬다.
상태에서 [Directory] [Browse...]버튼을 눌러서 “F:\STUDY\eclipse_test” 선택한 , 모든 클래스 파일을 체크하도록 한다. 다음 그림을 참고한다.
위의 클래스 파일이 포함된 결과 화면은 다음과 같다.
그런데, 위와 같이 임포트를 결과를 살펴보면 “F:\STUDY\eclipse_test” 있던 클래스 파일들이 “<이클립스설치홈>/workspace/TestProject” 아래에 그대로 복사된 것을 있을 것이다. 이런 식으로 복사해오는 것이 기본 설정이기 때문에 이렇게 작동을 하는 것인데, 만약에 규모가 패키지를 임포트하는 경우라면 공간의 낭비가 아닐 없을 것이다.
이런 문제를 해결하기 위해 실제로 클래스 파일을 이클립스 워크스페이스 복사하지 않고, 원본은 원래 위치에 그대로 두고 단지 경로 정보만 참조해서 프로젝트를 만들 수도 있다. tuning.XXX 패키지를 임포트하기 위해 TuningTest라는 프로젝트를 새로 만들어보자. 처음에 프로젝트를 생성했던 방법대로 하면 되지만, 한가지 다른 점은 다음처럼 프로젝트 경로명에서 [Use Default] 언체크하고 임포트하려는 실제 경로를 선택해야 한다.
위와 같이 제대로 선택을 , 이상 [Next] 필요없이 [Finish]버튼만 누르면 프로젝트 생성이 완료된다.
TuningTest 프로젝트에서 오른쪽 마우스 버튼을 눌러 [Properties] 선택하면 다음과 같은 정보창이 보일 것이다.
[Location] 정보를 보면 이클립스 워크스페이스가 아닌 원래 tuning 패키지의 위치를 참조하고 있음을 있을 것이다.
NOTE!!
지금까지로는 프로젝트에 여러 경로의 클래스 파일을 참조할 수는 없는 것으로 보인다. , 어떤 클래스는 이클립스 워크스페이스에 있는 것을 참조하고, 다른 클래스는 외부 경로만 참조해서 프로젝트에 추가하는 것은 안되는 것이다. 만약 나중에 되는 방법을 알게 되면 수정토록 하겠다. 그런데, 굳이 이렇게 안되도 별로 상관은 없을 같기는 하지만 ^^;;
9. ANT 사용하기
이제부터는 ANT 사용하는 방법을 알아본다. 우선 ANT 실행시키려면 build.xml 파일이 있어야 한다. 나같은 경우 ServletStudy라는 프로젝트를 생성한 , 챕터별로 SourceFolder 생성하고 소스 폴더별로 소스 파일을 관리했다. 모양새는 다음과 같다. 소스 폴더별로 build.xml web.xml 파일이 존재한다.
왼쪽 그림에서 보는 바와 같이, build.xml 파일에서 마우스 오른쪽 버튼을 클릭하면, [Run Ant...]라는 메뉴를 있다. 단순히 메뉴를 선택하면 다음 그림과 같은 대화상자가 보인다.
여기서 build.xml 여러 타겟(target) 엘리먼트들 중에서 특정 타겟을 선정해야 하고 [Finish]버튼을 누르면 ANT 실행이 이루어진다.
그러나 두가지 정도 주의할 점이 있다.
하나는 ANT 실행시키면 다음과 같은 에러 메시지가 있다.
에러 메시지를 살펴보면, 컴파일러를 찾을 없으니 JAVA_HOME 환경변수 설정을 제대로 했는지 확인하라고 한다. 그러나 실상 문제를 해결하려면 다른 방법으로 해야한다. 백날 시스템의 JAVA_HOME 수정해밨자 아무 상관이 없다.
우선 메인 메뉴인 Windows -> Preferences -> External Tools -> Ant 선택하면 다음과 같은 대화상자가 보일 것이다.
위의 문제를 해결하려면 [Classpath]탭에 J2SDK tools.jar 파일이 포함되어 있어야 한다. 네모 안에 있는 항목을 [Add Jar...]버튼을 눌러서 추가하도록 한다.
그리고 나서 다시 [Run Ant...]메뉴를 실행시켜 보자. 수도 있고, 아닐 수도 있는데, 아마도 제대로 안된 경우라면 컴파일 에러가 발생할 것이다. 아마도 servlet COS 관련된 클래스들을 찾을 없다는 메시지들일 것이다.
아직 정확한 이유는 모르겠지만 ANT 이용해서 컴파일을 경우, 시스템 전역에 걸려있는 클래스패스는 의미가 없는 것으로 보인다. build.xml 파일 내에 컴파일 시에 정확한 클래스패스가 모두 명시되어 있어야 한다. 다음과 같이.
<property name="cp" value=".;D:/jakarta-tomcat-4.0.4/common/lib/servlet.jar;D:/jakarta-tomcat-4.0.4/common/lib/cos.jar"/>
<target name="compile" depends="init">
<mkdir dir="${build}"/>
<javac srcdir="${src}" destdir="${build}" classpath="${cp}"/>
</target>
10. JavaDoc 생성하기
자바 헬프 문서를 생성하는 것은 더욱 간단하다. 디렉토리나 프로젝트 혹은 클래스 파일에서 오른쪽 마우스 버튼을 클릭하여 [Export] 메뉴를 선택한다.
왼쪽 그림과 같은 대화상자가 보이면, [javadoc] 선택하고 [Next>]버튼을 클릭한다.
왼쪽 그림처럼 자바 헬프 문서로 만들고 싶은 자바 소스 파일을 선택하고, 자바 문서를 생성할 디렉토리 경로도 지정한다.
그냥 [Finish] 눌러줘도 충분하다.
다른 옵션들을 보고 싶으면 계속 [Next]버튼을 눌러서 확인해 보도록.
이로써 자바 문서 생성도 완료되었다. ^^...
이렇게 자바 헬프 문서로 export하는 외에, JAR 파일로 export 수도 있다. 방법은 간단하므로 설명을 생략한다.
한가지 언급하고자 하는 기능 중에 삭제 파일 되돌리기 기능이 있다. 이클립스 상에서 실수로 파일을 지운 경우 윈도우즈 휴지통에는 흔적이 남지 않기 때문에 정상적인 방법으로는 복구가 불가능하다. 게다가 이클립스는 파일을 지울 , 별달리 경고도 없이 보통은 그냥 지우는 경향이 강하다. 하지만 이런 위험천만한 스타일이 가능한 이유가 있었다. 처음에는 몰라서 잘못 지운 파일을 다시 코딩하는 우를 범했는데, 알고 보니 이클립스 자체적으로 이러한 파일들에 대한 히스토리를 관리하고 있었다. , 자체적으로 휴지통 기능 혹은 되돌리기 기능이 있는 셈이었다.
[package ]에서 디렉토리나 패키지, 혹은 파일을 선택한 후에, 오른쪽 버튼 클릭으로 팝업 메뉴를 띄워보면 [Restore from Local History]라는 메뉴가 있다. 기능을 선택하면 처음부터 지금까지 지워졌던 기억이 있는 모든 기록들이 시간별로 쫘악 정리되어 있는 것을 있다. 중에서 어느 것이 내가 원하는 시점의 파일인지 파악한 , 복구하고자 하는 적당한 파일들을 체크하고 [Restore] 버튼을 클릭하면 된다. 기능이 없다면 정말 피말리는 사건들이 자주 생길 것이다. ^^ 다음의 화면은 참조하기 바란다.
11.기타 유용한 기능들
1. Organize Import / Add Imports
보통 import java.io.*; 이런식으로 임포트를 하게 되는데, 코딩을 끝낸 후에 Organize import 기능을 사용하면 소스 상에서 실제로 사용한 클래스들만을 임포하도록 import 문장을 수정해 준다. 예를 들어,

2. Code Formatter
코딩 스타일을 상세하게 지정할 있어서 자신의 코딩 스타일을 그대로 사용할 있고, 소스 Formatter 기능이 있어 뒤죽박죽되어 있는 소스를 자신이 익숙한 스타일로 한꺼번에 변경할 있다.
3. Refactor
클래스 이름을 수정하거나 패키지가 변경되면, 클래스를 참조하고 있던 다른 모든 클래스까지도 자동으로 수정을 해서 소스 관리가 자동으로 이루어진다.
4. 코딩 실시간 문법 검사 해결책 제시
코딩 중에 실시간 문법 검사를 하며, 문제가 발생하면 가능한 해결책을 여러 가지 제시한다. 여러 가지 해결책을 직접 입력할 필요도 없으며 단지 해결책이 나열된 팝업 메뉴 중에서 가지를 선택하면 스스로 수정해준다.
5. 코드 어시스트
다른 툴에도 존재하는 기능이며, MS 비쥬얼 스튜디오보다는 약간 사용하기 불편하지만 그래도 필요한 기능이며, 코딩 속도를 높여주고, API 문법을 빠삭하게 외우지 않아도 코딩이 가능하도록 해준다. 기본적으로 .() 누르고 500 밀리초 후에 어시스트 팝업이 뜨도록 되어있는데, 이는 너무 느린것 같고 개인적으로는 100 밀리초로 설정하여 사용하고 있다.
출처: - IBM 의 이클립스 사용법 - 자바카페 김정환님(http://www.javacafe.or.kr)
Posted by 1010
반응형
플렉스 개요 - 동영상
Adobe Flex 2 - 한글
--examples
--Designing Flex 2 skins with Flash, Photoshop, or Fireworks
--sample sites
Posted by 1010
02.Oracle/DataBase2009. 4. 4. 16:20
반응형
현재 저장된 nls 파라미터 보기
select * from v$nls_parameters;
시퀄서버는 master DATABASE의 system table 및 view SP만 대충 훌터바도 설정사항이 다 나오는데..오라클은 좀 까탈스러운면이 많은듯하네요..


DB 종료 후
STARTUP MOUNT;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;

-- ko16ksc5601
update sys.props$ set value$='KO16KSC5601' where name='NLS_CHARACTERSET';
update sys.props$ set value$='KO16KSC5601' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='AMERICAN_AMERICA.KO16KSC5601' where name='NLS_LANGUAGE';
or
update sys.props$ set value$='KOREAN_KOREA.KO16KSC5601.KO16KSC5601' where name='NLS_LANGUAGE';

-- ko16mswin949
update sys.props$ set value$='KO16MSWIN949' where name='NLS_CHARACTERSET';
update sys.props$ set value$='KO16MSWIN949' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='KOREAN_KOREA.KO16MSWIN949' where name='NLS_LANGUAGE';

-- UTF8
update sys.props$ set value$='UTF8' where name='NLS_CHARACTERSET';
update sys.props$ set value$='UTF8' where name='NLS_NCHAR_CHARACTERSET';
update sys.props$ set value$='KOREAN_KOREA.UTF8' where name='NLS_LANGUAGE';

commit;
shutdown immediate;
startup

select * from v$nls_parameters;
확인

1. Linux의 경우 설치할 때 지정해 주었던 .bash_profile 파일에서 oracle 언어 환경변수를 아래와 같이 변경
export NLS_LANG = AMERICAN_AMERICA.KO16KSC5601
2. Windows 사용자의 경우 regedit 에서
HKEY_LOCAL_MACHINE -> SOFTWARE -> HOME0 -> NLS_LANG 을
AMERICAN_AMERICA.KO16KSC5601로 수정한 후 재부팅 한다.
DB에 한국어만 사용되면 상관이 없는데...다국어 사용시 유용하리라 생각됩니다.
[출처] Oracle Charset 변경하기 입니다 (ProDBA) |작성자 콰지모도
Posted by 1010
반응형

웹 문서에서 아이디나 비밀번호 또는 다른 데이터 들을 서버측 으로 보낸 다음 수행이 되는 경우가 있다. 이때 문서에서 서버측 으로 데이터가 전달되는 방법이 2가지가 있는데 GET 방식과 POST방식이다. 각각의 방식들은 나름대로의 장단점을 가지고 데이터를 전달하는 역할을 한다.


GET 방식

1.웹 브라우저의 주소 입력란에서 아래와 같이 직접 입력하여도 데이터를 서버로 전송한다.(클라이언트로 부터의 데이터를 이름과 값이 겨합된 스트링 형태로 전달 하므로 각각 이름과 값은 “&”를 이용하여 결합한다.

ex) (http://localhost/chs/book/Request.jsp?Name=Michael&Depy=Computer)

2.기본적으로 데이터베이스에 대한 질의어 데이터와 같은 요청을 위한 정보를 전송할 때 사용

3.GET방식으로 보낼때는 같이 딸려가는 글자수에 제한이 있다(255자).

4.GET 방식을 사용하면 이를 초과하는 데이터가 절단된다.

5.GET 방식을 사용하면 데이터가 주소 입력란에 표시되므로 최소한의 보안도 유지되지 않는다.

6.GET 방식은 정보를 URL의 끝에 질의 문자열로서 서버로

Posted by 1010
반응형

HTML Codes
Again, nothing to do with ASCII really, but has been requested by a number of you out there. To get special characters to show on an HTML web page, special codes can be used (ascii code or word) and are interpretted by the web browser.
Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:24
반응형
select *
from(
    select rownum rnum, e.*
    from (select * from emp doder by ename) e
    order by e.ename;
) ee
where ee.rnum between 1 and 10;
Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:24
반응형
데이터베이스 : 물리적인 운영체제 파일들의 집합
인스턴스 : 오라클 프로세스들과 SGA
* 데이터베이스 파일 :
  - 파라미터 파일(parameter file) : 오라클 인스턴스에게 제어파일(control file)의 위치를
    알려주는 역할을 함(init<oracle_sid>.ora)
    + init<oracle_sid>.ora, tnsnames.ora, listener.ora, sqlnet.ora,
       protocol.ora, names.ora, cman.ora, ldap.ora
    + 가장 중요한 파일은 init.ora
    + oracle 8i까지는 pfile을 이용하였으나 9i부터는 spfile을 이용함
      오라클 구동시 : pfile = filename
  - 데이터 파일(data file) : 데이터베이스에 대한 테이블, 인덱스, 그리고 모드 세그먼트들
     을 포함
    + tablespace, segment, extent, block 으로 구성
    + segment : 데이터베이스의 객체들이 저장됨
    + extent : segment를 구성하며, 하나의 extent는 파일에서 연속적으로 할당된 공간을
                 의미
    + block : extent를 구성하며, 하나의 block은 가장 작은 저장 공간 할당 단위
                 오라클은 block단위로 디스크에 읽고 쓰며, 2kb, 4kb, 8kb, 16kb, 32kb의 크기
                 중에서 선택한다.(16k, 32k는 자주 사용되지 않음)
                 block은 block header, table directory, row directory, empty space,
                 data space 로 구성된다.
              ! block header : block의 종류(테이블, 인덱스등)에 대한 정보, 해당 block에 대
                해 현재 동작중이거나 과거 수행된 트랙잭션들에 대한 정보, 디스크에서의 블록
                의 위치등을 포함
              ! table directory : block에 저장된 행들의 테이블에 관한 정보를 포함
              ! row directory : block에 저장된 행들의 정보를 포함(결국 block에 저장된 행들
                에 대한 포인터 배열이다.)
     + block overheader : block header + table directory + row directory
  - 재실행 로그 파일(redo log file) : 트랜잭션에 대한 로그 정보를 포함
     + 사용자의 실수로 데이터를 삭제후 커밋을 하였다면 재실행 로그 파일을 이용하여
        데이터를 복구 할 수 있다.
     + 재실랭 로그 파일에는 온라인 재실행 로그와 아카이브 재실행 로그가 있다.
        온라인 재실행 로그 : ?
        아카이브 재실행 로그 : ?
  - 제어파일(control file) : 데이터 파일들의 위치와 상태에 대한 관련정보 포함
     + 파라미터파일(init.ora)은 오라클 인스턴스에게 제어파일의 위치를 알려줌
  - 임시파일(temp file) : 디스크 기반의 정렬과 임시 저장소로 사용
     + 정렬 연산의 중간 결과나 RAM에 충분한 공간이 없는경우 질의 결과를 저장하기 위해
       사용
     + 테이블이나 인덱스와 같은 영속적인 데이터 객체들은 결코 임시 파일에 저장되지 않
       지만 임시테이블 혹은 인덱스의 내용은 저장됨
     + 임시 파일에서 사용자의 세션동안 수행된 작업의 롤백 결정에 대하여 임시 파일들이
        UNDO는 할 수 있지만 REDO는 할 수 없음
        (그러므로 임시 데이터 파일은 백업불필요)
  - 패스워드 파일(password file) : 네트워크 환경에서 관리자적인 활동을 수행하는 사용자
    들을 인증하는 데 사용
Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:22
반응형

데이타베이스 사용자라면, 작업 속도가 갑자기 느려지는 현상을 경험하였을 것이다. 이 때에는 먼저, OS 리소스(디스크 I/O 및 free space, CPU 등)를 점검하고, alert.log 화일에 ORACLE 에러가 발생하지는 않았는지 확인하여 본다. 만약, 에러가 발견되지 않았다면, 정상적인 속도로 작업이 처리 되기 위하여 튜닝을 시도해 볼 수 있다. 다음은 dba 권한이 있는 사용자 만이 할 수 있다.     
튜닝은 OS 튜닝(OS parameter, 디스크 I/O), DBMS 튜닝, 응용 프로그램 튜닝의 순서대로 수행한다. OS 튜닝은 데이타 베이스 관리자의 권한만으로는 수행할 수 없다.  참고로, 본문은 ORACLE 세미나 중에서 DBMS 튜닝 중 메인 메모리 튜닝만을 요약하였다.      
      
ORACLE이 사용하는 메모리 영역 중에 튜닝이 필요한 곳은 database buffer, shared sql pool, redo log buffer가 있다. 먼저, 현재의 속도와 튜닝 후의 속도의 비교를 위하여 자주 사용하는 SQL 문에 대하여 tkprof 를 이용한 trace file을 만들어 둔다.     

1.DATABASE BUFFER  

database buffer와 관련된 ORACLE parameter 는 db_block_buffers로서 메모리 내에 있는 데이타 베이스 블럭의 수를 나타낸다. 이 값을 크게 하면, 디스크의 입출력을 줄일 수 있지만 메모리를 낭비하게 된다. 따라서, 알맞은 값은 데이타베이스가 기동 되어 peak time 에 다음의 query 를 수행하여, ratio 필드의 평균값이 92 % 이상이면 된다.(참고 : 다음은 ORACLE V7.1 이상부터 가능.)     

$sqlplus system/manager     
SQL>select round(100*(a.value+b.value-c.value)/(a.value+b.value),2) ratio     
    from sys.v_$sysstat a, sys.v_$sysstat b, sys.v_$sysstat c     
   where a.statistic# = 37 and b.statistic# = 38 and c.statistic# = 39;     

이 ratio가 지나치게 낮으면, $ORACLE_HOME/dbs/init.ora 내부에 있는 db_block_buffers 를 조금씩 늘려가며 위의 query 를 수행하여 변화를 monitoring 한다.      

2.SHARED POOL SIZE  

공유 커서와 공유 SQL, 공유 procedure 등을 포함하고 있는 영역으로 library cache와 dictionary cache의 사용율을 조사하여 shared_pool_size 의 크기를 변경한다.      

$sqlplus system/manager     

1)library cache  
SQL>col "Library Cache Miss Ratio(%)" format a40     
SQL>select to_char(sum(reloads)/sum(pins)*100,''990.99'') "Library Cache Miss Ratio(%)"

           from v$librarycache;     

위의 값이 1 ~ 2 % 보다 작은 것이 좋다.      

2)dictionary cache  
SQL>col "Dic. Cache Miss Ratio (%)" format a40     
SQL>select to_char(sum(getmisses)/sum(gets)*100,''990.99'') "Dic. Cache Miss Ratio (%)"

           from v$rowcache;     

위의 값은 10% 보다 작은 것이 좋다.     

분석결과 library cache 와 dictionary cache 의 miss ratio 가 위의 값보다 클 경우, shared_pool_size 를 증가시킨다.      

3)redo log buffer  
redo log buffer 를 포함하고 있는 디스크에 입출력 병목이 발생한다면, log_buffers 를 증가시켜야 한다 (단, 1M 를 넘지 않도록 한다.) commit 수행 시 db_block_buffers 의 내용을 redo log buffer 로 복사하게 되는데, 이 때 내부적으로 latch 를 사용하게 된다. 다량의 update 또는 OLTP 업무에서는 다음의 SQL 문을 수행하여 latch waiting 이 얼마나 되는지 조회하여 관련된 parameter 를 변경한다.     

$sqlplus sys/xxxxxxxx     
SQL>col  "misses_gets_ratio" format 90.999     
SQL>col "immediate misses_gets ratio" format 90.999     
SQL>select ln.name, nvl(misses/decode(gets,0,1),0) "misses_gets_ratio",     
       nvl(immediate_misses/decode(immediate_gets,0,1),0)      
       "immediate misses_gets ratio"     
    from v$latch l, v$latchname ln     
   where ln.name in (''redo allocation'',''redo copy'')

          and ln.latch# = l.latch#     
  order by ln.name desc;     

위의 값이 1% 를 초과하면 latch contention 이 일어나고 있는 것이므로, 대용량의 online transaction이 발생하는 경우에는 log_simultaneous_copies 를 CPU 갯수의 2배 정도로 정의하고, log_small_entry_max_size 는 OLTP 의 경우에는 400 정도로 하고, batch job 의 경우에는 800 이상으로 설정한다.     

한번의 튜닝으로 최적의 값을 얻어내기는 어려우므로 철저한 계획을 세운 후에 변경하고 여러 날에 걸쳐 monitoring 하여야 한다. 또한, 변경에 문제가 있을 경우 다시 이전으로 돌아갈 수 있도록 이전 값들을 잘 보관해야 한다. 

페이지 히스토리

2008-10-06 15:29 에 HwanyShine님이 마지막으로 수정

Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:20
반응형

리스너 : 누군가 접속을 하는 것을 기다리는 녀석

서버의 리스너가 실행 중인가 확인 - dos> tnsping ipaddress

Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:18
반응형

//tnsnames.ora : 클라이언트 측 설정


# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\Hsck\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

RESP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = IP_ADDRESS)(PORT = PORT_NUMBER))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SIP)    
    )  
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )



////////////////////////////////////////////////////

//listener.ora ; Server 측 설정


# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_2\Hsck\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =    
     (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oracle\product\10.2.0\db_2\Hsck)
      (PROGRAM=PLSExProc)
    )  
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = b)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      (
       (CONNECT_DATA =
        (SERVICE_NAME = RESP)    
        (SID_NAME=RESP)
    )
    )
  )

Posted by 1010
02.Oracle/DataBase2009. 4. 4. 13:15
반응형

Startup

STARTUP [DBA] [FORCE] [PFILE=filespec] [EXCLUSIVE | SHARED] [MOUNT dbname | OPEN dbname] [NOMOUNT]


sqldba lmode=y svrmgrl 로그인 한다.

SVRMGR> connect internal

SVRMGR> startup;


Starting an Instance without Mounting a Database

SVRMGR> startup nomount;

Starting an Instance and Mounting Database

SVRMGR> startup mount ORA71;


specific maintenance operations 이행하고자

  • renaming datafiles
  • adding, dropping, or renaming redo log files
  • enabling and disabling redo log archiving options
  • performing full database recovery


Starting an Instance and Mounting and Opening a Database

SVRMGR> startup;

  • Normal Database Operation 의미
  • 보편적인 database access Operation 이행하고자


Restricting Access to a Database at Startup

SVRMGR> startup dba;

  • 데이타베이스는 administrative pesonnel에게만 유용
  • perform structure maintenance, such as rebuilding indexes
  • perform an export or import!! of database data
  • perform a data load (with SQL *Loader)
  • temporarily prevent typical users from using data


Forcing an Instance to Start

SVRMGR> startup force;

  • 현재의 instance 비정상적인 환경에 의해 shutdown되지 않을
  • instance 시작할 문제가 생긴 경우


Starting in Exclusive or Parallel Mode

  • Exclusive Mode : 처음 db mount instance만이 database mount 가능
  • Parallel Mode : Parallel Mode에서 시작된 다른 Instance 모두 database mount 가능

Starting Up an Instance and Database

SVRMGR> startup open ORA71

2 pfile=/user/oracle/app/oracle/product/7.3.2/dbs/initORA71.ora exclusive restrict;


Shutdown

SHUTDOWN [NORMAL | IMMEDIATE | ABORT]

sqldba lmode=y svrmgrl 로그인 한다.

SVRMGR> connect internal

SVRMGR> shutdown


NORMAL

  • Shutdown 실행후에는 새로운 연결도 허락되지 않는다.
  • database Shutdown되기 전에 oracle7 현재 연결된 모든 사용자들이 연결을 해제할 까지 기다린다.

IMMEDIATE

< 사용되는 경우 >

  • Power Shutdown 일어나게 경우에 실행한다.
  • database applilcation중의 하나가 불규칙적으로 동작할 경우에 실행한다.

< 결과 >

  • 현재 Oracle7 의해 처리중인 SQL문은 즉시 종결된다.
  • 완료되지 않은 트랜잭션들은 롤백된다.
  • Oracle7 사용자가 연결을 데이타베이스에 끊을 때까지 기다리지 않는다.

ABORT

< 사용되는 경우 >

  • Shutdown 다른 type(NORMAL, IMMEDIATE) 전혀 동작하지 않을 경우
  • 즉시 database shutdown 필요가 있을 경우
  • database instance start 문제가 생긴
    경우
  • database application중의 하나가 불규칙적으로 동작할 경우


< 결과 >

  • Oracle7 의해 처리중인 SQL문은 즉시 종결된다.
  • 완료 되지않은 트랜잭션들은 롤백된다.
  • 경우 Oracle7 사용자가 연결을 데이타베이스에 끊을 때까지 기다리지 않는다.

페이지 히스토리

2008-10-06 17:37 에 HwanyShine님이 마지막으로 수정

Posted by 1010
02.Oracle/DataBase2009. 4. 4. 11:27
반응형
아래는 스크랩내용

Explorer 를 이용하여 컨텐트를 보거나 동영상을 보거나 플래시를 보거나 조금이라도 움직임이 있는 것을 보려고 할 때 Explorer 오류가 나타나는 경험은 모두들 해보셨을 거에요.
오류보고를 백날 보내도 ㅡ,.ㅡ MS에서는 눈하나 깜박안하는 것 같던데....
오류보고를 보내기 전에 "자세한 내용보기"를 클릭하여 보면 Modname 에 ntdll.dll이라고 떡하니 쓰여있는 오류가 있습니다.
정말이지...이런 메세지가 나올때마다 PC를 포맷하는 것도 한두번이지..

그래서 네이버에게 물어봤습니다.
ㅎㅎㅎ 답변이 여러개 나오고 댓글을 봐도 참.. 잘 고쳐서 쓰고 계신 것 같더군요.
여러분들의 답변을 쭉~ 모아봤습니다.
(다행인지 불행인지 저는 ntdll.dll 오류가 안나타나서 확인작업은 못해봤습니다만)

1. 윈도우즈 업데이트를 최종까지 해준다.
SP2까지는 할 필요 없습니다. SP2 싫어하시는 분들 많으시죠?
도대체 이렇게까지 인기없고 사람들에게 외면받는 걸 왜!!!! 만들어 내놓았는지 도무지 이해가 안가지만 뭔 꿍꿍이가 있겠죠 ㅡ,.ㅡ
재부팅하고 다시한번 확인하여서 최종까지 업데이트를 해주세요.

2. DirectX 는 최신버전을 설치한다.
현재 (2005년 11월) 9.0C 버전이 최신입니다.
* PC에 설치된 DirectX버전을 확인하는 방법 : 시작>실행 --> dxdiag "확인"

3. Windows Media Player는 9버전 이상을 설치한다.
PC에 설치되어 있는 OS에 맞는 프로그램을 설치해주셔야 합니다.
가끔 동영상을 보는 프로그램들과 충돌, 혹은 레지스트리에서 값들이 뒤엉키면서 문제가 생기는 경우도 있습니다.
만일 PC에 동영상을 보는 프로그램들 (곰플레이어, 아드레날린, 통합코덱, real player 등)을 삭제를 합니다. Windows Media Player 삭제도 가능하다면 삭제해주시는게 좋습니다. 그 후 재부팅을 하고 Windows Media Player 만 설치를 해줍니다.
기타 프로그램을 설치해주실 거라면 한 두개 정도만 설치해주시는 것이 좋습니다. (아드레날린, 사사미, 통합코덱 등은 추천하지 않습니다)

4. Adware 검색 및 바이러스 검색을 실시하여 바이러스를 제거한다.
이것은 꼭 ntdll.dll 문제뿐만아니라 여러가지 문제를 야기시킬 수 있으므로 자주 검색하여 제거해주시는 것이 좋습니다.

5. Explorer 의 도구 > 인터넷 옵션을 설정을 정상화한다.
여기에는 여러가지 탭이 있습니다. 탭 별로 체크할 부분을 안내해 드리겠습니다.
1) 일반
임시인터넷 파일;[쿠키삭제] [파일삭제]를 해준다. [파일삭제]시에는 반드시 "오프라인 항목을 모두 삭제" 부분에 체크를 한다.
임시인터넷 파일;[설정] 에서 "저장된 페이지의 새 버전 확인"은 '페이지를 열 때마다' 로 "사용할 디스크 공간"은 최소 600MB 정도로 설정한다. [개체보기]에서 상태가 손상되거나 알 수 없음으로 되어 있는 파일은 모두 삭제해준다.
2) 보안
보안수준은 모두 기본 수준으로 맞춰준다.
3) 개인정보
기본 수준을 클릭하여 기본상태를 유지한다.
4) 연결
[LAN 설정] 에서 "자동 구성" 과 "프록시 서버"의 체크박스는 모두 해제하여 준다.
5) 고급
기본값 복원을 한 뒤 "타사 브라우저 확장명 사용" "URL을 항상 UTF-8로 보냄" 체크를 해제하여 준다.

------

보통 여기까지하면 ntdll.dll 오류없이 잘~ 된다고 합니다.
그러나 모두다 잘되면 좋으련만.. 쓸데없이 고집을 피우는 Explorer도 있지요.
이럴 때는 MS에서 제공하는 여러 패치를 적용시켜보는 것도 한 방법입니다.
(제목과 링크를 걸어놓았으니 해당 페이지 내용을 잘 읽어보시고 적절한 것을 설치해주시기 바랍니다)

1. Windows XP 보안 패치: ntdll.dll 취약점을 이용한 IIS 원격 공격

Windows 2000 보안 패치: ntdll.dll 취약점을 이용한 IIS 원격 공격

2. Windows 구성 요소 내에 있는 점검되지 않은 버퍼가 웹 서버를 손상시킬 수 있음

* MS에 연락을 해서 기술 지원을 받을 수도 있습니다. 보안 패치와 관련된 기술 지원 통화는 무료라네요. : Microsoft 고객기술지원부


그래도 안된다!!! ㅠㅠ.. 라고 하신다면 아래 기타사항들이 있으니 참고하여서 실행해 보세요.
잘 된다는 보장은 절대 없습니다. ㅠㅠ..
하지만 포맷은 죽어도 싫다! 라는 분들께는 한번 사용해 봄직한 내용일 수도 있습니다. ㅎㅎ

1. C:WINDOWSsystem32ntdll.dll 파일이 손상되었을 수도 있으니 설치CD를 넣고 검색해서 복사, 덮어쓰기를 하거나 OS 복구를 한다
2. Windows Media Player 10으로 업데이트
3. 레지스트리 편집기에서 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects 제거
4. hksock1.dll, hksock2.dll. hkstart.exe, LkSoundProcessor.ax 파일 제거
5. d'Tomoyos 코덱 제거
6.시작>실행 :msconfig 실행 하여 시작 프로그램의 모든 항목체크를 해제한 후 재부팅하여 문제해결 (추후에 시작프로그램을 하나씩 추가하여 재부팅하면서 문제가 되는 프로그램을 체크)
Posted by 1010
02.Oracle/DataBase2009. 4. 4. 10:26
반응형
Posted by 1010
98..Etc/velocity2009. 4. 3. 13:00
반응형

$res.setHeader("Pragma", "no-cache");
$res.setHeader("Cache-Control", "no-cache");
$res.setHeader("Expire", "0");


response 객체에다가 이렇게 설정

Posted by 1010
반응형

1번페이지에서 2번페이지로와서 2번 페이지에서 링크를 클릭했다고 하자 링크는 2개이다.

location.replace("www.naver.com")과

location.href="www.naver.com"

이다.

replace의 경우 네이버에서 뒤로가기를 눌렀을경우 뒤로가는페이지는 1번페이지가 된다.

href의 경우 2번페이지이다.

replace는 히스토리를 덮어버리는 기능을 하는것이다.

history.length를 참조해보자.



----------  테스트 -------

<a href="#" onclick='document.location.replace("http://www.naver.com");return false;'> replcae</a>

<a href="#" onclick='document.location.href="http://www.naver.com";return false;'> href</a>


위에걸 html 페이지를 생성해서

넣은후 각각 클릭해보자

href는 누른후에 뒤로가기가 활성화돼지만

replace는 활성화가 돼지 않는다.

Posted by 1010