2014년 12월 3일 수요일

insert 시 &처리

INSERT INTO test VALUES ('김&동훈', '2004-10-08');
위의 쿼리를 입력 하려고 합니다.
"&" 로 인해 입력이 안됩니다. & 무시하고 입력 방법이 없나여?

INSERT INTO test VALUES ('김\&동훈', '2004-10-08'); => toad 에서는 입력이 됩니다만, sqlplus 이용시 안됩니다.

위와 같은 쿼리를 ss.sql 파일에 저장한후

INSERT INTO test VALUES ('김\&동훈', '2004-10-08');
INSERT INTO test VALUES ('김\&동호', '2004-10-08');
INSERT INTO test VALUES ('나&난나', '2004-09-24');
commit;
exit;


sqlplus aaa/bbb @ss.sql



이 글에 대한 댓글이 총 7건 있습니다.
'&'가 바인딩변수로 사용되기 때문입니다만....

굳이 '&' 문자를 넣으셔야 한다면 '&'를 단문자로 처리하시면 입력은 되더군요.(저도 직접 해보고서야 알았습니다만...)

INSERT INTO TEST VALUES ('김' || '&' || '동훈','2004-10-18');


지나가며님이 2004-12-29 14:32:04에 작성한 댓글입니다. Edit 
답변 감사 합니다.
data 를 이전 하는 과정에서
& 로 인해 data가 이전이 안돼어서 그렇습니다.

김동훈님이 2004-12-29 14:44:16에 작성한 댓글입니다. Edit 

자료이전때문에 그러신다면 SQL Loader를 사용하시면 될텐데요.
SQL Plus를 언급하시는 것으로 뵈서는 다른 툴이 없으신 것 같습니다만, ORACLE에서 제공되는 SQLLDR 명령을 사용하실 수 있습니다.
(사용법은 좀 복잡하긴 합니다만... 필요하시면 메일을 남겨주시면 갈무리해서 날려드리겠습니다)
계속 사용하실 계획이시라면 토드 또는 오렌지 등의 툴을 확보하심이 좋을 듯 하네요.
지나가며님이 2004-12-29 15:04:30에 작성한 댓글입니다. Edit 
메일주소는

토드에서의 기능을 같이 알려 주시면 감사하겠습니다.
김동훈님이 2004-12-29 15:10:01에 작성한 댓글입니다. Edit 
이전은 postgresql -> oracle 로 의 이전입니다.
김동훈님이 2004-12-29 15:12:32에 작성한 댓글입니다. Edit 
혹시 이런것 내용인가여...
Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법

-- 테스트 테이블 생성
SQL>CREATE TABLE test_str(
        val varchar2(10));

 
-- 테이블에 아래와 같이 특수문자를 인서트 할경우
SQL> INSERT INTO test_str VALUES('Q&A');
a의 값을 입력하십시오:
-- 
이런 문장이 나옵니다.. 
-- 
특수문자를 갖는 데이터를 인서트 하기 위해서는 다음과 같은 세 가지 해결 방법이 있습니다.

 
▒ 첫번째 방법

   SQL*Plus에서 
SET DEFINE OFF나 SET SCAN OFF를 실행하여
   
Substitution Variable(&)을 Turn Off시킨다.


   SQL> 
SET DEFINE OFF
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.
  
   SQL>SELECT * FROM test_str;
        VAL
        ------
        Q&A


 
▒ 두번째 방법

   SET 
DEFINE ON 상태로 유지 시키면서 Substitution Variable을
   다른 
Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 대체시킨다.


   SQL> 
SET DEFINE %
   SQL> 
INSERT INTO test_str VALUES('Q&A');
   1 개의 행이 만들어졌습니다.


 
▒ 세번째 방법

   SET ESCAPE ON 상태에서(DEFINE은 &로, SCAN은 ON 상태로 유지)
   
