2009년 12월 15일 화요일

FireFox '페이지를 열 때마다' 설정

익스플로러의 '페이지를 열 때 마다' 옵션이 FireFox에서는 찾기가 힘들었는데

 

다른 포스트를 참고해서 겨우 찾을 수 있었다.

 

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

 

방법 1. 설정 창에서 Cache를 지우고 다시 접속하세요.

방법 2. 주소창에서 about:config를 치고

browser.cache.check_doc_frequency의 값을 원하는 형태로 (이번 경우는 1로) 바꾸세요.

0: 현 브라우저 세션이 끝날때까지 한번만 체크 (파폭을 종료하기 전까지는 되도록 cache에서만 읽음)
1: 페이지에 들를때 마다 매번 체크
2: 체크하지 않음. (한번 cache되고 나면 늘 cache를 씀)
3 (기본 설정): 자동으로 주기적으로 체크


출처 : http://forums.mozilla.or.kr/viewtopic.php?p=33962

2009년 11월 8일 일요일

java 에서의 call by value 와 call by reference

자바에서는 진정한 call by reference는 없고 reference 값을 넘기는 것만 있다고 들었는데,

그 말을 이해하지 못하다가 이제서야 이해하게 되었다.

 

그 이해를 도와준 포스트가 아래 포스트이다.

 

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

 

테스트 없이 눈으로만 코딩할 때 가장 틀리기 쉬운 부분이 call by value 와 call by refence 를 정확히 이해하지 못할 때 생기는 오류가 아닐까 싶다.

기본형과 객체가 있는데 기본형은 call by value 이고 객체는 call by refence 라는 것은 대부분의 java 개발자들이 알고 있을꺼라 생각한다.

그 예로 swap 함수를 가장 많이 설명하는데..

예제 1)

class Test {
    private static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static void main(String args[]) {
        int a = 1;
        int b = 2;

        System.out.println("a => " + a);
        System.out.println("b => " + b);

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a);
        System.out.println("b => " + b);
    }
}

예제 1 의 경우 원하던 결과가 아닌 것을 바로 알아 낼 수 있을 것이다.
swap 메소드에 넘기는 것은 reference 가 아닌 value 이기 때문에...
쉽다. 넘어가자.

다음 예제 2 를 보자
예제 2)

class Test {
    private static void swap(Integer a, Integer b) {
        Integer temp = a;
        a = b;
        b = temp;
    }

    public static void main(String args[]) {
        Integer a = new Integer(1);
        Integer b = new Integer(2);

        System.out.println("a => " + a.intValue());
        System.out.println("b => " + b.intValue());

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a.intValue());
        System.out.println("b => " + b.intValue());
    }
}

예제 2 의 경우 Integer 는 Object 이다. Object 는 call by reference 다.
따라서 위의 예제는 원하는 결과를 가져올 것이다.
그러나 실행을 하면 예제 1과 전혀 다르지 않다는 것을 알 수 있다.

왜? 객체는 call by reference 라며 사기친거야?

결론부터 말하면 객체는 call by reference 맞다

그러나 해당 객체를 보는 새로운 reference 를 참조해서 넘기는 것이다.

따라서 동일한 객체를 가르키고 있지만
main 에서의 reference 값과 swap 함수에서의 reference 값은 다르다.

따라서 위의 예제의 경우 원하는 결과가 나오지 않는다.

그렇다면 어떻게 해야 해?

예제 3 을 보자.

예제 3)

class Test {
    int value;

    Test(int value) {
        this.value = value;
    }

    private static void swap(Test a, Test b) {
        int temp = a.value;
        a.value = b.value;
        b.value = temp;
    }

    public static void main(String args[]) {
        Test a = new Test(1);
        Test b = new Test(2);

        System.out.println("a => " + a.value);
        System.out.println("b => " + b.value);

        swap(a, b);

        System.out.println("------- swap 후 -------");

        System.out.println("a => " + a.value);
        System.out.println("b => " + b.value);
    }
}

예제 2와 같이 객체의 reference 를 넘긴다.
reference 를 직접 변경하는 게 아니라.
reference 가 참조하는 객체의 value 를 변경하고 있다.
따라서 같은 객체를 보고 있는 main 에서도 값이 바뀌는 것을 알 수 있다.

call by reference

해당 객체의 주소값을 직접 넘기는 게 아닌 객체를 보는 또 다른 주소값을 만들어서 넘기다는 사실을 잊지 말자~

 

 

출처 : java 에서의 call by value 와 call by reference

2009년 11월 4일 수요일

자바 추상클래스와 인터페이스 (abstract class VS interface)

 

다중상속
클래스는 하나의 클래스만을 상속(extends)받을 수 있으므로 추상클래스를 상속받고자 하는 클래스는 한개의 추상클래스만이 상속가능하다. 이에 반해 클래스는 여러개의 인터페이스는 구현(implements)할 수 있으므로 하나의 클래스에 여러개의 인터페이스 구현이 가능하다는 뜻에서 다중상속이 가능하다. (엄격히 말한다면 인터페이는 상속이 아닌 구현이다.)

 

필드 정의
추상클래스에서는 클래스 멤버 변수의 정의가 가능하다.  하지만 인터페이스에서는 멤버변수의 정의를 할 수 없다. 인터페이스에서 멤버변수 선언이 가능하다고 생각해보자. 하나의 클래스에서는 여러 개의 인터페이스를 구현해야하는데 서로 다른 인터페이스에 같은 이름의 멤버변수가 있다면 인터페이스들을 구현한 클래스에서는 그 멤버변수가 어느곳에서 선언한 것인지 구별할 수 있겠는가?! 구별이 안된다.

 

메소드 구현
추상 클래스는 구현메소드와 추상메소드 모두 가능하지만, 인터페이스에서는 추상메소드만이 가능하다. 추상 클래스에서는 메소드에 abstract 키워드를 사용하여 추상 메소드를 표시하고, 인터페이스는 abstract 키워드가 없이 추상메소드를 만든다. 추상 메소드는 접근제한자, 리턴타입,메소드명,전달인자 리스트 로만 구성이 되며, 메소드의 몸체 즉 메소드의 내용을 정의하지 않는다. 추상 메소드를 가지고 있는 추상클래스나 인터페이스를 상속받거나 구현하는 하위 클래스는 상위에 있는 추상 메소드를 모두 구현해야만 한다.

 

상수 정의
상수란 클래스 멤버 변수에 final 키워드를 붙인 것으로 변하지 않는 값을 나타낸다. 하지만 인터페이스에서는 final 키워드를 붙이지 않아도 상수가 된다. 인터페이스에서는 클래스 멤버변수를 가질 수는 없지만 클래스 멤버 상수는 가질 수 있다.

 

 

출처 : 자바 추상클래스와 인터페이스 (abstract class VS interface)

2009년 10월 15일 목요일

디스트릭트 9 ( District 9, 2009, Neill Blomkamp )

 

미국과 세계 각지에서 엄청난 흥행을 하며 이슈화되었던 디스트릭트 9을 보게 되었다. 피터 잭슨이라는 거물의 제작, 닐 블롬캠프라는 신인 감독, 그리고 배우들은 모두 얼굴조차 처음 보는 신인 배우들.. 흥행에 성공한 역작치고는 다소 황당한 배경이라고 느끼며 영화를 보기 시작했다.

 

영화가 시작하면 이미 외계인은 지구에 들어와 있다. 어느 날 갑자기 남아프리카 공화국의 도시인 요하네스버그 상공에 거대한 외계인 우주선이 멈춰서고 그 안에서 수 많은 외계인이 발견된다. 엄청난 과학 기술들이 집약된 듯한 우주선과 각종 레이저 무기들을 어떻게 만들었는지 궁금할 만큼 외계인들은 정말 야만스럽고 미개한 모습을 보여준다. 그래서 인간들은 '디스트릭스 9'라는 지역을 만들고 그 곳에 몇 백만의 외계인을 가두고 살게 한다.

 

그러던 중, 외계인 관리국 MNU는 외계인으로 인해 무법지대로 변해 버린 디스트릭트 9를 강제 철거하기로 결정하고 디스트릭트 10을 새롭게 만들어 외계인들을 이주시키기로 한다. 그 이주 프로젝트의 책임자로는 이영화의 주인공인 비커스(샬토 코플리)가 임명된다. 비커스는 프로젝트를 맡으면서 제일 먼저 외계인들을 설득시키려고 한다. 마치 개발 예정 지역에 살고 있는 가난한 서민들의 집을 강제로 철거하기 위해 개발하려는 사람들이 서민들에게 강제로 철거 동의서에 서명하라고 하는 것처럼 비커스는 외계인들에게 철거 동의서를 무작정 들이민다. 하지만 외계인들은 대부분 반발하는데, 비커스는 번번히 무력을 이용해서 그들을 진압해 동의를 받아낸다. 그러다 실수로 어떤 액체를 건드리게 되고 그 액체가 얼굴에 튀게 된다. 황급히 닦아 내고 별 이상이 없자 그 액체를 압수한 후 비커스는 계속 일을 진행하지만 외계인을 무력 진압하던 도중 팔에 상처를 입게 되고 MNU로 복귀하게 된다.

 

복귀한 비커스는 자신의 팔을 치료하려고 임시로 묶어둔 붕대를 푸는데 자신의 팔이 외계인의 팔로 변하고 있는 것을 보고는 경악한다. MNU에서는 비커스의 이런 상황 때문에 비커스가 실험 대상으로 적합하다는 것을 깨닫고 그를 살해해서 외계인에 대한 각종 실험을 해보려고 한다. 하지만 비커스는 가까스로 탈출하고 자신을 이렇게 만들었다고 짐작하는 그 액체를 만든 외계인을 찾아간다. 그 외계인은 자신의 고향으로 돌아가려고 아들과 함께 노력하고 있는 크리스토퍼인데, 크리스토퍼는 비커스에게 다시 인간으로 돌아갈 수 있는 방법이 있다고 말한다. 비커스는 이 말에 희망을 얻고 크리스토퍼와 함께 압수한 액체가 보관되어 있는 MNU 건물로 쳐들어간다. 가까스로 액체를 구해서 건물을 나가려고 하지만 그 곳에서 크리스토퍼는 자신의 동족들이 인간들에 의해 실험 대상으로 쓰이고 있다는 것을 깨닫게 되고, 비커스를 인간으로 만드는 것보다 동족들을 인간으로부터 구해내는 것이 우선이라고 생각하게 된다. 탈출에 성공한 둘은 크리스토퍼의 아지트로 돌아오지만 고향으로 갔다가 3년 후에 다시 비커스를 고치러 오겠다는 크리스토퍼의 말에 비커스는 크리스토퍼를 배신하고 혼자 액체를 독차지하려고 한다. 하지만 MNU 군대의 방해로 인해 무산되고 비커스는 외계인 병기에 탑승한 채 MNU 군대와 맞서게 된다.

 

점점 불투명해지는 자신이 인간으로 되돌아가는 성공을 뒤로 한 채, 비커스는 크리스토퍼의 염원을 이뤄주기 위해 크리스토퍼를 엄호해서 먼저 외계인 모선으로 보내주고, 홀로 MNU 군대와 싸워 그들을 섬멸시킨다. 그리고 그는 곧 완전히 외계인으로 변해서 아내를 그리워하며 쓸쓸히 살아간다.

 

영화 시작부터 꽤 신선한 충격을 받았는데, 그 이유는 다른 외계인이 나오는 SF 영화처럼 외계인이 침공하거나, 새롭게 외계인이 지구로 들어오는 구성이 아닌 외계인이 이미 들어와서 정착을 한 상황을 전제로 하고 영화가 시작되기 때문이다. 게다가 외계인은 실제로는 발달된 문명을 가지고 있지만 지도자의 부재와 같은 이유로 인해 미개하고 더러운 취급을 받고 있다는 설정도 꽤 흥미로웠다.

 

이 영화는 남아프리카 공화국이란 나라에서 실제로 있었던 디스트릭트 6을 모티브로 해서 만들어졌다는 말이 많다. 디스트릭트 6는 실제로 '케이프 타운'이라는 도시 외곽 지역으로 유색 인종들이 거주하던 지역이었는데 케이프 타운이 확장되면서 이 지역이 도심으로 바뀌어서 백인들이 강제로 유색 인종 거주민들을 몰아낸 지역이라고 한다. 그 외에도 이 영화에 나오면 많은 소재와 장면들이 남아공의 현실을 많이 반영하고 있다고 한다. 감독은 아마도 남아공의 현실에 SF 적인 요소를 가미해서 전 세계 사람들에게 그것을 고발하고 싶었던 게 아닐까 하는 생각도 든다.

 

게다가 이 영화에서는 인간의 이기적인 측면도 볼 수 있는데, 그렇게 외계인을 하등한 존재로 보며 무시하던 비커스가 막상 외계인 입장이 되자 어떻게든 크리스토퍼의 도움을 받으려고 애쓰고, 그것도 나중에 자신의 뜻대로 안되자 바로 배신해버리는 모습이 나온다. 근데 그걸 보면서 내가 저 상황이면 비커스처럼 똑같이 행동할 것 같아서 비난할 수가 없었다. 교묘하게 영화 내의 상황을 이용해서 평소에는 드러나지 않는 그런 인간의 이기심을 표현해내는 감독의 표현력을 인정안할 수가 없었다.

 

영화의 촬영 기법도 꽤 신선했는데, 어떤 장면은 영화를 본다기보다는 뉴스의 한 장면을, 혹은 일반인이 찍은 영상이라는 느낌으로 볼 수 있게 하면서 현장감이 더해졌다. CG도 꽤 화려하고 액션씬도 나쁘지 않아서 실제감도 더했다.

 

전체적으로 괜찮은 영화라는 생각이 들었고 감독이 관객들에게 전하고자 하는 메시지가 있는, 많은 생각을 할 수 있게 하는 영화라는 생각이 들었다. 신인 감독 빌 블롬캠프의 영화 데뷔를 진심으로 축하한다.

2009년 10월 11일 일요일

써로게이트 ( Surrogates, 2009 )

 

 

이제는 노장이 된 브루스 윌리스의 새 영화 써로게이트를 봤다. 브루스 윌리스 영화는 꼭 챙겨보는 편이라서 별로 망설이지 않고 선택해서 봤는데 나쁘지 않았다.

 

미래에는 '써로게이트'라는 로봇이 발명되며, 이것이 인간의 생활에 깊숙이 파고든다. 써로게이트는 자신의 몸은 그대로 있고 어딘가에서 그것에 접속만 하면 운영자 자신의 의지대로 할 수 있는 로봇이다. 어느 날, 두 개의 써로게이트가 파괴되고 안구가 녹은 채 발견되는데, 실제 운영자의 뇌까지 녹아 운영자가 사망한 사건이 발생한다. 사망한 두 운영자 중 한 명이 써로게이트를 발명한 개발자인 켄트 박사(제임스 크롬웰)의 아들이라는 사실이 밝혀지고 실제 표적은 켄트 박사였다는 것을 밝혀진다.

 

한편, FBI 요원인 그리어(브루스 윌리스)는 다른 모든 사람들과 마찬가지로 써로게이트를 사용하여 FBI 생활을 하고 있지만 매일 아내의 가짜 얼굴만을 보고 사는 것에 회의를 느끼고 있다. 그가 켄트 박사 아들의 살인 사건을 맡게 되고 용의자를 쫓게 된다. 추적하는 와중에 용의자의 무기에 다섯 명의 경찰이 켄트 박사 아들과 같은 방법으로 살해당하고 그리어는 써로게이트 금지 구역에 헬기와 함께 추락하고 만다. 이 사건으로 인해 그리어는 써로게이트를 잃고 정직 처분까지 받게 된다.

 

그리어는 써로게이트를 쓰지 않은 채 이리저리 조사를 하던 중 써로게이트 개발 회사에서 써로게이트와 운영자를 함께 죽이는 무기를 발명했었고, 군부대와 거래 계약을 체결할 뻔 했다는 사실을 알게 된다. 살인 사건의 배후에 상관인 앤디(보리스 코조)가 있다는 사실을 알게 된 그리어는 강제로 앤디의 컴퓨터에서 정보를 빼낸다. 그 후 그리어는 그의 파트너인 피터스(라다 미첼)과 정보를 공유하던 중 이미 켄트 박사에 의해서 조종하하고 있는 피터스의 써로게이트에 의해 도리어 당하고 만다.

 

알고보니 켄트 박사는 써로게이트를 발명하긴 했지만 써로게이트 사용을 반대하고 있으며 없애야한다고 생각하고 있었다. 실제로 써로게이트 반대 조직의 수장인 드레드가 박사의 써로게이트이기도 했다. 그 때문에 박사는 앤디의 표적이 되었었던 것이다.

 

켄트 박사는 피터스의 써로게이트를 이용해서 전 세계의 써로게이트 사용자를 몰살시키려고 시도하지만 그리어의 노력에 의해 실패한다. 하지만 그리어는 운영자는 죽지 않지만 써로게이트는 모두 바이러스에 의해 사라지는 명령은 제거하지 않고, 전 세계의 써로게이트는 모두 망가진다.

 

영화를 볼 때는 심각하게 느끼지 못했지만 리뷰를 쓰다보니 줄거리에서 비약이 많았다는 것을 느낄 수 있었다. 군부대가 개입해서 무기를 찾으려고 하는데, 써로게이트를 반대하는 세력의 두목이 오히려 켄트 박사의 써로게이트였다는 충격적인 사실만 나오고 그 후의 내용은 전혀 나오지 않는다. 그리고 그리어가 미궁에 빠져있는 사건 속에서 헤어나질 못하다가 갑자기 상관인 앤디를 용의자로 지목하는 부분도 내용 흐름에 맞지 않는 부분이다.

 

영화의 소재는 정말 참신한 것 같다. SF 영화에서 많이 볼 수 있었던 로봇이 소재이긴 하지만 인간의 대리로써 움직이고 활동한다는 것이 가까운 미래에는 정말 일어날 수도 있을 것 같은 좋은 아이디어이다. 하지만 써로게이트로 사회에서 활동을 하게 됨으로써 진짜 인간 대 인간으로는 만날 수 없게 되고 그로인해 삭막해지는 사회을 보여주는 부분에 감독이 관객에게 전하는 메시지가 들어 있다. 현재에도 그런 일은 이미 일어나고 있다. 가상 현실 속에서 자신들의 아바타끼리 연애를 하고 심지어 가상 현실과 실제 현실을 분간을 하지 못하는 사람도 늘고 있다고 한다.

 

과학 기술의 발전의 인간 생활을 윤택하게 하고 있긴 하지만 그 때문에 사회가 삭막해지고 진정한 소통을 하지 못하게 된다면 오히려 발전이 해가 되는 것이 아닐까.

2009년 10월 10일 토요일

