티스토리 툴바


쿠키에 속성값을 한글로 저장하기 위해서는 몇가지 과정이 필요하다. 한글이나 특수문자, 그리고 유니코드들은 쿠키에 저장하기전에 URLEncoder 로 인코딩을 하고, 사용할 때 URLDecoder로 디코딩해주어야 한다. URLEncoder및 URLDecoder는 java.net 패키지에 있다. 다음은 서블릿에서의 예제이다. -------------------------- 1. 폼에서 서블릿으로 넘어온 값을 쿠키에 저장하는 예제 .... response.setContentType("text/html;charset=EUC-KR"); request.setCharacterEncoding("euc-kr"); String username = request.getParameter("username"); String job = request.getParameter("job"); Cookie cookie = new Cookie("username", URLEncoder.encode(username, "euc-kr")); response.addCookie(cookie); cookie = new Cookie("job", URLEncoder.encode(job, "euc-kr")); response.addCookie(cookie); -------------------------- 2. 쿠키의 값을 읽어서 화면에 출력하는 예제 response.setContentType("text/html;charset=EUC-KR"); request.setCharacterEncoding("euc-kr"); PrintWriter out = response.getWriter(); String username = null; String job = null; Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { Cookie thisCookie = cookies[i]; if (thisCookie.getName().equals("username")) { username = URLDecoder.decode(thisCookie.getValue(), "euc-kr"); } else if(thisCookie.getName().equals("job")) { job = URLDecoder.decode(thisCookie.getValue(), "euc-kr"); } } // 화면에 출력 out.println(""); out.println("쿠키확인"); out.println(""); out.println("이름 : " + username + "
"); out.println("직업 : " + job + "
"); out.println(" "); out.println("");
Posted by 슈델미르
TAG jsp, 쿠키

Garbage Collection이란?

program이 점유하여 쓰고 있는 memory 공간 중 더 이상 쓰지 않는 memory 영역을 Garbage라 합니다. 예전의 programming 언어(이하 PL)들은 programmer가 이 garbage를 OS에 반납하는 code를 일일히 작성해야 했습니다(C 좀 하셨던 분들은 malloc()과 free() 함수를 기억하실 것입니다). 그런데 사람이 원래 '화장실 가기 전과 화장실 가고 난 후가 다르다'고, 반납하는 code 작성을 빼먹고 그랬습니다. 그러면 그 program이 도는 machine의 momory가 야금야금 줄어드는 현상이 발생하고(전문 용어로 memory leak이라 하는데, 이런 문제는 일정 시간이 경과해야 발견할 수 있는, 참 찾기 어려운 bug입니다) 급기야는 그 machine의 memory과 꽉 차서 system이 뻗는 현상이 발생합니다.

현대적인 언어들은 이러한 성가신 작업을 자동으로 해 주고 이를 바로 Garbage Collection(이하 GC)이라고 합니다. 그리고 Java도 바로 그 현대적인 PL에 들죠! 아싸~! 바로 JVM 덕분입니다.

그런데, 그런데 말이죠, 'There's no silver bullet in the world'라고, 이 성가신 작업을 programmer들이 안해도 되긴 하나 결코 만능은 아니라는 거~! GC를 자동으로 하는 것은 좋은데, GC를 수행할 때 JVM 상의 program들 수행을 모두 멈추고 GC를 수행하므로 program 성능이 참 나쁘게 하는 부작용도 있습니다. 그래서 JVM의 GC를 잘 안 나게 하고, 나더라도 금방 되게 하는 것이 중요한 성능 향상 수단이 됩니다.



JVM GC 설계자의 고민 - Generation

fig2.gif

위 graph가 표시하는 것이 뭘까요? 결론을 말하면, 생긴 지 얼마 안된 객체는 대부분이 얼마지 않아 필요 없어져서 GC 대상이 되고, 오랫동안 살아남는 객체는 적다 되겠습니다. 즉 생긴 지 얼마 안 된 객체들은 GC 수행을 자주 해야 하고, 생긴 지 좀 객체들은 그래도 GC 수행을 자주 할 필요가 없단 말이 되죠.


그래서 JVM 설계자는 JVM의 Heap 영역을 두 부분으로 나누고 한 부분은 생긴 지 얼마 안 된 객체들을 살게 하고(이 부분은 자주 GC를 해 줘야겠죠?) 한 부분은 오래 산 객체들이 모여 살도록 해서(자주 GC를 할 필요는 없죠) - 그러고 보니 정말 Young, Tenured란 이름이 걸맞네요 - 앞 부분은 빠른 수행이 가능한 GC algorithm을 적용하고 뒷 부분은 오래 걸리긴 해도 꼼꼼하게 GC하는 algorithm을 적용하기로 합니다. 그리고 Java 진영에서는 이러한 것을 Generational GC라 부르죠.


그러면, 이 Generational GC는 어떤 장/단점이 있을까요?

  • 장점: 위와 말한 바와 같이 각 Generation에 대해 효율적인 GC algorithm 적용이 가능합니다.
  • 단점: Java Error 중 유명한 것으로 OutOfMemoryError(흔히 OOM이라고 많이 합니다)가 있는데, 바로 JVM에 더 이상 객체를 생성할 수 없을 정도로 빈 공간이 없을 때 나는 Error입니다. 그런데 이 Error가, 예를 들어 전체 64MB memory가 있는데 이 영역을 다 써서 나는 게 아니라 Young이나 Tenured 영역 중 하나가 다 차 버려도 OOM이 발생합니다. 예를 들어 Young 영역은 널럴해도 Tenured가 꽉 차면 OOM이 나 버리죠.

여하튼 이러한 이유로, JVM은 memory를 다음과 같이 영역을 구분하여 씁니다.

JVMMemoryArea.png

  • Young: 생긴 지 얼마 안되는 Java 객체(Object)들이 생기고 사는 곳입니다.
  • Tenured: 생긴 지 좀 된 Java 객체들이 사는 곳이죠.
  • Perm: Permernemt의 줄임말로, Java 함수의 몸체 부분이나 static 변수 같은 변할 일이 없는 것들이 사는 영역입니다.


JVM GC 설계자의 고민 - GC Algorithm

JVMGCDesignConsideration.png

위 그림은 또 뭘까요? GC algorithm의 분류 체계라 말할 수 있을 것인데요, 각각을 설명하면 다음과 같습니다.


  • Serial / Parallel: GC 대상을 하나의 Garbage Collector 혼자서 모든 garbage를 차례대로 다 치우느냐(Serial), 여러 개의 Garbage Collector가 나눠서 함께 치우느냐 되겠습니다. CPU가 여러 개인 system에서 Serial GC는, 비록 CPU가 여러 개 있어도, garbage collector가 1개만 돕니다. 그런데 Parallel GC는 여러 개가 돌죠. Parallel GC가 당연히 빠르겠지만, 아무래도 좀 더 복잡하고 잠재적으로 memory 단편화를 더 일으킬 수는 있습니다. (일반 PC 쓰는 분들은 Parallel GC는 나랑 해당 사항 없겠네 하시겠지만, 요새 dual core CPU가 일상화되었으니 Parallel GC가 해당 사항이 있을 수도 있겠죠?)
  • Stop-the-world / Concurrent: Stop-the-world는 GC 수행할 때 program의 수행을 죄다 멈춘 후 하고, Concurrent는 program 수행을 안 멈추고 GC와 program 수행을 같이 합니다. 옛날 JVM은 stop-the-world였기 때문에 GC 하면 죄다 program 수행을 일단 정지 시키므로, 성능 나쁘게 한다고 악명이 높았죠. 여하튼 Concurrent가 일견 더 좋아 보일 수 있으나, GC 수행 중 같이 도는 program이 쓰레기를 만들어 놓고, 그리고 그 쓰레기를 치우지 못할 개연성은 있습니다.
  • Compacting / Non-Compacting / Copying: 쓰레기를 수집하고, 그 쓰레기가 있던 자리는 빈 공간으로 남습니다. 그리고 이런 짓거리를 여러 번 하다 보면, memory는 여기 저기 구멍 난 누더기처럼, 빈 공간과 Java 객체가 쓰고 있는 공간이 여기저기 널려있게 됩니다. 이를 단편화(fragmentation)라 하는데, GC를 하는 김에 이런 단편화 제거도 싸그리 하여 연속된 빈 공간을 확보하는 작업도 할 필요가 있습니다. 왜냐하면 연속된 빈 공간이 있어야 큰 Java 객체가 생겨도 빈 공간 찾아 해메는 시간을 줄이거든요. 이러한 단편화 제거를 compacting이라 하고, compacting은 GC하여 쓰레기를 날린 후 compacting을 하는 것이고, non-compacting은 배째라 하고 안해버리는 것이죠. non-compacting도 나름 타당한 것이, compacting에도 분명 시간이 걸리므로 전체적인 GC 시간을 길게 하는 요소기는 하거든요. 대신 memory의 누더기 현상은 피할 수 없고, 큰 Java 객체라도 만들어야 하면 빈 메memory 공간 찾느라 시간 좀 걸리겠죠. copying은 GC 뒤 살아남은 객체를 옮겨서 compacting을 하기 보다는 그 객체를 특정 영역으로 복사하고, 원본 객체는 쓰레기로 간주하여 추후에 해제되게 하는 방식의 GC법입니다. 영역을 정해놓고 영역 전체를 무차별적으로 날려버리는 식의 쓰레기 수집이 가능하고, 그럼으로써 연속된 공간도 아울러 확보하는 것이 장점이나, 아무래도 복사하는데 시간이 들고, 살아남은 객체와 원본 객체라는 두 벌의 객체가 존재하므로 memory 사용량이 다른 방식에 비해 좀 큰 게 사실입니다.


JVM의 Garbage Collector

Sun Microsystems가 배포하는 Java SE 5 update 6 이후 version의 JVM에는 4개의 Garbage Collector가 있습니다.


Collectors.png

이 중 기본적으로 쓰이는 Collector는 Serial Collector입니다. 그럼, 각각을 살펴볼까요?



Serial Collector

Serial Collector는 Serial, Stop-the-world 방식의 collector입니다. 그리고 java command line option으로 -XX:+UseSerialGC를 주면 JVM은 이 collector를 씁니다. 그런데 young generation과 tenured generation을 처리하는 방식이 좀 틀립니다. 이 각각을 자세히 살펴보겠습니다.


Young Generation GC

serial collector는 young generation GC에 copying 방식을 씁니다. 즉 serial collector가 young generation을 GC하는 방식은 serial, stop-the-world, copying 방식이라 할 수 있죠.

 MinorGC_01.png

  • 자바 객체는 Eden 영역에 태어납니다. 이를 memory 할당(allocation)이라 합니다. 즉 Eden은 모든 Java 객체의 고향이죠.

MinorGC_02.png

  • Eden 영역이 간당간당해져서 GC 필요성이 생기면 살아야 할 놈은 S0으로 복사합니다.

MinorGC_03.png

  • Eden 영역을 다 날립니다(사실은 이때 S1 영역도 같이 날립니다)!

 MinorGC_04.png

  • 또 Eden에 Java 객체들이 태어납니다.

MinorGC_05.png

  • 그러다 또 Eden이 간당간당하면 이번엔 살아야 할 놈들을 S1으로 복사합니다. 이 땐 S0에서도 살아야 할 놈들은 S1으로 복사합니다.

MinorGC_06.png

  • 또 한 번 Eden과 S0를 다 날립니다(으... Java 객체의 대규모 학살...)!

음.... 정말 Survivor 영역은 이름 그대로 생존자가 사는 곳이군요.... 보시다시피 Eden 영역은 말 그대로 Java 객체가 처음으로 태어나는 고향 같은 곳(성경에 따르면 최초의 인류인 아담과 하와가 살던 곳이 Eden이죠?), Survivor 영역은 몇 번의 대학살(?) 끝에 살아 남은 Java 객체들이 사는 곳으로 용도가 구분되어 있습니다. 어쨌든 위와 같이 S0, S1을 번갈아 가며 말 그대로 생존자를 끌어모으고 나머지 영역은 다 날리는 식으로 GC를 수행합니다.


또한 이렇게 S0, S1을 왔다갔다하면서 질기게 생존하는 Java 객체들은 어느정도 와리가리를 하면 Tenured 영역으로 옮겨가는데 이를 승진(promotion)이라고 합니다. Tenured 영역으로 넘어갔다는 이야기는 어느 정도의 생존성을 보장 받았다는 이야기니 승진이라고 봐도 되겠죠?


Tenured Generation GC

Serial Collector의 Tenured 영역을 위한 GC algorithm은 Mark - Sweep - compact란 방식을 취하는데, 이는 글자 그대로 먼저 Java 객체를 주욱 훑어 쓰레기에는 표시를 하고, 그 다음 쓰레기로 표시한 Java 객체가 차지하는 memory 영역을 해제한 다음, 살아남은 객체들을 한 곳으로 싹 몰아 연속된 큰 빈 공간을 확보하는 방식입니다.
그럼 이것도 차근차근 GC되는 과정을 살펴보도록 하겠습니다.

mark-sweep-compact.png

mark phase에서는 쓰레기를 식별하여 표시하고(mark), sweep phase에서는 표시한 쓰레기를 날린 다음,  compact phase에서는 Tenured 영역의 시작으로 살아남은 객체를 좌악 이동시켜서 compaction을 합니다(이를 sliding compaction이라 합니다. 말 그대로 살아남은 객체가 스르륵 미끄러지듯 이동하죠?)



Parallel Collector(Throughput Collector)

Serial Collector의 young generation GC 기능 개선판으로, 간단하게 말하면 collector를 하나만 돌리는 것이 아니라 한꺼번에 여러 개 돌려 시간 단축을 꾀합니다. multiprocessor system에서나 빛을 보는 방식입니다만, PC용 CPU도 dual core CPU가 나오는 상황이므로 꽤 쓸만합니다. 이 collector의 목적은, 아무래도 자주 발생하게 마련인 young generation GC 시간을 단축시켜 전체적인 program의 thoughput을 개선하기 위함입니다. 그런데 tenured generation GC는 Serial GC의 그것과 똑같으며, young generation GC의 경우도 하나하나의 collector가 수집하는 방식은 serial GC의 그것과 같습니다.