특수 문자 앞에 ESCAPE 문자인 BACKSLASH('\')를 붙인다.


   SQL> 
SET ESCAPE ON
   SQL> 
SHOW ESCAPE
        ESCAPE "\" (hex 5c)
   SQL> 
INSERT INTO test_str VALUES ('Q\&A');
   1 개의 행이 만들어졌습니다.

테이블 스페이스 수정하기

--테이블 스페이스
alter table KRS_FXDEALTRAN_IT move tablespace KRS_IDX_TS02

--index
alter index KRS_FXDEALTRAN_IT_PRIMARY_KEY rebuild tablespace KRS_IDX_TS02

[jdbc] oracle 연결시 Error 모음입니다.

classes12.zip 이 연결이 안된 경우입니다.
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at getEmp.main(getEmp.java:18)
해결1: classes12.zip을 classes12.jar 로 이름을 바꾼 뒤에 <CATALINA_HOME>/common/lib 에 놓고 재시동


host 주소가 맞지 않은 경우입니다.
또는 listener가 떠있지 않은 상태입니다.
java.sql.SQLException: IO 예외 상황: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

db명이 틀릴경우입니다. 호스트스트링이라고도 합니다.
java.sql.SQLException: IO 예외 상황: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=135290880)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:269)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:210)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

아이디와 패스워드가 틀릴경우입니다.
java.sql.SQLException: 널 사용자나 암호가 THIN 드라이버에서 지원되지 않습니다
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:803)
at oracle.jdbc.ttc7.TTC7Protocol.logon(TTC7Protocol.java:179)
at oracle.jdbc.driver.OracleConnection.(OracleConnection.java:198)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:251)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:224)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at getEmp.main(getEmp.java:20)

유용한 JQuery플러그인