조제, 호랑이 그리고 물고기들 ( ジョゼと虎と魚たち, 2003, 이누도 잇신 )

 

국내에서 2004년에 개봉되었던 '조제, 호랑이 그리고 물고기들'이라는 영화를 이제야 봤다. 그 당시에도 그런 영화가 있다는 것은 알고 있었지만 볼 기회도 없을 뿐더러 딱히 보고 싶다는 생각이 들지가 않았었다. 이번에도 딱히 보고 싶었던 것은 아니었지만 지인의 추천으로 보게 되었다. 그런데 생각했던 것보다 내용이 꽤 괜찮았다.

 

츠네오(츠마부키 사토시)는 대학교 4학년 학생으로, 밤에는 마작 게임방에서 아르바이트를 하면서 살아가는 청년이다. 어느 날 마작 게임방에서 다른 사람들이 수상한 유모차를 끌고 다니는 할머니에 관한 이야기를 하는 것을 우연히 듣게 되고, 그날 집으로 돌아가는 길에 그 유모차를 마주치고 어쩌다보니 할머니를 도와주게 된다. 알고보니 할머니는 다리에 장애가 있어서 걷지 못하는 다 큰 손녀를 유모차에 태우고 매일 산책을 시켜주는 것이었다. 그날 저녁을 할머니집에서 먹은 츠네오는 손녀인 쿠미코(이케와키 치즈루)의 요리 솜씨에 감탄하고 매일 찾아오게 된다.

 

한편, 츠네오는 진정한 사랑을 하기 보다는 여자와 섹스를 하는 것에서 만족을 얻는 생활을 하고 있었으며 최근에는 카나에(우에노 주리)와 연인 관계로 발전하는 중이었다. 그러다 매일 쿠미코의 집에서 밥을 먹으면서 쿠미코에게 사랑의 감정을 느끼게 된다. 쿠미코도 그녀에게 잘해주고 자신과 다른 세상에 살고 있는 것 같은 츠네오에게 좋은 감정을 느끼지만 할머니의 반대로 둘은 다신 만나지 못하게 된다. 결국, 할머니가 돌아가신 후, 둘은 다시 만나게 되고 츠네오는 카나에와 헤어지고 쿠미코와 동거를 시작한다.

 

쿠미코는 연인이 생기면 꼭 하고 싶었던, 자신이 세상에서 제일 무섭다고 생각하는 호랑이를 실제로 보는 것을 츠네오와 함께 하고, 둘은 점점 더 좋은 관계로 발전한다. 1년 후, 츠네오는 다리에 장애가 있고, 성격에 제멋대로인 쿠미코와 만나는 것이 점점 힘들어지고 있다는 것을 느끼게 된다. 쿠미코도 언젠가는 둘이 헤어질 것이라는 것을 어렴풋이 느끼게 되지만, 집에서 나오지도 않고 어둠 속에서만 살았던 자신이 츠네오로 인해서 바깥 세상으로 나오게 되었다는 사실에 감사한다. 츠네오과 쿠미코가 그것을 느끼게 되고 몇 개월 후 결국 둘은 헤어지고, 츠네오는 자신이 힘들어서 헤어졌지만 쿠미코를 너무도 사랑한다는 것을 알고 있기에 결국 참았던 눈물을 흘리게 된다.

 

이 영화는 단순히 줄거리만 읊조리는 것은 아무런 도움이 되지 않는다. 영화 구석구석에서 전해지는 둘의 이야기가 중요하다고 생각한다. 드라마, 영화에서 볼 수 있는 아름다운 사랑 이야기가 아니다. 헤피엔딩도 아니며, 단지 우리가 일생 생활에서 항상 겪는 이야기를 영화로 잔잔하게 풀어내고 있다. '조제'는 한 프랑스 소설의 여자 주인공의 이름이다.

 

언젠간 그를 사랑하지 않는 날이 올거야. 베르나르는 조용히 말했다.
그리고 언젠가는 나도 당신을 사랑하지 않겠지.

우린 또다시 고독해지고 그냥 흘러간 1년의 세월이 있을 뿐이야.

 

그 소설의 내용 중 일부분이다. 이 부분에서 알 수 있듯이 쿠미코는 사랑은 언젠가는 끝이 있다는 것을 알고 있고 끝이 난 후에는 둘은 또 어떻게든 살아간다는 것을 알고 있다.

 

츠네오, 눈 감아봐. 뭐가 보여?
아무것도. 깜깜해.
거기가 옛날에 내가 살던 곳이야. 깊고 깊은 바닷속. 난 거기서 헤엄쳐 나왔어.
그곳은 빛도 소리도 없고, 바람도 안 불고 비도 안 와.
정적만이 있을 뿐이지.
별로 외롭지는 않아. 처음부터 아무것도 없었으니까.
그냥 천천히 시간이 흐를 뿐이지.
난 두 번 다시 거기로 돌아가진 못할 거야.
언젠가 네가 사라지고 나면 난 길 잃은 조개껍질처럼
혼자 깊은 해저에서 데굴데굴 굴러다니겠지.
데굴데굴. 데굴데굴. 데굴데굴....
그것도 그런대로 나쁘진 않아.

 

츠네오와 쿠미코가 바다로 여행을 갔을 때 쿠미코가 혼잣말로 중얼거린 내용이다. 쿠미코는 츠네오를 통해서 한층 성숙했고, 츠네오가 떠나더라도 성숙한 삶을 살아갈 것이라는 것을 보여준다.

 

마지막에 츠네오가 쿠미코와 헤어지고, 다른 여자 친구들과 헤어지고 난 후에는 다시 친구가 될 수 있지만 쿠미코는 다신 친구가 될 수 없고 다신 보지 못할 것이라고 생각한다. 이 말에서 쿠미코와는 다른 여자들과 다른 진짜 사랑을 했다는 것을 알 수 있다.

 

영화가 끝난 후, 내용이 참 신선하다는 생각이 들었다. 아무런 신기한 내용도, 스크린에서만 볼 수 있는 무언가도 없었다. 그냥 일상 생활에서 일어날 수 있는 사랑 이야기였다. 그래서 신선했다. 나도 알고 있지만, 느끼지는 못하고 있던 것. 사랑하지만 헤어질 수 밖에 없는 이유. 사랑이 짐이 될 때가 있다는 것. 몇 년이 지나고 다시 이 영화를 보면 지금과는 다른 것을 또 느끼지 않을까라는 생각을 해본다.

2009년 10월 3일 토요일

킹콩을 들다 ( 2009, 박건용 )

 

추석 때 집에서 시간이 남아서 예전 영화나 한 편 볼까 하고 인터넷을 뒤적이던 중, 지난 7월에 개봉했던 '킹콩을 들다'라는 영화가 눈에 들어왔다. 다양한 캐릭터를 구사하는 연기파 배우 이범수, 아직은 다소 낯선 배우 조안이 주연이며 신인 감독인 박건용 감독이 연출했다. 네티즌들 사이에서 대단히 평가가 좋아서 기대를 하며 영화를 보게 되었다.

 

88년 올림픽 역도 선수 이지봉(이범수)은 역도를 들던 중 팔꿈치 부상을 당하며 금메달을 따지 못하고 동메달을 따게 된다. 부상과 심장 질환으로 인해 더 이상 선수 생활을 하지 못하게 되면서 한때는 금메달을 딸 뻔 했던 그가 아무도 주목하지 않는 이름없는 전직 역도 선수로 남아 쓸쓸한 삶을 살게 된다.

 

20년이 지난 2008년, 이리저리 아르바이트를 하며 근근히 살아가던 그에게 전직 코치로부터 학생을 가르쳐보지 않겠냐는 제의를 받게 된다. 보성여중의 체육 선생이 되어 역도부를 가르치게 된 이지봉은 의욕이 넘치는 여섯 명의 학생을 받게 되고 훈련을 시작한다. 하지만 역도 선수 생활에 상당히 회의를 가지고 있는 이지봉은 학생들에게 진정으로 역도를 가르치지 않는다. 그 결과, 학생들은 첫 시합에서 참패와 수모를 겪게 되고, 학생들은 이지봉 선생에게 제대로 된 역도를 가르쳐달라고 눈물 섞인 부탁을 하게 된다. 학생들의 의지에 마음을 바꾸고 제대로 가르쳐보겠다고 마음을 먹은 이지봉 선생은 훈련 일지를 쓰는 것은 물론 학생들의 식습관 및 체질까지 신경을 쓰며 열심히 학생들을 훈련시킨다. 그 와중에 세 명의 학생이 중앙여고에 진학하게 되고 그 학교의 체육 선생과 교장 선생의 특별 허락 하에 계속 이지봉 선생이 그 세 학생을 가르치게 된다.

 

마침내 시합 날, 여섯 명의 학생 중 역도를 열심히 하기로 마음먹은 네 명이 우수한 성적으로 시합을 치르면서 이지봉 선생과 학생들이 보성에서 이름을 날린다. 이를 지켜보던 중앙여고의 체육 선생과 교장 선생이 자신의 학생들인 세 명의 학생들을 빼앗으려고 한다. 그것을 저지하던 중 중앙여고 체육 선생의 계략으로 공권력의 개입되고 이지봉 선생은 더 이상 학생들을 가르칠 수 없게 된다. 결국 학생들은 중앙여고에서 계속 훈련을 하게 되고 중앙여고 체육 선생의 잔인한 교육 방식에 지쳐간다.

 

이지봉 선생은 안타까운 마음에 학생들에게 편지를 쓰고, 편지를 주려고 가던 중 심장 질환으로 인한 급성 심장 마비로 인해 급사하게 된다. 이 사실을 모르는 학생들은 전국 체전에 출전하고, 체전 당일에 이지봉 선생의 사망 소식을 접하게 된다. 학생들은 울면서 가슴팍에 쓰여진 중앙여고 이름을 떼고 '이지봉 선생' 쓴다. 결국 가장 열심히 했던 학생 박영자(조안)는 전국 신기록을 수립하면서 우승하게 된다. 영화는 박영자가 미래에 올림픽에서 금메달을 따는 모습을 보여주면서 끝이 난다.

 

영화는 정말 감동적이었다. 각자 열심히 해야 하는 목표가 있는 학생들의 눈물겨운 노력, 학생들이 잘 되기를 바라는 이지봉 선생의 사랑.. 중간중간에 이지봉 선생이 하는 말들도 하나같이 다 너무나도 좋은 말들이고 학생들에게 의지를 북돋아 줄 수 있는 말들이었다. 특히 '동메달을 딴다고 해서 동메달 인생이 되진 않아. 그렇다고 금메달을 딴다고 해서 인생이 금메달이 되진 않아. 매 순간 끝까지 최선을 다한다면 그 자체가 금메달이야'라는 말이 정말 가슴에 와 닿았다. 마지막에 박영자가 금메달을 따는 모습에서 이지봉 선생의 진정한 사랑의 힘을 느낄 수 있지 않을까하고 생각한다. 신인 감독이 연출한 것 치고는 잔잔한 감동을 이끌어낼 수 있는 방법을 확실히 알고 있고 그것을 적용한 작품이라고 생각한다.

 

이 영화는 실화를 바탕으로 만들어졌다고 한다. 실제로 감독 생활 도중 과로로 인한 뇌출혈로 순직한 역도 교사가 있었고 그 분이 키워낸 역도 선수들이 체전에서 15개 금메달 중 14개 금메달과 1개의 은메달을 따냈었다고 한다. 영화 상에서 봐도 대단한 사람인데 실제 있었던 사람이라고 하니까 더욱더 대단한 것 같다. 뭔가 신념을 가지고 열심히 노력하면 확실히 좋은 결실을 맺을 수 있다는 것을 다시금 깨닫게 되었다.

불꽃처럼 나비처럼 ( The Sword With No Name, 2009, 김용균 )

 

주로 영화관에서는 영화관에서 봐야지만 느낌이 오는 스케일이 큰 영화들을 보는 편인데, 이번에는 명성황후를 다룬 영화라길래 관심을 가지고 보게 되었다. 감독은 '분홍신'을 연출했던 김용균 감독이며, 주연 배우는 이미 다수의 영화로 이름이 많이 알려진 조승우, 수애이다. 수애가 명성황후 역을 맡았으며 조승우는 명성황후를 사모하며 곁을 지키는 호위무사 역이다.

 

영화의 배경은 흥선대원군(천호진) 집권 시절, 쇄국 정책을 고수하던 대원군은 왕권 강화를 위해 왕후 간택을 서두른다. 대원군은 외척 세력도 경계했기 때문에 세력이 강하지 않은 민씨 세력의 민자영(수애)을 간택하게 된다. 왕후가 되기 전, 민자영은 아버지와의 추억이 있는 바다를 보러 가는데 그 때 뱃사공이자 자객인 무명(조승우)를 만나게 된다. 무명이 뱃사공 역할을 하며 둘은 하루종일 함께 있었고, 무명은 민자영을 사랑하게 된다. 하지만 민자영은 왕후가 될 사람, 곧 중전이 되어 명성황후가 된다. 무명은 명성황후를 지켜주고 함께 있고 싶은 마음 때문에 목숨을 걸고 궁 입단식을 치르고 입궁하게 되며 그녀를 지킬 수 있게 된다.

 

한편, 명성황후는 흥선 대원군과는 반대로 개방에 적극적이었는데 각 나라 사람들을 두루 만나며 친분을 쌓고 문물을 교류하고자 애썼다. 그런 며느리가 마음에 들지 않는 대원군은 백성들이 한 것처럼 꾸며 그녀를 살해하고자 하지만 무명이 명성황후를 데리고 도주함으로써 실패로 돌아간다. 겨우 목숨을 부지한 명성황후는 무명의 만류에도 불구하고 다시 궁궐로 돌아가며, 소원했던 고종 황제와의 관계도 회복한다. 하지만 따뜻했던 무명의 도움과 목숨을 걸고 자신을 보호해주는 모습에 그녀도 무명을 사랑하게 된다.

 

한편, 조선이 개방하는 것을(러시아와 친하게 지내는 것을) 두려워하는 일본 공사 미우라는 명성황후를 적으로 여기고 그녀를 살해할 계획을 세우고 대원군에게 함께 하기를 청한다. 하지만 대원군은 거절하고 도리어 자신의 호위무사인 뇌전(최재웅)에게 명성황후 보호를 명한다. 일본은 총과 칼로 무장한 군대를 앞세워 명성황후의 궁으로 쳐들어가고 뇌전과 무명의 목숨을 건 희생을 물리친 끝에 명성황후 살해에 성공한다.

 

영화가 끝나고 느낀 것은 이 영화는 조선의 역사에 비추어서 생각을 하면 안된다는 것이다. 역시 영화는 영화일 뿐, 이 영화를 통해서 역사를 이해하려고 한다면 상당한 왜곡이 있을 것이다. 임오군란, 명성황후 시해 사건 등 많은 부분이 영화의 재미를 위해 사실과는 다르게 그려졌다. 물론, 그 시기의 일들은 워낙 논란이 많고 확실한 진실을 알 수 없기 때문에 뭐라고 말할 순 없을 것이다. 영화 중간부터는 그 사실을 인정하고 역사를 신경쓰지 않고 보려고 노력했다. 그래서 순수 사극 멜로 영화라고 생각하고 영화를 봤다.

 

이 영화의 모티브는 수많은 멜로 드라마, 영화의 모티브인 '이루어질 수 없는 사랑'이다. 그리고 그 이루어질 수 없는 사랑을 하는 남자가 여자를 목숨을 걸고 지켜주는 내용이었다. 그런 환경 속에서 고뇌하고 어떻게든 한번 더 얼굴이라도 보려고 하는 무명의 모습은 영화 보는 내내 가슴이 찡하게 만들었다. 실제로 무명은 마지막 뿐만 아니라 영화 내내 여러 번 명성황후를 위해서 목숨을 건다.

 

그리고 멜로 영화치고는 그래픽이나 액션 씬에 꽤 신경을 쓴 듯한 느낌이었다. CG가 어색한 부분이 없지않아 있었지만 나쁘진 않았던 것 같고 자주 벌어지는 뇌전과 무명의 액션씬은 꽤 볼만했다.

 

하지만 스토리 전개 상에서 어색한 부분은 있었던 것 같다. 내가 영화를 잘 분석하는 사람이 아니라서 잘은 모르겠지만, 돌이켜 생각해보면, 대원군이 명성황후를 그토록 싫어하며 살해하려고까지 했는데 일본의 명성황후 살해 제의를 거절하는 것이라든지, 일본은 딱히 처음에 나온 부동항 문제 외에는 별 이유도 나오지 않는데 명성황후를 살해하려고 한다든지.. 그런 것들이 조금 어색했던 것 같다.

 

전체적으로 봤을 때 그래도 나쁘지 않은 영화라고 생각한다. 멜로 영화로써의 감동도 꽤 있었고 그래픽과 액션 씬에도 상당히 신경을 쓴 모습이 보이기 때문이다. 마지막으로, 영화보는 내내 수애라는 배우가 참 동양적인 미를 볼 수 있는 배우며, 그래서인지 특히 사극 역할에 참 잘 어울린다는 생각이 들었다. 앞으로 많은 기대가 되는 배우인 것 같다.

2009년 10월 2일 금요일

거북이 달린다 ( 2009, 이연우 )

 

타짜, 추격자 이후로 김윤석의 명연기에 반해서 차기작인 거북이 달린다를 참 많이 기대했었다. 그래서 영화관에서 보기 위해 많이 시도를 했었는데 번번히 시간이 안 맞아서 실패하다가 이제서야 보게 되었다. 감독은 아직 많이 알려지지 않은 이연우 감독이며, 상대역은 드라마에서 많은 좋은 연기를 펼쳤던 정경호이다.

 

영화가 시작하면서 초반에 상당한 시간을 할애하면서 조필성(김윤석)의 전형적인 시골 형사 생활을 보여준다. 별로 하는 일 없고, 지방에서 열리는 소 싸움 대회 성공만이 목표이며, 심심하면 다방 가서 시간을 죽이는.. 가끔 정의를 위해서라기 보다는 푼돈을 벌기 위해 사주를 받고 성매매 등을 단속하는 그런 모습이다. 하지만 그런 조필성도 형사이기 때문에 마을에서 꽤나 인정받는 인물 중의 하나인데, 그래서인지 딸의 학교에서 일일교사를 초청받는다.

 

한편, 지병을 앓고 있는 용의자가 심문 도중 조필성의 실수로 사망할 뻔 하면서 3개월 정직 처분이 내려진다. 안그래도 집에 돈이 부족한 조필성은 아내에게 혼날까봐 3개월 동안 월급을 못 받는다는 말은 못하고 도박의 일종인 소 싸움 대회에 아내가 모아놓은 300만원을 모두 투자한다. 뜻밖에 성공적으로 1800만원을 벌게 되지만, 탈주범 송경태(정경호)가 조필성의 돈을 가지고 있는 그의 친구들을 폭행하고 그 돈을 빼앗아 달아난다. 조필성은 송경태를 쫓지만 도리어 몸이 재빠른 송경태에게 당하게 된다.

 