이 collector를 쓰기 위한 command line option은 -XX:+UseParallelGC입니다.


Comparison1.png


파랑 화살표가 일반 program 수행, 주황색 화살표가 collector 수행을 나타냅니다. idea는 간단합니다. multiprocessor system에서 일단 모두 program 수행을 멈추어 놓고 1개가 아닌 여러 개의 garbage collector가 돌아 쓰레기를 처리하여 수행 중단 시간 단축을 꾀합니다. 하나하나의 GC가 처리하는  Young Generation의 경우, serial collector의 young generation GC와 같습니다.


언제 쓰면 좋지?

여러 개의 CPU를 가지고, program 수행 중단이 자주 일어나지 않아서 제약이 덜하긴 하지만, 한번 중단되면 시간이 좀 긴 상황에서 적용하면 개선 효과가 큽니다. 이런 류의 program 예는 batch 처리, 과금, 급여 처리, 과학 기술 관련 연산 등을 꼽을 수 있습니다(전부 덜 interactive한 성격의 program들이군요).



Parallel Compacting Collector -> 보강 필요

이 collector는 Java SE 5 update 6에서부터 처음 나온 collector입니다. Parallel collector와의 차이점은 이 놈은 tenured generation을 위한 새로운 GC algorithm을 적용했다는 점이죠. 점진적으로 Parallel Collector는 이 collector로 대체할 예정이라네요. 허긴, Parallel Collector는 Tenured Generation GC는 나아진 것이 없죠. young generation GC algorithm은 Parallel Collector와 똑같으므로 넘어가겠습니다.



Concurrent Mark-Sweep(CMS) Collector

위에서 살펴 본 collector들이 단위 시간당 최대 throughput 획득이 목적이라면, 이 collector는 빠른 응답 시간(response time)이 목적입니다. 이 목적을 달성하기 위해서 본 collector(응? bone collector?)는 Tenured Generation을 청소할 때 유발되는 Stop-The-World 시간을 최소화하는 전략을 세웁니다. 이 collector가 Young Generation을 청소하는 algorithm은 Parallel Collector와 똑같으므로 여기서는 Tenured Generation 청소 algorithm만 알아봅니다.


Tenured Generation GC

CMS Collector의 GC는 initial mark, concurrent mark, remark, concurrent sweep의 4단계(phase)로 나뉩니다. 그러고보니 한 번 쓰레기 청소 하려고 쓰레기라고 표시하는 작업을 무려 세 번이나 하는군요. Bingo~! 표시 작업을 나눠서 함으로써 한 번 멈출 때 길게 멈추는 것이 아니고 잠깐 잠깐 멈춘 여러 번 멈춤으로써 응답 시간을 개선하는 것이 이 collector 동작 방식의 핵심입니다(전체적인 stop-the-world 시간을 짧게 하려는 것이 아닙니다! 전체 잠깐 잠깐 멈춘 시간을 모두 합산하면 다른 collector의 stop-the-world 시간보다 더 걸릴 수도 있습니다).


그러면 각각을 찬찬히 뜯어먹어 보가써~요! 먼저 아래 그림과 같은, 곧 GC를 해야 하는 JVM memory 상태가 있다고 합시다.

CMSCollector-0.png

  Thread A, B는 현재 돌고 있는 program이고 heap에는 가 ~ 파 까지의 Java 객체가 존재하는 상황입니다. 이 Java 객체 중 살 놈과 죽을 놈을 판별해서 GC를 해야 하는 거죠.

CMSCollector-1.png

  • initial mark: 일단 모든 program의 수행을 중단시키고 각 program에서 직접 참조하는 Java 객체들을 살 놈으로 표시한 다음 멈췄던 program 수행을 재개시킵니다. 여기서는 Thread A, B를 멈추고 그 둘이 직접 참조하는 가 ~ 마 객체를 살 놈으로 표시한 다음, Thread A, B를 다시 수행시키죠. 모든 살아야 할 객체를 다 식별하는 것이 아니라 program들이 직접 참조하는 객체만 살 놈으로 인식하는 작업을 수행하므로 program 중단 시간이 짧죠.

CMSCollector-2.png

  • concurrent mark: Initial Mark 후 다시 표시 작업을 수행하는데 이 때는 program을 안 멈추고 표시 작업을 합니다. 그 다음 initial mark 때 살 놈으로 표시당한 객체들을 주욱 훑으면서, 이 객체들이 참조하는 다른 객체들을 살 놈으로 표시합니다. 이 때는 program 수행을 중단하지 않지만, 부작용(side effect)이 있긴 있습니다. 위 그림에서는 바로 6번과 하 객체 같은 것들인데요, program을 중단시키지 않으므로 concurrent mark 작업 하는 사이에 GC 이후에도 살아남아야 할 객체가 생길 수가 있습니다. 이래서 remark 단계가 더 있는 거죠.

CMSCollector-3.png

  • remark: Concurrent Mark 동안 생긴, 살아남아야 할 객체들을 식별하는 단계입니다. 이 단계는 살 놈, 죽을 놈을 구별하는 최종 단계로, 이 때에는 표시하는 동안 살아남아야 할 객체가 또 생기면 안되므로, 모든 program을 중단시키고 표시 작업을 합니다. 위 그림에서 회색으로 표시한 자 ~ 파 객체는 최종적으로 쓰레기로 표시된 객체를 나타냅니다.

CMSCollector-4.png

  • concurrent sweep: 쓰레기를 싹 날리는 단계입니다. program 수행을 중단하긴 하지만 Collector가 여러 개 돌면서 날리므로 속도가 빠릅니다.

어떨 땐 collector 여러 개를 한꺼번에 돌리고, 어떨 땐 하나만 돌리고, 어떨 땐 program을 죄다 멈추고, 어떨 땐 program을 안 멈추고... 헷갈리죠? 아래 그림을 보시면 좀 명확할 겁니다.

Comparison2.png

파랑 화살표가 일반 program 수행, 주황색 화살표가 collector 수행을 나타냅니다. stop-the-world pause가 자주 발생하긴 하지만 멈추는 시간 자체는 짧죠?


 CMS Collector의 안좋은 점

세상에 공짜가 어딨나요, 이 collector의 안 좋은 점도 살펴봅시다.


  1. 다른 collector는 표시를 수집 한 번 하려면 표시 작업을 한 번 하지만, 이 collector는 세 번이나 표시합니다. 짐이죠.
  2. CMS Collector는 쓰레기를 수집하여 memory를 해제하지만, 다른 collector와는 달리 compaction을 하지 않습니다. 그래서  memory 단편화는 필연적입니다. 또한 tenured 영역으로 어떤 객체가 승진되어 오면, 이 객체 덩치가 들어갈만한 빈 공간을 찾느라 시간이 걸리는 짐이 더 생깁니다. 무엇보다도, 다른 collector들은 compaction을 하므로 빈 공간을 인식하려면 빈 공간의 시작 주소만 알면 되지만, 이 collector는 진짜 Free List라는 것을 유지해야 합니다. 이 또한 짐이죠.
  3. 이 collector는 다른 collector보다 heap 공간을 더 먹습니다. concurrent mark 시 다른 program들이 안 멈추고 돌기 때문에 계속 객체가 생길 수 있고, 그러다보니 tenured 영역으로 객체가 승진할 수 있기 때문에 실제로 memory가 꽉 차서 GC를 수행하다가는 이런 상황이 발생할 때 대책이 안 설 수 있습니다. 또한 program이 돌면 새 객체만 생기나요? 쓰던 객체 더 이상 안 쓸 수도 있잖아요? 역시 concurrent mark 시 기껏 살 놈으로 표시했더니만, 고 사이에 실제로는 쓰레기가 되는 객체도 있긴 있습니다. 이런 놈들을 floating garbage(붕 뜬 쓰레기로 번역하면 딱이겠는걸요~)라 부르고, CMS collector는 floating garbage도 생길 개연성이 충분하다는 점입니다. 결론은, 이러한 전차로 이래저래 CMS collector는 다른 collector보다 여유 공간이 더 필요합니다.
  4. 이 collector는 memory 단편화가 생긴다고 했죠? 이 단편화 뒤치다꺼리를 하려면, CMS collecotor는 객체의 평균 크기를 추적하고, 향후 memory 요구 사항을 추정하고, 간간히 free list를 주욱 훑어서 free block을 합치거나 나누거나 하는 작업들도 해 줘야 합니다.

아까도 말씀드렸듯, 이 Collecor는 다른 collector와는 달리 "memory가 꽉 찼네? 슬슬 GC해 볼까?" 했다가는 대책 안 섭니다. 만약 memory가 꽉 차 버리면, 제 아무리 CMS Collector라도 Serial Collector나 Parallel Collector 등이 GC하는 방식이자, stop-the-world 시간이 많이 걸리는 방식인 Mark-Sweep-Compact 전술을 써야 하죠(실제로 씁니다). 이런 불상사(?)를 막으려면  CMS Collector는 이전의 GC 시간 및 얼마나 오랫동안 Tenured 영역이 점유당했는지를 감안한 통계에 기초하여 GC를 개시합니다. 또한 Tenured 영역이 일정 비율 이상 차면 GC를 수행하는 방법도 있는데, JVM의 command line option인 -XX:CMSInitialOccupancyFraction=<n>으로 조정 가능합니다. <n>은 점유 당한 Tenured 영역의 precentage를 나타내는 양의 정수를 쓰며 default는 68입니다(즉 68%의 tenured 영역이 차면 GC를 수행하는 것이 default라는 거죠).


Incremental Mode

CMS Collector의 약점을 살펴보면, concurrent mark가 문제(?)라는 것을 알 수 있습니다. remark가 필요한 것도, 그리고 floating garbage가 생기는 것도 program을 안 중단시키고 표시를 하다 보니 야기되는 문제입니다. 그렇다면 concurrent mark 상태를 길게 가져가는 것보다 짧게 가져가는 것이 이러한 골아픈 문제를 덜 일으키겠죠? 그래서 JVM은 incremental mode라는 것을 도입했는데, 이 mode는 concurrent mark 상태를 간간히 멈추고 program들에게 처리를 양보합니다. CMS Collector는 시간을 잘게 나누어서, young generation GC 사이사이에 틈틈히 concurrent mark를 수행하도록 schedule합니다(음, 일종의 시분할 scheduling이군요). 이 mode는 특히 CPU 갯수가 1, 2개 정도 밖에 안되는 system에서 CMS collector를 수행할 때 좋습니다.


언제 쓰면 좋지?

여러 개의 CPU를 가지고, client에게 빠른 응답을 줘야 할 program 구동에 적합합니다. 예를 들면 Swing으로 GUI를 구성한 Desktop Application이나 JSP나 Servlet을 처리하는 프로그램들 적격이겠네요. 이런 program들은 응답 시간이 오래 걸리면 사용자가 짜증을 내거나 program이 뻗은 줄 아니까요.



GC와 관련된 JVM command line option들

JVMOptions.png


GC 관련 command line option을 Mind Map으로 그려봤습니다. Option에 대해서는 Option 이름, 의미, 그리고 default 값을 알아야 합니다. 이러한 자세한 사항은 Java HotSpot VM Options를 참조하세요.



참고 문헌 및 Web Site

  1. Java HotSpot Garbage Collection
  2. Java SE 6 HotSpot Virtual Machine Garbage Collection Tuning
  3. Java HotSpot VM Options
  4. developerWorks: IBM Developer Kits
  5. IBM JDK 6.0 Information Center
  6. Java™ technology software HP-UX 11.0 & 11i