jQuery 플러그인(http://plugins.jquery.com/)은 등록된것만 4,500개에 이른다.
다 어디에 쓰이는 플러그인인지 써보지 않고서는 알 방법이 없지 않나. 나도 뭐가 있는지 모르는 상태에서 list 플러그인 찾다가 누군가 올려 놓은 유용한 jQuery 플러그(http://marcgrabanski.com/article/list-of-useful-jquery-plugins)리스트라는 글을 발견하고 옮겨 놨다.

자바메일 ..참조, 숨은참조, 중요도 설정하기

1. 받는 사람 참조 하는 방법
msg.setRecipients(Message.RecipientType.CC, address);
이렇게 추가 시켜주고 처리하면 됩니다.
2. 받는 사람 숨은 참조 하는 방법
msg.setRecipients(Message.RecipientType.BCC, address);
이렇게 추가 시켜주고 처리하면 됩니다.
3. 메일에 중요도 높음으로 보내는 방법
msg.setHeader("Importance", "High"); 추가 해주시면 됩니다. msg.setHeader 안에 Importance 값은 변경되지 않고
High 값은 아래와 같이 설정을 해주시면 됩니다.
- 중요도 높음 : High
- 보통 : Normal
- 중요도 낮음 : Low

JAVA.UTIL.SCANNER로 텍스트 스캔하기

2SE 5.0에는 일상적 태스크를 좀 더 쉽게 구현할 수 있도록 하는 클래스와 메소드들이 추가되었다. 이번 팁에서는 새로 추가된java.util.Scanner클래스를 이용함으로써 일반 표현문을 사용하는 스트링과 프리미티브 타입을 읽고 파싱(parsing)하는 것이 어떻게 좀 더 쉬워졌는지 알아보도록 하자.
J2SE 5.0의 출시 이전에는 파일에서 텍스트를 읽으려면 다음의 TextReader 클래스 같은 코드를 작성해야했다.
   import java.io.BufferedReader;
   import java.io.FileReader;
   import java.io.IOException;
   import java.io.File;

   public class TextReader {
     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         FileReader reader = new FileReader(file);
         BufferedReader in = new BufferedReader(reader);
         String string;
         while ((string = in.readLine()) != null) {
           System.out.println(string);
         }
         in.close();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextReader "
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
이와 같은 클래스에서의 기본적인 접근법은 하드 드라이브의 실제 파일과 일치하는 File 오브젝트를 생성하는 것이다. 그리고 나서 그 파일과 관련된 FileReader와 그 FileReader의 BufferedReader를 생성하고, 그 후 BufferedFile 리더를 사용하여 한번에 한 줄씩 읽는다.
실행되는 TextReader클래스를 보기위해서는 클래스에 대한 문서를 생성하여 읽고 파싱해야한다. 문서를 생성하기 위해서는 TextReader와 같은 디렉토리 안에 있는 TextSample.txt라는 파일에 다음과 같은 두 줄의 텍스트를 저장해야 한다.
   Here is a small text file that you will
   use to test java.util.scanner.
TextReader를 컴파일하고 다음을 입력하여 구동시켜보자.
   java TextReader TextSample.txt
표준 출력으로 되돌아온 원본 파일을 보게 될 것이다.
프리미티브 타입과 스트링을 파싱하는 클래스인 java.util.Scanner를 이용하여 TextReader의 코드를 간단하게 할 수 있다.
   import java.io.File;
   import java.io.FileNotFoundException;
   import java.util.Scanner;

   public class TextScanner {

     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         Scanner scanner = new Scanner(file);
         while (scanner.hasNext()) {
           System.out.println(scanner.next());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextScanner1"
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
TextScanner를 컴파일하고 다음과 같이 구동하자.
   java TextScanner TextSample.txt
다음과 같은 결과가 나타난다.
   Here
   is
   a
   small
   text
   file
   that
   you
   will
   use
   to
   test
   java.util.scanner.
TextScanner 는 파일로부터 Scanner 오브젝트를 생성한다. Scanner는 파일의 컨텐츠를 구획자 패턴을 이용하여 분해한다. 구획자 패턴의 디폴트 값은 흰 여백이다. 그 후 TextScanner는 Scanner의 hasNext() 메소드를 호출한다. 이 메소드는 Scanner 입력값에 파일의 마지막 부분에 이를 때까지 다른 token이 있으면 'true'를 리턴한다. next() 메소드는 다음 token을 나타내는 스트링을 리턴한다. 따라서TextScanner는 파일의 마지막부분에 이를 때까지 각 라인에서 next()에 의해 리턴되는 스트링을 프린트한다.
Scanner의 useDelimiter 를 이용해 입력물을 토큰화하는 데 이용하는 구획자를 변경시킬 수도 있다. 메소드에 스트링 또는java.util.regex.Pattern에 전달해주면 된다. 어떤 패턴들이 적절한 지에 대해서는 JavaDocs page for Pattern를 참조하기 바란다. 예를 들어 newline(\n)을 구획자로 이용하여 한번에 한 줄의 입력물을 읽을 수 있다. 다음은 새줄 문자를 구획자로 이용하는 수정된 readFile()메소드이다.
   private static void readFile(String fileName) {
     try {
       Scanner scanner = new Scanner(new File(fileName));
       scanner.useDelimiter
         (System.getProperty("line.separator")); 
       while (scanner.hasNext()) {
         System.out.println(scanner.next());
       scanner.close();
     } catch (FileNotFoundException e) {
       e.printStackTrace();
     }
   } 
마지막 줄을 찾는 다른 옵션들도 있다. 예를 들어 새줄 문자로 끝나는 라인이나 캐리지 리턴(enter키)과 newline으로 끝나는 라인들을 조사할 수 있다. "\r\n|\n" 일반 표현문을 이용하여 이를 실행할 수 있다. java.util.regex.Pattern의 JavaDocs는 또다른 라인 종결기들을 보여주므로 좀 더 복잡한 분석은 "\r\n|[\r\n\u2028\u2029\u0085]"표현문을 이용한다. 또한 Scanner 클래스의 hasNextLine()nextLine() 메소드를 이용할 수 있다. 어느 경우이던 수정된 TextScanner를 사용하면 결과물은 TextSample.txt의 컨텐츠와 레이아웃에 부합될 것이다. 다음을 참고하기 바란다.
   Here is a small text file that you will
   use to test java.util.scanner.
Scanner에 의해 사용된 구획자의 패턴을 간단하게 변경하여 큰 효과와 유연성을 얻을 수 있다. 예를 들어 다음의 구획자를 지정하면,
   scanner.useDelimiter("\\z");
한번에 전체 파일을 읽는다. 이는 Pat Niemeyer가 java.net blog에서 제안하고 있는 요령과도 비슷하다. 몇 개의 중간 오브젝트를 생성하지 않고도 웹페이지의 모든 컨텐츠를 읽을 수 있는 것이다. 다음 WebPageScanner클래스의 코드는 java.net homepage의 현재 컨텐츠를 읽고 있다.
   import java.net.URL;
   import java.net.URLConnection;
   import java.io.IOException;
   import java.util.Scanner;

   public class WebPageScanner {
     public static void main(String[] args) {
       try {
         URLConnection connection =
           new URL("http://java.net").openConnection();
         String text = new Scanner(
           connection.getInputStream()).
           useDelimiter("\\Z").next();
       } catch (IOException e) {
         e.printStackTrace();
       }
     }
   }
Scanner 클래스로 스트링 이외의 것들도 다룰 수 있다. 프리미티브 타입으로 이루어진 데이터를 파싱하는 데에도 사용할 수 있다. 이에 대한 예제로, 다음의 세 라인을 Employee.data라는 이름의 파일(TextSample와 같은 디렉토리 안)에 저장하자.
   Joe, 38, true
   Kay, 27, true
   Lou, 33, false
이를 하나의 큰 스트링으로 취급하여 이 스트링을 파싱한 후에 대화문을 실행할 수도 있지만, 대신에 이 파일을 두가지 단계로 파싱해보자. 이는 다음의 클래스 DataScanner에 설명되어 있다.
   import java.util.Scanner;
   import java.io.File;
   import java.io.FileNotFoundException;

   public class DataScanner {

     private static void readFile(String fileName) {
       try {
         Scanner scanner =
           new Scanner(new File(fileName));
         scanner.useDelimiter
           (System.getProperty("line.separator")); 
         while (scanner.hasNext()) {
           parseLine(scanner.next());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

     private static void parseLine(String line) {
       Scanner lineScanner = new Scanner(line);
      lineScanner.useDelimiter("\\s*,\\s*");
       String name = lineScanner.next();
       int age = lineScanner.nextInt();
       boolean isCertified = lineScanner.nextBoolean();
       System.out.println("It is " + isCertified +
         " that " + name + ", age "
         + age + ", is certified.");
     }

     public static void main(String[] args) {
       if (args.length != 1) {
         System.err.println("usage: java TextScanner2"
           + "file location");
         System.exit(0);
       }
       readFile(args[0]);
     }
   }
DataScanner의 바깥쪽 Scanner 오브젝트는 한번에 한 라인씩 파일을 읽는다. readFile() 메소드는 각 라인을 두번째 스캐너에 전달하고, 이 두번째 스캐너는 콤마로 ,구획된 데이터를 파싱하고 콤마 양쪽의 흰 여백을 삭제한다. 다음 token이 특정타입의 token인지 아닌지 분석하여 다음 token을 그 타입의 인스턴스로 취급하도록 하는 hasNext()나 next()메소드들도 있다. 예를 들어nextBoolean()은 다음 token을 boolean으로 취급하여 "true" 또는 "false" 스트링과 매치시킨다. 매칭이 이뤄지지 않으면java.util.InputMismatchException이 던져진다. DataScanner의 parseLine() 메소드는 각 라인이 어떻게 String, int, boolean으로 파싱되는지 보여준다.
Compile DataScanner. Then run it as follows:
DataScanner를 컴파일하고 다음과 같이 구동시키자.
   java DataScanner Employee.data
다음과 같은 결과가 나타난다.
   It is true that Joe, age 38, is certified.
   It is true that Kay, age 27, is certified.
   It is false that Lou, age 33, is certified.
콤마를 구획문자로 사용하고 싶을 것이다. 다시 말해 다음과 같이 시도해보려고 할 것이다.
   lineScanner.useDelimiter(",");

이는 결국 InputMismatchException로 끝날 것이다. 이는 boolean으로 변경하려는 token에 여분의 공간이 포함되며 이 공간은 "true"나 "false" 에 매치되지 않기 때문이다. 일반적인 표현문의 모든 애플리케이션에 해당되는 케이스이므로 패턴을 구축하는 데 있어서 특히 세심한 주의가 필요할 것이다.

method run() of type Runnable(){} must override a superclass method

I use Eclipse to compile the Java part of the project and create tha
apk file... before, when we were not using shared library, I was able
to create the apk file fine, but now, after updating my androind-
lighthouse, and compile it again, when I try to generate the apk file
for the example QtAnimatedTiles (included), I am getting a new error
message:
method run() of type Runnable(){} must override a superclass method 
it happens 10 times in many places like: 
QtApplication.java /qtExample/src/com/nokia/qt line 95
QtApplication.java /qtExample/src/com/nokia/qt line 115
QtApplication.java /qtExample/src/com/nokia/qt line 134
QtApplication.java /qtExample/src/com/nokia/qt line 153
QtApplication.java /qtExample/src/com/nokia/qt line 171
and other places... 
I don´t want to mess with the .java files provided by the android-
lighthouse - so I wonder... what is going on? anyone else having the
same problem?
 
<script language="javascript1.3"></script>
<input id="hdn_reply_to_subj" value="method run() of type Runnable(){} must override a superclass method" type="hidden" /> <input id="hdn_date" value="2010년6월28일, 오후5시59분" type="hidden" /> <input id="hdn_author" value="Anonymous Name " type="hidden" /> <input id="hdn_group_name" value="android-qt" type="hidden" />
Anonymous Name
프로필 보기 한국어로 번역 번역됨(원문 보기)
 
보낸사람: Anonymous Name <anonymous.inbox.acco...@gmail.com>
날짜: Mon, 28 Jun 2010 14:59:49 -0700 (PDT)
현지시간: 2010년6월28일(월) 오후5시59분
제목: Re: method run() of type Runnable(){} must override a superclass method
I had the same errors. In Eclipse I made the following change to get
rid of the errors.
Windows->Preferences->Java->Compiler “configure project specific
settings”, Change from java 1.5 to 1.6 and then “yes” rebuild pr

IIS SMTP서버 설정

windows 2000 professional 에 있는 IIS 의 SMTP는 javamail 에서 이용할 수 없는 줄 알았습니다. relay denied 에러가 자꾸 떠서 말이죠. 그런데, 손 좀 봐주니까,(^^; 손이 있네요. 이름이 등록정보라고 하죠.) 그냥 두루넷에 연결된 제 컴퓨터도 smtp.thrunet.com 말고, localhost 로도 발송이 됩니다. ^^ 기분 째지더군요. 이게 작년 말의 일이었습니다. ^^; 근데 왜 이제 글을 올리냐구요? 헤헤... 아시면서.... 바쁘니까엽...
그림 하나하나 올리면서 설명 드리죠. 가끔씩 초보강좌 잘 보신다는 님들의 편지가 제 심장을 팍팍 쑤셔서 뛰게 합니다. 그래서 이렇게 보너스로 강좌도 올리곱... 각설하고, 메인으로 가겠습니다.
일단 제어판에 보면 관리 도구가 보일 것입니다.
인터넷 서비스 관리자 를 확인하시고, 그것을 열어주세요. 그게 없다면
제어판 → 프로그램 추가/제거 에서 왼쪽에 있는 Windows 구성요소 추가/제거 아이콘을 클릭하세요. 새로 뜨는 창에서 보면 인터넷 정보 서비스(IIS)에 check 해주시고, windows 2000 CD 를 넣고, 설치하시면 관리도구에 인터넷 서비스 관리자 가 나타납니다. windows 2000 professional 은 기본설치에 IIS 가 빠져있습니다. 추가로 설치해주셔야 합니다.
인터넷 정보 서비스 창이 열리면 기본 SMTP 가상 서버 에서 마우스 오른 버튼을 눌러서 등록 정보(R) 를 선택합니다.
그러면 이렇게 창이 열리겠죠.
액세스 탭을 누르면 나타나는 페이지의 하단에 있는 릴레이(E) 버튼을 클릭합니다. 또 모가 나타나죠. 이렇게...
추가(D)... 버튼 누르시고 바로 127.0.0.1 을 입력하시던지 아니면 DNS 조회(N)... 버튼을 눌러서 자기 컴의 이름이나, localhost 를 입력합니다. 자기 컴의 이름을 입력하면 자기 컴의 ip가 검색됩니다. 저는 localhost 를 추천합니다.
확인 버튼을 세 번 누르면 아래와 같이 보일 것입니다. 그럼 세팅 완료.
이제 ISP의 smtp 서버를 이용하지 않고도 자신의 컴퓨터로 메일을 보낼 수 있습니다. 제 javamail 강좌를 참고해서 메일을 보내보세요. smtp 서버에는 localhost 라고 하시면 됩니다. mail주소는 제꺼 말구 딴걸루 바꾸시구엽.
즐거운 메일 보내십시오. 물론 나가는 메일에는 자기 컴퓨터의 ip 어드레스(127.0.0.1 말고, dhcp로 부여된 동적 ip)가 mail header에 기록이 됩니다. spam 메일 보내지 마시라는 얘기죠.

캐나다 토론토 첫 탐방.

홈스테이 가기전에 이야기 할께 한가지 빠졌다.
바로 입국 심사 받을때..(엄청 떨렸음) 한국 유학원에서 예상 질문지를 줬는데 나름 외국에 왔으면 달달 외워서 대답하는것 보다는 중고등학교, 대학교에서 배운 영어 실력을 테스트 해보자는 심산으로
이민심사관의 질문에 답하려고 했다.
하지만 첫 질문을 듣자마자 극좌절...무슨 말인지 못알아 먹었다..ㅡㅡ;
그래서 일단 내 여권과 4개월 등록 학원 레터, 홈스테이 주소를 내밀었다
그러자 다시 또 질문했다. 아무튼 대화 내용이 대충 아래와 같았다.

이민 심사관 : How long will you stay here?
나 : I will stay here for 4 months
이민 심사관 : What will you do after completing the ESL course.
나 : I will travel.
이민 심사관 : where?
나 : I ...I..will go to the US and travel around Canada.
이민 심사관 : Where will you stay then?
나 : hotel.
이민 심사관 : hotel? what hotel?
나 : just hotel
이민 심사관 : You must tell me ~~~~블라블라블라..

불안했다..혹시 추방 당하면 어쩌나...

그 후로 나한테 말 안시켰다. 혼자서 5분 남지 서류 보고 하더니.
다행이 도트 프린터로 비자를 뽑고 내 여권에 붙여 주었다.

그리고 하는 말이 대충 관광 비자는 6개월까지인데
너가 학원 끝나고 계획이 불분명 하기때문 6개월 줄수 없다.
학원 끝나고 딱 5일 더 주겠다..

그리하여 남들 다 받는 관광비자 6개월 짜리가 아닌 4개월짜리 받고 비자 붙여 주었다.
나중에 들어 보니 관광비자는 비자 안붙이고 스탬프만 받고 끝나는것 같았다..
암튼 영어의 울렁증이..입국하자마자 생겼다.

공항에서 나오자 마자 미리 신청한 라이드 서비스 받고
예약된 홈스테이로 갔다. (토론토 이스트쪽)
집은 방갈로형태 집이였다.


(해수욕장가면 볼 수 있는 방갈로 아니다. 우리나라에는 변형되서 쓰는것 같다. 대개 단층 주택)

방 구조는 방2, 화장실1, 키친등이 있었고 지하실에도 마찬가지로 방1, 거실, 화장실1, 키친이 따로 있었다
1층 방에는 나랑 다른 한국학생이 살았고 주인 아주머니는 거실에서 주인집 아들은 1층 거실에서 살았다.
사실 5명이 살기에는 꽤나 좁은 집이였다.

아들이란 놈은 나이가 35(international age)이 되도록 지하에 쳐박혀 매일 맥주 마시면서 스포츠 보는게 낙인듯 했다.
아무튼 주인 아줌마는 그리스계 캐나다인.
말이 엄청 빨라서 많이 못알아 먹었다.

아무튼 짐을 방에 넣고 대충 씼고(도착을 11시30에 했음) 잤다.
그 다음날 주변을 돌아 다니니 정말 한국과 다른 분위기 너무 좋았다.
시끄럽지도 않았고 한적한 분위기.~


간단히 산책을 하고 점심을 먹고 주인 아주머니 손에 이끌려 가기로 되어있는 유학원을 찾아갔다.
(무슨 유학원인이 까먹음...)

아무튼 대충 토론토는 어떤곳이고 조심해야 할 지역 그리고 한인타운 위치등..
참고로 한인타운은 크리스티(다운타운 근처)와 핀치라는 지역에 두개가 있다.

그리고 계좌를 오픈해야 하는데 나는 다른 사람과 달리 비지터(방문비자) 신분이기 때문에 쉽게 계좌 오픈이 안된다고 한다. 그래도 한번 해보자는 심산에 유학원에서 안내해준 가까운 TD뱅크에 가서 계좌 오픈하고 싶다고 이야기 하니 잠시 기달려 달라고 했다. 머리가 약간 붉으스럼한 여자가 따라 오라고 하더니 개인 사무실 같은곳에 같이 들어 갔다. (한국과 좀 다르다)
암튼 뭐라고 뭐라고 막 이야기 하기 시작 하더니 여권 달라고 해서 주고 대충 감잡아 OKOK 만 연발했다.
또 한번 좌절..그래도 대충 눈치 안채게 고개도 끄덕거리는척 간혹가다 알아듣는 영어 나오면 YES도 남발..
그리하여 우려와는 달리 계좌 오픈 성공..
(캐나다는 계좌를 개설하면 달달이 계좌 사용료를 내야 한다(대충 10불 언저리.~)

암튼 또 한번의 영어 울렁증에 시달리며 나온 토론토 시내 구경


던다스 스퀘어도 보고








근처 거리에서 드럼치는 사람과 그 옆에 배트맨 아저씨도 보고


도로 위에 있는 궤도를 달리는 스트릿카도 탔다.


한국에서 찌들어 살았는지는 몰라도 참 사람들 표정에 여유가 있었다.

그리고 토론토에서 가장 유명하다는 이튼센터(쇼핑몰)도 구경


약간 피곤은 했지만 그래도 대충 다운타운 구경하니 신기하기도 하고 내가 지금 한국에 없구나라는 생각에
묘한 감정이 들었다.

아무튼 어학원가기 전까지 나름 여기 저기 많이 다닐려고 노력했다.


돌아오는 길목에서 한장

캐나다에 발을 들여 놓기까지

국에서 자바 개발자로 한 6년 이상은 일해왔었다.
하루하루 밀려드는 업무에 야근..제일 듣기 싫었던 소리는 "XX씨 오늘 저녁은 뭐 먹을꺼야?"..참나..
왜 저녁메뉴는 물어 볼까? 6시면 퇴근을 해야 하는데..

그래도 어쩔수가 없었다.. 남도 다 하니까..눈치 보기는 싫었지만 그냥 해야 한다는 그런 생각이 앞섰다.
야근, 철야, 주말 출근..정말 이러다가는 아무것도 못하고 죽을것만 같았다.
금융권에서 일을 해서 강도가 다른 SI개발 보다 더 쎈거 같았다.

한때는 개발자임을 망각하고 기술 공부보다는 금융 지식 공부를 했다.
은행FP, 증권거래 상담사, 선물거래 상담사..
몇개의 자격증을 땄다. 매일 밤 11시에 퇴근후 2시까지 공부했었고.

지금 생각해보면 물론 업무처리시 금융 지식이 있으면 좋지만..
결국은 갑..(실무자)이 하는대로 움직여야 했다.
이것이 나를 참 허탈하게 만들었다.

그 와중에 외국계회사에서 면접이 들어 왔다.
다만 조건이 영어로 면접 가능하냐였다..아는 지인(뉴질랜드에서 10년 넘게 살았던 사람)에게
5일 동안 배우고 할까 하다가..내가 언어의 천재도 아닌라서 그냥 전화해서 포기한다고 했다.
어찌나 아깝던지..

아무튼 그후로 힘든 업무와 영어및 세상에 태어나서 뭔가 다른 경험을 하고 싶어서
캐나다로 떠났다.
우선 토론토 KGIC라는 학원에 등록했다. 3개월인데 프로모션을 통해서 4개월 수업을 했다.

결국은 회사 때려치고 적지 않은 나이에 큰 모험을 한것이다.
아둥바둥 사는것도 싫었고 인원이 5명인 회사에서 수백명 회사까지..하나씩 올라가니
나름대로 다 아는것처럼 교만에 차있었고 나태해져 갔었다.

토론토는 한국에서 비행기 타고 14시간 정도 걸린다. (대략 맞을꺼다.)

낮에 도착했는데 광활한 평야에 CN타워가 보이는 토론토란 정말 내가 한국이 아닌 곳에 있구나를 실감했다.
피어슨 국제공항. 내리자마자 우리가 흔히 이야기 하는 노란머리 외국인들을 보니 참
설레기도 하고 말붙이면 어떻게(영어 공부가 목적이였지만) 하나 신경이 왕 곤두섰던게 기억이 난다.

그때 결심했었다.
그래 하나밖에 없는 내 인생 스스로 개척해 나가자. 어차피 죽기 아니면 까무러치기였다.

참고 : 이게 현재 이야기가 아닌 몇년전 이야기임.


(토론토 아일랜드에서 바라본 토론토 다운타운 모습)