다음 날 그 사실을 경찰 동료와 상사들에게 말해보지만, 조필성의 말을 아무도 믿어주지 않는다. 정직 상태인데다, 돈, 자존심까지 잃은 조필성은 친구들과 함께 복수를 도모한다. 마을 여기저기서 수집한 정보를 통해 송기태의 내연녀인 경주(선우선)의 집을 습격하지만 도리어 그에게 손가락이 잘리는 수난을 당한다. 하지만 멈추지 않고 계속해서 잡으려고 노력한 끝에, 송기태를 돕고 있는 마을의 한 청년을 붙잡게 되고 송기태에게 필요한 여권과 달러를 확보하게 된다. 이젠 도리어 급해진 송기태와 송기태를 꼭 잡고 싶어하는 조필성의 1:1 대결이 시작되고, 난투극 끝에 조필성은 송기태를 때려눕히고 경찰서에 데려오게 된다.

 

일일교사를 맡기로 했던 조필성은 딸에게 부끄럽지 않은 화려한 경찰 퍼레이드를 보여줌으로써 멋진 아버지의 모습을 보여주면서 영화는 끝이 난다.

 

영화 내내 약간 조바심이 났었는데, 그것은 영화 초반에 나온 딸의 일일교사 제의를 받아들인 후 계속 망가지는 조필성의 모습을 보면서 그가 어떤 식으로 일일교사를 성공시킬 것인지가 걱정되어서였다. 누구보다 딸을 사랑하는 아버지로 나오는 그가 딸에게 부끄럽지 않은 아버지의 모습을 보여줘야 하는데 영화 보는 내내 그게 점점 어려워지기만 하기 때문이다. 그래서인지 마지막으로 딸에게 멋진 선물을 안겨주는 모습이 영화 장면 중에서 가장 마음에 들었다.

 

조필성과 정경호는 처음부터 상대가 되지 않았다. 몇 번이나 감옥을 탈출할 정도로 머리가 비상하고 몸이 재빠른 정경호, 시골에서 별로 하는 일 없이 편하게 살아가는 조필성. 하지만 조필성도 송기태 때문에 많은 것을 잃으면서 서서히 변한다. 반대로 송기태는 처음 보는 사람을 믿고 여권과 돈 가지고 오는 일을 맡기는 등 다소 치밀하지 못한 모습을 보였다. 마치 토끼와 거북이 동화에서 방심하는 토끼와 열심히 걷는 거북이처럼.. 결국 동화에서처럼 거북이(조필성)는 토끼(송기태)를 잡게된다.

 

추격자에서처럼 김윤석은 기대에 저버리지 않는 명연기를 보여줬다. 그의 모습은 영락없는 시골 형사의 모습이었고 당하고 또 당하면서도 일어서는 의지가 보는 사람으로 하여금 그를 응원하게 만들었다. 비록 내가 가장 좋아하는 영화인 추격자보다는 긴박감이나, 사실감 등이 덜했지만 배우 김윤석을 한번 더 느낄 수 있는 영화라고 생각한다.

태양의 눈물 ( Tears Of The Sun, 2003 )

 

개인적으로 참 좋아하는 배우인 '브루스 윌리스'가 주연으로 나온다는 것을 알고는, 별 망설임 없이 보게 되었다. '안톤 후쿠아'라는, 나에겐 생소한 감독이 연출했으며, 의외로 희대의 섹시 배우 '모니카 벨루치'가 나온다는 말에 더욱 기대를 하게 되었다.

 

배경은 나이지리아의 첫 민주적인 대통령이 선출된 직후이다. 대통령이 마음에 들지 않는 군부 세력들은 쿠데타를 일으키고 나라 전체가 전쟁에 휩싸인다. 반군 세력들은 나이지리아 국민들에 무차별 살육을 자행하고 그 상황 속에서 미군은 서서히 군대를 철수시키기 시작한다.

 

워터스 대위(브루스 윌리스)는 최정예 특수 부대 지휘관으로, 뛰어난 작전 해결 능력으로 인정받는 사람이다. 그에게 나이지리아에서 미국인 의사 '리나'(모니카 벨루치)를 구해오라는 임무가 떨어지고, 부대원과 함께 나이지리아로 가게 된다. 나이지리아에서 리나를 만나서 데리고 가려고 하지만 리나는 나이지리아 난민들을 두고는 절대로 떠날 수 없다고 하고, 결국 70여 명의 난민과 함께 국경으로 향하기 시작한다.

 

중간에 한번, 헬기를 타고 리나만 데리고 떠나려고 하지만, 워터스 대위는 난민들이 무차별 살육되는 현장을 목격하고는 다시 헬기를 돌려 생각을 바꿔 난민들을 구조하러 간다. 하지만, 국경을 향해 이동하는 사이 반군들이 자신들을 바짝 쫓고 있다는 것을 깨닫고 반군들이 난민들에게 원하는 것이 있음을 알게 된다. 난민들을 다그쳐 알아낸 결과, 난민들 틈에 대통령의 아들이자 부족장이 있다는 것을 알게 된다.

 

엄청난 규모의 반군이 몰려오는 상황 속에서, 워터스와 그의 부대원들은 난민들과 리나를 무사히 탈출시키기 위해 많은 희생을 치른다. 결국 난민들과 리나는 탈출하고, 공중 지원 덕분에 반군들을 섬멸하는데 성공한다. 많은 부대원들이 전사하고, 4명 정도만 심한 부상을 입은 채 살아남고 임무는 완료된다.

 

영화의 마지막엔 감독의 메시지가 나온다.

악의 승리할 수 있는 단 한 가지 조건은 선의 방관이다.(The Only thing necessary for the triumph of evil is for good men to do nothing.) - 에드먼드 버크(Edmund Burke)

 

워터스 대위는 뛰어난 군인으로, 한번도 임무를 실패한 적 없고, 개인적인 판단보다는 임무 그 자체를 위해서만 임무를 수행해왔다. 하지만 난민들이 무고하게 희생되는 모습을 보고는 자신도 모르게 난민들을 모두 탈출시키겠다는 위험한 판단을 하게 된다. 그 때부터 이 영화가 진짜로 시작되는 것이다. 영화 내내 워터스 대위는 부대원들이 희생될 것이 뻔하고 심지어 성공 여부조차 불투명한 결정을 내린 것이 옳은 것인지 갈등한다. 하지만 부대원들이 자신을 믿고 같은 결정을 내리는 것을 보고는 다시 확신을 가지게 된다.

 

사실 이 영화를 보면서 가장 많이 느꼈던 생각은, 저 리나라는 미국 시민 한 명의 무리한 요구 때문에 워터스가 이끄는 이글 부대의 많은 사람이 고생하고 희생당한다는 사실 때문에 어이가 없다는 것이었다. 하지만 영화 후반부로 가면 갈수록 나이지리아의 난민들에게 자행되는 살육들이 화면에 나오고, 처음에는 워터스 대위 때문에 어쩔 수 없이 난민을 도왔던 부대원들이 생각이 바뀐 것처럼 내 생각도 바뀌었다. 그리고 마지막의 감독의 메시지를 보면서 감독이 이 영화를 만든 목적을 확실히 알 수 있었다.

 

워터스 대위는 리나를 강제로 데리고 가서 부대원의 희생 없이 임무를 완수할 수도 있었다. 하지만, 그것은 선의 방관'good men to do nothing'인 것이다. 워터스 대위가 난민들이 살육되는 것을 방관하지 않음으로써, 나이지리아의 수십명의 난민과 미래를 이끌 대통령의 아들이자 부족장을 성공적으로 구출할 수 있었다.

 

영화가 끝나자 마치 우리 나라가 월드컵 16강에 진출할 때처럼 뭔가 알 수 없는 쾌감같은 것이 느껴졌고 기분이 참 좋았다. 그리고 브루스 윌리스는 역시 참 멋있는 배우라는 생각이 들었다.

2009년 9월 27일 일요일

어글리 트루스 ( The Ugly Truth, 2009 )

 

원래 로맨틱 코미디를 자주 보지 않는 나지만 어쩌다 영화관을 갔는데 제일 나아보이는 영화를 찾아보니 어글리 트루스를 보게 되었다. 감독은 '금발이 너무해'로 유명한 로버트 루케틱. 배우는 '300'으로 내가 좋아하는 배우 중의 한 사람이 된 제라드 버틀러와 그레이 아나토미의 명조연 캐서린 헤이글이다.

 

애비(캐서린 헤이글)은 한 지역 방송사의 PD이다. 이상적이고 로맨틱한 남자를 찾다보니 미모에도 불구하고 싱글로 살아가고 있는 성공한 여성의 모습이 그녀의 배경이다. 갈수록 시청률이 떨어지는 그녀의 프로그램 때문에 방송사 사장은 위기를 느끼게 되고 급히 케이블 방송의 인기 MC인 마이크(제라드 버틀러)를 초빙하게 된다. 마이크는 원래 방송에서 남자들과 여자들의 관계를 음담패설을 이용해 적나라하게 파헤쳐서 유명해진 사람인데 애비가 정말 싫어하는 남성상 중의 하나이다. 마이크는 남성과 여성은 서로에게 원하는 것이 다르다고 주장하며 특히 남자는 오직 사랑도 필요없이 섹스만 필요하다고 주장한다. 그 때문에 애비와 마이크는 같이 프로그램을 진행하면서 사사건건 부딪치게 된다. 하지만 애비 옆집에 잘생기고 몸도 좋고 심지어 직업까지 의사인 젊은 남자 콜린이 이사오게 되고 애비가 콜린을 유혹하기 위해 마이크에게 도움을 받게 되면서 애비와 마이크는 친해지게 된다.

 

애비는 마이크가 시키는 대로 콜린을 상대하고 그 결과, 애비와 콜린은 좋은 관계로 발전한다. 그 과정에서 오히려 마이크는 애비에게 사랑을 느끼게 된다. 우연한 기회에 마이크와 애비가 함께 다른 도시로 잠깐 떠나게 되는데 둘은 둘만의 공간에서 서로에게 알 수 없는 끌림을 느낀다. 하지만 마이크가 용기 없는 모습을 보여줌으로써 애비는 실망하게 되고 마이크는 애비와 함께 하는 프로그램에서 하차하고 다른 방송사로 옮기게 된다.

 

마이크에게 많이 실망한 애비는 자신의 방송에서 마이크를 공개적으로 비난하고 이에 화가 난 마이크는 그 방송에 찾아와 방송 상에서 둘은 싸우게 된다. 싸우다 우발적으로 애비에게 마이크는 고백하게 되고 그의 솔직한 고백에 애비도 마음을 열게 된다.

 

영화 보는 내내 정신 없이 봤다. 물론 코믹스러운 부분도 많고 로맨틱 코미디가 보기 전에는 별 기대 안되지만 볼 때는 재밌게 보는 내 습성 때문일 수도 있다. 하지만 그게 다가 아니라고 생각한다. 나도 이미 알고 있지만 막상 인정하지 않는 진실. 바로 Ugly Truth. 그것들이 확 와 닿았기 때문이라고 생각한다. 물론 남자들이 여자들에게 원하는 게 섹스 밖에 없다는 말은 이미 마이크가 애비에게 사랑을 느꼈다는 것을 봐도 알 수 있듯이 사실이 아니다. 그 내용 말고 남자들이 여자들에게 원하는 것, 여자들이 남자들에게 원하는 것, 여자들이 어떻게 하면 남자들이 좋아한다는 것. 등등 많은 내용들이 공감되었다.

 

애비가 콜린에게 그만 만나자고 하기 직전에 콜린에게 자신을 왜 좋아하냐고 물어본다. 그 때 콜린은 아름답고, 똑똑하고, 자신에게 잔소리 하지 않고, 주도권을 잡으려고 하지 않아서 좋다고 한다. 그리고 마이크가 중간에 했던 말 중에서 여자가 남자한테 어떤 잔소리를 해도 남자는 변하지 않고 둘이 싸우기만 할 뿐이니 잔소리를 하지 마라고 한다. 나도 그 말에 참 공감되었다. 내 생각에 남자는, 나도 그렇듯이, 어린 아이 같은 면이 있어서 누가 옆에서 잔소리한다고 변하지 않는다. 스스로 느끼고 변화가 되어야지 오히려 잔소리를 하면 더 반발해서 여자와 사이만 안 좋아지는 것 같다.

 

나도 모르게 내가 느끼고 있던 것들을 상당 부분 영화에서 말해주는 것 같아서 속이 시원하다는 생각이 들었다. 이런 식으로 남녀 관계에 대해 관심을 가지고 서로를 이해하면서 노력한다면 우리들의 연인들에게 더 나은 연인이 될 수 있지 않을까?

언브레이커블 ( Unbreakable, 2000 )

 

 

식스 센스로 너무나도 유명한 M. 나이트 샤말란 감독의 또다른 스릴러가 있는 걸 알게 되어서 바로 보게 되었다. 게다가 다이하드 시리즈에서의 호흡으로 너무나도 유명한 브루스 윌리스와 사무엘 잭슨의 호흡을 다시 볼 수 있다는 부푼 기대감을 가진 채 영화가 시작되었다.

 

데이빗(브루스 윌리스)는 뉴욕에서 가족들이 있는 필라델피아로 돌아가는 도중 심각한 기차 사고를 당하게 된다. 그런데 신기하게도 탑승자 전원이 사망하는 와중에 혼자만 털끝 하나 다치지 않은 채 살아 남는다. 정말 신기한 일이라고 생각하고 넘어가려고 하는 차에 그에게 한번이라도 아파본 적이 있냐고 물어보는 메모가 전달된다. 그 메모는 바로 뼈가 약하게 태어나서 거의 평생을 병원 신세를 지는 엘리야(사무엘 잭슨)가 보낸 것이다.

 

엘리야는 자신만큼 약한 사람이 있으면 자신 같은 사람을 보호해주는, 만화책에 나오는, 영웅이 세상 어딘가에 존재할 것이라고 믿는 사람이다. 데이빗과 엘리야는 그 메모를 계기로 만나게 되고 데이빗은 그의 말을 처음에는 믿지 않지만 그의 말을 계속 생각해보게 된다. 아들과의 바벨 무게 실험, 아침마다 느끼는 알 수 없는 죄책감, 자신이 한번도 병가를 내지 않았다는 보스의 말, 게다가 지나가는 어떤 사람이 흉기를 소지하고 있다는 직감을 느끼는 등 자신에게 뭔가 특별한 능력이 있고, 그 능력들을 제대로 사용하지 않고 있다는 여러 가지 징후들이 나타나면서 그도 고뇌하게 된다.

 

사실 그는 젊은 시절에 풋볼 유망주였으나 사고를 당하면서 풋볼을 그만둔 것으로 되어 있는데 실제로 그 때도 다치지는 않고 풋볼을 하지 않음으로써 아내와의 사랑을 지키기 위해 거짓말을 했던 것이었다. 데이빗은 엘리야에게 그 부상이 거짓말이었다는 것을 인정함으로써 자신이 그 영웅이라는 것을 인정하게 된다. 그러면서 그것을 깨닫게 해 준 엘리야에게 자신이 이제부터 뭘하면 되는지 물어본다. 엘리야는 데이빗에게 사람들이 많은 곳으로 가라고 한다. 데이빗은 사람들이 많은 곳에서 범죄를 저지른 사람을 발견하게 되고 그 사람 뒤를 밟아서 다른 사람들의 목숨을 구해준다.

 

자신의 사명을 다한 데이빗은 아침에 죄책감을 느끼지 않게 되었고 이 사실을 알려주기 위해 엘리야를 찾는다. 엘리야는 데이빗이 자신의 정체성을 찾은 것에 대해 기뻐하며 이 때까지 자신이 데이빗과 같은 사람을 찾기 위해서 그 엄청한 대형 사건들을 일으켜 왔다는 것을 데이빗의 능력을 통해 알게 한다. 엄청난 충격을 받은 데이빗은 엘리야를 경찰에 신고한다.

 

영화는 마지막에 엄청난 반전을 준비하고 있었다. 역시 샤말란 감독이라는 생각이 들게 했다. 하지만 식스 센스에서 만큼 반전이 정말 멋있다는 생각이 들진 않았다. 뭔가 억지로 반전을 내야한다는 생각에서 만들어 낸 반전을 위한 반전이라는 느낌? 하지만 영화를 욕하고 싶은 마음은 없다. 정말 참신하고 잘 만들어진 영화였다. 데이빗이 뭔가 자신의 삶이 불만족스러워하고 있다는 생각, 가정에서의 불화 등 많은 부분들이 그가 영웅이라는 복선이 깔려 있다.

 

식스 센스에서의 '혹시 우리가 모르는 사람처럼 말도 하고 생활도 하는 유령이 존재하지 않을까?'라는 호기심, 레이디 인 더 워터의 '혹시 우리가 모르는 동화 속 요정이 우리 생활 어딘가에 있지 않을까?'라는 호기심, 언브레이커블의 '혹시 우리가 모르는 슈퍼 히어로가 우리를 어딘가에서 돕고 있지 않을까?'라는 호기심 등을 실제로 영화 상에서 멋지게 구현해 낼 수 있는 사람이 샤말란 감독이라는 것을 또 한번 느끼게 해 주는 영화였다.

 

끝으로 브루스 윌리스의 부드러움 속의 카리스마, 사무엘 잭슨의 선인지 악인지 모를 절정의 연기는 그들이 얼마나 대단한 배우들인지 알게 해 주었다. 조만간 식스 센스를 다시 한 번 봐야겠다.

2009년 9월 16일 수요일

방사형 Flex SpringGraph

Flex로 방사형 그래프를 만들어야하는 일이 생겼는데

 

어떻게 해야할지 전혀 갈피를 못 잡고 있던 중,

 

Adobe의 FlexBuilder 엔지니어인 Mark Shepherd가 개발하여 오픈 소스화한 것을 발견했다.

 

게다가 각종 demo까지!

 

소스와 demo는 http://mark-shepherd.com에서 찾을 수 있다.

 

가장 마음에 들었던 demo는 여기!

 

 

 

그리고 적용 예제는 "예제로 배우는 플렉스"의 저자인 "옥상훈"님의 사이트 okgosu.net에서

 

찾을 수 있었다. 항상 지식을 다른 사람들에게 베풀려고 하시는 옥상훈 님께 감사드린다.

 

주소는 http://www.okgosu.net/zbxe/1807이다.

2009년 9월 10일 목요일

[Shell] 날짜로 파일 필터링 하기