출처 : 하얀말의 지식창고(http://ryudaewan.springnote.com/pages/145343)

Posted by 슈델미르
TAG java

MS IE에서 자바스크립트 오류를 디버깅하는 작업은, 사실 짜증의 연속이다. 에러가 발생해도 달랑 보여주는 메시지라는 게 원문의 몇번째 줄, 몇번째 문자에서 에러가 발생했다는 성의없는 팝업이 전부였다. (이에 비하면, 모질라의 파이어폭스는 제법 친절한 편이다.)

이게 다 MS가 비주얼 스튜디오(VS)를 좀더 팔아먹으려는 속셈(?)이 아닌가 의심했던 적이 있었다. 비주얼 스튜디오에는 Step Into, Step Over 와 같은 디버깅 실행 명령 뿐만 아니라 Break Point 설정과 변수 Watch 까지 대부분의 디버깅 관련 기능들이 모두 들어 있기 때문이다.

하지만, 좀더 찾아보니, MS에서도 거의 무료로 사용할 수 있는 괜찮은 자바스크립트 디버거를 제공하고 있었다. 그것도 두 가지 씩이나, 제공하고 있다. MSD(Microsoft Script Debugger), MSE(Microsoft Script Editor). 물론, 하도 꽁꽁 숨겨놓아서 쉽게 찾아 쓸 수가 없었다. MSD는 MS 웹사이트에서 여러번의 검색을 거쳐서 다운로드 받아서 설치할 수 있다. MSE는, 세상에, 누가 자바스크립트 디버거가 MS Office 패키지에 들어있다고 상상이나 할 수 있었을까! MS Office XP/2003 버전에 자바스크립트 디버거가 Microsoft Script Editor(MSE)라는 이름으로 들어있다. 그런데, 그냥 디폴트 설치로는 깔리지 않는다. 콕 찍어서 설치해야만 깔린다. (왜 이렇게 숨겨놓고 싶었던 것일까?)

MSD는 완전히 무료 프로그램이다. 반면, MSE는 MS Office의 정식 라이센스가 필요한 프로그램이다. 하지만, 회사 업무용 컴퓨터의 경우 대부분 MS Office 라이센스가 있을 것이므로, 완전 공짜는 아니지만, 거의 공짜에 다름없이 사용할 수 있는 셈이다.

이제 설치가 끝났다고, 해결된 게 아니다. 또다른 설정 작업이 남아있다. 자바스크립트 에러가 발생했을 때 자동으로 디버거가 작동하게 하려면, 확실하게 설정을 해줘야만 한다. (자동 연동 모드) 우선, 비슷한 이름으로 헷갈리게 만드는 Microsoft Script Debugger(MSD)를 설치해야 한다. 설치과정은 간단하다. 그냥 버튼만 꾹꾹 누르면 된다. 설치 완료 후에는 리부팅을 해야 하는 경우가 있다. 그게 싫으면, 설치 전에 모든 응용 프로그램 (특히 IE)을 모두 닫는다. 설치가 완료되면, IE의 보기(V) 메뉴에 스크립트 디버거(U)라는 항목이 생성되어 있는 것을 확인할 수 있다. 사실 MSD도 그런대로 쓸만한 디버거이다. MSE와 비교해보면, 변수값을 watching할 수 있는 창만 없고, 나머지 다른 기능들은 다 있다. 하지만, MSD를 사용해서 command window에서 변수 이름을 하나씩 입력해가며 디버깅하다 보면 성격이 나빠질 우려가 있다. 그러니 조금만 더 써서 MSE 까지 설치하는 편이 낫다.

또다른 설정 작업 하나 더. IE : 도구 - 인터넷 옵션 - 고급 - 스크립트 디버깅 사용 안함 항목이 언체크 되어 있어야 한다.

이제, 스크립트 오류가 발생하면, 몇가지 대화박스에서 MSE를 선택할 것인지를 묻는 과정을 거쳐서, MSE가 본격적으로 작동하게 된다.

MSD의 또다른 작동 방법은, 아예 바탕 화면에 아이콘으로 끌어내 놓고 독립적으로 실행하는 것이다. (독립 실행 모드)C:\Program Files\Microsoft Office\Office10\MSE7.EXE (XP에서는 Office10 폴더, 2003에서는 Office11 폴더 밑에 있음) 파일의 바로 가기를 바탕 화면에 생성한다. 그리곤, 더블 클릭을 해보면, MSE가 실행된다. 디버거 기능 외에도 HTML 화면 편집기로 사용해도 손색이 없다. 꽤 쓸만 한툴이다. 암튼, 자바스크립트 디버깅을 하기 위해서는 실행되고 있는 IE 프로세스와 연결을 해야 한다. 디버그(D)-프로세스(P) 메뉴를 누르면, 대화창이 열리는데, 현재 실행되고 있는 각종 응용 프로그램프로세스 가운데에서 디버깅 하려는 IE 프로세스를 선택하여 '연결' 버튼을 누르면 된다.

주의할 점은, MSD나 MSE 모두 현재 실행중인 프로세스에 '연결'되는 방식이기 때문에 MSD나 MSE를 닫으면 기존의 프로세스도 함께 닫혀 버린다는 것이다. 이걸 방지하려면, 디버깅이 끝난 후에는 디버그(D)-모두 분리(D) 메뉴를 누르면 된다.

설치

MSD는 아래 링크에서 다운로드 받을 수 있다. [2006/10/10: MSE를 설치할 거라면, MSD는 설치하지 않는 게 좋겠다. MSD를 먼저 설치하면 MSE를 설치할 때 뭔가 영향이 있다. MSD는 그냥, 이런 게 있었다는 정도로만 기억해두고, MSE를 본격 설치해서 사용하자]

[윈XP, 2000 이상]
http://www.microsoft.com/downloads/details.aspx?FamilyID=2f465be0-94fd-4569-b3c4-dffdf19ccd99

[윈98, 윈Me]
http://www.microsoft.com/downloads/info.aspx?na=40&amp;p=2&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=2f465be0-94fd-4569-b3c4-dffdf19ccd99&amp;u=http%3a%2f%2fgo.microsoft.com%2f%3flinkid%3d664292

MSE는 MS Office XP/2000 패키지에 들어있다.
설치방법과 설정방법은, 다음과 같다.
1. MS Office 설치 CD를 준비한다.
2. 이미 MS Office가 설치되어 있다면, 워드, 엑셀, 파워포인트, 프론트페이지중 하나를 실행한다.
3. 도구-매크로-Microsoft Script Editor 항목을 클릭한다.
4. 설치 프로그램 요청에 따라 MS Office 설치 CD를 넣고 해당 항목을 찾아서, 설치한다.
* MS Office 를 처음 설치하는 경우에는, 커스텀 설치에서 MSE 항목을 찾아서 선택한 후 설치를 진행한다.

요약

- IE 에서 사용할 수 있는 MS 디버거는 MSD, MSE가 있다. 둘은 조금 다르다. MSE를 자동 연동 모드로 사용하려면 MSD가 있어야 한다. MSE가 더 낫다.
- MSE는 '자동 연동 모드'와 '독립 실행 모드' 두 가지로 실행할 수 있다.
- 모든 스크립트 에러마다 팝업이 뜨는 '자동 연동 모드'가 불편할 때에는, IE : 도구-인터넷 옵션-고급-스크립트 디버깅 안함 항목을 체크하면 된다.
- MSE 디버깅 작업이 끝났다고 바로 MSE 윈도우를 닫지 말고, 디버그(D)-모두 분리(D) 메뉴를 실행하여, MSE 와 디버깅 프로세스의 연결을 끊어 준다. 그래야 디버깅 하던 IE 프로세스가 계속 살아있게 된다.


정정

회사에 있는 피씨는 워낙 많은 프로그램을 깔았다 지웠다를 반복해서 몹시 지저분해져 있다. 그래서 혹시나 하고 집에 있는 피씨에서 다시 실험해봄.

역시나, MSE 하나만 설치해도 된다. 자동 연동 모드를 위해 MSD가 꼭 필요했던 게 아니었다. MSE 하나만으로도 자동 연동 모드와 독립 실행 모드 두 가지 모두 잘 돌아간다.

더구나 실험을 했던 회사 피씨에서는 이상하게도 인터넷 옵션의 '스크립트 디버깅 안함' 항목을 선택하면 '보기' 메뉴에서 '스크립트 디버거' 항목 자체가 없어져 버리고, 리부팅하면 MSD마저 사라져 버리는 이상한 증세가 자꾸 발생하고 있다. 너무 오래 썼나 싶다. 깔끔하게 밀고 OS부터 새로 깔아야 할까 보다.

다시 정정

인터넷 옵션의 '스크립트 디버깅 안함' 항목을 선택하거나 해제하면 그에 따라 '보기' 메뉴의 '스크립트 디버거' 항목이 없어졌다가 새로 생겼다가 한다. 원래 그렇게 만들었나 보다.

Posted by 슈델미르

integer -> string
String.valueof(int);

string -> integer
Integer.parseInt(string);

Posted by 슈델미르
TAG java

Export 및 Import 유틸리티 개요

  • Export 유틸리티는 다음에 대한 논리적 백업을 제공합니다.
    - 데이터베이스 객체
    - 스키마 객체
    - 테이블스페이스
    - 전체 데이터베이스
  • Import 유틸리티는 데이터베이스로 데이터를 옮기기 위해 유효한 엑스포트 파일을 읽는 데 사용됩니다. 엑스포트 파일에서 임포트된 객체에는 리두 로그 기록을 적용할 수 없으므로 데이터 손실이 발생할 수는 있지만 이를 최소화할 수 있습니다.

DBA는 Export 및 Import 유틸리티를 사용하여 다음과 같은 작업을 수행함으로써 일반적인 운영 체제 백업을 보완할 수 있습니다.

  • 데이터베이스 객체 또는 전체 데이터베이스의 기록(historical) 아카이브 생성. 변화하는 업무 요구 사항을 지원하기 위해 스키마를 수정하는 경우가 여기에 해당됩니다.
  • 이진 파일에 테이블 정의 저장. 주어진 스키마 구조의 기준선(baseline)을 생성 및 유지 관리할 때 유용합니다.
  • Oracle 버전 간의 데이터 이동. Oracle7에서 Oracle8로 업그레이드하는 경우를 예로 들 수 있습니다.
  • 다음과 같은 경우를 방지합니다.
    - 실수로 테이블을 삭제하거나 절단(truncate)하는 등의 사용자 오류
    - 테이블의 논리적 훼손
    - 데이터베이스의 일부분에만 영향을 주는 잘못된 일괄 처리 작업 또는 DML 문
  • 다음을 복구합니다.
    - 한 물리적 데이터베이스의 개별 테이블스페이스에 여러 논리적 데이터베이스가 존재하는 경우 논리적 데이터베이스 하나를 나머지 물리적 데이터베이스와는 다른 시점으로 복구합니다.
    - VLDB(Very Large Database)에 있는 테이블스페이스를 복구할 때 백업에서 전체 데이터베이스를 복원하여 롤포워드하는 것보다 TSPITR(tablespace point-in-time recovery)이 더 효과적인 경우 이를 복구합니다.

참고: 이 단원에서는 Export 및 Import 유틸리티에 대해 기술하고 이들이 백업 및 복구 작업에 미치는 영향에 대해 설명합니다. 이 유틸리티에 대한 자세한 설명을 보려면 Oracle8i Server Utilities 설명서를 참조하십시오.

 

#################################################

EXPORT 유틸리티 실행방법

 

. 대화식 다이얼로그

. Enterprise Manager 내의 Data Manager의 Export페이지

. 파라미터를 명시함으로써 명령라인 인터페이스

#################################################

 

익스포트 방법

  • 대화식 다이얼로그. 운영체제에서 EXP 명령을 명시하고 아무런 파라미터도 명시하지 않음으로 Export 유틸리티는 디폴트 값을 제공하면서 입력을 위한 프롬프트를 줄 것입니다.
  • Oracle Enterprise Manager 내의 Data Manager의 Export 페이지.
  • 명령 라인 모드를 선택 시 선택된 옵션들은 명백히 명령 라인에 명시되어야 합니다. 어떠한 빠진 옵션들은 Export 유틸리티 디폴트 값들이 될 것입니다.

: 많은 옵션들이 명령 라인 인터페이스를 사용하여야만 이용 가능합니다. 그러나 명령 라인과 함께 파라미터 파일을 사용할 수 있습니다.

엑스포트 방식

  • 대화식 대화상자: 운영 체제에서 매개변수를 사용하지 않고 EXP 명령을 지정하면 Export 유틸리티는 기본값을 제공하면서 입력 프롬프트를 표시합니다.
  • Oracle Enterprise Manager에 포함되어 있는 Data Manager의 엑스포트 페이지
  • 명령행 모드를 선택할 경우 선택한 옵션을 명령행에 명시적으로 지정해야 합니다. 옵션을 누락하면 Export 유틸리티의 기본값이 지정됩니다.

참고: 많은 옵션이 명령행 인터페이스에서만 사용 가능하지만 명령행과 함께 매개변수 파일을 사용할 수도 있습니다.


명령행 엑스포트

Export 유틸리티의 명령행 모드를 사용하여 데이터베이스 데이터를 운영 체제 파일로 복사할 수 있습니다. 이 파일은 Import 유틸리티에서만 읽을 수 있습니다.

예제

행을 포함하여 scott의 스키마에 속한 emp 및 dept 테이블을 포함하는 expincr1.dmp 엑스포트 파일을 생성합니다.

$ exp scott/tiger tables=(emp,dept) rows=y file=expincr1.dmp

행을 포함하여 scott의 스키마에 속한 모든 객체를 포함하도록 expdat.dmp라는 빠른 엑스포트 파일을 생성합니다.

$ exp system/manager owner=SCOTT DIRECT=Y

ts_emp 테이블스페이스에 속한 모든 객체의 정의를 포함하는 expdat.dmp 엑스포트 파일을 생성하고 ts_emp.log 로그 파일을 생성합니다.

$ exp system/manager TRANSPORT_TABLESPACE=y TABLESPACES=(ts_emp) LOG=ts_emp.log

마지막 누적 또는 완전 엑스포트 이후 데이터베이스에서 수정된 모든 정의 및 데이터를 포함하는 expcum1.dmp 엑스포트 파일을 생성합니다.

$ exp system/manager FULL=y INCTYPE=cumulative FILE=expcum1.dmp

참고: 명령행 모드 옵션은 대화식 모드 옵션과 유사합니다.

엑스포트 매개변수

매개변수

설명

USERID

엑스포트할 스키마 객체의 사용자 이름/암호

FILE

출력 파일 이름

ROWS

엑스포트 파일에 테이블 행을 포함시킬 것인지 여부: (Y)es/(N)o

FULL

전체 데이터베이스를 엑스포트할 것인지 여부: (Y)es/(N)o

OWNER

엑스포트할 사용자: 사용자 이름

TABLES

엑스포트할 테이블: 테이블 목록

INDEXES

인덱스를 엑스포트할 것인지 여부: (Y)es/(N)o

DIRECT

직접 모드 엑스포트 지정 여부: (Y)es/(N)o

INCTYPE

엑스포트 레벨 유형

PARFILE

매개변수가 지정된 파일 이름

HELP

대화식 모드에서 엑스포트 매개변수 표시(Y)

LOG

정보 및 오류 메시지용 파일 이름

CONSISTENT

엑스포트 중에 데이터가 갱신될 경우 데이터베이스의 읽기 일관성 뷰를 제공할 것인지 여부: (Y)es/(N)o

BUFFER

데이터 버퍼 크기(바이트): (정수)

TRANSPORT_TABLESPACE

이동 가능한 테이블스페이스 메타 데이터의 엑스포트 설정(릴리스 8.1 전용)

TABLESPACES

이동할 테이블스페이스(릴리스 8.1 전용)

POINT_IN_TIME_RECOVER

Export 유틸리티가 Oracle 데이터베이스에 있는 하나 이상의 테이블스페이스를 엑스포트할지 여부 표시(릴리스 8.0 전용)

RECOVERY_TABLESPACES

포인트 인 타임 복구를 사용하여 복구할 테이블스페이스 지정(릴리스 8.0 전용)
Oracle Server Readme, Release 8.0.4 참조

COMPRESS

하나의 확장 영역에 모든 데이터를 포함시킬지 여부 지정: (Y)es/(N)o

참고: 위에 나열한 매개변수는 모든 Export 유틸리티 매개변수의 전체 목록이 아니며 DBA가 복원을 위해 자주 사용하는 매개변수입니다

완전한 익스포트 (Complete Export)
누적적(cumulative)이고 증분적인(incremental) 익스포트를 사용한다면 기본 백업을 생성하기 위해 정기적으로 완전한 익스포트를 수행해야 합니다. 완전한 익스포트 후에 자주 증분적인 익스포트를 수행하고 가끔 누적적인 익스포트를 수행하십시오. 주어진 시간 후에 다른 하나의 완전한 익스포트에 대해 이 사이클을 다시 반복해야 합니다.
위 예에서 보여지는 바와 같이 완전한 데이터베이스 익스포트는 모든 테이블과 데이터 정의를 백업해 줍니다.

제한사항
완전(Full) 데이터베이스 모드 (FULL=Y)로만 완전한, 증분적인 또는 누적적인 익스포트를 수행할 수 있습니다.

증분적인 익스포트 (Incremental Export)
증분적인 익스포트는 임의의 종류의 최근 익스포트 이후 변경된 객체들을 포함합니다. 증분적인 익스포트는 변경된 행 뿐만 아니라 테이블 정의 정보와 모든 테이블 데이터를 익스포트합니다. 전형적으로 여러분은 누적적 또는 완전한 익스포트 보다는 증분적 익스포트를 더욱 자주 수행합니다.

어떤 테이블에 대한 임의의 갱신은 (UPDATE, INSERT, 또는 DELETE) 자동적으로 증분적 익스포트 대상 테이블이 됩니다.


위 예에서 테이블 1, 3, 6은 완전한 익스포트인 Time 1에서 취한 최근 익스포트 이후로 변경이 발생하였습니다.

주: 증분적 익스포트는 몇몇 대형 테이블을 자주 액세스하는 응용 프로그램인 경우 매우 좋은 전략이 될 수 없습니다. 작은 테이블에 걸쳐 변경이 다소간 흩어져 있는 departmentalized 애플리케이션에 적합합니다.

누적적 익스포트 (Cumulative Export)
누적적 익스포트는 가장 최근의 누적적 또는 완전한 익스포트 이후로 변경된 테이블들을 백업합니다.


위 예에서 테이블 1, 2 및 6은 Time 1 이후로 변경되었으며 테이블 4는 Time 2 이후로 변경되었습니다. 따라서 누적적 익스포트는 가장 최근 완전 익스포트 이후로 변경된 모든 테이블들을 백업합니다.

incremental 또는 cumulative export를 수행할 때에는 full=y 파라미터와 함께 inctype 파라미터를 사용합니다.

incremental export 일 경우는,

exp sys/change_on_install file=filename full=y inctype=incremental

cumulative export 일 경우는,

exp sys/change_on_install file=filename full=y inctype=cumulative

와 같이 실행합니다.

증분적 및 누적적 익스포트의 이점
증분적 및 누적적 익스포트는 많은 사용자들이 그들 자신의 테이블들을 생성하는 환경에서 일하는 DBA가 직면하고 있는 문제점들을 해결하는 것을 도와 줍니다. 이런 유형의 익스포트의 이점은 다음과 같은 것을 포함합니다:

  • 사용자가 우연히 삭제시킨 테이블을 DBA가 복원 가능
  • 더 적은 데이터가 익스포트 되기 때문에 더 작은 익스포트 파일 필요
  • 가장 최근의 증분적 또는 누적적 익스포트 이후로 변경된 객체들만 백업되기 때문에 더 적은 시간 소요

Direct Path 익스포트 개념
Direct-Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 추출할 수 있습니다. 파라미터 DIRECT=Y가 명시될 때 Export 유틸리티는 SQL-명령 처리 계층을 통하는 대신 데이터 계층에서 직접적으로 읽습니다.

Direct-Path 익스포트의 구조

  • 익스포트의 direct 모드는 파라미터 DIRECT=Y를 명시함으로써 설정될 수 있습니다.
  • Direct-Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않습니다.
  • Direct read 모드의 경우 세션에 의해 사용되는 사적인 영역(private area)으로 데이터 베이스 블록을 읽어 들입니다.
  • 행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동됩니다.
  • TTC 버퍼 내의 데이터는 Export 유틸리티가 기대하는 형식으로 되어 있습니다.

Direct-Path 익스포트의 명시
Direct-Path 익스포트 사용 전에 catexp.sql 스크립트를 실행해야 합니다.

DIRECT 파라미터 사용 방법
명령 라인 옵션
DIRECT 명령 라인 파라미터를 사용함으로써 Direct-Path 익스포트를 활성화할 수 있습니다.
  $ exp user=scott/tiger full=y direct=y

파라미터 파일
exp_par.txt란 파라미터 파일의 예:
  USERID=scott/tiger
  TABLES= (emp,dept)
  FILE=exp_one.dmp
  DIRECT=Y

운영체제 프롬프트에서 파라미터를 실행하기 위해:
  $ exp parfile=exp_param.txt

Direct-Path 익스포트
Export 유틸리티의 Direct-Path 옵션은 conventional-path 익스포트와는 구별되는 어떤 기능을 도입합니다.

Direct-Path 기능

  • 익스포트 유형은 화면 출력, 익스포트 덤프 파일 및 LOG 파라미터로 명시한 로그 파일에 표시됩니다.
  • 데이터는 이미 익스포트가 기대하는 형식으로 되어 있으며 이로써 불필요한 데이터 전환을 피해 줍니다. 데이터는 Export 클라이언트에게 이동되는데 이 클라이언트가  익스포트 파일에 데이터를 씁니다.
  • Direct-Path 익스포트는 최적화된 “SELECT * FROM table”을 어떤 형용사구 없이 사용합니다.

주: 열 데이터의 형식이나 익스포트 덤프 파일의 명세는 conventional-path 익스포트와는  다릅니다.

Direct-Path 제한 사항
Export 유틸리티의 direct-Path 옵션은 conventional-path 익스포트와 구별해 주는 어떤 제한 사항들을 갖고 있습니다.

  • Direct-Path 익스포트 기능은 대화식 EXP 세션을 사용하여 활성화될 수 없습니다.

  • Direct-Path 옵션이 사용될 때 클라이언트측의 문자 집합은 서버측의 문자 집합과  일치해야 합니다.

  • Export 유틸리티의 BUFFER 파라미터는 Direct-Path 익스포트에 아무런 영향을  미치지 않는데 이 파라미터는 conventional-path 옵션에 의해서만 사용됩니다.

  • VARRAY 열 및 중첩된 테이블을 포함하여 LOB, BFILE, REF 또는 객체형 열을  갖고 있는 행을 direct-Path로 임포트 할 수 없습니다. 데이터가 아니라 테이블을  생성하기 위한 데이터 정의 정보만 익스포트 됩니다.

Export 유틸리티의 호환성
DBA로서 Export 유틸리티와 관련된 호환성 문제를 알 필요가 있습니다.

문제점

  • 오라클7 익스포트 파일을 생성하기 위해 오라클8 데이터베이스에 대해 오라클7 Export 유틸리티를 사용할 수 있습니다.

  • 오라클6 (또는 이전) Export는 오라클8 데이터베이스에 대해 사용될 수 없습니다.

  • 낮은 버젼의 Export 유틸리티가 더 높은 버젼의 오라클 서버와 실행될 때 낮은 버젼에서 존재하지 않았던 데이터베이스 객체들의 범주는 익스포트로부터  제외됩니다.

  • 테이블이 Direct-Path 옵션을 사용하여 생성되었다면 이 파일은 다른 포맷으로  되어있으며 오라클7.3 이전 Import 유틸리티에 의해 읽혀질 수 없습니다.

  • 더 낮은 버젼의 오라클 서버 Import를 사용하여 더 높은 버젼의 Export 이용을 시도할 때 자주 에러를 산출합니다.

Import 유틸리티
Import 유틸리티는 유효한 Export 유틸리티 파일을 사용하여 데이터 복구 시 사용될 수 있습니다.

복구 위해 Import 유틸리티의 사용

  • 테이블 정의 정보는 익스포트 파일에 저장되기 때문에 테이블 정의 정보 생성. 행없이 데이터 임포트 선택시 단지 테이블 정의 정보만 생성할 것입니다.

  • 테이블, 사용자 또는 Full 임포트 모드를 사용하여 유효한 익스포트 파일로부터 데이터 추출.

  • 완전한, 증분, 또는 누적적인 익스포트 파일로부터 데이터 임포트.

  • 이전에 언급한 방법들 중 하나를 사용하여 어떤 테이블이 우연히 삭제되거나 truncate  되는 사용자 장애 에러로부터 복구

Table 모드

Table 모드는 모든 테이블을 임포트하지 않고 사용자 스키마에서 지정된 모든 테이블을 임포트합니다. 권한 있는 사용자는 다른 사용자 소유의 지정된 테이블을 임포트할 수 있습니다.

User 모드

User 모드는 사용자 스키마에 있는 모든 객체를 임포트합니다. 권한 있는 사용자는 지정된 사용자 집합의 스키마에 있는 모든 객체를 임포트할 수 있습니다.

Tablespace 모드

Tablespace 모드를 사용하면 권한 있는 사용자가 Oracle 데이터베이스 간에 테이블스페이스 집합을 이동할 수 있습니다.

Full Database 모드

Full Database 모드는 SYS 스키마에 있는 객체를 제외한 모든 데이터베이스 객체를 임포트합니다. 이 모드에서는 권한 있는 사용자만 임포트를 수행할 수 있습니다.

예제

expincr1.dmp 엑스포트 파일을 사용하여 행을 포함해 emp 및 dept 테이블을 scott 스키마로 임포트합니다.

$ imp scott/tiger tables=(emp,dept) rows=y file=expincr1.dmp

expincr1.dmp 엑스포트 파일을 사용하여 행을 포함해 Scott 스키마에 속한 모든 객체를 임포트합니다.

$ imp system/manager FROMUSER=scott file=expincr1.dmp

expdat.dmp 엑스포트 파일을 사용하여 ts_emp 테이블스페이스에 속한 모든 객체의 정의를 임포트합니다.

$ imp system/manager TRANSPORT_TABLESPACE=y TABLESPACES=ts_emp

참고: 명령행 모드 옵션은 대화식 모드 옵션과 유사합니다.

임포트 매개변수

매개변수

설명

USERID

임포트할 스키마 객체의 사용자 이름/암호

FILE

입력 파일의 이름. 유효한 Export 유틸리티 파일이어야 합니다.

ROWS

임포트 파일에 테이블 행을 포함시킬지 여부

IGNORE

해당 객체가 존재할 경우 생성 오류 무시

FULL

전체 파일 임포트

TABLES

임포트할 테이블

INDEXES

인덱스를 임포트할 것인지 여부

INCTYPE

증분 임포트 유형 지정. SYSTEM 및 RESTORE 옵션이 있습니다.

PARFILE

매개변수 사양 파일

HELP

대화식 모드에서 엑스포트 매개변수 표시

LOG

정보 및 오류 메시지용 파일

DESTROY

데이터베이스를 구성하는 기존 데이터 파일을 재사용해야 할지 여부 지정

FROMUSER

임포트할 객체를 포함하는 스키마 목록

TOUSER

임포트할 스키마를 소유한 사용자 이름 목록 지정

INDEXFILE

인덱스 생성 명령을 받을 파일 지정

TRANSPORT_TABLESPACE

엑스포트 파일에 있는 이동 가능한 테이블스페이스 메타 데이터를 Import 유틸리티가 임포트하도록 명령

TABLESPACES

데이터베이스로 이동할 테이블스페이스 목록

DATAFILES

데이터베이스로 이동할 데이터 파일 목록

TTS_OWNERS

이동 가능한 테이블스페이스 집합에 있는 데이터를 소유한 사용자 목록

POINT_IN_TIME_RECOVER

Import 유틸리티가 나머지 데이터베이스에 영향을 주지 않고 Oracle 데이터베이스에 있는 하나 이상의 테이블스페이스를 이전 시점으로 복구할지 여부 표시(릴리스 8.0 전용)

참고: 위에 나열한 매개변수는 모든 Import 유틸리티 매개변수의 전체 목록이 아니며 DBA가 복원 작업을 위해 자주 사용하는 매개변수입니다.

임포트 과정 순서
테이블을 임포트할 때 익스포트 파일이 읽혀지고 테이블과 데이터는 다음 순서로 생성됩니다.

  1. 새로운 테이블이 생성됩니다. 요점은 이 테이블은 기술적으로 오라클에 새로운 (NEW) 테이블들입니다. 그들은 원래 테이블들과 같은 데이터 및 성격을 가지고 있으나 사실상 이 테이블들은 데이터베이스에 새로이 생성되어 집니다. 이것은 논리적으로 아카이브 로그 파일이 이 테이블들에 적용되어 질 수 없는 이유인데, 아카이브 로그는 새로이 생성된 테이블에 기술적으로  아무런 갱신도 하지 않기 때문입니다.

  2. 인덱스 구조가 구축됩니다. DBA는 INDEXES=N으로 설정하고 임포트 과정 다음에 인덱스를 구축함으로써 임포트 과정 동안 어느 정도의 시간을 절약할 수 있습니다.이것은 임포트를 지원하기 위해 요구되는 롤백 세그먼트의 개수를 또한 제한할 것입니다.

  3. 데이터는 테이블에 임포트되나 ROWS=Y인 경우에만 그렇습니다. 인덱스는 채워집니다. INDEXES=Y가 명시될 때 인덱스는 테이블과 더불어 생성되며 따라서 데이터 임포트와 더불어 갱신됩니다.

  4. 트리거가 임포트되고 무결성 제약 조건들이 새로운 테이블에 대해 활성화됩니다.

테이블 임포트 순서는 중요할 수 있습니다. 예를 들어 외래키(foreign key)를 갖고 있는 테이블이 기본키(primary key)를 갖고 있는 테이블에 referential check을 갖고 있다면 외래키(foreign key) 테이블이 먼저 임포트 될때 아직 임포트 안된 기본키를 참조하는  모든 행은 제약조건이 활성화되어 있다면 거절될 것입니다. 전체 데이터베이스 익스포트할 때에는 문제가 안됩니다

NLS 고려사항
하나의 문자 집합을 사용하는 오라클 데이터베이스에서 다른 문자 집합을 사용하는 데이터베이스로 데이터 이동 시 데이터 전환이 적절하게 처리되어야 함을 확인하십시오. NLS_LANG 환경 변수를 데이터가 익스포트 되어질 데이터베이스의 문자 집합 정의로 설정함으로써 해결할 수 있습니다. 이것을 올바르게 설정하지 않을 때  데이터의 원치 않는 문자 전환을 야기하여 데이터의 손실을 유발할 수 있습니다.


미국 영어같은 7-bit ASCII 문자 집합에서 덴마크어 같은 8 비트 문자 집합으로 전환시 모든 문자가 덴마크어 알파벳에서와 동일한 문자를 가지고 있기 때문에 어떤 전환도 필요 없습니다. 덴마크어 같은 8 비트 ASCII 문자 집합에서 미국 영어 같은 7 비트 문자 집합으로 전환시 미국 알파벳에 없는 추가 덴마크어 문자들은 물음표(?)로 전환되게 합니다. 이 경우에 물음표는 적절한 결과인 알려지지 않은 덴마크어 문자로 치환됩니다.

지침

  • 8 비트씩 데이터 이동 시 문자들이 손실되는지 아닌지는 데이터 입력을 위해 사용되는 언어의 명세에 달려 있습니다. 예를 들어 스페인 알파벳은 덴마크 알파벳에는 없는 문자를 가지고 있으므로 스페인어 데이터베이스로부터 덴마크어 데이터베이스로 데이터 이동 시 데이터 변환을 초래할 것이며  따라서 이런 문자들의 손실도 가능하게 될 것입니다.

  • 여러 바이트씩 데이터 이동시도 다중 바이트 언어의 명세에 달려 있습니다.

요약 참조

  관련 내용

  참조

  파라미터

  None

  동적 성능 뷰

  None

  데이터 딕셔너리 뷰

  None

  명령

  Exp
  Imp

  • DEPT Table(Master Table), EMP Table(Child Table) 을 EXPORT 하려한다. 그러나 EXPORT 수행 중에 DEPT, EMP Table 모두 변경될 가능성이 많을 경우 두 Table 의 Data 일관성을 보장하기 위해 사용해야 하는 Option 은?
    A. CONSISTENT
    B. DIRECT
    C. COMPRESS
    D. ROWS
O



 

  • Direct Path EXPORT 설명 중 옳지 않은 것은?
    A. Database 자원에 대해 다른 사용자들과 경쟁하지 않는다.
    B. Database Block 을 Session 이 사용하는 Private Area 로 읽어 들인다.
    C. I/O 버퍼의 크기를 지정하기 위해 BUFFER Option 을 사용한다.
    D. 전송을 위해 TTC 버퍼로 직접 행을 전송한다.
O



 

  • Direct-path 방식의 export 에서 사용할수 없는 option 은?
    A. BUFFER
    B. RECORDLENGTH
O



 

  • EXPORT Option INCTYPE 설명 중 옳지 않은 것은?
    A. COMPLETE 는 모든 Table Data, Definition 을 Export 한다.
    B. INCREMENTAL 은 최근의 COMPLETE, CUMULATIVE, INCREMENTAL 이후에 갱신된 Table 을 Export 한다.
    C. CUMULATIVE 는 최근의 COMPLETE, CUMULATIVE 이후에 갱신된 Table 을 Export 한다.
    D. INCTYPE Option 사용 시 변경된 Record 만 Export 된다.
X 정답:D



 

  • Entire database 를 export 하려한다. 또한 export 되는 시점의 consistent 한 상태로 export 하려할때 그 명령은 다음 중 어느 것인가?
    A. EXP CONSISTENT=Y
    B. EXP FULL=Y CONSISTENT=Y
    C. EXP FULL=Y
    D. EXP FULL=Y CONSISTENT=Y TABLES=(s_emp)
X 정답:B



 

  • Export files 은 Import utility 에 위해서만 Database 에 object 를 재성성 할수 있다?
    A. TRUE
    B. FALSE
O



 

  • Export utility 에서 사용가능한 export mode 는? (multiple choice)
    A. a. Column
    B. Full database
    C. Grant
    D. User
    E. Table
O



 

  • IMPORT 시 Rollback Segment 에 관련된 Error 를 방지하기 위해 COMMIT Option 을 사용한다?
    A. TRUE
    B. FALSE
X 정답:A



 

  • IMPORT 시 Table 과 Data 가 생성되는 순서가 옳은 것은?
    A. Data Import -> Table 생성 -> Index 생성 -> Trigger, Constraints Enable
    B. Table 생성 -> Data Import -> Trigger, Constraints Enable -> Index 생성
    C. Table 생성 -> Index 생성 -> Data Import -> Trigger, Constraints Enable
X 정답:C



 

  • Logical backup 에 대해 archived redo log file 를 적용하여 복구할수 있다?
    A. TRUE
    B. FALSE
O



 

  • Table 을 Import 할때 default 로 system tablespace 에 생성된다?
    A. TRUE
    B. FALSE
O



 

  • dba.dmp export file 에 있는 모든 table 을 import 할려면 다음 중 맞는 것은?
    A. IMP system/manager FILE=DBA.DMP TABLES=FULL
    B. IMP system/manager FILE=DBA.DMP FULL=Y
    C. IMP system/manager FILE=DBA.DMP FULL,USERS=Y
    D. IMP system/manager FILE=DBA.DMP SHOW=Y
O

출처: 예전 어딘가에서 본것..;;
Posted by 슈델미르

HTML 4.01 엔티티

[Web] HTML 2007/12/31 12:34

HTML 4.01 엔티티(Entities)


문자 개체 레퍼런스는 줄여서 개체(entities)라고 합니다. 개체(entities)는 문서의 인코딩 기능으로 표현할 수 없거나 키보드로 쉽게 입력할 수 없는 문자를 입력하는 방법을 제공합니다. 개체는 대문자와 소문자를 구별하며 &이름; 형태를 취합니다. 개체의 예로는 copyright 심볼을 나타내기 위한 &copy;와 그리스 문자 "알파"(alpha)를 나타내기 위한 &Alpha;가 있습니다.

개체 이외에도 숫자형 문자 레퍼런스(numeric character references)를 사용할 수 있습니다. 개체가 유니코드 문자만 나타낼 수 있는 반면에 숫자형 문자 레퍼런스는 모든 문자를 나타낼 수 있습니다. 숫자형 문자 레퍼런스는 10진수 또는 16진수 형태를 취할 수 있지만 브라우저는 10진수 형태를 더 강력히 지원합니다. 10진수 레퍼런스는 &#숫자; 형태를 취합니다. 반면에 16진수 변수는 대소문자를 구분하는 &#x숫자; 형태를 취합니다. 숫자형 문자 레퍼런스의 예로는 copyright 심볼을 나타내기 위한 &#169;와  &#xA9;가 있으며 그리스 문자 "알파"(alpha)를 나타내기 위한 &#913;&#x391;이 있으며 아라비아 문자 "알레프"(ALEF)을 나타내기 위한 &#1575; 또는 &#x627;이 있습니다.

아래의 문서들은 HTML 4.01의 문자 개체 레퍼런스 표와 숫자형 문자 레퍼런스 표(10진수 형태와 16진수 형태)를 보여줍니다. 사용자가 브라우저 호환성을 점검할 수 있도록 모든 문자 레퍼런스를 보여줍니다..




Latin-1 엔티티(Entities)

아래 표는 Latin-1(ISO-8859-1)의 8비트 문자를 위한 문자 개체 레퍼런스, 10진수 문자 레퍼런스, 16진수 문자 레퍼런스입니다. 또한 사용중인 브라우저에서 어떻게 나타나는 지를 보여줍니다. 문자와 관련된 자세한 정보는 유니코드 협회(Unicode Consortium)의 홈페이지에서 볼 수 있습니다.

브라우저는 10진수 문자 레퍼런스를 가장 잘 지원합니다. 단, 엑센트가 표시된 문자(10진수 192-214, 216-246, 248-255)는 잘 지원되지 않을 수 있습니다.

맥킨토시 브라우저는 14개의 Latin-1 문자를 정확하지 않게 출력할 수 있습니다. 이러한 문자들은 10진수 166, 178, 179, 185, 188, 189, 190, 208, 215, 221, 222, 240, 253, 254입니다. 참조: ISO-8859-1 and the Mac platform


문자 개체 10진수 16진수 브라우저 출력결과
개체 10진수 16진수
띄어쓰기 공간 &nbsp; &#160; &#xA0;     &#xA0;
상하반전 느낌표 &iexcl; &#161; &#xA1; ¡ ¡ &#xA1;
센트(cent) &cent; &#162; &#xA2; ¢ ¢ &#xA2;
파운드(pound) &pound; &#163; &#xA3; £ £ &#xA3;
통화(currency) &curren; &#164; &#xA4; ¤ ¤ &#xA4;
엔화(yen) &yen; &#165; &#xA5; ¥ ¥ &#xA5;
끊어진 세로 막대기 &brvbar; &#166; &#xA6; ¦ ¦ &#xA6;
섹션(section) 부호 &sect; &#167; &#xA7; § § &#xA7;
분음부호(diaeresis) &uml; &#168; &#xA8; ¨ ¨ &#xA8;
저작권(copyright) 부호 &copy; &#169; &#xA9; © © &#xA9;
여성 표시자 &ordf; &#170; &#xAA; ª ª &#xAA;
이중 꺽음 좌측 인용부호 &laquo; &#171; &#xAB; « « &#xAB;
부호 아님 &not; &#172; &#xAC; ¬ ¬ &#xAC;
하이픈 &shy; &#173; &#xAD; ­ ­ &#xAD;
등록 부호 &reg; &#174; &#xAE; ® ® &#xAE;
윗 줄 &macr; &#175; &#xAF; ¯ ¯ &#xAF;
도(degree) &deg; &#176; &#xB0; ° ° &#xB0;
플러스 마이너스 부호 &plusmn; &#177; &#xB1; ± ± &#xB1;
윗첨자 2 &sup2; &#178; &#xB2; ² ² &#xB2;
윗첨자 3 &sup3; &#179; &#xB3; ³ ³ &#xB3;
고음 악센트 &acute; &#180; &#xB4; ´ ´ &#xB4;
마이크로 &micro; &#181; &#xB5; µ µ &#xB5;
단락 표시 &para; &#182; &#xB6; &#xB6;
중간점 &middot; &#183; &#xB7; · · &#xB7;
갈고리형 부호 &cedil; &#184; &#xB8; ¸ ¸ &#xB8;
윗첨자 1 &sup1; &#185; &#xB9; ¹ ¹ &#xB9;
남성 표시자 &ordm; &#186; &#xBA; º º &#xBA;
이중 꺽음 우측 인용부호 &raquo; &#187; &#xBB; » » &#xBB;
1/4 &frac14; &#188; &#xBC; ¼ ¼ &#xBC;
1/2 &frac12; &#189; &#xBD; ½ ½ &#xBD;
3/4 &frac34; &#190; &#xBE; ¾ ¾ &#xBE;
상하반전 물음표 &iquest; &#191; &#xBF; ¿ ¿ &#xBF;
라틴 대문자 A (저음 악센트) &Agrave; &#192; &#xC0; À À &#xC0;
라틴 대문자 A (고음 악센트) &Aacute; &#193; &#xC1; Á Á &#xC1;
라틴 대문자 A (곡절 악센트) &Acirc; &#194; &#xC2; Â Â &#xC2;
라틴 대문자 A (틸데 악센트) &Atilde; &#195; &#xC3; Ã Ã &#xC3;
라틴 대문자 A (분음 부호) &Auml; &#196; &#xC4; Ä Ä &#xC4;
라틴 대문자 A (원 부호) &Aring; &#197; &#xC5; Å Å &#xC5;
라틴 대문자 AE &AElig; &#198; &#xC6; Æ Æ &#xC6;
라틴 대문자 C &Ccedil; &#199; &#xC7; Ç Ç &#xC7;
라틴 대문자 E (저음 악센트) &Egrave; &#200; &#xC8; È È &#xC8;
라틴 대문자 E (고음 악센트) &Eacute; &#201; &#xC9; É É &#xC9;
라틴 대문자 E (곡절 악센트) &Ecirc; &#202; &#xCA; Ê Ê &#xCA;
라틴 대문자 E (분음 부호) &Euml; &#203; &#xCB; Ë Ë &#xCB;
라틴 대문자 I (저음 악센트) &Igrave; &#204; &#xCC; Ì Ì &#xCC;
라틴 대문자 I (고음 악센트) &Iacute; &#205; &#xCD; Í Í &#xCD;
라틴 대문자 I (곡절 악센트) &Icirc; &#206; &#xCE; Î Î &#xCE;
라틴 대문자 I (분음 부호) &Iuml; &#207; &#xCF; Ï Ï &#xCF;
라틴 대문자 ETH &ETH; &#208; &#xD0; Ð Ð &#xD0;
라틴 대문자 N (틸데 악센트) &Ntilde; &#209; &#xD1; Ñ Ñ &#xD1;
라틴 대문자 O (저음 악센트) &Ograve; &#210; &#xD2; Ò Ò &#xD2;
라틴 대문자 O (고음 악센트) &Oacute; &#211; &#xD3; Ó Ó &#xD3;
라틴 대문자 O (곡절 악센트) &Ocirc; &#212; &#xD4; Ô Ô &#xD4;
라틴 대문자 O (틸데 악센트) &Otilde; &#213; &#xD5; Õ Õ &#xD5;
라틴 대문자 O (분음 부호) &Ouml; &#214; &#xD6; Ö Ö &#xD6;
곱셈 부호 &times; &#215; &#xD7; × × &#xD7;
라틴 대문자 O (슬래쉬) &Oslash; &#216; &#xD8; Ø Ø &#xD8;
라틴 대문자 U 저음 악센트 &Ugrave; &#217; &#xD9; Ù Ù &#xD9;
라틴 대문자 U (고음 악센트) &Uacute; &#218; &#xDA; Ú Ú &#xDA;
라틴 대문자 U (곡절 악센트) &Ucirc; &#219; &#xDB; Û Û &#xDB;
라틴 대문자 U (분음 부호) &Uuml; &#220; &#xDC; Ü Ü &#xDC;
라틴 대문자 Y (고음 악센트) &Yacute; &#221; &#xDD; Ý Ý &#xDD;
라틴 대문자 THORN &THORN; &#222; &#xDE; Þ Þ &#xDE;
라틴 소문자 ess-zed &szlig; &#223; &#xDF; ß ß &#xDF;
라틴 소문자 a (저음 악센트) &agrave; &#224; &#xE0; à à &#xE0;
라틴 소문자 a (고음 악센트) &aacute; &#225; &#xE1; á á &#xE1;
라틴 소문자 a (곡절 악센트) &acirc; &#226; &#xE2; â â &#xE2;
라틴 소문자 a (틸데 악센트) &atilde; &#227; &#xE3; ã ã &#xE3;
라틴 소문자 a (분음 부호) &auml; &#228; &#xE4; ä ä &#xE4;
라틴 소문자 a (원 부호) &aring; &#229; &#xE5; å å &#xE5;
라틴 소문자 ae &aelig; &#230; &#xE6; æ æ &#xE6;
라틴 소문자 c (갈고리형 부호) &ccedil; &#231; &#xE7; ç ç &#xE7;
라틴 소문자 e (저음 악센트) &egrave; &#232; &#xE8; è è &#xE8;
라틴 소문자 e (고음 악센트) &eacute; &#233; &#xE9; é é &#xE9;
라틴 소문자 e (곡절 악센트) &ecirc; &#234; &#xEA; ê ê &#xEA;
라틴 소문자 e (분음 부호) &euml; &#235; &#xEB; ë ë &#xEB;
라틴 소문자 i (저음 악센트) &igrave; &#236; &#xEC; ì ì &#xEC;
라틴 소문자 i (고음 악센트) &iacute; &#237; &#xED; í í &#xED;
라틴 소문자 i (곡절 악센트) &icirc; &#238; &#xEE; î î &#xEE;
라틴 소문자 i (분음 부호) &iuml; &#239; &#xEF; ï ï &#xEF;
라틴 소문자 eth &eth; &#240; &#xF0; ð ð &#xF0;
라틴 소문자 n (틸데 악센트) &ntilde; &#241; &#xF1; ñ ñ &#xF1;
라틴 소문자 o (저음 악센트) &ograve; &#242; &#xF2; ò ò &#xF2;
라틴 소문자 o (고음 악센트) &oacute; &#243; &#xF3; ó ó &#xF3;
라틴 소문자 o (곡절 악센트) &ocirc; &#244; &#xF4; ô ô &#xF4;
라틴 소문자 o (틸데 악센트) &otilde; &#245; &#xF5; õ õ &#xF5;
라틴 소문자 o (분음 부호) &ouml; &#246; &#xF6; ö ö &#xF6;
나눗셈 부호 &divide; &#247; &#xF7; ÷ ÷ &#xF7;
라틴 소문자 o (슬래쉬) &oslash; &#248; &#xF8; ø ø &#xF8;
라틴 소문자 u (저음 악센트) &ugrave; &#249; &#xF9; ù ù &#xF9;
라틴 소문자 u (고음 악센트) &uacute; &#250; &#xFA; ú ú &#xFA;
라틴 소문자 u (곡절 악센트) &ucirc; &#251; &#xFB; û û &#xFB;
라틴 소문자 u (분음 부호) &uuml; &#252; &#xFC; ü ü &#xFC;
라틴 소문자 y (고음 악센트) &yacute; &#253; &#xFD; ý ý &#xFD;
라틴 소문자 thorn &thorn; &#254; &#xFE; þ þ &#xFE;
라틴 소문자 y (분음 부호) &yuml; &#255; &#xFF; ÿ ÿ &#xFF;


심볼 및 그리스 문자 엔티티(Entities)

아래 표는 심볼 및 그리스 문자 개체 레퍼런스, 10진수 문자 레퍼런스, 16진수 문자 레퍼런스를 보여줍니다. 또한 지금 사용중인 브라우저에서의 출력 결과를 보여줍니다. 문자와 관련된 자세한 정보는 유니코드 협회(Unicode Consortium)의 홈페이지에서 볼 수 있습니다.

이러한 개체들은 브라우저에 잘 나타나지 않습니다. 그러나 최신 브라우저에서는 문자 개체 레퍼런스와 10진수 개체 레퍼런스의 일부를 지원합니다.


문자 개체 10진수 16진수 브라우저 출력결과
Entity Decimal Hex
라틴 소문자 f ( 함수, 플로린 ) &fnof; &#402; &#x192; ƒ ƒ &#x192;
그리스어 대문자 알파 &Alpha; &#913; &#x391; Α Α &#x391;
그리스어 대문자 베타 &Beta; &#914; &#x392; Β Β &#x392;
그리스어 대문자 감마 &Gamma; &#915; &#x393; Γ Γ &#x393;
그리스어 대문자 델타 &Delta; &#916; &#x394; Δ Δ &#x394;
그리스어 대문자 엡실론 &Epsilon; &#917; &#x395; Ε Ε &#x395;
그리스어 대문자 제타 &Zeta; &#918; &#x396; Ζ Ζ &#x396;
그리스어 대문자 에타 &Eta; &#919; &#x397; Η Η &#x397;
그리스어 대문자 세타 &Theta; &#920; &#x398; Θ Θ &#x398;
그리스어 대문자 아이오타 &Iota; &#921; &#x399; Ι Ι &#x399;
그리스어 대문자 카파 &Kappa; &#922; &#x39A; Κ Κ &#x39A;
그리스어 대문자 람다 &Lambda; &#923; &#x39B; Λ Λ &#x39B;
그리스어 대문자 뮤 &Mu; &#924; &#x39C; Μ Μ &#x39C;
그리스어 대문자 뉴 &Nu; &#925; &#x39D; Ν Ν &#x39D;
그리스어 대문자 키 &Xi; &#926; &#x39E; Ξ Ξ &#x39E;
그리스어 대문자 오미크론 &Omicron; &#927; &#x39F; Ο Ο &#x39F;
그리스어 대문자 피 &Pi; &#928; &#x3A0; Π Π &#x3A0;
그리스어 대문자 로 &Rho; &#929; &#x3A1; Ρ Ρ &#x3A1;
그리스어 대문자 시그마 &Sigma; &#931; &#x3A3; Σ Σ &#x3A3;
그리스어 대문자 타우 &Tau; &#932; &#x3A4; Τ Τ &#x3A4;
그리스어 대문자 입실론 &Upsilon; &#933; &#x3A5; Υ Υ &#x3A5;
그리스어 대문자 파이 &Phi; &#934; &#x3A6; Φ Φ &#x3A6;
그리스어 대문자 카이 &Chi; &#935; &#x3A7; Χ Χ &#x3A7;
그리스어 대문자 프사이 &Psi; &#936; &#x3A8; Ψ Ψ &#x3A8;
그리스어 대문자 오메가 &Omega; &#937; &#x3A9; Ω Ω &#x3A9;
그리스어 소문자 알파 &alpha; &#945; &#x3B1; α α &#x3B1;
그리스어 소문자 베타 &beta; &#946; &#x3B2; β β &#x3B2;
그리스어 소문자 감마 &gamma; &#947; &#x3B3; γ γ &#x3B3;
그리스어 소문자 델타 &delta; &#948; &#x3B4; δ δ &#x3B4;
그리스어 소문자 엡실론 &epsilon; &#949; &#x3B5; ε ε &#x3B5;
그리스어 소문자 제타 &zeta; &#950; &#x3B6; ζ ζ &#x3B6;
그리스어 소문자 에타 &eta; &#951; &#x3B7; η η &#x3B7;
그리스어 소문자 세타 &theta; &#952; &#x3B8; θ θ &#x3B8;
그리스어 소문자 아이오타 &iota; &#953; &#x3B9; ι ι &#x3B9;
그리스어 소문자 카파 &kappa; &#954; &#x3BA; κ κ &#x3BA;
그리스어 소문자 람다 &lambda; &#955; &#x3BB; λ λ &#x3BB;
그리스어 소문자 뮤 &mu; &#956; &#x3BC; μ μ &#x3BC;
그리스어 소문자 뉴 &nu; &#957; &#x3BD; ν ν &#x3BD;
그리스어 소문자 키 &xi; &#958; &#x3BE; ξ ξ &#x3BE;
그리스어 소문자 오미크론 &omicron; &#959; &#x3BF; ο ο &#x3BF;
그리스어 소문자 파이 &pi; &#960; &#x3C0; π π &#x3C0;
그리스어 소문자 로 &rho; &#961; &#x3C1; ρ ρ &#x3C1;
그리스어 소문자 시그마 (단어 끝) &sigmaf; &#962; &#x3C2; ς ς &#x3C2;
그리스어 소문자 시그마 &sigma; &#963; &#x3C3; σ σ &#x3C3;
그리스어 소문자 타우 &tau; &#964; &#x3C4; τ τ &#x3C4;
그리스어 소문자 입실론 &upsilon; &#965; &#x3C5; υ υ &#x3C5;
그리스어 소문자 파이 &phi; &#966; &#x3C6; φ φ &#x3C6;
그리스어 소문자 키 &chi; &#967; &#x3C7; χ χ &#x3C7;
그리스어 소문자 프사이 &psi; &#968; &#x3C8; ψ ψ &#x3C8;
그리스어 소문자 오메가 &omega; &#969; &#x3C9; ω ω &#x3C9;
그리스어 소문자 세타 심볼 &thetasym; &#977; &#x3D1; ϑ ϑ &#x3D1;
그리스어 웁실론 고리형 심볼 &upsih; &#978; &#x3D2; ϒ ϒ &#x3D2;
그리스어 파이 심볼 &piv; &#982; &#x3D6; ϖ ϖ &#x3D6;
불렛(bullet) = 검정색 작은 원 &bull; &#8226; &#x2022; &#x2022;
수평점 &hellip; &#8230; &#x2026; &#x2026;
프라임 (분, 피트) &prime; &#8242; &#x2032; &#x2032;
이중 프라임 (초, 인치) &Prime; &#8243; &#x2033; &#x2033;
윗 선 &oline; &#8254; &#x203E; &#x203E;
슬래쉬 (분수) &frasl; &#8260; &#x2044; &#x2044;
대문자 서체 P &weierp; &#8472; &#x2118; &#x2118;
대문자 블랙활자 I &image; &#8465; &#x2111; &#x2111;
대문자 블랙활자 R &real; &#8476; &#x211C; &#x211C;
트레이드 마크 (trade mark) &trade; &#8482; &#x2122; &#x2122;
알레프(alef) 심볼 &alefsym; &#8501; &#x2135; &#x2135;
좌향 화살표 &larr; &#8592; &#x2190; &#x2190;
상향 화살표 &uarr; &#8593; &#x2191; &#x2191;
우향 화살표 &rarr; &#8594; &#x2192; &#x2192;
하향 화살표 &darr; &#8595; &#x2193; &#x2193;
좌우향 화살표 &harr; &#8596; &#x2194; &#x2194;
꺽인 화살표 &crarr; &#8629; &#x21B5; &#x21B5;
큰 좌향 화살표 &lArr; &#8656; &#x21D0; &#x21D0;
큰 상향 화살표 &uArr; &#8657; &#x21D1; &#x21D1;
큰 우향 화살표 &rArr; &#8658; &#x21D2; &#x21D2;
큰 하향 화살표 &dArr; &#8659; &#x21D3; &#x21D3;
큰 좌우향 화살표 &hArr; &#8660; &#x21D4; &#x21D4;
전체에게 &forall; &#8704; &#x2200; &#x2200;
부분적 차이 &part; &#8706; &#x2202; &#x2202;
그곳에 있음 &exist; &#8707; &#x2203; &#x2203;
비었음 &empty; &#8709; &#x2205; &#x2205;
나블라(nabla) &nabla; &#8711; &#x2207; &#x2207;
~ 에 속함 &isin; &#8712; &#x2208; &#x2208;
~ 에 속하지 않음 &notin; &#8713; &#x2209; &#x2209;
포함함 &ni; &#8715; &#x220B; &#x220B;
프로덕트 &prod; &#8719; &#x220F; &#x220F;
합계 &sum; &#8721; &#x2211; &#x2211;
뺄셈 부호 &minus; &#8722; &#x2212; &#x2212;
애스터리스크(asterisk) &lowast; &#8727; &#x2217; &#x2217;
제곱근(square root) &radic; &#8730; &#x221A; &#x221A;
~ 에 비례 &prop; &#8733; &#x221D; &#x221D;
무한 &infin; &#8734; &#x221E; &#x221E;
각도 &ang; &#8736; &#x2220; &#x2220;
논리 부호 and &and; &#8743; &#x2227; &#x2227;
논리 부호 or &or; &#8744; &#x2228; &#x2228;
교집(cap) &cap; &#8745; &#x2229; &#x2229;
합집(cup) &cup; &#8746; &#x222A; &#x222A;
인테그랄(integral) &int; &#8747; &#x222B; &#x222B;
그러므로 &there4; &#8756; &#x2234; &#x2234;
틸데 연산자 &sim; &#8764; &#x223C; &#x223C;
대략 같음 &cong; &#8773; &#x2245; &#x2245;
거의 같음 &asymp; &#8776; &#x2248; &#x2248;
같지 않음 &ne; &#8800; &#x2260; &#x2260;
동일함 &equiv; &#8801; &#x2261; &#x2261;
적거나 같음 &le; &#8804; &#x2264; &#x2264;
크거나 같음 &ge; &#8805; &#x2265; &#x2265;
~ 의 부분집합 &sub; &#8834; &#x2282; &#x2282;
~ 의 상위집합 &sup; &#8835; &#x2283; &#x2283;
~ 의 부분집합이 아님 &nsub; &#8836; &#x2284; &#x2284;
부분집합이거나 같음 &sube; &#8838; &#x2286; &#x2286;
상위집합이거나 같음 &supe; &#8839; &#x2287; &#x2287;
원형 덧셈부호(circled plus) &oplus; &#8853; &#x2295; &#x2295;
원형 곱셉부호(circled times) &otimes; &#8855; &#x2297; &#x2297;
수직 &perp; &#8869; &#x22A5; &#x22A5;
점 연산자 &sdot; &#8901; &#x22C5; &#x22C5;
레프트 실링(left ceiling) &lceil; &#8968; &#x2308; &#x2308;
라이트 실링(right ceiling) &rceil; &#8969; &#x2309; &#x2309;
레프트 플로어(left floor) = APL downstile &lfloor; &#8970; &#x230A; &#x230A;
라이트 플로어(right floor) &rfloor; &#8971; &#x230B; &#x230B;
좌측 꺽인 괄호 &lang; &#9001; &#x2329; &#x2329;
우측 꺽인 괄호 &rang; &#9002; &#x232A; &#x232A;
마름모 &loz; &#9674; &#x25CA; &#x25CA;
블랙 스페이드 &spades; &#9824; &#x2660; &#x2660;
블랙 클럽 &clubs; &#9827; &#x2663; &#x2663;
블랙 하트 &hearts; &#9829; &#x2665; &#x2665;
블랙 다이아몬드 &diams; &#9830; &#x2666; &#x2666;




특수 엔티티(Entities)

아래 표는 문장부호와 국제공통문자에 대한 문자 개체 레퍼런스, 10진수 문자 레퍼런스, 16진수 문자 레퍼런스입니다. 또한 지금 사용중인 브라우저에서의 출력 결과를 보여줍니다. 문자와 관련된 자세한 정보는 유니코드 협회(Unicode Consortium)의 홈페이지에서 볼 수 있습니다.

이러한 개체들은 HTML 2.0 버전의 &quot;, &amp;, &lt;, &gt;를 제외하고는 브라우저에 잘 나타나지 않습니다. 그러나 최신 브라우저에서는 문자 개체 레퍼런스와 10진수 개체 레퍼런스의 일부를 지원합니다.


문자 개체 10진수 16진수 브라우저 출력결과
개체 10진수 16진수
인용부호 (프로그램 인용부호) &quot; &#34; &#x22; " " &#x22;
앰퍼샌드 (ampersand) &amp; &#38; &#x26; & & &#x26;
부등호(작음) &lt; &#60; &#x3C; < < &#x3C;
부등호(큼) &gt; &#62; &#x3E; > > &#x3E;
라틴 대문자 OE &OElig; &#338; &#x152; Œ Œ &#x152;
라틴 소문자 oe &oelig; &#339; &#x153; œ œ &#x153;
라틴 대문자 S (캐론 악센트) &Scaron; &#352; &#x160; Š Š &#x160;
라틴 소문자 s (캐론 악센트) &scaron; &#353; &#x161; š š &#x161;
라틴 대문자 Y (분음부호) &Yuml; &#376; &#x178; ÿ Ÿ &#x178;
곡절 악센트 &circ; &#710; &#x2C6; ˆ ˆ &#x2C6;
틸데 악센트 &tilde; &#732; &#x2DC; ˜ ˜ &#x2DC;
엔 스페이스 &ensp; &#8194; &#x2002; &#x2002;
엠 스페이스 &emsp; &#8195; &#x2003; &#x2003;
씬 스페이스 &thinsp; &#8201; &#x2009; &#x2009;
비결합자 &zwnj; &#8204; &#x200C; &#x200C;
결합자 &zwj; &#8205; &#x200D; &#x200D;
우향 표시 &lrm; &#8206; &#x200E; &#x200E;
좌향 표시 &rlm; &#8207; &#x200F; &#x200F;
엔 대시 &ndash; &#8211; &#x2013; &#x2013;
엠 대시 &mdash; &#8212; &#x2014; &#x2014;
작은 따옴표 (좌) &lsquo; &#8216; &#x2018; &#x2018;
작은 따옴표 (우) &rsquo; &#8217; &#x2019; &#x2019;
낮은 인용부호 (소) &sbquo; &#8218; &#x201A; &#x201A;
큰 따옴표 (좌) &ldquo; &#8220; &#x201C; &#x201C;
큰 따옴표 (우) &rdquo; &#8221; &#x201D; &#x201D;
낮은 인용부호 (대) &bdquo; &#8222; &#x201E; &#x201E;
대거(dagger) &dagger; &#8224; &#x2020; &#x2020;
이중 대거(double dagger) &Dagger; &#8225; &#x2021; &#x2021;
퍼밀 부호 (per mille sign) &permil; &#8240; &#x2030; &#x2030;
좌측 꺽음 인용부호 &lsaquo; &#8249; &#x2039; &#x2039;
우측 꺽음 인용부호 &rsaquo; &#8250; &#x203A; &#x203A;
유로화 &euro; &#8364; &#x20AC; &#x20AC;

Posted by 슈델미르
TAG html
원본 http://blog.naver.com/mivalle00/130014871036

JAVA 가 설치는 되었지만 어떻게 써먹어야 할 지 막막할겁니다.


윈도우의 메모장이나 그외 텍스트 기반의 유틸리티로 작성하여 도스상에서 컴파일하는 방법도


있지만 편의성과 효율을 높이기 위해 툴을 쓰는게 다반사입니다.  그중 실무에서 가장 많이


쓰이는 이클립스라는 툴도 있지만 이 글을 읽으시는 분들은 초보라는 가정하에 에디트플러스


라는  툴을 이용하여 예제를 설명하도록 하겠습니다.




1. 우선 에디트플러스를 다운받으실려면 네이버 검색창에서 에디트플러스를 찾으셔서 다운받

   으시고설치하시면 됩니다.  아마도 30일 셰어웨어겠지만 30일 이후에는 이클립스를 쓰셔도

   상관없을듯 합니다.


2. 우선 자바 코딩(프로그램을 짜기위한)을 위해서는 약간의 셋팅이 필요합니다.

   

    (1) 에디트플러스를 실행시킨 후 상단 메뉴에 도구 -> 기본설정을 클릭

    

    (2) 아래와 같은 화면이 나오면 추가 -> 프로그램 클릭


  



   (3) 메뉴제목에 컴파일(다른이름으로 써도 되지만 저는 이렇게 하겠습니다)이라고 치시고

       

        명령 부분에 ... 클릭하시고 자바가 설치되어있는 폴더까지 가신 다음  jdk1.5.0_11

       

        => bin => javac.exe 를 클릭하시고 확인.


       인수부분은 화살표 클릭하시고 파일이름 클릭 그리고 디렉토리부분은 파일디렉토리 클릭


       다음 밑에 부분에 출력창에 텍스트 필터 출력 부분을 체크하시면 됩니다

  



   (4)  위의 3번과 마찬가지로 추가 -> 프로그램 하신후 메뉴제목을 인터프리터라고


         하겠습니다.  명령 부분에 ... 클릭하시고 자바가 설치되어있는 폴더까지 가신


        다음  jdk1.5.0_11 => bin => java.exe 를 클릭하시고 확인.


       인수부분은 화살표 클릭하시고 확장자를 뺀 파일이름 클릭 그리고 디렉토리부분은 파일


       디렉토리 클릭한 다음 밑에 부분에 출력창에 텍스트 필터 출력 부분을 체크하시고


       적용 => 확인 하시면 기본적인 설정은 끝난겁니다.


 

 
Posted by 슈델미르
TAG EditPlus
ms 에서 오피스 2007 내 놓으면서 달라진 점이 기존 저장 파일명은 xls , doc , ppt 이었지만
xlsx , docx, pptx 로도 저장된다는거.

뭐. 확장자명이  다른거야 상관 안하지만 굳이 포스팅 하는 이유는 2007 이하 버전에선 안 열린다는 거.

평소에 이런 확장자를 가진 파일을 받은 적도 없고 2007을 사용 안 하다 보니 몰랐지만
오늘 이 파일을 받고 보니 황당... 해서. ㅋ

여튼 해결책은
http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=941B3470-3AE9-4AEE-8F43-C6BB74CD1466

요기 가서 다운 받아 설치하면 읽기는 가능해져... 그리고 수정은 불가.

아직 2007을 사용 안 해봐서 이게 상술인지 다른게 있는진 모르겠지만.. 현재로선 -_-+
Posted by 슈델미르

마지막 예제에서는 Relational Record List를 사용하여 Cloudscape 데이터베이스에 액세스 할 수 있는 웹 애플리케이션을 만들 것이다. 우선 Web 프로젝트를 만들고 나중에 데이터베이스 디스플레이 기능을 웹 애플리케이션에 추가한다.

데모 보기

Show me Show me

새로운 웹 프로젝트 만들기

웹 애플리케이션 개발은 웹 퍼스펙티브에서 이루어진다. JSP 페이지와 자바 서블릿 같은 모든 웹 엘리먼트들은 웹 프로젝트에 저장된다.

J2EE 애플리케이션은 여러 컴포넌트들: Application Client, Web, Enterprise JavaBeans (EJBs) 모듈로 구성된다. 각 모듈은 서버에 개별적으로 또는 엔터프라이즈 애플리케이션에서 그룹으로서 전개 및 실행될 수 있는 독립적인 단위이다. 이 예제에서는 웹 모듈로 작업한다.

  1. 워크벤치에서 File > New > Project를 선택한다.
  2. Web > Dynamic Web Project > Next를 선택한다.
  3. 프로젝트 이름에 MyWebProject를 입력한다. Show Advanced 버튼은 고급 설정을 위한 버튼이다. 이를 클릭하여 MyWebProjectEAR이라는 엔터프라이즈 애플리케이션 프로젝트를 디스플레이 한다. Finish를 클릭한다.
  4. Web Perspective로 전환하려면, Yes를 클릭한다.

JSP 파일 만들기

웹 프로젝트의 주요 콘텐츠는 JSP 파일과 서블릿이다. HTML, 스타일 시트, 이미지 같은 기타 웹 엘리먼트들 역시 웹 프로젝트에 저장된다. 그림 14는 웹 프로젝트의 구조이다. 다른 위치에는 다른 웹 엘리먼트들을 갖고 있다.

웹 프로젝트를 만들면 이것은 Dynamic Web Projects 폴더에 놓인다. 웹 프로젝트는 J2EE 표준에 맞게 설정되어 개발용 WAR 파일로서 반출된다. 자바 서블릿과 기타 지원 자바 클래스들은 Java Resources 디렉토리 내에 있는 JavaSource 폴더에 저장된다. JSP 파일, HTML 페이지, 스타일 시트, 자바 스크립트 파일, 이미지들은 WebContent 디렉토리에 저장된다. Web Deployment Descriptor인 web.xml에는 웹 애플리케이션의 배포 설정이 포함된다. 이는 웹 모듈에 있고 WebSphere Application Server 같은 J2EE 서버에 배포될 것이다.


그림 14. 웹 프로젝트의 구조
Figure 14: Structure of a Web Project

  1. MyWebProject > New > JSP File을 오른쪽 클릭한다.
  2. 파일 이름을 MyFirstJSP로 하고 Finish를 클릭한다. 이 JSP 파일은 WebContent 폴더 밑에 만들어진다.
  3. Design 이나 Source 뷰를 사용하여 에디터에서 JSP 파일을 수정한다. Source 뷰로 변환한다.
  4. 에디터에 볼드체 코드를 입력한다. 이 라인을 스크립틀릿(scriptlet)이라고 하는데 이것은 <%와 %>로 둘러싸인 자바 코드이다. 이 괄호 안에 자바 코드를 입력한다. 또한 스크립틀릿을 사용하여 JSP 파일에 있는 것을 프린트 할 수 있다. <%="hello"%>는 hello 라는 텍스트를 프린트 할 것이다.

    Listing 4. MyWebServiceClient.jsp용 코드
                                
    
    <BODY>
    
    <P>Place content here.</P>
    
    <%
    
    String a = "Hello";
    
    a+= "World!!";
    
     %>
    
    <%=new java.util.Date()  %>
    
    <%=a %>
    
    <BR>
    
    </BODY>

  5. Ctrl-S를 눌러 저장한다.

브라우저에서 JSP 파일 실행하기

Application Developer의 경우, 임베디드 서버에서 JSP 파일을 실행할 수 있다. Server 뷰에서 서버를 시작하고 http://localhost:9080/MyWebProject/MyFirstJSP.jsp를 사용하여 JSP를 실행한다. 또는 JSP 파일을 오른쪽 클릭하여 Run on Server를 선택한다.

  1. Project Explorer 뷰에서, MyFirstJSP.jsp 파일을 오른쪽 클릭하고 Run > Run on Server를 선택한다.
  2. 기존 서버를 선택하고 Finish를 클릭하여 프로젝트를 서버에 자동으로 추가하고 내부 브라우저에서 JSP 파일을 실행한다:


    그림 16. MyFirstJSP 실행하기
    Figure 16: Running the MyFirstJSP

데이터베이스 연결

Application Developer는 Data 퍼스펙티브를 통해 액세스 될 수 있는 많은 관계형 데이터베이스 툴 또는 를 갖고 있다. 이 퍼스펙티브에서 중요한 몇 가지 뷰로는 Data Definition, Database Explorer, DB Output 뷰 등이 있다.

Database Explorer 뷰에서 지원되는 관계형 데이터베이스 리스트로 연결이 이루어진다. 지원되는 데이터베이스로는 IBM Cloudscape, IBM DB2 Universal Database, Microsoft SQL Server, Sybase Enterprise Systems, Oracle Database 등이 있다. 지원 데이터베이스의 전체 리스트를 보려면 제품 도움말을 참조하라.

이 단계에서는 Application Developer에 속해있는 Cloudscape 데이터베이스로 데이터 연결을 구현한다. Cloudscape 데이터베이스는 데이터베이스로서 어떤 파일 시스템 폴더라도 사용할 수 있다. 연결을 구축하기 전에 데이터베이스를 만들 필요가 없다. Create the database if required를 선택하면 Cloudscape 데이터베이스는 연결이 구축되기 전에 만들어진다.

Cloudscape는 한 번에 단 한 개의 데이터베이스 연결만을 수락한다. 예를 들어, WebSphere Application Server가 Cloudscape 데이터베이스로 이미 연결되어 있다면 Database Explorer에서의 연결 시도는 실패할 것이다.

다음은 Cloudscape 연결을 만드는 단계이다:

  1. 서버가 실행중이라면 중지해야 한다. 그렇지 않으면 데이터베이스에 연결을 구축할 수 없다. Server 뷰에서 WebSphere Application Server v6.0을 오른쪽 클릭하고 Stop을 선택한다.
  2. Data 퍼스펙티브로 전환한다. Window > Open Perspective > Other를 선택한다. Show all 체크 박스를 선택하고 Data를 선택한다. OK를 클릭한다. Core Database Development 기능을 실행하려면 OK를 선택한다.
  3. 퍼스펙티브의 왼쪽 하단에 있는 Database Explorer를 오른쪽 클릭하여 New Connection을 클릭한다.
  4. Choose a database manager and JDBC driver를 클릭한다. 연결 이름으로 Con1을 입력한다. Next를 누른다.
  5. 데이터베이스 매니저는 Cloudscape V5.1로 되어있다. (그림 17) Database location에 파일 시스템 디렉토리를 입력한다. (예: C:\HelloWorldSeries\AddressDB) 파일 시스템에 폴더를 직접 만들 필요가 없다. 새로운 폴더 이름만 타이핑 하면 된다. Create the database if required 박스가 체크되었는지를 확인한다. 체크 되면 툴은 그 위치에 Cloudscape 데이터베이스를 설치한다. Cloudscape는 테스트 데이터베이스이므로 사용자 아이디와 패스워드는 필요 없다. 사용자 정보 섹션에 사용자 아이디를 입력한다.
  6. Test Connection을 클릭하여 연결이 구축되었는지를 확인한다. 연결이 이루어졌다라는 윈도우를 보게 될 것이다. Finish를 클릭하여 연결을 마무리 짓는다. 사용자 이름이 잘못되었다는 에러가 리턴되면 사용자 아이디와 패스워드를 공백으로 둔다.
  7. 데이터베이스 메타데이터를 프로젝트 폴더에 복사할 것인지를 묻는 질문에는 No를 클릭한다.


    그림 17. Cloudscape 데이터베이스 연결
    Figure 17: Create a Cloudscape database connection

  8. Con1은 Database Explorer 뷰에 나타난다. 이 연결을 확장하여 AddressDB를 볼 수 있다. (그림 18)


    그림 18. Database Explorer Con1연결
    Figure 18: Database Explorer Con1 connection

데이터베이스 정의

현재 데이터베이스는 비어있다. database definition 뷰를 사용하여 스키마와 테이블 정의를 만든다. 데이터베이스 정의는 데이터베이스에는 존재하지 않는 작업공간에서 여러분이 정의하는 것이다. 나중에 이 정의를 실제 데이터베이스에 배포한다.

  1. Data 퍼스펙티브의 Data Definition 뷰에서, MyWebProject를 오른쪽 클릭하고 New > Database Definition을 클릭한다:


    그림 19. 데이터베이스 정의 만들기
    Figure 19: Create Database Definition

  2. 데이터베이스 이름으로 AddressDB를 입력한다. Database vendor typeCloudscape V5.1을 선택하고 Finish를 클릭한다.
  3. MyWebProject를 편다. ADDRESSDB를 오른쪽 클릭하고 New > Schema Definition을 클릭한다:


    그림 20. 스키마 정의 만들기
    Figure 20: Create Schema Definition

  4. 스키마 정의 윈도우에서 모든 디폴트를 수락한다. Finish를 클릭한다.
  5. AddressTable이라는 이름의 테이블 정의를 만든다. 새롭게 만들어진 SCHEMA1 > New > Table Definition을 오른쪽 클릭한다:


    그림 21. 테이블 정의 만들기
    Figure 21: Create Table Definition

  6. 테이블 이름으로 AddressTable을 입력하고 Next를 클릭한다.
  7. Add Another를 클릭하여 칼럼을 추가한다. 칼럼 이름으로 id를 입력한다. 칼럼 유형에 INTEGER를 선택하고 Key 칼럼 체크 박스를 클릭한다.
  8. Add Another를 클릭한다. 칼럼 이름으로 name을 입력한다. 칼럼 유형으로 VARCHAR를 선택한다. 스트링 길이를 100으로 변경한다.
  9. Add Another를 클릭한다. 칼럼 이름에 address를 입력한다. 칼럼 유형에 VARCHAR를 입력한다. 스트링 길이를 200으로 변경한다.
  10. Finish를 클릭한다.


    그림 22. AddressTable의 테이블 칼럼
    Figure 22: Table Columns for AddressTable

  11. Data Definition 뷰에서 새롭게 만들어진, SCHEMA1.ADDRESSTABLE을 오른쪽 클릭하고 Deploy를 클릭한다. Next를 클릭하고 다시 Next를 클릭한다. 이렇게 하면 Cloudscape 데이터베이스에 SCHEMA1과 AddressTable이 만들어진다:


    그림 23. 스키마 정의 전개하기
    Figure 23: Deploy the schema definition

  12. Use existing connection 체크 박스를 클릭한다. 데이터베이스 연결에 Con1을 선택한다. Finish를 클릭한다.
  13. Database Explorer에서, Con1을 오른쪽 클릭하고 Refresh를 클릭한다:


    그림 24. 데이터베이스 연결 리프레쉬
    Figure 24: Refresh on the database connection

  14. Tables 폴더가 보일 때까지 연결을 확장한다. 방금 전에 만들었던 스키마와 AddressTable이 보일 것이다:


    그림 25. 스키마 정의가 전개된 후
    Figure 25: After the schema definition is deployed

삽입 문장 만들기

데이터베이스에 테이블을 만들었지만 데이터가 없다. 레코드를 테이블에 삽입할 수 있는 Insert 문을 만든다.

  1. Data Definition 뷰에서, MyWebProject > ADDRESSDB를 확장한다. Statements를 오른쪽 클릭하고 New > Insert Statement를 클릭한다:


    그림 26. 삽입 문장 만들기
    Figure 26: Create an Insert Statement

  2. 이름으로 CreateRecord를 입력하고 OK를 클릭한다.
  3. Tables 패널 중간을 오른쪽 클릭하고 Add Table을 클릭한다. 테이블 이름으로 SCHEMA1.ADDRESSTABLE을 선택한다. OK를 클릭한다.
  4. AddressTable에 있는 세 개의 체크 박스 모두를 클릭하여 AddressTable에 있는 모든 칼럼을 선택한다.
  5. 에디터의 밑 패널에 아이디 칼럼 값으로 1을 입력한다. 이름 값에 'Jane'을 입력하고 주소 값에 '8200 Warden Ave'를 입력한다.
  6. 파일을 저장하고 에디터를 닫는다.


    그림 27. Insert Statement 에디터
    Figure 27: Insert Statement editor

  7. Data Definition 뷰에서, CreateRecord를 오른쪽 클릭하고 Execute를 클릭한다. Use an existing connectionCon1을 선택한다. NextFinish를 클릭한다. "Array index out of range: 0"으로 시작하는 에러가 나오면 이 문을 실행할 때 기존 연결을 재사용하는 대신 새로운 연결을 사용한다.


    그림 28. CreateRecord 실행하기
    Figure 28: Execute CreateRecord

  8. Database Explorer 뷰로 간다. Con1을 오른쪽 클릭하고 Refresh를 클릭한다.
  9. SCHEMA1.ADDRESSTABLE이 보일 때까지 Database Explorer 뷰에서 AddressDB를 확장한다. AddressTable을 오른쪽 클릭하고 Sample Contents를 클릭한다:


    그림 29. 샘플 콘텐트
    Figure 29: Sample contents




    그림 30. 샘플 콘텐트 결과
    Figure 30: Sample contents Results

JSP 파일을 수정하여 데이터베이스 내용 디스플레이 하기

이 단계에서는 Relational Record List를 MyFirstJSP.jsp에 추가하여 테이블 내용을 디스플레이 할 것이다. Relational Record List로 JDBC 코딩 없이 데이터베이스에 연결할 수 있다. 레코드 리스트를 끌어서 JSP 파일에 놓고 읽기 전용 리스트를 만든다.

  1. Web 퍼스펙티브로 전환하여 에디터에서 MyFirstJSP.jsp를 연다.
  2. 에디터에서, Design 뷰로 전환한다. Palette에서 Relational Record List를 오른쪽 클릭하고 이를 JSP 에디터 캔버스의 아래에 놓는다. Relational Record List를 사용하여 페이지에 사용할 수 있는 여러 데이터 행(row)들을 만든다.


    그림 31. Relational Record List
    Figure 31: Relational Record List

  3. Name에 addressTableRecordList를 입력한다. Next를 클릭한다.
  4. New를 클릭하여 새로운 연결을 만든다.
  5. New Connection 윈도우에서 기존 Con1 연결을 보게 될 것이다. Con1에서 AddressDB를 선택한다(그림 32). Finish를 클릭한다:


    그림 32. Relational Record List에서 새로운 연결 만들기
    Figure 32: Create a new connection in the Relational Record List

  6. SCHEMA1.ADDRESSTABLE을 선택하고 Finish를 클릭한다. 데이터베이스 행을 디스플레이 하는 테이블이 JSP 페이지에 만들어 진다.


    그림 33. Relational Record List용 데이터베이스 행 선택하기
    Figure 33: Select a database row for the Relational Record List

  7. 파일을 저장한다. 그림 34는 완성된 JSP 페이지이다:


    그림 34. Relational Record List를 이용한 JSP 에디터
    Figure 34: JSP Editor with the Relational Record List

브라우저에서 JSP 파일 실행하기

서버를 시작하고 JSP 파일을 실행한다.

  1. Server 뷰에서 WebSphere Application Server v6.0를 오른쪽 클릭하고 Start를 선택한다.
  2. WebSphere Application Server v6.0 > Restart Project > MyWebProjectEAR을 오른쪽 클릭한다. 프로젝트를 변경했기 때문에 EAR을 재 시작 하여 변경 사항을 적용한다. JSP 파일을 실행할 때 NullPointerException 에러를 방지하기 위함이다. 그래도 에러가 여전히 존재하면 서버에서 프로젝트를 추가 또는 제거한다. 서버에서 > Add or remove projects를 오른쪽 클릭하고 MyWebProjectEAR을 선택하고 오른쪽 페인에서 이것을 제거한다. Finish를 클릭하고 MyWebProjectEAR을 오른쪽 페인에 추가한다.
  3. JSP 파일을 실행하기 전에 공표가 끝날 때까지 기다린다. Project Explorer 뷰에서, MyFirstJSP.jsp를 오른쪽 클릭하고 Run > Run on Server를 선택한다. Finish를 클릭한다.
  4. JSP는 AddressTable의 행을 디스플레이 한다. 더 많은 행들을 AddressTAble에 입력하고 JSP 파일을 다시 실행한다. 더 많은 행들이 JSP에 나타날 것이다.


    그림 35. JSP 파일 실행하기
    Figure 35: Run the JSP file
Posted by 슈델미르
원본 http://blog.naver.com/triumph0/110014466498

이클립스 플러그인을 통해서 각자의 개발 용도와 업무환경에 맞춰 개발 환경을 꾸밀 수 있다.

www.eclipse-plugins.info 에 접속하면 새로운 플러그인 소식이나 검색 등을 지원한다.


◈ 이클립스 WTP(Web Tools Platform)

     매우 많은 기능을 지원하며, 다수의 플러그인들을 포함하고 있다.

    - HTML, Javascript, CSS, JSP, SQL, XML, DTD, XSD, WSDL 등의 소스 지원

    - XSD와 WSDL 그래픽 편집

    - J2EE 프로젝트 설정 / J2EE 내비게이터 지원

    - 웹 서비스 위자드, 탐색기, WS-I 테스트 도구 지원

    - 데이터 베이스 접속 / 쿼리 도구와 모델 지원

    http://www.eclipse.org/webtools/index.html


◈ 웹로직 플러그인

     WebLogic Plugin 1.1.1 for Eclipse - BEA사에 만든 플러그인입니다.

 

◈ Properties Editor

     한글이 자동적으로 유니코드로 변환되네요.

      http://propedit.sourceforge.jp/index_en.html

 

◈ Eclipse Platform Extensions

     아주 유용한 기능들을 제공하는 소박한 플러그입니다.

         - 자동 빌드 On/Off 기능

         - 이클립스 익스플러러 창에서 해당 폴더를 바로 윈도우 익스플러러나 DOS 콘솔로 오픈

         - 워크벤치 재시작(플러그인 재설치 시 필요, 이클립스가 버벅 걸릴 경우, ..)

         - 강제적으로 Garbage Collection 실행

         - 클래스 fully qulified name 복사 기능

     http://sourceforge.net/projects/ttl

 

◈ Clay Database Modeling

     -. ERD 작성

     -. Reverse engineering (from DB)

     -. DDL 파일 생성

     * Eclipse 3.0 에 설치(v1.0.4 기준)하기 위해서는

       ${eclipse}/features/jp.azzurri.clay.core_1.0.4/feature.xml 파일에서
   
   <import plugin="org.apache.xerces"/> 을 제거해 주시면 됩니다.

     http://www.azzurri.jp/en/software/clay/index.jsp

◈ Sysdeo Tomcat Plugin

     톰캣의 시작과 종료 가능, JSP,Java 디버깅 가능

     http://www.sysdeo.com/eclipse/tomcatplugin

◈ Easy Explorer and Easy Struts

     파일이나 디렉토리 경로를 윈도우의 탐색기 형태로 열어주는 기능 제공

     http://sourceforge.net/projects/easystruts

◈ toString plugin

    http://www.vancauwenberge.info/eclipse

◈ Ajax 관련 플러그인

    http://www.eclipse.org/atf - Ajax Toolkit Framework로 dojo등의 ajax library를 지원

    http://www.eclipse.org/rap - Rich Ajax Platform으로 이클립스 내에서 Ajax UI 개발지원

    http://www.aptana.com - 자바스크립트 전용 IDE

    http://code.google.com/webtoolkit - 구글에서 만들고 있는 Ajax 프레임워크

Posted by 슈델미르