쉘에서 작업을 하다보면 파일들을 날짜로 필터링 해야하는 경우가 생긴다.

 

예를 들면, 어떤 날짜와 다른 어떤 날짜 사이에 수정한 파일들만 가지고 와서 따로 백업을 해준다든지,

 

공동으로 작업하는 사람이 오늘 어떤 파일을 수정하였는지 보고 싶다든지 하는 경우가

 

파일을 날짜로 필터링해야 하는 경우이다.

 

 

그럴 때는 편법으로 이런 방법이 있다.

 

$ touch -t 200901010000 file1

$ touch -t 200902010000 file2

$ find / -newer file1 -a ! -newer file2 -ls  > result

 

여기서 이 명령어들을 이해하려면 몇 가지 알고 있어야 하는 것들이 있다.

 

1. touch 명령어
  1) 용도 : 파일의 시간을 원하는 시간으로 생성하거나 수정

  2) -t 옵션 : 수정하고자 하는 시간을 지정하는 옵션. -t 를 쓴 후 뒤에 원하는 시간을 적으면 됨.

 

2. find 명령어

  1) 용도 : 원하는 조건의 파일을 찾음

  2) -newer 옵션 : 옵션 뒤의 파일보다 최근에(이후에) 내용이 수정된 파일을 검색

  3) -a 옵션 : 'and' 연산자와 같은 의미

  4) ! : 'not' 연산자와 같은 의미

 

 

자 그렇다면, 이제 명령어를 이해해보자.

 

1. 첫 번째 줄을 보면 'file1'이라는 파일을 2009년 1월 1일 00시 00분 00초로 생성한다.

 

2. 두 번째 줄을 보면 1번과 마찬가지 방법으로 'file2'이라는 파일을 2009년 2월 1일 00시 00분 00초로 생성한다.

 

3. 세 번째 줄에 대해서 설명하면, find 명령어 다음의 '/'전체 범위에서 찾으라는 의미이고, file1이 수정된 시간보다 최근에, file2가 수정된 시간보다는 이전의 파일을 찾으라는 의미의 명령어 문장이다.

 

그러므로, 저 세 명령어 문장으로 수정된 시간이 원하는 범위 내에 있는 파일을 찾을 수 있다.

2009년 9월 6일 일요일

언노운 우먼 ( The Unknown Woman, La Sconosciuta, 2006 )

 

거장 쥬세페 토르나토레의 또 하나의 걸작 언노운 우먼, 이미 개봉한 지는 꽤 지났지만 한번 쯤 꼭 봐야겠다고 생각하고 있는 터라 이번 기회에 보게 되었다. 제목부터가 뭔가 이상함이 느껴지는 이 영화는 영화 내내 미스테리한 느낌이 났다. 게다가 영화 내내 울려퍼지는 엔니오 모리꼬네의 음악은 영화의 분위기를 한층 더 현실감있게 만들어주는 듯 했다.

 

영화가 시작하면 처음부터 이색적인 장면이 나온다. 마치 좋은 상품을 고르듯 속옷 차림의 여자들을 세워놓고 여자를 고르는 것, 그곳에서 이레나(크세니야 라포포트)는 선택된다. 첫 장면과 무관하게 영화는 진행된다. 기차를 타고 벨라치라는 도시에 온 이레나, 그녀의 모든 행보는 벨라치의 어느 한 집과 연관이 되어 있다. 자신의 집을 그 집이 잘 보이는 곳을 구하고, 그 집이 있는 건물에 청소부로 들어간다. 마침내 온갖 술수를 부린 끝에 그 집의 가정부로 들어가게 되는데, 그 이유는 바로 그 집의 아이 때문이었다.

 

그녀는 가정부임에도 불구하고 그 집 아이인 떼아를 어머니처럼 보살피고 독립심을 키울 수 있도록 훈련시킨다. 하지만 영화 내내 그녀의 과거가 약간씩 그녀의 회상을 통해 보여지는데, 결국 과거의 일이 그녀의 발목을 붙잡는다. 그녀의 집과 차에 테러를 당하고, 심지어 길거리에서의 갑작스런 폭행을 당하기도 한다. 결국 가정부 일을 그만두게 되는데, 아이의 엄마인 발레리아 아다처가 살해되고, 그 사건의 용의자로 이레나가 지목된다. 경찰에게 심문을 받는 도중 이레나는 과거의 일들을 진술하게 되는데 이 때 영화에서의 모든 이해되지 않았던 일들의 의문이 풀리게 된다.

 

실제로 이레나는 창녀 출신으로, 아이를 대신 낳아주는 일을 했었다. 첫 장면도 대리모로써 선택이 되는 장면이었던 것이다. 12년 동안 무려 9명의 아기를 출산했는데, 마지막 아기에 대해서는 다른 아이에 비해서 더 많은 애착을 가진다. 내 생각에는 아마도 의사에게 더 이상 임신을 할 수 없을 거라는 말을 들어서 그런 것 같다. 산모에게서 아이를 입양한 부모의 이름, '벨라치의 아다커'를 들은 이레나는 벨라치로 향하고 그 집에 가정부로 들어갔던 것이다.

 

하지만 법원에서 산모와 대면한 이레나는 '벨라치의 아다커'라는 이름은 포주인 몰드가 자신의 펜던트에 있는 이름을 보고 순간적으로 지어낸 이야기에 불과했다는 말을 듣게 되고 충격을 받는다. 이레나는 감옥에 갇히게 되고 출감 후 어느덧 성장한 떼아를 만나는 장면에서 영화를 끝을 맺는다.

 

영화를 끝나고 느낀 것은 결국 이레나는 도대체 무엇을 위해서 저렇게까지 아이에게 집착해야 했을까 였다. 마지막에 밝혀진 것은 떼아는 그녀의 아이가 아니라는 것이었기 때문이다. 하지만 영화에 대한 리뷰를 보면서 내가 놓친 충격적인 사실을 알게 되었다. 중간에 발레리아 아다처가 금속 세공을 할 때 이레나가 지켜보고 있는 장면이 있는데 그 때 세공하고 있는 것이 바로 몰드의 펜던트이다. 즉, 이 장면에서 유추해보자면, 아이의 아빠인 도나토 아다처와 이레나가 처음 대면할 때 도나토가 이레나를 이상하게 쳐다보는데, 그 때 도나토는 대리모였던 이레나를 알아본 것이다. 그래서 아내인 발레리아에게 펜던트를 제작해달라고 요청하고 산모에게 그 펜던트를 건네주면서 허위 진술을 부탁한 것이다. 결론은, 아이의 실제 엄마는 이레나가 맞는 것이다.

 

영화 내에서도 충분히 반전을 느꼈는데 그 반전을 뛰어넘는 반전이 있다는 것에 감탄을 했다. 그리고 그 반전을 눈치 챈 사람들이 신기할 정도로 교묘한 반전이었다. 이 반전을 알고 나니 영화의 약간 이해가 안되던 모든 것이 이해가 되었다.

 

영화는 나름대로 꽤 재미있었고 계속 흘러나오는 음악이 참 좋았다. 스토리 구성도 좋은 것 같고 작가의 상상력에 감탄을 할 수 밖에 없는 영화였다. 쥬세페 토르나토레 감독의 최고의 작품인 '시네마 천국'을 아직 보지 못했는데 이번 기회에 한 번 봐야겠다.

프리퀀시 ( Frequency, 2000 )

 

아직 보지 못한 대작 스릴러 영화가 있나 인터넷을 뒤적거리다가 스릴러 부문 네이버 평점 1위인 '프리퀀시'를 아직 안 봤다는 것을 알게 되었다. 게다가 감독도 스릴러 영화의 거장 그레고리 호블릿! 기대를 하며 영화를 보기 시작했다. 영화의 소재는 우리 나라 영화였던 '동감'과 비슷했다.

 

프랭크(데니스 퀘어드)는 열정적인 소방관으로 어떠한 상황에서라도 위험에 처한 사람을 구하는 것에서 물러서지 않는다. 그리고 그에게는 사랑하는 아내인 줄리아(엘리자베스 밋첼)와 6살 난 아들 존이 있다. 한편, 30년 후, 프랭크의 아들 존(제임스 카비젤)은 어느덧 36살의 경찰이 되어 있다. 하루하루를 무료하게 살고 6살에 사고로 죽은 아버지를 그리워하며, 여자 친구와의 관계도 순탄치 못하다. 아버지, 즉 프랭크의 친구이자 경찰인 새치(안드레 브라우퍼)는 이젠 직장 동료로써 함께 일을 하고 있다.

 

그러던 중, 태양 흑점의 영향으로 오로라가 발생하면서, 존은 30년 전, 아버지인 프랭크가 사용하던 무선 통신기에서 누군가의 말소리를 듣게 된다. 알고 보니, 그 소리는 30년 전 아버지가 무선 통신을 하는 소리였다. 둘은 30년을 건너서 무선 통신을 하게 되는데, 그 덕분에 존은 프랭크에게 프랭크가 죽는 화재 사고에서 피할 수 있는 방법을 알려줌으로써 프랭크는 목숨을 건지게 된다. 통신을 통해 과거를 바꾼 존은 바꾼 과거로 인해 다른 것들이 영향을 받게 되었다는 것을 알게 된다. 죽지 않게 된 프랭크는 그날 밤 그의 아내인 줄리아가 일하는 병원을 찾아가서 줄리아를 만나는데, 그 과정에서 의도치 않게 연쇄 살인 사건인 나이팅게일 사건의 범인인 쉐퍼드가 죽는 것을 막는다. 그럼으로써 쉐퍼드는 더 많은 사람을 죽이게 되는데 심지어 존의 어머니이자 프랭크의 아내인 줄리아까지 죽이게 된다.

 

과거를 바꾸는 바람에 많은 것이 뒤틀렸다는 것을 알게 된 둘은 살인 사건을 막기로 한다. 존이 가지고 있는 정보력을 이용해서 과거에 있는 프랭크가 살인 피해자를 살인 당하기 전에 먼저 찾는다. 그 과정에서 프랭크는 범인인 쉐퍼드와 부딪히고 그의 계략에 말려 오히려 살인 사건의 용의자로 지목되어 경찰서에서 심문을 받는다. 하지만 이미 살인 사건의 실제 범인인 쉐퍼드를 알고 있는 프랭크는 경찰서를 탈출하여 쉐퍼드를 잡고 가족의 품으로 돌아온다.

 

아직 죽지 않은 쉐퍼드는 프랭크를 공격하고 미래에서는 30년 후의 쉐퍼드가 존을 공격한다. 하지만 프랭크의 끈질긴 노력으로 쉐퍼드를 물리치고 마침내 30년 후까지도 살아 있는 프랭크와 존은 만나게 된다.

 

영화 보는 내내 화면에서 눈을 뗄 수가 없었다. 정말 재밌게 봤다. 왜 평점이 그렇게 높은지 알 수 있었고 잘 만들어진 스릴러의 재미뿐만 아니라 가족에 대한 사랑에서 나오는 감동을 느낄 수 있는 것이 너무 좋았다. 과거를 변화시킴으로써 미래가 변하게 되는 내용은 이젠 식상할 수도 있지만 이 영화에서는 과거와 미래의 관계를 기발하게 연결시키고 그 관계 속에서 반전을 거듭해나가는 스토리가 영화 내용을 전혀 짐작할 수 없게 했다.

 

개인적으로 제일 감동적이었던 부분은 존과 프랭크의 만남 장면이었다. 프랭크가 살아난 밤 30년 후의 존과 무선 통신을 하는데, 그 때 프랭크는 무선 상대가 진짜 존이라는 것을 인정하게 되고 둘은 많은 이야기를 나눈다. 30년 전에 죽어서 너무나도 그립고 사랑한다는 말 한 마디 못 했던 아버지를 다시 무선으로나마 만날 수 있어서 너무 기쁜 나머지 눈물을 보이는 존의 마음이 느껴져서 나도 모르게 눈물이 났다.

 

스토리도 좋았고 감동을 느낄 수 있어서 더 좋았던 프리퀀시에 개인적으로 별점 5개를 주고 싶다. 누구에게나 자신있게 추천할 수 있는 영화라고 생각한다.

2009년 9월 4일 금요일

ogg, flac, mp4, mp3, wav 파일 포맷 변환하기



가끔 ogg 파일이나 flac 파일로 된 노래를 찾을 수 있는데 mp3로 들으려면 파일 변환이 필요하다.

그래서 검색해 본 결과, 마침 좋은 프로그램을 소개해주는 블로그가 있었다.

역시 세상에는 착한 분들이 참 많아 ^^

프로그램은 아래 링크에서 다운 받을 수 있고 mp3 변환을 하려면 첨부 파일을 다운받아야 한다.


프로그램 설명은 아래 출처를 클릭..

2009년 9월 3일 목요일

jsp/servlet scope

forward는 request를 발생시키지 않으므로 request scope 내의 모든 변수(빈)들을 공유할 수 있다. 반면 redirect는 request를 발생시키므로 공유가 불가능하다. 이때는 session scope를 사용한다.


출처 : 천검 :: jsp/servlet scope

막스 마누스 ( Max Manus, 2008, Espen Sandberg&Joachim Ronning )

 

막스 마누스, 사실 내가 이 영화를 보기 전까지는 아예 알지도 못하는 사람이었다. 영화가 실화를 배경으로 만들어졌다는 것을 알게 되어서야 비로소 막스 마누스는 실존 인물이며, 노르웨이가 독일 식민지 하에 있을 때의 독립 투사였다는 것을 알게 되었다. 이 영화는 노르웨이 영화라는 것이 하나의 특이 사항이었는데, 그 특이 사항에 걸맞게 감독, 배우 모두 모르는 사람 투성이었다. 일단 호기심에 재생 버튼을 눌렀다.

 

영화는 막스 마누스(엑셀 헨니)가 핀란드 전쟁에서 독일군과 싸우는 장면에서 시작된다. 참전 후 그는 조국인 노르웨이에서 마음이 맞는 사람들을 모아 레지스탕스 조직을 만든다. 하지만 마땅한 지원도 없이 추진된 일이라 곧 발각되고 막스 마누스는 독일군에 잡혀갈 위험에 처한다. 그러나 그 상황에서 그는 창문 밖으로 몸을 날림으로써 도망갈 기회를 만들어낸다. 창문에서 떨어진 후 몸이 나을 때까지 병원에 있게 되는데, 그 때 상황을 엿보다 탈출해서 스코틀랜드의 육군 기지로 몸을 피한다. 육군 기지에서 훈련을 받은 후 영국 육군으로부터 레지스탕스 활동에 대한 지원을 약속 받고 다시 레지스탕스 친구들과 함께 노르웨이로 향한다.

 

막스 마누스는 노르웨이 오슬로에서 본격적으로 레지스탕스 활동을 하며 항구에 있는 선박들을 폭파시킨다. 그 과정에서 주변에 있는 친구들, 즉 같이 레지스탕스 일을 하고 있는 친구들이 하나, 둘 독일군에 의해 살해당하게 되고, 막스 마누스는 어쩔 수 없는 희생이라는 것을 알면서도 괴로워한다. 게다가 잠시 그가 노르웨이를 비운 사이, 그의 가장 친한 친구인 그레거스를 잃게 되고 또다시 괴로워한다. 하지만 그는 멈추지 않고 마지막 작전인 도나호 폭파를 성공리에 완수한다.

 

전쟁이 끝나고 독일군이 패배함으로써 노르웨이는 독립하게 된다. 막스 마누스는 독립의 기쁨보다 친구들을 잃은 슬픔과 전쟁 외에는 아무 것도 할 수 없는 자신의 무력함에 괴로워한다. 하지만 그의 연인인 되는 티켄의 위로를 받고, 조국으로 부터 공적을 인정받으며 보일 듯 말 듯한 미소를 짓는 장면에서 영화는 끝이 난다.

 

이 영화는 단순히 조국을 위해서 싸운 한 영웅에 대한 일대기만 보여주기 보다는 그 영웅이라는 이름에 가려져 있는 그의 괴로움, 고뇌, 희생 등을 보여주려고 한 것 같다. 수많은 작전들을 성공시키고 절묘한 술수로 독일군들을 따돌리지만 목숨을 건 작전들을 함께 한 친구들을 잃어야 했던 그는 독립에 성공한 이후에도 웃을 수가 없었다.

 

이야기 전개도 괜찮았고 중간중간의 약간의 스릴 있는 장면들이 있어서 보기에 전혀 지루하지 않았다. 기대하지 않았는데 의외로 괜찮은 영화를 본 느낌이다. 게다가 우리 나라도 과거에 일본의 식민지 하에 있었고 막스 마누스 같은 독립 투사들이 있었기 때문에 공감하면서 볼 수 있는 부분도 있었다.

 

나는 국가를 위해서, 혹은 다른 사람을 위해서 나 자신을 희생할 수 있을까..?

2009년 9월 2일 수요일

'일부러'와 '우연'의 차이

incident와 accident는 우리 말로 모두 ‘사건 또는 사고’를 뜻하는 단어입니다. 그러나 영어에서는 우연한 사건이냐 또는 의도적인 사건이냐에 따라 이를 구별한답니다. 우연한 사건은 accident이고 의도적인 사건은 incident입니다. 우연한 사건의 대표적인 예로 교통 사고를 들 수 있겠고, 의도적인 사건의 예로서는 테러 범에 의한 비행기 폭발 사고 등을 들 수 있을 것입니다.

incident는 의도적인 행동 또는 사건을 의미한다. 그러므로 incident로 인한 결과는 심지어 신문에 보도될 정도로 심각할 수도 있다. 
An ‘incident’ is an event or an occurrence which is usually intentional. It may have serious consequences and be reported in the news.


-There was a funny incident at work this morning when Mr. Smith came in wearing a dress.
(오늘 아침 스미스 씨가 옷을 입으러 들어왔을 때 사무실에서 장난스러운 사건이 벌어졌다.
스미스 씨를 골탕 먹이기 위해 누군가 의도적으로 꾸며낸 사건이므로 incident이다.)

-The incident of the hostage taking in Texas was reported by the news.
(텍사스에서 일어난 인질 사건은 신문에 보도되었다.
인질 사건은 테러 범에 의해 의도적으로 일어난 것이므로 incident이다.)

accident는 의도적이지 않은 우연한 사건에 사용되며, 대개 유쾌하지 않고 바람직하지 않을 뿐만 아니라 피해를 주는 사건을 지칭한다. 
An ‘accident’ is an UNINTENTIONAL event, one that HAPPENS BY CHANCE. An ‘accident’ is usually unpleasant, undesirable or damaging.


- Several people were killed in the car accident.
(여러 명이 교통 사고로 죽었다.교통 사고는 의도적으로 일어난 것이 아니라 대부분 순간적인 부주의에 의해 발생하므로 accident이다.)
- I had an accident in the kitchen and spilled milk on the floor.
(부엌에서 나는 엉겁결에 바닥에 우유를 엎질렀다.)

출처 : EnglishFreak

2009년 8월 30일 일요일

장군의 딸 ( The General's Daughter, 1999 )

 

아는 사람의 추천으로 여지껏 들어보지 못했던 '장군의 딸'이라는 영화를 보았다.

흠.. 솔직히 이 영화를 모르는 사람이 이 영화의 제목을 처음 들었으면 누구나 떠올렸을 그 이름 '장군의 아들'...-_-;;;;;;

어찌됐든 일단 영화를 추천받으면 영화 검색에 감독의 영화 성향, 지난 작품까지 모두 읽어보는 내 성향에 의해서 역시 검색을 시도했다.

 

검색해보니 의외로 존 트라볼타라는 내가 꽤 괜찮게 생각하는 배우가 주연을 맡았었고, '콘에어', '툼레이더' 등의 감독인 사이먼 웨스트가 감독을 했다는 것에 놀랬다.

 

그런 정보들은 나의 흥미를 끌기에 충분했고 진지한 마음으로 영화를 감상했다.

 

폴 브레너(존 트라볼타), 사라 선힐(매들린 스토우)은 CID로 군대 내에서 경찰 역할을 하는 조직인 듯 했다. 영화는 두 주연 배우가 살인 사건을 파헤쳐 나가면서 서서히 일의 전모가 드러나는 약간은 식상한 내용이었다.

 

여담이지만 최근에 L.A.컨피덴셜을 봤었던 나는 장군으로 등장하는 조셉 캠벨(제임스 크롬웰)의 낯 익은 얼굴이 꽤 반가웠다. ^^;

 

영화는 현 최고의 인기를 구가하고 있는 조셉 캠벨 장군의 딸인 엘리자베스 캠벨이 벗겨진 채로 살해당한 것이 발견되면서 실제로 시작된다. 앞에 작은 사건이 하나 있긴 하지만 그 사건은 폴 브레너라는 사람을 소개하는 것이라고 볼 수 있다. 살인 사건 발생 초기부터 살인 피해자의 아버지인 조셉 캠벨과 그의 비서는 수상한 냄새를 풀풀 풍기고 뒤에 뭔가 구린 것이 있다는 것을 암시해 주었다.

 

영화가 진행될수록 살인 피해자의 숨겨진 진실이 드러나기 시작하고 결국 살인 피해자, 즉 엘리자베스 캠벨은 육사 학생 시절에 윤간을 당했다는 것이 밝혀진다. 그리고 그 사건 이후 그녀의 이해하지 못할 성적인 행동들은 모두 아버지에 의한 배신감 때문이었고, 살인당하던 날에 그렇게 이상한 살인 현상이 만들어질 수 있었던 이유도 아버지의 사과를 받고자 함이었다는 것이 밝혀진다.

 

중간에 엘리자베스의 상관이었던 무어 대령(제임스 우즈)이 '강간보다 더 나쁜 것'이라는 말을 하는데 영화 마지막에 그것은 '배신'이라는 것이 밝혀진다. 믿었던 아버지의 배신이 이 영화가 암시하는 가장 나쁜 것이었던 것이다.

 

영화를 보는 내내 지루하지는 않았지만 뭔가 답답한 마음이 느껴졌다. 뭐랄까, 뭔가 이렇게 흘러가는 것이 맞는걸까? 라는 생각? 내가 영화 비평가가 아니라서 뭐라고 말은 못하겠지만 스토리가 그렇게 짜임새가 있다고 생각이 들진 않았다. 스릴러라는 장르의 특성 상, 짜임새 있는 스토리는 영화 시청자들에게 아주 큰 영화 평가 요인이 된다.

 

마지막의 반전은 맨 처음 살인 사건을 소개하는 윌리엄 켄트 대령의 우발적인 살해라는 것이었다. 사실 이 부분이 잘 이해가 가지 않았다. 이 영화에서 암시하고 싶은 주제와.. 실제 살인을 저지르는 범죄자의 연관성..? 연관성이 있다고 생각이 들지 않았다.

 

약간은 아쉬운 감이 없지 않아 있는 그래도 나름 나쁘지는 않은 영화였다.

드림걸즈 ( Dreamgirls, 2006 )

 

드림걸즈, 이 영화가 처음 개봉되었을 때 꽤 떠들썩했던 것으로 기억한다.

뮤지컬로 유명했던 드림걸즈가 비욘세라는 글로벌 싱어가 주연을 맡는 영화로 재탄생되는 것은 주목할 만한 이슈였기 때문이다.

 

그러나 나는 비욘세 놀즈라는 가수를 잘 알지도 못했고, 관심도 없었고, 내용도 그리 재밌을 것 같지 않아서 한참 보지 않고 있다가 최근에서야 보게 되었다.

 

영화는 디나(비욘세 놀즈), 에피(제니퍼 허드슨), 로렐(애니카 노니 로즈) 세 흑은 여가수로 구성된 그룹이 밑바닥부터 성장해나가는 스토리부터 시작된다.

 

인기 가수의 백 코러스로 가수 인생을 시작한 이들은 매니저인 커티스(제이미 폭스)의 노력 하에 독립을 할 수 있게 된다. 독립의 조건은 그동안 리드 싱어였던 에피 대신에 외모가 뛰어나고 가창력에 개성이 너무 강하지 않은 디나를 리드 싱어로 내세운다는 것이었다. 에피는 상처를 받지만 같이 일하는 다른 사람들의 격려 덕분에 계속 그룹 활동을 하게 된다. 하지만 연인이었던 커티스가 디나와 연인 관계로 발전하는 것을 보면서 끊임없이 팀 내 불화를 만들고, 결국 팀에서 퇴출당하게 된다.

 

에피 대신에 미쉘 모리스(샤론 릴)를 영입한 드림걸즈 그룹은 글로벌 스타로 거듭나고 디나와 커티스는 결혼을 하게 된다. 그러나 성공한 사업가가 된 커티스의 과욕은 불법적인 행동도 서슴지 않았으며 피도 눈물도 없는 냉철한 모습을 보여주며 부인인 디나도 자신의 목적에 맞게만 이용하려고 한다. (이 때, 디나는 그 유명한 노래 'Listen'을 부르는데, 정말 노래 하나만으로도 눈물이 날 수 있다는 것을 깨닫게 해주었다.) 새롭게 솔로 싱어로 출발한 에피의 노래를 표절하는 모습까지 보여주는 커티스는 결국 같이 일하던 모든 사람들을 떠나게 만들고 아내인 디나마저도 그를 떠나게 된다. 커티스를 떠난 디나는 에피에게 지난 일을 사과하고 드림걸즈 고별 무대에서 에피를 리드 싱어로 내세우면서 영화는 끝나게 된다.

 

개인적으로 뮤지컬 영화를 꽤 좋아하는 편이다. 꼭 뮤지컬 영화가 아니더라도 음악을 주제로 하는 영화를 좋아하는 편인데, 정말 재밌게 봤던 영화로는 물랑루즈, 어거스트 러쉬, 사운드 오브 뮤직 등이 있다. 그러나 몇 개월 전에 개봉했던 맘마미아나 이번에 본 드림걸즈는 그 수준에는 못 미치는 것 같다. 무엇보다 영화 내 음악들에서 그 상황을 표현하며 감동을 이끌어내는 파워가 부족한 것 같다.

 

그러나 영화 주연을 맡은 비욘세와 에피 역의 제니퍼 허드슨의 흑인 특유의 폭발적인 가창력은 정말 훌륭했다. 오늘은 비욘세의 노래를 좀 즐겨봐야겠다.

엑스맨 탄생: 울버린 ( X-Men Origins: Wolverine, 2009 )

 

 

엑스맨, 이미 액션 쪽에서는 꽤 흥행에 성공한 시리즈로 손꼽히는 이 영화 시리즈는 나도 꽤 재미있게 봤었다. 그래서 엑스맨이 탄생하게 된 배경을 말해주는 '엑스맨 탄생: 울버린'이 나온다고 했을 때 꽤 기대했었던 기억이 난다. 하지만 영화관에서 볼 수 있는 기회는 없었고 개봉하고 좀 지나서 볼 수 있었다.

 

영화를 보는 내내 가장 많이 느낀 것은 살아있는 가장 섹시한 배우로 뽑힌 적이 있을 정도로 멋있는 배우인 휴 잭맨은 남자인 내가 봐도 정말 멋있고 섹시하다는 것이었다. 탄탄한 근육과 보기 좋은 몸매의 비율, 강렬한 눈빛은 정말 엑스맨 주연으로써 잘 캐스팅되었다는 생각이 들게했다.

 

이 영화는 울버린이라는 엑스맨의 메인 캐릭터가 만들어지게 되는 과정을 보여준다. 어렸을 때 우연한 기회에 자신이 손에서 날카로운 뼈가 나올 수 있는 돌연변이라는 사실을 알게되는 로건(휴 잭맨)은 마찬가지로 손톱이 길게 자랄 수 있는 돌연변이인 형 빅터(리브 쉐레이버)와 함께 수 많은 전쟁터에서 공적을 세운다. 그 과정에서 스트라이커 대령(대니 허스튼)의 눈에 들어서 돌연변이 팀에 들어가게 되고 그의 무기가 되어서 임무를 수행하게 된다. 하지만 너무 심한 살상 때문에 회의를 느낀 로건은 일을 그만두고 조용한 곳에서 평화로운 일상을 살려고 노력한다. 그의 형 빅터는 계속 스트라이커 대령의 무기로 일하면서 살상을 거듭하고 영화가 진행되면서 스트라이커 대령의 못된 속셈이 드러나게 된다. 그 속셈은 돌연변이들의 능력을 모두 가진 강력한 돌연변이를 만드는 것인데, 그 과정에서 빅터를 이용해 다른 돌연변이들을 차례로 살해한다.

 

로건은 스트라이커 대령의 계략에 의해 빅터가 자신의 연인 케일라(린 콜린스)를 살해했다고 오해하고 빅터를 증오하게 된다. 영화 결말에서 사실을 알게된 로건은 결국 빅터와 힘을 합해서 스트라이커 대령의 슈퍼 돌연변이 XI를 제거한다. 영화가 끝나기 전 스트라이커 대령은 특수 제작된 총알을 로건의 머리에 박아넣음으로써 로건은 모든 기억을 잃게 되고, 영화는 끝나게 된다.

 

간단한 줄거리를 적으면서도 느끼고 영화를 보면서도 느낀거지만 스토리가 참 말도 안되게 엮여있다는 생각이 든다. 제일 황당한 부분은 스트라이커 대령이 실컷 슈퍼 금속 아다멘시아를 로건에게 주입해 놓고 제로(다니엘 헤니)에게 로건을 살해하라고 명령하는 부분이었다.

 

하도 뒤죽박죽이라서 중간중간 이해도 잘 안되었고 그냥 울버린이라는 엑스맨 캐릭터가 어떻게 해서 몸에 그런 금속을 가지게 됐는지, 어쩌다가 기억을 잃게 되었는지 정도만 알고 넘어가면 될 것 같다.

 

원래 엑스맨 시리즈에 비해서는 많은 실망을 했지만 우리 나라로써는 다니엘 헤니가 헐리우드에 진출했다는 의미를 가진다는 점에서 괜찮은 것 같다. 중간에 비참한 죽음을 맞이하긴 하지만 첫 영화치고는 많은 부분 등장했고 비중 있는 역할이었다. 다음 작품에는 더 좋은 역할을 맡게 되길..

2009년 8월 26일 수요일

LA 컨피덴셜 ( L.A. Confidential, 1997 )

 

 

꽤 오래 전에 이 영화를 봤었는데, 최근에 다시 본 메멘토의 '가이 피어스'가 이 영화에서 엑슬리 역할이었다는 것을 알고는 다시 보고 싶어서 보게 되었다.

 

사실 감독인 커티스 핸슨의 다른 영화는 하나도 보지 않았을 뿐더러 '8마일' 외에는 알지도 못한다. 하지만 이 영화는 정말 흥미진진했고, 내가 꽤나 재미있게 봤던 손꼽히는 영화 중의 하나이다. 게다가 화려한 출연진인 케빈 스페이시, 러셀 크로우, 가이 피어스, 제임스 크롬웰 등은 영화 보는 내내 그들의 연기에 감탄하면서 볼 수 있게 해 주었다.

 

영화의 배경은 제목에서 나오는 대로 LA이다. LA 경찰국은 LA의 이미지에 상당히 많은 신경을 쓰는 것으로 나오는데, 그 예로 영화 초반에 LA 최대 범죄 주직 수장인 '미키 코헨'을 구속하는 내용이 나온다. 그리고 미키 코헨의 공백이 힘의 불균형을 초래할 것이라는 암시를 하면서 그 암시가 영화 내용에 핵심적인 부분이라는 것을 시청자가 느끼게 해준다.

 

처음에 왜 경찰이 되었는지의 꿈을 잊을 정도로 방송에서의 명예를 중요시하고 기자와 뒷거래를 일삼는 잭 빈센트(케빈 스페이시), 여자를 때리는 자를 혐오하고 다혈질에 주먹이 항상 말보다 앞서는 버드 화이트(러셀 크로우), 출세하기 위해서라면 동료를 밀고하는 짓도 서슴지 않지만 항상 정의 실현을 목표로 하는 진지한 형사 에드먼드 엑슬리(가이 피어스).. 이 세 명의 형사는 엑슬리가 해결했던 한 카페에서 발생한 대규모 살인 사건이 뭔가 잘못되었다는 것을 깨닫게 된다.

 

엑슬리와 빈센트는 정의 실현을 목표로 그 일을 파헤치기 시작하고 파헤치면서 더욱더 이상함을 느끼게 되고 빈센트는 상관인 더들리(제임스 크롬웰)에게 조사한 사실을 말해주다가 오히려 사건의 배후였던 더들리에게 살해당한다. 엑슬리는 자신이 빈센트에게 말해 준 '롤로 토마시'라는 이름을 더들리에게 들음으로써 더들리가 빈센트를 살해했다는 사실을 깨닫게 되고 사건의 배후에 더들리가 있을 거라고 의심하기 시작한다. 한편, 화이트는 엑슬리의 밀고로 인해 더들리에게 이용당하는 생활을 하고 있는데 그 역시도 카페 사건이 석연치 않다는 것을 느끼고 홀로 사건을 조사한다. 그 결과 엑슬리는 사건을 조사하면서 화이트와 부딪치게 되고, 화이트는 더들리가 만들어 놓은 계략에 빠져 엑슬리를 살해할 뻔 하지만 엑슬리에게 사건의 배후 사정을 듣고는 그와 협력해 더들리에 대항하게 된다.

 

더들리는 미키 코헨의 공백을 이용해서 많은 양의 마약을 챙기고 미키 코헨의 수하를 살해하면서 권력을 얻게 되고 권력을 얻은 후에는 증거 인멸을 위해 자신의 본 모습을 아는 사람들을 차례로 살해한다. 그 때문에 사건은 더욱 미궁에 빠지지만 엑슬리가 사건 배후를 알게 되면서 더들리는 엑슬리를 제거하려고 하고, 같이 있는 화이트까지 제거하려고 한다. 하지만 엑슬리와 화이트의 활약에 의해 실패로 돌아가고 더들리는 엑슬리에 의해서 비참한 최후를 맞이하게 된다.

 

영화가 이해하기 어렵거나 난해한 내용은 아니었지만 짜임새 있는 구성에 탄탄한 스토리 덕분에 다 보고 난 뒤에는 기분이 좋았다. 세 명의 상반되는 캐릭터가 사건을 해결해 나가는 과정도 흥미진진했다.

 

커티스 핸슨 감독의 '요람을 흔드는 손', '리버 와일드'는 L.A. 컨피덴셜과 함께 좋은 평가를 받고 있는데 그 두 영화도 기회가 되면 봐야겠다.

2009년 8월 23일 일요일

예스 맨 ( Yes Man, 2008 )

 

에이스 벤츄라 시리즈, 라이어 라이어, 트루먼 쇼, 마스크, 덤 앤 더머......

헐리우드에서 코미디 계의 제왕이라고 불려도 손색이 없을 만큼 코미디에서의 명연기를 보여주고 수천가지 표정이 가능해 보이는 얼굴을 가진 짐 캐리. 어렸을 때 짐 캐리의 영화를 보고 눈물이 날 때까지 웃었던 기억이 난다. 대학 들어와서 짐 캐리의 영화 이터널 선샤인을 봤는데 비록 코믹 연기는 아니었지만 훌륭한 연기를 볼 수 있었다. 지금은 전성기 때보다는 유명하지 않지만 꾸준히 좋은 영화들에 출연해서 시청자들을 즐겁게 해주고 있다.

 

그런 짐 캐리의 최근 영화 예스맨은 왠지 모르게 짐 캐리의 느낌이 안 나는 듯 해서 한동안 보는 것을 미뤄왔었다. 그러다 지인의 추천에 의해서 마음 잡고 보게 되었다.

 

먼저 감독.. 페이튼 리드는 주로 로맨틱 코미디를 연출해왔던 감독인 듯 했다. '브레이크 업-이별후애'는 결말이 마음에 안 들어서 기억에 남는 작품인데 그게 페이튼 리드 감독인지는 미처 몰랐었다. 로맨틱 코미디 장르를 그다지 즐겨보지 않는 나로서는 감독을 보고 나니 영화에 대한 기대감이 더욱 줄었고 별 기대 없이 영화를 시청하기 시작했다.

 

이혼 후 회사에 다니는 것 외에 사회적인 활동을 일체 하지 않으며 매사에 부정적인 입장을 고수하는 칼(짐 캐리)은 대출 회사 직원이다. 직장에서의 승진도 실패하고 친구들과의 거리도 멀어지고 무료하게 재미없는 영화들을 보며 하루하루를 살아가는 그의 모습은 시청자로 하여금 뭔가 변화가 필요하다고 생각하게 해준다.

 

그러다 한 친구와의 우연한 만남을 계기로 'Yes'라고 말하면 생활이 바뀐다고 말하는 사람을 만나게 되고 그와 무조건 'Yes'라고 말해야하는 서약을 맺게 된다. 그 후 다른 사람의 모든 요구 사항에 대해서 'Yes'라고 말하고 다니기 시작하고 그 결과는 놀라웠다. 어여쁜 여자 친구 앨리슨(조이 데샤넬)을 사귀게 되고 잃었던 친구들을 되찾았으며 승진하여 회사의 임원진들과 일을 같이 하게 된다. 하지만 칼이 앞뒤 가리지 않고 무조건 'Yes'만 하는 것을 알게 된 앨리슨은 그의 사랑을 의심하게 되고, 파경에 이르게 된다. 앨리슨을 그리워하던 칼은 상황에 따라서 'No'라고도 해야한다는 것을 깨닫고 태도를 바꾸게 되며, 앨리슨에게 다시 고백하게 된다. 솔직한 칼의 모습에 앨리슨은 다시 마음을 열고 둘의 행복한 모습을 마지막으로 영화가 끝난다.

 

영화가 끝난 후 약간 멍한 기분이 들었다. 이 영화를 보면서 조금이라도 찔리는 생각이 들지 않는다면 그 사람은 정말 긍정적이고 이타적인 사람일 것이다. 이 때까지 살아오면서 우리는 얼마나 많은 'No'를 할까? 하루에서 수많은 'No'를 말하고 듣는 현대인에게 하나의 메시지를 전달하고자 하는 듯한 영화였다.

 

기대를 안하고 봐서 더 그런지 모르겠지만 역시 짐 캐리는 죽지 않았다는 생각과 함께 이 영화에 대해서 상당히 만족감이 들었다.

 

오늘 하루만이라도 다른 사람의 모든 요구 사항, 부탁에 'Yes'를 해보면 어떨까?

말할 수 없는 비밀 ( 不能說的秘密: Secret, 2007, 주걸륜 )

 

주걸륜 각본, 주걸륜 감독, 주걸륜 주연.

친구가 재밌다고 해서 영화를 보려고 하는데 문득 각본, 감독과 주연을 맡은 주걸륜이 누굴까 하는 생각이 들었다. 그런데 고작 79년생인 것을 알고는 상당히 당황했다. 2007년에 찍었으니 그때 주걸륜의 나이는 고작 29살밖에 되지 않았을 때이다. 그런 그가 한 때는 네이버 영화 평점 1위까지 기록했던 영화를 만들었다는 것은 정말 놀랄 만한 사실이다. 기대 반, 놀라움 반으로 영화를 보기 시작했다.

 

주변 사람들에게 이 영화의 추천을 많이 받았는데 그래서 약간씩 주워 들은 내용들이 꽤 있어서 영화의 스토리를 대략 알고 있었다. 그래서 처음 보는 내용이었지만 각 상황에 대해서 상당히 쉽게 이해를 하면서 볼 수 있었다.

 

영화의 주인공인 상륜(주걸륜)이 예술 고등학교로 전학오면서 영화는 시작된다. 상륜은 전학 온 첫 날 학교를 둘러보다가 졸업식 때 철거된 예정인 오래된 음악실에서 나오는 처음 듣는 아름다운 멜로디에 이끌려가게 된다. 그 음악실에서 샤오위(계륜미)를 만나게 되고 상륜은 첫 눈에 호감을 느끼게 된다. 그녀에게 노래의 제목을 물어보고 친해지려고 노력하지만 샤오위는 노래 제목을 비밀이라는 말로 대답하지 않고 잦은 결석을 하는 등 이상한 행동을 보인다. 그러나 그런 샤오위에게 상륜은 점점 더 호감을 느끼게 되고 둘은 더 가까워면서 연인 관계로 발전한다.

 

상륜은 샤오위에게 졸업식 때 그녀를 위해 피아노로 '백조의 호수'를 연주하겠다고 약속한다. 그러나 어느 날 샤오위는 상륜을 짝사랑해왔던 청의(중개현)와 상륜이 키스를 하는 장면을 우연히 목격하면서 오해하고는 사라진다. 상륜은 사라진 샤오위를 찾아보려고 노력하지만 이미 떠나버린 그녀를 찾을 수가 없었다. 몇 개월 후, 졸업식 때 샤오위와의 약속 대로 상륜은 '백조의 호수'를 연주하고 그 때 샤오위가 나타난다. 연주 도중 샤오위는 어디론가 뛰어가고 상륜은 그녀 뒤를 쫓아가서 둘은 재회를 하게 되지만, 상륜의 팔에 청의의 팔찌가 있는 것을 본 샤오위는 또다시 오해해서 사라진다.

 

졸업식 후, 샤오위의 어머니와 자신의 아버지에게 샤오위에 대한 얘기를 들은 상륜은 샤오위가 '비밀'이라는 곡의 연주를 통해 과거에서 왔다는 사실을 알게 되고 그간의 샤오위와 자신에게 일어난 일들을 모두 이해하게 된다. 상륜은 아버지로부터 샤오위가 과거에서 자신과의 만남 때문에 힘들어하다가 천식으로 인해 죽었다는 말을 듣고, 철거되는 음악실에서 '비밀'을 연주해서 과거로 간다. 과거에서 샤오위를 만나고, 상륜은 미래로 돌아오지 않고 샤오위와 함께 과거에 머무르게 된다.

 

영화에서 계속 나오는 피아노의 아름다운 멜로디가 영화 보는 내내 귀를 즐겁게 해주었다. 과거와 현재를왔다갔다 하는 것에서 약간의 이해가 안되는 의문 사항이 생기긴 했지만 영화 설정 상 현재에서 불가능한 소재를 사용하기 때문에 크게 신경쓸 필요가 없을 듯 했다.

 

그러나 약간은 식상한 멜로 풍의 내용과 그렇게 신선하지 않았던 소재들 탓인지 그렇게 만족을 느끼진 못했다. 비록 나의 짧은 생각이긴 하지만 피아노를 정말 좋아하고 애틋한 사랑 이야기를 즐기는 사람이 아니고는 그렇게 재미있게 보기는 힘들 듯하다. 그러나 이 영화를 만든 사람이 영화 만든 당시 20대였던 주걸륜이라는 것을 생각한다면 정말 그는 영화에서처럼 천재라는 말이 아깝지가 않다.

 

중국에서 선풍적인 인기를 끌었고 지금도 절대 잊지 못할 영화로 기억되고 있고 있다는 '말할 수 없는 비밀'. 한번 쯤 꼭 봐야 할 영화라고 생각한다.

지.아이.조 - 전쟁의 서막 ( G.I. Joe: The Rise Of Cobra, 2009 )

 

 

지아이조, 한국 배우 이병헌의 헐리우드 진출작이라는 소식을 접하고는 상당히 궁금했다. 최근에 헐리우드에 진출했던 스피드 레이서의 비, 블러드의 전지현 모두 실망스러운 결과를 보여줬기에 이병헌은 어떤 모습을 보여줄지 궁금했다. 사실 이병헌이 헐리우드에 진출한다는 사실을 최근까지도 몰랐었다. 그래서 영화에 대해서 크게 기대하지 않았었고 영화 내에서도 비중 있게 나올 거라곤 생각하지 않았었다.

 

그런데 미국에서 개봉 직후 주말 박스오피스 1위에 오르고 반응이 괜찮다는 얘기를 듣게 되었다. 게다가 이병헌이 미국 내에서 상당히 인기가 많고 그가 연기한 '스톰 쉐도우' 역이 꽤 비중 있는 조연급이라는 얘기를 듣고는 꼭 봐야겠다고 생각했다. 그러던 중 영화 볼 기회가 되어서 지아이조를 볼 수 있었다.

 

영화의 첫 장면은 코브라 집단의 우두머리인 디스트로(크리스토퍼 에클리스턴)의 조상이 양쪽에 무기를 공급하다가 발각되어서 얼굴에 철가면이 씌워지는 불명예를 안게 되는 모습이었다. 조상의 불명예에 따라 디스트로는 가공할 만한 무기를 이용해 세계를 정복시키려고 하는데 그와 그의 집단 코브라를 막는 세력이 바로 지아이조이다.

 

특수 부대 대위를 맡고 있는 듀크(채닝 테이텀)는 강력한 무기를 운반하다 정체불명의 집단의 공격을 받고 가까스로 지아이조에게 구조된다. 구조된 후 듀크는 친구 립코드(마론 웨이언스)와 함께 지아이조에서 코브라를 막겠다고 지아이조에 지원하게 되고 지아이조를 맡고 있는 호크 장군(데니스 퀘이드)는 그들을 임시적으로 허락한다.

 

한편, 코브라는 4년 전 듀크의 연인이었던 베로니스(시에나 밀러), 베로니스의 오빠이자 듀크의 전우였던 렉스(조셉 고든-레빗), 스톰 쉐도우(이병헌)과 같이 강력한 능력을 지닌 구성원들로 이루어져 있으며 우두머리인 디스트로는 미사일을 탈환해서 세계를 정복하고자 한다. 그래서 끊임없이 미사일을 사수하려는 지아이조와 부딪히게 되며 결국 지아이조에 의해서 계획이 무산되고 렉스와 디스트로는 감옥에 갇히게 된다.

 

영화를 보면서 내내 느꼈던 것은 정말 그래픽이 화려하다는 것이었다. 정신이 없었고 눈이 지루하지 않았다. 가끔 CG라는 것이 누가 봐도 알 수 있을 정도로 너무 낮은 수준의 CG도 있었지만 대부분 꽤 훌륭한 모습을 보여줬다. 하지만 스케일이 큰 블록버스터 액션 영화가 그렇듯 스토리가 탄탄하지는 않았고 영화가 시각 효과에만 집중했다는 것을 쉽게 알 수 있었다.

 

궁금했던 이병헌은 기대 이상이었다. 수준급의 영어 실력, 화려한 액션, 비중 있는 역할 등 어느 하나 나무랄 데가 없었고 데뷔작치고는 아주 훌륭했다. 2편, 3편에서 더 좋은 모습을 기대해도 괜찮을 것 같다.

 

감독은 스티븐 소머스로, 미이라를 연출했던 감독이다. 미이라 역시 화려한 액션 위주의 영화인데 지아이조나 미이라나 킬링 타임 거리로 좋은 영화들이다.

 

여름이 다 지나가긴 하지만 무료한 생활 속에서 잠깐 시간이 난다면 머리도 식힐 겸 보기에 괜찮은 영화 같다.

2009년 8월 21일 금요일

[Linux-CVS-4] CVS 클라이언트 작업2 - Eclipse

많은 사람들이 CVS로 프로젝트 작업 시 Eclipse를 이용한다.

 

실제로 많이 편리하다. ^^;

 

 

CVS 서버 등록 및 접속

 

이클립스 화면에서 'CVS Repositaries Perspective'를 연다.

 

 

이미지에 보이는 'Other ..' 을 클릭하면 다음 화면이 뜬다.

거기서 'CVS Repository Exploring'을 클릭한 후 'OK'를 클릭한다.

 

그러면 좌측의 Perspective들이 있는 부분에 'CVS Repository Perspective' 패널이 추가된다.

 

그 패널 위에서 오른쪽 마우스를 클릭하고 'New'에 마우스 오버하면 'Repository Location..'이라는

메뉴가 있다. 클릭한다.

 

 

클릭하면 다음과 같은 화면이 뜨는데 빨간 네모가 되어 있는 곳에 기입해야 할 것이

CVS 서버의 정보이다. 모두 입력 후, 'Finish'를 클릭한다.

 

 

이제 'CVS Repository Perspective' 패널에 추가되어 있는 CVS 서버 정보가 보일 것이다.

 

 

 

checkout 명령어

 

'CVS Repository Perspective' 패널에 추가되어 있는 CVS 서버 정보를 아래로 펼치면

'HEAD', 'Branches'.. 등등의 메뉴가 보일 것인데 'HEAD' 메뉴를 아래로 펼친다.

아래로 펼치면 CVS 서버에 있는 프로젝트들을 볼 수 있는 원하는 프로젝트를 클릭한 후

마우스 오른쪽 클릭한 다음 'Check Out'을 클릭한다.

 

 

그러면 자신의 Eclipse의 'Workspace'에 해당 프로젝트가 복사된다.

만약에 'Workspace'가 아닌 다른 장소에 복사하고 싶으면 'Check Out As'를 클릭하면 된다.

 

 

 

CVS로 프로젝트 작업하기

 

이제 'Navigator View'를 열어서 확인해보면 프로젝트가 추가되어 있는 것을 볼 수 있다.

 

Eclipse에서는 굳이 status 명령어 없이도 파일 우측에 파일 및 디렉토리의 버전 정보가 표시된다.

게다가 아직 update되지 않은 정보는 파일이나 디렉토리명 앞에 '>'라는 표시가 되어 있어서

구분하기가 용이하다.

 

update 및 commit 실행 시 실행시키고 싶은 파일이나 디렉토리에, 혹은 프로젝트 이름에서

마우스 오른쪽 버튼 클릭 후 'team' 메뉴에 마우스 오버하게 되면 update 및 commit이 보인다.

 

이상으로 Eclipse에서 간단히 CVS로 작업해보았다.

 

CVS를 처음 다루기를 어렵지만 한번 익혀놓으면 협업 작업 시 아주 편리하다.

물론 관리 차원에서의 효율성도 증대될 것이다.

 

더 나은 개발자가 되기 위해서..!

[Linux-CVS-3] CVS 클라이언트 작업1 - 쉘

이제 서버에서 할 수 있는 대부분의 설정은 끝났다고 보면 된다.

 

클라이언트 작업이 필요한데, 익히 알고 있는 checkout, update, commit 등이 그것이다.

 

많은 사람들이 eclipse에서 작업하기도 하고 쉘에서 작업하기도 하는데,

 

먼저 쉘에서 하는 것에 대해서 알아보겠다.

 

 

CVS 계정 로그인

 

첫 번째에서 cvs 계정을 생성했었는데, 예를 들어서 user1 이라고 해보자.

제일 먼저 해야하는 것은 당연히 cvs 로그인이다.

물론 로컬 디스크에서 작업할 때는 로그인이 필요없다. root가 모든 권한을 가지고 있기 때문이다.

 

$ cvs -d:pserver:user1@myhost.com:/home/cvs login


차례대로 설명해보면,

1. -d : 저장소의 위치를 나타낼 때 쓰는 옵션

2. pserver : pserver 프로토콜

3. user1 : 클라이언트의 cvs 계정

4. myhost.com : cvs 서버의 host

5. /home/cvs : cvs 서버의 repository 경로

6. login : 로그인 명령어

 

로그인할 때마다 저 긴 명령어를 타이핑하려면 힘들 것이다. 그래서 환경 변수로 등록해두면 편하다.

 

$ export CVSROOT=:pserver:user1@myhost.com:/home/cvs
$ cvs login

 

 

 

checkout 명령어

 

checkout 명령어는 cvs로 작업 중인 프로젝트의 복사본을 클라이언트에게 가지고 오는 것이다.

클라이언트에서 원하는 경로에 checkout 명령어를 실행시킨다.

 

$ cd /home/client/
$ cvs checkout project_name
$ ls /home/client/

project_name

 

cvs checkout 뒤에는 원하는 프로젝트 이름을 적는다.
ls 명령어로 디렉토리 내용을 보면 해당 프로젝트 이름으로 디렉토리가 생성되어 있는 것을

확인할 수 있다. 그리고 그 디렉토리 아래에는 프로젝트 파일들이 모두 복사되어 있을 것이다.

checkout 명령어는 프로젝트 작업 시작 시 한 번만 실행시켜 주면 된다.

 

 

 

CVS로 프로젝트 작업하기

 

1. update

 

update 명령어는 실제 프로젝트 진행 시 다른 팀원이 변경한 데이터를 자신의 프로젝트에 적용시키는

작업이다.

 

클라이언트에서 진행 중인 프로젝트 내의 update를 원하는 경로에서 명령어를 실행시키면 된다.

예컨대, 클라이언트 프로젝트에서 갱신하고 싶은 디렉토리가 project_name/my_directory1이라고

하면,

 

$ cd project_name
$ cvs update my_directory1


이렇게 실행시키면 된다.

물론 그냥

 

$ cvs update


라고만 해도 실행된다. 이것은 현재 디렉토리 내의 하위 경로까지 모두 update 하는 명령어이다.

클라이언트의 프로젝트 정보가 서버 상의 정보로 완전히 갱신이 되지 않았을 경우, commit 명령이

실행되지 않으므로 소스 수정 전에 반드시 update 명령을 수행하는 것이 좋다.

 

 

2. add & remove

 

파일이나 디렉토리를 추가할 때도 cvs 명령어를 사용해야 한다.

예를 들면 project_name 디렉토리 아래에 my_directory2 디렉토리를 추가하고자 한다면,

 

$ mkdir project_name/my_directory2
$ cvs add project_name/my_directory2


이렇게 하면 된다. 파일도 마찬가지이다.

 

파일을 삭제하는 경우도 추가 시와 유사하다.

가령, project_name 디렉토리 아래의 my.jsp 파일을 삭제한다고 하자.

 

$ rm project_name/my.jsp
$ cvs remove project_name/my.jsp


그러나 디렉토리를 삭제하는 경우는 좀 다른데, 아까 생성했던 project_name/my_directory2

삭제한다고 했을 때, 클라이언트의 프로젝트에서 해당 디렉토리를 삭제 후 직접 CVS 서버로

가서 해당 디렉토리를 삭제해줘야 한다.

 

 

3. status

 

staus 명령어는 현재 버전을 확인하는 명령어이다.

 

$ cvs status project_name/index.jsp
===================================================================
File: index.jsp         Status: Up-to-date
   Working revision:    1.3     Fri Aug 21 05:14:03 2009
   Repository revision: 1.3     /home/cvs/project_name/index.jsp,v
   Sticky Tag:          (none)
   Sticky Date:         (none)
   Sticky Options:      (none)


이런 식으로 출력된다.

뒤에 파일 이름이나 디렉토리 이름을 적지 않으면 프로젝트 내의 모든 파일에 대한 정보가

출력된다.

 

 

4. commit

 

commit 명령어는 클라이언트에서 수정한 정보를 서버에 등록시키는 것이다.

클라이어트에서 project_name/index.jsp 파일을 수정했을 경우,

 

$ cvs commit project_name/index.jsp


이렇게 실행시키면 된다. 위의 명령어들과 마찬가지로 뒤에 파일 이름이나 디렉토리 경로를

쓰지 않으면 프로젝트 내의 모든 파일의 수정된 정보가 업로드된다.

 

 

 

이상으로 가장 많이 쓰이는 명령어들을 살펴 보았다.

사용해보니 역시 쉘보다는 이클립스가 편한 것 같다.

대부분의 개발자들이 그렇게 생각하겠지만 ^^;

 

 

 

참고1 : CVS User Guide

참고2 : cvs 설정 및 사용법

농협 무료 악성코드 치료

악성코드로 골치를 앓던 차에 농협 인터넷뱅킹 사이트에서 무료로 악성코드를

 

제거해 주는 프로그램을 설치할 수 있다는 정보를 얻게 되었다.

 

농협 인터넷뱅킹 사이트에 접속해서 좌측 하단의 '무료악성코드치료'라는 아이콘을 클릭한다.

 

그러면 악성코드 프로그램을 설치할 수 있고, 설치 후 악성코드 검사가 가능하다.

 

따로 다른 프로그램을 구매하거나 다운받아서 설치하는 것보다는 훨씬 믿음이 가고 편리한

 

방법인 것 같다.

 

 

 

 

 

참고 : 무료 악성코드 치료?!

부팅 시 빠른 실행이 사라지는 오류

이전에 컴퓨터가 이상하게 계속 느려지는 것을 경험하고는

 

V3, 네이버 피씨그린, 농협 무료 악성코드 치료 프로그램 등을 이용하여 피씨에 있는 온갖

 

바이러스와 악성코드를 잡아냈다.

 

하지만 이게 왠걸, 속도 향상은 전혀 되지 않았고 그 때문에 구글링으로 얻은 정보를 이용해

 

레지스트리까지 건드리는 상황이 왔다.

 

그 결과, 기대했던 속도 향상은 있었지만 나에게 항상 클릭을 유도하던 빠른 실행 도구모음이

 

부팅 시 마다 사라지는 것이었다!

 

다시 구글링을 시작했다.

 

나와 같은 고민을 하는 사람이 많진 않았지만 몇 분 계셨고 다행히 해결을 할 수 있었다.

 

정리해보자

 

 

부팅 시 빠른 실행이 사라지는 오류

 

1. Userinit.exe 오류

 

Userinit.exe가 다른 악성 코드 프로그램으로 교체된 경우 이와 같은 현상이 발생할 수 있다. 따라서 Userinit.exe가 정상적으로 설정되어 있는지 확인한다.

 

1. 시작->실행->regedit 실행 ( 레지스트리 편집기 )
2. 다음 레지스트리 경로로 이동한다.
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
3. 우측 패널에서 REG_SZ 형의 Userinit 값을 더블 클릭하고 값 데이터가 다음처럼 설정되어
   있는지 확인한다.
    C:\WINDOWS\system32\userinit.exe,
   쉼표(,)까지 입력해야 하며, OS를 다른 드라이브나 다른 폴더에 설치한 경우 C:\Windows는
   설치된 시스템에 따라 변경해야 한다.

 


2. 종료 시 설정이 저장되지 않는 경우

 

일반적으로 XP는 종료 시 현재의 설정을 저장한다. 그러나 그룹 정책 편집기를 잘못 사용하거나 레지스트리를 잘못 사용함으로서 종료 시 설정이 저장되지 않도록 설정되었을 수 있다. 이 경우 다음 절차에 따라 이 문제를 해결할 수 있다.

 

1. 시작->실행->regedit 실행 ( 레지스트리 편집기 )
2. 다음 레지스트리 경로로 이동한다.
  HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
3. 우측 패널에서 REG_DWORD 형의 NoSaveSettings 값을 더블 클릭하고 값 데이터를 0으로
   설정한다.

 

 

 

 

난 2번 방법으로 해결했다.

 

실제로 저 레지스트리 경로로 가 보니 NoSaveSettings 값이 아예 없어져 있었다.

 

그래서 새로 생성 후 0으로 설정하고 재부팅했더니 기다렸던 빠른 실행 도구모음을 볼 수 있었다.

 

 

 

참고 : 컴퓨터를 다시 시작하면 빠른 실행이 사라지는 경우

2009년 8월 20일 목요일

[Linux-CVS-2] CVS 프로젝트 등록 및 시작

난생 처음으로 CVS 세팅은 맞아 무수한 삽질과 성공을 거듭하고 있다.

 

끝나게 되면 정말 뿌듯하겠지?

 

막상 하고 나면 정말 별거 아닌 작업들이다.

 

 

CVS 프로젝트 초기화

 

프로젝트를 초기화하는 import 명령어를 실행하기 위해서는 반드시 환경 변수 CVSROOT가

설정되어 있어야 한다.

CVSROOT 설정 방법은 로컬 디스크에 있을 때와 리모트에 있을 때에 따라서 방법이 나뉜다.

 

먼저 로컬 디스크에 있는 경우,

 

$ export CVSROOT="/home/cvs"

 

다음은 리모트에 있을 경우,

 

$ export CVSROOT=":pserver:user_id@host_name:/home/cvs"


이렇게 하면 CVSROOT가 설정된다.

이제 프로젝트를 초기화할 수 있다.

새 프로젝트를 초기화시키기 위해서는 뭔가 선행되어 있는 작업이 있어야 한다.

만약, 완전히 새롭게 시작하는 프로젝트 일 경우, 빈 디렉토리를 하나 생성한 후,

import 명령어를 실행시키면 될 것이고, 이미 작업되어 있는 프로젝트를 수정하거나

프레임워크가 구성된 프로젝트를 시작할 경우는 해당 디렉토리 내에서 import 명령어를

실행시키면 된다.

 

가령, 생성된 빈 디렉토리거나 구축된 프로젝트가 있는 디렉토리가 /home/my/myproj 라고 하자.

그러면 해당 디렉토리로 옮겨간 후 명령어를 실행한다.

 

$ cd /home/my/myproj
$ cvs import -m "설명" project_name my_name release_0


두 번째 줄을 차례대로 설명해보면,

1. cvs import : 프로젝트 추가 명령어

2. -m : import 시 기록할 수 있도록 문자를 넣을 수 있는 옵션

3. "설명" : 프로젝트에 관련된 간단한 설명글

4. project_name : 프로젝트 이름, 이 이름으로 프로젝트 디렉토리가 생성된다.

5. my_name : vendor_tag라고 하며, 프로젝트는 만드는 사람 이름이나 팀 이름을 적을 수 있다.

6. release_0 : release_tag라고 한다.

 

5, 6번인 vendor_tag와 release_tag는 크게 중요하지 않다고 한다.

 

명령어를 실행시키고 나면 /home/cvs 아래에 4번 project_name으로 설정했던 이름으로

생성된 디렉토리를 볼 수 있을 것이다.

 

$ ls /home/cvs
CVSROOT project_name


자, 이제 프로젝트 추가가 완료되었다. 이젠 공동으로 사용가능한 모든 작업이 완료되었으며

각 팀원들이 클라이언트 환경에서 세팅해 줄 일만 남았다.

 

참고 : CVS User Guide

선물, 2009

 

 

우연히 김지운 감독에 대한 정보를 뒤적거리다가 김지운 감독이 2009년에 영화를 만들었다는 사실에 놀라면서 이 영화를 알게 되었다. 이 영화는 CGV와 W 잡지의 크로스오버 마케팅 프로젝트(Cross-over Marketing Project)로 만들어졌는데, 그 말은 곧, 영화에서 잡지의 물건들을 홍보하겠다는 뜻이다. 즉, PPL이 영화 중간중간에 많이 보일 거라는 의미로 알아들으면 될 것 같은데, 보지 않을까 하다가 짧기도 하고 김지운 감독의 영화이니 보기 시작했다.

 

영화의 내용은 간단하다. 같은 조직 내에 있는 두 사람 민우(정우성), 나연(김아중)은 연인 관계이다. 나연은 조직에서 뭔가 비리가 있다는 것을 알게 되고 비리에 연루된 조직원들을 제거한다. 민우는 조직원들이 제거되는 것에 대해 조사를 하게 되는데, 그 과정에서 조직원들을 제거한 범인이 나연이라는 것을 알게 된다. 민우는 나연을 추궁하고, 민우를 믿는 나연은 민우에게 조직 내의 비리가 있다는 것에 대해서 솔직하게 이야기 한다. 하지만 민우는 자신도 비리에 연루된 사람 중 하나이기 때문에 나연을 경계하다 나연이 가방에서 뭔가 꺼내려고 할 때 그것이 총이라고 생각하고 나연을 제거한다. 하지만 그 가방 속의 물건은 민우에게 줄 선물이었고, 그 선물을 통해 나연은 끝까지 민우를 믿었다는 것을 알 수 있었다.

 

영화 내내 수많은 브랜드를 볼 수 있었다. 홍보용 영화이기 때문에 당연한 것이었지만 역시 약간의 거부감이 드는 것은 어쩔 수 없었다.

 

영화는 짧은 내용이었지만 짧은 영화답게 전개가 빠르고 불필요한 설명을 제거함으로써 박진감이 있고 흥미진진했다. 게다가 톱스타인 정우성과 김아중이 출현함으로 인해 눈이 즐거웠던 부수적인 효과도 영화의 재미에 한 몫을 했다. 하지만 정우성이 너무 웅얼거려서인지 이상하게 정우성의 대사가 잘 들리지 않아서 놓치는 대사가 많았다. 그 때문에 영화를 보는 내내 계속 신경이 쓰였다.

 

마케팅전략연구소의 시너지 플래너 이준호씨는 크로스오버 마케팅 프로젝트의 정의를 '개개의 명확한 정체성의 융합&병행이 새로운 정체성을 만들어 내며, 시너지를 내어 새로운 브랜드로 성장하고, 진화한다고 말한다. 분명 전제 조건은 아이덴티티(identity)가 분명한 것들의 결합이 기본'이라고 한다.

즉, 이 영화를 보자면, CGV(영화 산업)과 W잡지(패션 브랜드 홍보)의 융합&병행으로 영화의 재미를 제공함과 동시에 패션 브랜드 홍보도 하는 시너지 효과를 얻고자 하는 것이 목적인 것이다.

 

어떻게 하면 효과적으로 고객들에게 제품의 이미지를 각인시킬 수 있을까하는 고민이 이런 마케팅 방법을 고안해 낸 것일 것이다. 마케팅 쪽에는 지식이 전무한 나에게도 꽤 효과가 좋은 마케팅 방법인 것 같다는 생각이 든다. 영화 끝난 후, 머리 속에 남아 있는 많은 브랜드들이야 말로 마케팅 효과를 나타내는 단적인 증거가 아닐까?

인사이더 ( The Insider, 1999 )

 

개인적으로 마이클 만 감독의 영화를 참 좋아한다. 히트의 박진감 넘치는 액션 씬들과 빠른 전개, 콜래트럴의 조용하지만 날카로운 분위기.. 최근의 퍼블릭 에너미는 그 전 대작들만큼 만족하지는 못했지만, 어쨌든 마이클 만 감독은 남자들이 좋아할 수 있는 요소를 많이 갖춘 감독이라고 생각이 든다.

 

그런데 이 인사이더 영화는 약간 느낌이 달랐다. 범죄, 스릴러에 초점을 맞춰온 그의 영화가 이번에는 현실성을 부여하고 고립된 개인이 사회와 맞서는 내용을 표현했다. 어쩌면 약간은 지루할 수도 있는 영화, 하지만 알 파치노와 러셀 크로우라는 두 연기파 배우의 힘일까, 정말 재미있게 봤다. 참고로 'Insider'의 의미는 '내부 고발자'이다.

 

제프리(러셀 크로우)는 미국 내에서 손꼽히는 대형 담배 회사의 부사장 지위에 있는 능력 있는 인물이다. 하지만 영화가 시작할 때 맨 처음 볼 수 있는 그의 모습은 해고당한 후 쓸쓸히 회사를 등지고 나오는 모습이다. 일찍 귀가한 남편에게 해고 소식을 들은 제프리의 부인은 당장 생활의 힘들어질 것에 대한 걱정으로 어쩔 줄 몰라하고 제프리는 그런 아내의 모습에 더 위축된다.

 

한편, 로웬(알 파치노)는 방송국인 CBS의 민감한 사안을 다루는 '60분'이라는 프로그램의 PD이다. 테러 용의자를 인터뷰할 정도로 열정이 넘치고 자신의 일에 소신을 가지고 있는 그는 우연히 담배 회사의 기밀이 담긴 문건을 발견하게 되고 제프리에게 자문을 구한다. 제프리는 처음 제의를 받았을 때는 받아들이지 않으려고 하지만 자신을 해고한 담배 회사가 기밀 유지에 대해서 협박하고 가족을 위협하자 오히려 생각을 바꾸고 로웬과 함께 진실을 밝히기로 결심한다.

 

제프리가 법정에서 담배 회사의 비리를 폭로하는 증언을 하고 로웬의 인터뷰에 응하게 되면서 둘은 점점 고립되어 간다. 제프리는 끊임없이 담배 회사로부터 협박당하며, 도움을 요청한 FBI조차도 오히려 그를 의심하는 등 도움이 되지 않는다. 엎친 데 덮친 격으로 아내와는 이혼을 하게 되면서 그의 인생은 파멸될 지경에 이른다. 로웬은 열정적으로 일을 추진하지만 CBS에는 이미 외압으로 인해서 방송금지 처분이 내려지고 그의 동료들조차도 외압과 자신들의 안위를 위해 방송을 반대한다. 진실을 밝혀야하는 자신의 소신과 인생을 걸고 자신을 믿고 있는 제프리를 위해 로웬은 CBS가 외압에 의해 방송금지 처분을 내렸다는 사실을 외부 언론에 폭로한다.

 

결국 진실을 밝혀지게 되고 미국의 대형 담배 회사들은 법적 공방에 휘말리게 되면서 천문학적 액수의 손해배상금을 물게 된다. 정보만 주면 반드시 보호하겠다는 제프리와의 약속을 지키지 못하고, 동료들에게 상처를 입은 로웬은 결국 CBS를 떠나게 된다.

 

영화를 보면서 느낀 점은 개인이 하나의 조직, 사회에 대항하기 위해서는 이길 가능성도 희박하지만 너무 많은 희생을 해야한다는 것이다. 하지만 이 세상은 그런 개인 한 명 한 명들 덕분에 사람이 살 만한 세상이 된 것이라고 생각한다. 자신을 희생하면서 진실을 밝히기 위해 노력했던 제프리와 로웬. 하지만 그들이 겪어야 헀던 좌절감과 무력감은 우리가 상상할 수 있는 정도의 크기가 아닐 것이다.

 

비록 기대했던 마이클 만 감독의 생생한 액션이나 박진감 넘치는 전개를 보진 못했지만 다른 의미에서 가슴을 울리는 뭔가가 느껴졌던 영화였다.  

2009년 8월 19일 수요일

[Linux-CVS-1] CVS 서버 설정

개발 프로젝트 진행 시, 웬만한 프로젝트는 대부분 팀을 이뤄서 하게 된다.

 

그럴 때, 버전 관리가 필수적인데, 필요한 프로그램이 CVS이다.

 

 

CVS의 정의

 

CVS(Current Versions System, 동시 버전 시스템)은 소프트웨어 프로젝트를 진행할 때, 파일로 이뤄진 모든 작업과 변화를 추적해서 여러 개발자가 협력적이고 효율적으로 작업을 할 수 있게 한다. CVS는 GPL(GNU General Public License, GNU 일반 공중 허가서) 하에서 배포되는 오픈 소스 프로그램이다.

 

 

CVS 설치

 

1. CVS 설치 여부 확인

 

$ cvs -v
$ cvs -version

 

위 방법으로 확인이 가능하다. CVS가 설치되어 있다면 버전 정보가 보일 것이다.

설치되어 있지 않다면 CVS를 먼저 설치해야한다.

 

2. CVS 설치

 

CVS는 http://ftp.gnu.org/non-gnu/cvs/binary/stable/x86-linux/RPMS/i386/에서 패키지를 다운받을 수 있다.

 

 

 

CVS 리눅스 계정 추가

 

CVS를 관리할 계정을 생성해야 한다. 계정을 따로 생성하지 않고 관리해도 되지만 따로 계정을 두고 관리하는 것이 관리 차원에서 효율적이다.

 

추가되는 사용자 계정의 홈 디렉토리가 CVS의 저장소가 될 것이다.

 

$ groupadd cvs              - cvs 그룹 추가
$ useradd -g cvs cvs
    - cvs 그룹에 계정 추가
$ passwd cvs                 - cvs 계정 패스워드 설정

 

 

 

CVS 저장소(repository) 설정

 

여러 명이 동시에 작업해야 하므로 공통으로 저장할 장소가 필요하다. 그 장소를 저장소(repository)라고 부르며 CVS의 전반적인 설정 파일, 버전 관리에 관련된 정보, 파일 별 작업 기록 등이 저장된다. 설정 파일 및 작업 기록은 CVS 프로그램이 자동으로 관리하므로 사용자가 건드릴 필요는 전혀 없다.

 

$ cvs -d /home/cvs init


/home/cvs 디렉토리를 CVS 저장소로 초기화한다. -d 옵션은 저장소가 될 디렉토리 경로를 지정하기 위한 옵션이고, 'init'은 저장소를 초기화하기 위한 cvs 명령어이다.

 

명령어 실행 후 /home/cvs 디렉토리를 확인해 보면 'CVSROOT'라는 이름의 디렉토리가 생성되어 있으며 각종 설정 파일이 그 디렉토리 내에 들어있다는 것을 알 수 있다.

 

 

 

CVS 디렉토리 사용 권한 설정

 

설정했던 디렉토리를 cvs 계정이 사용 가능하도록 지정해 준다.

 

$ chown -R cvs:cvs /home/cvs
$ chmod 770 /home/cvs /home/cvs/CVSROOT


 

 

CVS 서비스 설정

 

1. 2041 포트 확인

 

CVS 전용 계정으로 관리하는 경우 클라이언트는 CVS 서버에 pserver 프로토콜을 사용해 접근한다. 이 프로토콜을 사용하려면 몇 가지 준비 사항이 필요하다.

 

우선 pserver 프로토콜이 사용하는 포트가 사용 가능하게 설정되어 있는지 확인한다.

 

$ cat /etc/services | grep 2401


이 명령어의 결과가 출력이 된다면 pserver 프로토콜을 사용할 준비가 되어 있는 것이다.

 

 

2. pserver 환경 파일 작성

 

pserver 프로토콜을 사용하기 위해서는 환경 파일을 작성해야 한다. 슈퍼 데몬인 xinetd를 사용하는 경우 우선 /etc/xinetd.d 디렉토리에 cvspserver 파일이 있는지 확인하고 없으면 파일을 만든다.

 

$ vi /etc/xinetd.d/cvspserver


새 파일로 vi 에디터가 뜨면 다음 내용을 입력한다.

 

service cvspserver
{
     disable = no
     flag = REUSE
     socket_type = stream
     wait = no
     user = root
     server = /usr/bin/cvs
     server_args = -f --allow-root=/home/cvs pserver
     log_on_failure += USERID
}


--allow-root는 cvs 저장소가 /home/cvs 임을 명시하기 위해서 사용된다.

만약에 새로운 프로젝트 project1을 생성하였을 경우, 이 프로젝트는 /home/cvs/project1 디렉토리에 저장된다.

 

cvspserver 파일 편집을 완료했으면 저장 후 xinetd 서비스를 재시작한다.

 

$ service xinetd restart


 

 

CVS 전용 사용자 계정 추가

 

CVS 사용자 계정은 실제로 프로젝트를 진행하는 팀원 개개인의 계정이다. 팀원들은 이 계정을 통해 프로젝트 파일에 접근해서 작업을 수행할 것이다.

 

CVS 계정을 더 쉽게 추가하기 위해 /usr/local/bin 디렉토리에 cvspasswdgen 파일을 생성하고 다음의 내용을 스크립트를 기록한다.

 

$ vi /usr/local/bin/cvspasswdgen

 

#!/usr/bin/perl

 

($u, $p)=@ARGV;

@d=(A..Z,a..z);

$s=$d[rand(52)].$d[rand(52)];

print $u.":".crypt($p, $s).":cvs\n"


이어서 cvspasswdgen 파일에 대해 다음과 같이 실행 권한을 부여한다.

 

$ chmod 755 /usr/local/bin/cvspasswdgen

 

이제 다음과 같은 명령어로 CVS 전용 사용자 계정을 추가할 수 있다. cvspasswdgen 명령어의 첫 번째 파라미터는 사용자 계정 이름이고, 두 번째 파라미터는 해당 계정의 패스워드이다.

 

$ cd /home/cvs/CVSROOT
$ cvspasswdgen cvsuser1 cvsuser1_passwd >> passwd


위 명령어를 입력하면 passwd 파일에 계정 정보가 입력될 것이다. 이제 이클립스와 같은 IDE에서 CVS 전용 계정을 통해 접속하면 된다.

 

다음 번에는 프로젝트 초기화에 대해서 정리해 봐야지.

 

참고 : [강좌] Linux 에서 CVS 서버 세팅하기.

2009년 8월 17일 월요일

워낭소리 ( Old Partner, 2008, 이충렬 )

 

 

처음에 워낭소리라는 영화를 알게되었을 때는 이미 개봉한 후였다. 뭔가 소와 할아버지가 나오는 영화라는 정도? 하지만 별로 신경 안 쓰고 있었던 나의 예상 외로 워낭소리는 꽤 많은 관객을 모았고 해외에서도 호평을 받았다. 다큐멘터리 영화이면서 소재가 그다지 관심을 끌 것처럼 보이지 않는 영화가 어떻게 그런 반응을 이끌어내는지 궁금해서 영화를 보게 되었다.

 

영화의 전체적인 내용은 할아버지와 소의 우정에 대한 이야기였다. 보통 15년밖에 살지 못한다는 소가 40년을 살아왔고, 할아버지는 그 긴 세월동안 그 소로 농사를 지어서 자식들을 키웠다. 할아버지는 소의 수명이 1년밖에 남지 않았다는 말을 듣지만 끝내 소를 팔지 않고 묵묵히 최선을 다해 소를 아끼고 소의 여생을 함께 한다.

 

개인적으로 이 영화를 보면서 다른 사람들이 말하는 것처럼 향수나, 삶의 존재를 알리는 숭고함과 같은 것을 느끼진 못했고 그렇게 마음에 와 닿지도 않았다. 하지만 할아버지와 소의 관계에서 비록 동물과 사람의 관계이지만 서로를 아끼고 워낭소리 하나만으로도 마음이 전해지는 그런 모습을 보니 마음이 뭉클했다.

 

현대의 바쁘고 빠르게 흘러가는 사회에 적응하며 살아가다 스토리가 잔잔하게 진행되고 은은한 감동이 느껴지는 워낭소리를 보니 마치 녹림이 울창한 숲에 다녀온 것 같은 느낌이 들었다. 바쁜 생활 속에서 주말에 편한 마음으로 즐거운 휴식을 취하고 싶다면 워낭소리를 추천한다.

2009년 8월 13일 목요일

UL 태크 삽입 시 상단의 여백 생기는 문제

html 태그 및 css로 UI 작업을 하다보면 도저히 이해할 수 없는

 

버그들이 종종 발생한다.

 

이번의 UL 태그 관련 버그도 그런 부류 중 하나였는데,

 

갖은 삽질 끝에 해결할 수 있었다.

 

상황은 이러하다.

 

큰 div 개체 안에 다른 div 개체를 넣고 그 밑에 ul 개체를 삽입하였을 경우,

 

즉, div A 개체 안에 div B 개체와 ul 개체가 삽입되어 있는 상황인 것이다.

 

그때 예기치 않게 div B 개체와 ul 개체 사이에 공백이 생겨버렸다.

 

비슷한 경우로, li 개체 안에 ul 개체를 삽입하였을 경우도 이런 문제가 발생하였다.

 

의외로 이 문제는 간단하게 해결되었는데,

 

ul 개체의 css에 float: left 속성만 추가시켜주니 해결이 되었다.

 

내 생각에는 ul 개체는 원래 어떤 개체(이하 A개체) 밑에 속할 때

 

자동으로 여백이 생성이 되는데 float: left 속성을 줌으로써 A개체 좌측에

 

강제로 배치되게 되고, width가 지정되어 있으면서 A개체 좌측에 공간이 없는

 

경우에는 A개체 아래로 흐르게 되는 것이다.

( float 속성 사용 시 흐른다는 말이 어울리는 듯해서 사용해봅니다 ^^)

 

그러나 이건 어디까지나 내 생각일 뿐, 근거는 없다.

 

역시 개발은 삽질을 동반할 수 밖에 없는 것인가.. ㅠ_ㅠ

2009년 7월 31일 금요일

mysql rownum 구현하기

mysql을 쓰다보면 oracle 처럼 rownum을 써야하는 경우가 생긴다.

 

혹은, 자동으로 1씩 증가하는 for 문의 변수(주로 integer i)와 같은 형태의

 

컬럼의 쿼리에서 구현하는 것이 편할 때가 있다.

 

주로 ordering이나 grouping 후 순위를 매길 때가 그런 경우인데,

 

그럴 때 쓸 수 있는 rownum이 mysql에도 있다.

 

ex 1 )

SELECT @RNUM := @RNUM + 1 AS ROWNUM

FROM ( SELECT @RNUM := 0 ) R


 

ex 2 )

SELECT @RNUM := @RNUM + 1 AS ROWNUM, t.*

FROM

  (

    SELECT *

    FROM table

    ORDER BY column1

  ) t,

  ( SELECT @RNUM := 0 ) R


ex 2 처럼 구현하게 되면 ordering 된 상태에서 rownum이

 

0부터 순서대로 부여된다.

 

은근히 자주 쓰이는 편리한 방법이다. ^^

2009년 7월 3일 금요일

[자바스크립트] 현재 스크롤 위치 알아내기

var getNowScroll = function(){
var de = document.documentElement;
var b = document.body;
var now = {};

now.X = document.all ? (!de.scrollLeft ? b.scrollLeft : de.scrollLeft) : (window.pageXOffset ? window.pageXOffset : window.scrollX);
now.Y = document.all ? (!de.scrollTop ? b.scrollTop : de.scrollTop) : (window.pageYOffset ? window.pageYOffset : window.scrollY);

return now;

}

소스는 어렵지 않아서 별다른 설명이 필요 없을 것 같네요.
IE7, FF2 에서 테스트 해보았으며,
사용법은 간단합니다

<input type="button" onclick="CurrentScroll()" value="지금 스크롤 위치를 알려줘">

<script type="text/javascript">
var CurrentScroll = function(){
nowScroll = getNowScroll();
alert(nowScroll.X + "," + nowScroll.Y);
}
</script>



http://jdsharp.us/ 에 스크롤 위치구하는 코드가 잘 짜여져 있어, 이 코드를 사용하였습니다.

 

출처 : [js] 현재 스크롤 알아내기

2009년 6월 22일 월요일

유용한 자바스크립트 정리

가끔 웹에서 자바스크립트 오픈 소스를 찾다 보면

 

한 줄로 쭉 이어진 매너 없는 소스가 있다..

 

그런 소스를 한 번에 정리해 주는 페이지를 구글링으로 찾을 수 있었다.

 

나와 같은 불편을 겪는 분들은, 편히 이용하시길..

 

Online javascript beautifier

2009년 6월 16일 화요일

[jQuery] each 메소드 사용시 break, continue 사용

jQuery.each ( callback )

 

jQuery에서 for, while 문과 비슷한 역할을 하는 each 메소드 사용 시

break, continue와 같은 프로세스를 수행해야 할 때가 있다.

 

그럴 때 return true;continue와 같은 역할을, return false; break와 같은

역할을 수행한다.

 

예제 >>

 

$('#loop').each ( function() {

  if ( i==0 ) return true; // continue;

  else return false; // break;

} );

 

출처 : 짱프로그래머 카페

2009년 6월 10일 수요일

DIV 객체에서 valign='middle' 구현하기

Ajax 프로그래밍을 하다보면 DIV를 수시로 사용해야 하는데 DIV는 테이블과 다르게 valign="middle" 속성이 존재하지 않는다. 여러가지 방법을 고려하던 중 몇몇사이트에서 힌트가 될만한 내용을 얻게 되었다.

첫번째 방식의 경우

첫번째 방식은 다음과 같은 소스로 구성되어 있다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<title>Universal vertical center solution</title>
<style>
.greenBorder {border: 1px solid green;}
</style>
</head>

<body>

<h1>Vertical Centering in CSS - Example</h1>

<div class="greenBorder" style="display: table; height: 400px; #position: relative; overflow: hidden;">
    <div style=" #position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
        <div class="greenBorder" style="#position: relative; #top: -50%; ">
            any text<br>
            any height<br>
            any content, for example generated from DB<br>
            everything is vertically centered
        </div>
    </div>
</div>

<p>Please view source for details or read the
<a href="../css-vertical-center-solution.html">CSS
vertical centering article</a>.
<p>See also the <a href="vertical-align-valid-solution-en.html">structural and
valid example</a>.
</body>
</html>

IE의 경우 Layer를 3중으로 감싸서 첫번째 Layer에서 전체적인 위치를 잡고 두번째 Layer에서는 첫번째 Layer기준으로 가운데(상대 좌표 기준 50%로 top 설정)하고 세번째 Layer에서 두번째 Layer기준으로 -50%로 top을 설정하는 방식이다. 이 방식의 경우 IE의 거의 모든 버전에서 동작하는 장점이 있지만 데이터가 많아지는 경우 스크롤바가 생기도록 할 수 없다.

  • 데이터가 많지 않은 경우
     
  • 데이터가 많은 경우

Firefox와 Opera의 경우 IE에서 사용하는 방식을 이용하는 것이 아니라 display 라는 CSS 속성을 table로 설정하는 방식으로 처리가 가능하다. 이 방식의 경우 가장 밖에 있는 Layer에 display: table를 설정하고 두번째 Layer에는 display: table-cell; vertical-align: middle;를 설정하면 되는데 데이터가 많은 경우 Layer이 커져서 Layout이 변경되는 문제가 있다.

  • 데이터가 많지 않은 경우

  • 데이터가 많은 경우

두번째 방식의 경우

두번째 방식은 좀더 복잡한데, 분리된 CSS와 JavaScript파일을 통합하면 다음과 같은 소스로 구성되어 있다.

<!-- Centered Layout Code by Christian Fecteau www.metaw3.ca 29/09/05 Do not remove this comment -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Centered Layout</title>

<!-- Centered Layout Code Start -->
<style type="text/css" id="layout">
#outer { width: 50%; } /* customize width of the page: 700px, 90% etc. */
</style>
<script type="text/javascript">

/* Coded by Christian Fecteau 26/09/05 www.metaw3.ca */

var layout_ie5 = (window.ActiveXObject && document.getElementById);
var layout_ie5Mac = (!window.showModelessDialog && window.ActiveXObject && document.getElementById);

if (layout_ie5)
{
    var layout_old_onload = null;
    if (typeof window.onload == "function")
    {
        layout_old_onload = window.onload;
    }
    window.onload = layout_fix;

    var layout_old_onresize = null;
    if (typeof window.onresize == "function")
    {
        layout_old_onresize = window.onresize;
    }
    window.onresize = layout_fix;

    if (!layout_ie5Mac)
    {
        var layout_ow = null;
        var layout_ss = document.styleSheets('layout').rules;
        for (var i = 0; i < layout_ss.length; i++)
        {
            if (layout_ss[i].selectorText == '#outer')
            {
                layout_ow = layout_ss[i].style.width;
            }
        }
    }
}

function layout_fix()
{
    if (layout_old_onload)
    {
        layout_old_onload();
        layout_old_onload = null;
    }

    if (layout_old_onresize)
    {
        layout_old_onresize();
    }

    if (layout_ie5Mac)
    {
        document.body.style.height = '0px';
        document.body.style.width = '0px';
    }
    else
    {
        if (layout_ow) middle.style.width = layout_ow;
        outer.style.width = '100%';
    }

    outer.style.height = 'auto';
    outer.align = 'center';
    middle.align = 'left';
    inner.style.styleFloat = 'left';

    var layout_b = Number(document.body.clientHeight);
    var layout_c = Number(inner.offsetHeight);

    if (layout_b > layout_c)
    {
        outer.style.marginTop = (layout_b-layout_c)/2 + 'px';
    }
    else
    {
        outer.style.marginTop = '0px';
    }
}

</script>
<!-- Centered Layout Code End -->

<style type="text/css">

#container {
    color: black;
    background-color: silver;
}

p {
    font: 0.7em verdana, serif;
    text-align: justify;
    margin: 0;
}

body, html {
    height: 100%;
    margin: 0;
    padding: 0;
    border: 0;
}

#outer {
    display: table;
    height: 100%;
    margin: 0 auto;
}

#middle {
    display: table-row;
}

#inner {
    display: table-cell;
    vertical-align: middle;
}
</style>
</head>
<body>

<!-- Centered Layout Code Start -->
<div id="outer"><div id="middle"><div id="inner">
<!-- Centered Layout Code End -->

<!-- your page starts here -->
<div id="container">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</div>
<!-- your page ends here -->

<!-- Centered Layout Code Start -->
</div></div></div>
<!-- Centered Layout Code End -->

</body>
</html>

IE의 경우 windows의 onresize 이벤트를 받아서 위치를 계산해 준다.

  • 데이터가 많지 않은 경우
  • 데이터가 많은 경우

Firefox와 Opera의 경우 처음 방법과 비슷하게 display: table를 사용하는데 두번째 Layer에 display:table-row라는 속성을 지정한 부분만 차이가 있다.

  • 데이터가 많지 않은 경우

  • 데이터가 많은 경우

이 방식의 문제점은 IE의 경우 onresize라는 event를 이용하는데 이 event가 DIV객체에서는 발생하지 않는다는 점이다.

웹스퀘어를 위한 개선책

이 두가지 방식 모두 2% 부족하므로 웹스퀘어를 위한 새로운 해결 방법을 고민하게 되었다. 먼저 웹스퀘어의 경우 별도의 Layout엔진을 사용하므로 하나의 HTML소스에서 여러 브라우저를 모두 지원하지 않아도 된다. 그래서 IE를 지원하기 위한 소스와 Firefox, Opera를 지원하기 위한 소스로 분리하였다.

IE의 경우

IE의 경우 첫번째 방식이 좋은 해결책이지만 데이터의 양이 많아지게 되면 스크롤바를 이용해서 데이터를 처리할 수 없다. 만일 첫번째 Layer의 overflow를 auto로 하게 되면 다음과 같은 일이 발생한다.

데이터가 많지 않은 경우 정상적으로 동작한다.

데이터의 양이 많아 져서 세번째 Layer의 높이가 첫번째 Layer의 50% 이상인 경우 스크롤바가 생기게 된다!!!

그래서 두번째 Layer의 margin-top을 첫번째 Layer와 두번째 Layer의 높이의 절반으로 설정하는 두번째 방식과 expression이라는 IE전용 CSS함수를 이용해서 다음과 같이 수정하였다.

<div id="layer1" style="background-color:#9999FF;">
    <div id="layer2" style="background-color:#99FF99; margin-top:expression( ( eval(this.offsetParent.offsetHeight) -  eval(this.offsetHeight) )/2 );">
        ajax 테스트<br>
        valign=middle<br>
        데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>
    </div>
</div>

expression은 계산 결과를 CSS에 적용할 수 있도록 지원하는 함수이다. 화면은 아래 처럼 나타나는데 데이터 양에 상관없이 정상적으로 동작하는 것을 확인할 수 있다.



전체 소스는 다음과 같다.

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-KR">
<title>DIV valign=middle</title>
<style>
#layer1 {position: absolute; top:100px; left:100px; height: 400px; width:700px; overflow: auto;}
</style>
<script>
function short() {
    layer2.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플";
}

function middle() {
    layer2.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>";
}

function long() {
    layer2.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>";
}

</script>

</head>

<body>
모든 경우 정상적으로 동작하지만 expression의 overhead가 얼마나 될지 모른다.<br>

<a href="javascript:short()">짧은글</a>&nbsp;&nbsp;&nbsp;
<a href="javascript:middle()">중간글</a>&nbsp;&nbsp;&nbsp;
<a href="javascript:long()">긴글</a>&nbsp;&nbsp;&nbsp;

<div id="layer1" style="background-color:#9999FF;">
    <div id="layer2" style="background-color:#99FF99; margin-top:expression( ( eval(this.offsetParent.offsetHeight) -  eval(this.offsetHeight) )/2 );">
        ajax 테스트<br>
        valign=middle<br>
        데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>
    </div>
</div>
</html>

Firefox와 Opera의 경우

Firefox와 Opera의 경우에는 display:table 속성이 있는 Layer를 다시 display 속성이 없는 Layer로 감싸는 방식으로 해결할 수있다.



 



 

전체 소스는 다음과 같다.

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-KR">
<title>DIV valign=middle</title>
<style>
#layer1 {position: absolute; top:100px; left:100px; height: 400px; width:700px; overflow: auto;}
#layer2 {display: table; width:100%; height:100% }
#layer3 {display: table-cell; vertical-align: middle;}

</style>
<script>
function short() {
    layer3.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플";
}

function middle() {
    layer3.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>";
}

function long() {
    layer3.innerHTML = "ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>ajax 테스트<br>valign=middle<br>데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>";
}

</script>

</head>

<body>
ff.html의 문제를 해결하기 위해서 display 속성을 별도로 지정하지 안은 layer로 한번 더 감싸는 형태로 구성되어있다.<br>
<a href="javascript:short()">짧은글</a>&nbsp;&nbsp;&nbsp;
<a href="javascript:middle()">중간글</a>&nbsp;&nbsp;&nbsp;
<a href="javascript:long()">긴글</a>&nbsp;&nbsp;&nbsp;

<div id="layer1" style="background-color:#9999FF;">
    <div id="layer2" style="background-color:#FF9999;">
        <div id="layer3" style="background-color:#99FF99;">
            ajax 테스트<br>
            valign=middle<br>
            데이터의 길이에 상관 없이 가운데 정렬하기 위한 샘플<br>
        </div>
    </div>
</div>
</html>

출처 : 생각노트