시나리오와 소설은 어떻게 쓰는가?

시나리오

사건을 먼저 잡는다.
그리고 주인공의 행동이 사건에 따라 일어난다.
요즘엔 복합물이 많지만, 원형을 먼저 파야 한다.
산만하지 않게 주제에 집중한다.

캐릭터를 살리는 방법

  • 사건이 생겼을때 그 사건에 대응하는 모습
  • 대사 (쓰는데 시간을 많이 잡아먹는다.)

스릴러

긴장감, 관객과의 머리싸움(속임수)
참고할만한 작품 : ⌜히치콕⌟

멜로‧로멘스

원형을 파되, 최근의 추세 트렌드하고 결합한다.
드라마를 보는 것이 도움이 된다.
참고할만한 작품 : ⌜귀여운 여인⌟ ⌜러브어페어⌟

코미디

미국식 코미디는 우리나라 정서에 맞지 않으니 조심해야 한다.
참고할만한 작품 : 채플린의 작품

시나리오 공부에 좋은 영국 드라마

  • 셜록
  • 루터
  • 삼총사
  • 화이트 채플
  • 브로드 첮치
  • 마이 매드팻 다이어리


소설

나의 또다른 자아를 만들어 내는 것이다.
내가 하고 싶지만 못하는 행동을 주인공이 해낸다.
과정 중에 어려움을 겪으며 해결하는 카타르시스를 그려낸다.
나와 또 다른 자아 사이에는 판타지가 있어야 한다.
직업이 다르거나 처한 상황이 다르거나 나와 다른 요소를 가미한다.
자기를 투영하는 등장인물이라고 해도 자기연민은 버려야 하고,
나의 어려움이 아닌 다른 사람의 어려움이 무엇인지 공감하는 것이 중요하다.
자기 연민을 걷어내라!
어떤 소재만으로는 소설이 되지 못하므로,
그 소재에서 반짝이는 순간을 포착하여 소설로 쓴다.
독자가 소설을 읽는 이유는 ‘무엇을’ ‘왜’에 대한 해답을 찾기 위해서니,
그 답을 먼저 주고 그 다음에 ‘어떻게’에 대한 해답을 주는 것도 괜찮다.
유럽에서는 기본적으로 철학 교육이 되어있기 때문에
‘무엇을’과 ‘왜’를 생략하고 ‘어떻게’로 바로 들어가는 소설도 많다.
묘사를 너무 살리기 보다는 중요한 정보를 알려주는 것이 좋다.
글로 일일히 장황하게 설명하기 보다는 영향력 있는 상황으로 보여준다.
장면의 전환에는 새로운 소재를 가미하면 신선하다.
등장인물이 일상에서 벗어난 모습을 보여준다.
아무런 계기가 없는 갑작스러운 결말은 혼란스러우니 조심한다.



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

류시화 시인이 엮은 시 모음집. 사랑하라 한번도 상처받지 않은 것처럼.

시.
어릴 적 내겐 너무도 먼 존재였다.
컴퓨터 자판을 익히기 위한 한메 타자 교실에서 아무런 감정도 운율도 없이 투다닥 투다닥 쳐나가던 글씨였을 뿐.
프랑시스 잠, 라이너 마리아 릴케 이런 시인의 이름은 생소하기만 했고,
이를 언급한 별 헤는 밤의 윤동주 시인 역시 너무나 멀리 있었다.

그러다가 문득 이런 생각이 들었다.
‘시를 하나쯤 외운다는 건 멋진 일일 거 같아.’
뜬금없이 이런 생각이 왜 들었는지는 모르겠다.
그때 외우기 쉬워 보이는 시는 구르몽의 낙엽이었는데,

시몬, 나무 잎새 져버린 숲으로 가자.
낙엽은 이끼와 돌과 오솔길을 덮고 있다.

시몬, 너는 좋으냐? 낙엽 밟는 소리가.

이 이후로는 도통 외워지지가 않았고,
그렇게 시간이 지나니 시몬한테 낙엽이 좋으냐고 물었는지,
혹은 낙엽 밟는 소리를 알았느냐고 물었는지조차 헛갈리게 되었다.
그러던 어느 날 친구가 내게 한편의 시를 소개했는데,
류시화 시인의 ‘새와 나무’라는 시였다.

여기 바람 한 점 없는 산속에 서면
나무들은 움직임 없이 고요한데
어떤 나뭇가지 하나만 흔들린다

그것은 새가
그 위에 날아와 앉았기 때문이다

별일 없이

살아가는 뭇사람들 속에서
오직 나만 홀로 흔들리는 것은
당신이
내 안에 날아와 앉았기 때문이다

새는 그 나뭇가지에 집을 짓고
나무는 더 이상 흔들리지 않지만
나만 홀로 끝없이 흔들리는 것은
당신이 내 안에 집을 짓지 않은 까닭이다

이때 처음으로 시인이란 위대한 존재라고 느꼈다.
그 이후로 류시화 시집을 몇 권 읽었던 것 같긴 한데 오래 된 일이고 기억이 희미하다.

한해 한해 살아가며 의도하든 그렇지 않든 매년 읽게 되는 글자의 양이 어마어마하다.
눈을 피로하게 하고 머리를 아프게 하거나 의미가 없는 글자들. 먹고 살기 위한 문서나,
남들은 어떻게 사나 기웃거리며 읽게 되는 문장들.
그렇게 눈으로 들어오는 수많은 글 중에 과연 머리가 아닌 가슴으로 흘러가는 것이 얼마나 될까?
좋은 시는 몇 자 되지도 않으면서 곧장 심장을 향해 흘러 온다. 아름답다.

글을 잘 쓰는 수필가를 보면 멋있어 보이고,
소설을 잘 쓰는 사람은 존경스러우며,
시인은 위대하다.
그 위대한 시인 중 한 명인 류시화 시인의 가슴으로 흘러들어 간 시 모음집.
사랑하라 한번도 상처받지 않은 것처럼.
심장에 시가 돌지 않아 손발이 저리고 차가운 사람에게 좋은 시집이다.

코타키나발루-'사랑하라 한번도 상처받지 않은 것처럼 Love, like you’ve never been hurt.'

이 시집에서 고른 아홉 편의 시


사랑하라, 한번도 상처받지 않은 것처럼

춤추라, 아무도 바라보고 있지 않은 것처럼.
사랑하라, 한번도 상처받지 않은 것처럼.
노래하라, 아무도 듣고 있지 않은 것처럼.
일하라, 돈이 필요하지 않은 것처럼.
살라, 오늘이 마지막 날인 것처럼.


- 알프레드 디 수자


삶을 위한 지침

다른 사람들이 기대하는 것보다 더 많이, 그리고
진심으로 기뻐하며 주라.
자신이 가장 좋아하는 시를 외우라.
들리는 모든 것을 믿지는 말라.
때로 자신이 갖고 있는 모든 것을 써버려라, 아니면
실컷 잠을 자라.

첫눈에 반하는 사랑을 믿으라.
다른 사람의 꿈을 절대로 비웃지 말라.
꿈이 없는 사람은 가난한 사람이니까.
사랑은 깊고 열정적으로 하라. 상처받을 수도 있지만,
그것만이 완전한 삶을 사는 유일한 길이다.

위대한 사랑과 위대한 성취는
엄청난 위험을 동반한다는 사실을 기억하라.
실패하더라도, 그것을 통해 배움을 얻는 일에까지
실패하지는 말라.

때로는 침묵이 가장 좋은 해답이 될 수 있음을 기억하라.
변화하는 데 인색하지 말라. 그러나
자신의 가치관을 지키라.
무엇보다 바람직하고 존경할 만한 삶을 살라.
늙어서 자신의 생을 돌아볼 때
또다시 그것을 살게 될 테니까.

신을 믿으라, 하지만 차는 잠그고 다니라.
숨은 뜻을 알아차리라.
당신의 지식을 남과 나누라.
그것이 영원한 삶을 얻는 길이므로.
기도하라, 헤아릴 수 없이 많은 힘이 거기에 있다.

자신이 실수한 것을 깨닫는 순간, 즉시 바로잡으라.
즐겁게 대화를 나눌 수 있는 사람과 결혼하라.
늙으면 그것이 아주 중요해질 테니까.
하지만 가끔 혼자 있는 시간을 가지라.

일 년에 한 번은, 전에 전혀 가보지 않았던 곳을 찾아가라.
돈을 많이 벌었다면
살아 있을 때 다른 사람을 돕는 데 쓰라.
그것이 부가 가져다주는 가장 큰 만족이다.

자신이 원하는 걸 얻지 못하는 것이 때로는
큰 행운일 수 있다는 점을 기억하라.

규칙을 배우고 나서, 그중 몇 가지를 위반하라.
무엇을 얻기 위해서 무엇을 포기했는가를
자신의 성공을 평가하는 기준으로 삼으라.
자신의 성격이 곧 자신의 운명임을 기억하라.


- 작자 미상. 처음에는 <행운을 가져다주는 네팔 탄트라 토템> 또는 <달라이 라마의 만트라>라는 제목으로 알려진 시


이것 또한 지나가리라

어느 날 페르시아의 왕이 신하들에게
마음이 슬플 때는 기쁘게
기쁠 때는 슬프게 만드는 물건을 가져올 것을 명령했다.

신하들은 밤새 모여 앉아 토론한 끝에
마침내 반지 하나를 왕에게 바쳤다.
왕은 반지에 적힌 글귀를 읽고는
크게 웃음을 터뜨리며 만족해 했다.
반지에는 이런 글귀가 새겨져 있었다.
‘이것 또한 지나가리라.’

슬픔이 그대의 삶으로 밀려와 마음을 흔들고
소중한 것들을 쓸어가 버릴 때면
그대 가슴에 대고 다만 말하라.
‘이것 또한 지나가리라.’

행운이 그대에게 미소 짓고 기쁨과 환희로 가득할 때
근심 없는 날들이 스쳐갈 때면
세속적인 것들에만 의존하지 않도록
이 진실을 조용히 가슴에 새기라.
‘이것 또한 지나가리라.’


- 랜터 윌슨 스미스


봄의 정원으로 오라

봄의 정원으로 오라.
이곳에 꽃과 술과 촛불이 있으니
만일 당신이 오지 않는다면
이것들이 무슨 의미가 있는가.

그리고 만일 당신이 온다면
이것들이 또한 무슨 의미가 있는가.


- 잘랄루딘 루미


무사의 노래

나에겐 부모가 없다
하늘과 땅이 나의 부모
나에겐 집이 없다
깨어 있음이 나의 집
나에겐 삶과 죽음이 없다
숨이 들고 나는 것이 나의 삶과 죽음
나에겐 특별한 수단이 없다
이해가 나의 수단
나에겐 힘이 없다
정직이 나의 힘
나에겐 비밀이 없다
인격이 나의 비밀
나에겐 몸이 없다
인내가 곧 나의 몸
나에겐 눈이 없다
번개의 번쩍임이 나의 눈
나에겐 귀가 없다
예민함이 나의 귀
나에겐 팔다리가 없다
신속함이 나의 팔다리
나에겐 기적이 없다
바른 행동이 나의 기적
나에겐 고정된 환칙이 없다
모든 상황에 적응하는 것이 나의 원칙
나에겐 전략이 없다
비움과 채움이 나의 전략
나에겐 벗이 없다
내 외로운 마음이 곧 나의 벗
나에겐 적이 없다
부주이가 곧 나의 적
나에겐 갑옷이 없다
관대함과 의로움이 나의 갑옷
나에겐 굳건한 성이 없다
흔들림 없는 마음이 나의 성
나에겐 검이 없다
나를 버림이 곧 나의 검


- 15세기 일본 무사들의 노래


뒤에야

고요히 앉아 본 뒤에야
평상시의 마음이 경박했음을 알았네.
침묵을 지킨 뒤에야
지난날의 언어가 소란스러웠음을 알았네.
일을 돌아본 뒤에야
시간을 무의미하게 보냈음을 알았네.
문을 닫아건 뒤에야
앞서의 사귐이 지나쳤음을 알았네.
욕심을 줄인 뒤에야
이전의 잘못이 많았음을 알았네.
마음을 쏟은 뒤에야
평소에 마음씀이 각박했음을 알았네.


- 중국 명나라 문인 진계유


진정한 여행

가장 훌륭한 시는 아직 씌여지지 않았다.
가장 아름다운 노래는 아직 불려지지 않았다.
최고의 날들은 아직 살지 않은 날들
가장 넓은 바다는 아직 항해되지 않았고
가장 먼 여행은 아직 끝나지 않았다.
불멸의 춤은 아직 추어지지 않았으며
가장 빛나는 별은 아직 발견되지 않은 별
무엇을 해야 할지 더 이상 알 수 없을 때
그때 비로소 진정한 무엇인가를 할 수 있다.
어느 길로 가야 할지 더 이상 알 수 없을 때
그때가 비로소 진정한 여행의 시작이다.


- 나짐 히크메트


힘과 용기의 차이

강해지기 위해서는 힘이 필요하고
부드러워지기 위해서는 용기가 필요하다.

자신을 방어하기 위해서는 힘이
방어 자세를 버리기 위해서는 용기가

이기기 위해서는 힘이
져주기 위해서는 용기가

확신을 갖기 위해서는 힘이 필요하고
의문을 갖기 위해서는 용기가 필요하다.

조화를 이루기 위해서는 힘이
전체의 뜻에 따르지 않기 위해서는 용기가

다른 사람의 고통을 느끼기 위해서는 힘이
자신의 고통과 마주하기 위해서는 용기가 필요하다.

자신의 감정을 숨기기 위해서는 힘이 필요하고
그것을 표현하기 위해서는 용기가 필요하다.

학대를 견디기 위해서는 힘이 필요하고
그것을 중단시키기 위해서는 용기가 필요하다.

홀로 서기 위해서는 힘이 필요하고
누군가에게 기대기 위해서는 용기가 필요하다.

사랑하기 위해서는 힘이
사랑받기 위해서는 용기가

생존하기 위해서는 힘이
삶을 살기 위해서는 용기가 필요하다.


- 데이비드 그리피스


하지 않은 죄

당신이 하는 것이 문제가 아니다
당신이 하지 않고 남겨 두는 것이 문제다
해질 무렵 당신의 마음을 아프게 하는 것이 그것이다

잊어버린 부드러운 말
쓰지 않은 편지
보내지 않은 꽃
밤에 당신을 따라다니는 환영들이 그것이다

당신이 치워 줄 수도 있었던
형제의 길에 놓인 돌
너무 바빠서 해 주지 못한
힘을 북돋아 주는 몇 마디 조언
당신 자신의 문제를 걱정하느라
시간이 없었거나 미처 생각할 겨를이 없었던
사랑이 담긴 손길
마음을 끄는 다정한 말투

인생은 너무 짧고
슬픔은 모두 너무 크다
너무 늦게까지 미루는
우리의 느린 연민을 눈감아 주기에는

당신이 하는 것이 문제가 아니다
당신이 하지 않고 남겨 두는 것이 문제다
해질 무렵 당신의 마음을 아프게 하는 것이 그것이다


- 마가렛 생스터



by


Tags : , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

세계문학상 수상작가 정재민의 글쓰기 특강.

보헤미안 랩소디라는 소설로 제10회 세계문학상을 받은 정재민 작가의 특강이 열렸다.
어떤 계기로 글을 쓰게 되었고, 판사라는 생업에 종사하며 계속 소설을 써서 등단 작가가 되기까지 과정을 들려주는 재미난 강의였다.
기억에 남는 몇 가지를 정리한다.

정재민 작가의 창작 이야기

작가에게 가장 중요한 것은 ‘고유성’이라고 생각합니다. 자신만의 색깔이 있다면 비록 최고의 인기를 누리지 못한다 해도 특색 때문에 가치가 있거든요. 자기 색깔을 잃으면 끝이에요.

문학은 결국 독창성이라고 생각합니다. 해보지 않은 새로운 시도를 한다면 그게 결국 작품이 되는 것 같아요. 이번에 쓴 작품도 개인적인 이야기를 정신분석학적인 시각으로 바라보는 시도를 했기 때문에 좋은 결과를 얻었다고 봅니다.

글을 쓰는 사람은 소통이 부족하여 세상과의 소통을 갈구하는 것 같아요. 내면이 평화로운 사람은 아무것도 하지 않아도 그대로 좋거든요.

사람의 identity가 다른 사람과의 관계 사이에 있는 것 같아요. 내가 이 사람하고 행동할 때 이렇다고 해서 다른 사람하고 있을 때도 같은 행동을 하는 건 아니거든요.

처음엔 쓰고 싶은 부분을 먼저 쓰고 연결하는 방법으로 글을 썼어요. 그래서 쓰고 싶던 부분은 짜임새가 있었는데, 연결부는 마음에 들지 않는 경우가 많았죠. 그런데 4개월 만에 소설 한 편을 써야 하는 일이 생겨서 집중해서 한 문장 쓸 때마다 한번 쓰면 끝이라는 생각으로 긴장을 늦추지 않고 썼더니 훨씬 효율적이었습니다.

제가 처음에 계획했던 대로 글이 써지면 실패하는 것 같아요. 내용이 뻔하거든요. 그래서 저는 감당할 수 없는 어떤 사건을 일으켜 버리고, 그걸 수습하는 걸 좋아해요.



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

SF 고전. 은하수를 여행하는 히치하이커를 위한 안내서.


작년에 친구네 막걸리 한 사발 하러 갔다가 취기에 소설책 한 권을 빌렸다. 사고 싶던 책인데 다섯 권을 묶어서 아주 저렴하게 팔아서 냉큼 샀다는 거다. 3분의 1쯤 읽고 쉬고 있다는 말에 금방 읽고 준다며 빌려와서 거의 일 년 만에 돌려줬다. 이 책을 읽으며 정말 큰 교훈을 얻었는데, 만화책이 아니라면 합본은 절대 사지 말아야 한다는 것이다. 너무 두꺼워서 들고 다니기가 어려우니 집에서만 읽어야 한다. 팔이 아파서 들고 보기가 어렵다. 아마도 지금껏 소설을 읽다가 팔이 아프긴 처음이었지 싶다.
어찌 보면 팔운동과 독서를 함 하는 최고의 방법일지도 모르겠다는 위안으로 책을 읽었다. 은하수를 여행하는 히치하이커를 다 읽었어도 팔 근육은 전혀 발달하진 않았지만, 안면 근육은 확실히 발달했다.
웃을 일이 많기 때문이다.:D
이런 이야기를 만들어낸 더글라스 애덤스가 존경스럽다. 6권은 이오인 콜퍼라는 아일랜드 작가가 썼는데, 이름만 같은 다른 소설이라고 보는 게 맞을 것 같다. 꽤 재미있는 편이지만, 웃기는 방법이 다른 시리즈와 전혀 다르다. 더글라스 애덤스와 이오인콜퍼가 닮은 점이라면 둘 다 말장난의 대가라는 것이다. 그들은 진지하게 웃기기도 하고 무작정 웃기기도 하고 생각지도 못하게 웃기기도 한다. 아무튼, 웃기다. 풍자와 재치 넘치는 이야기로 책 읽는 내내 지루할 틈이 없다.

은하수를 여행하는 히치하이커를 위한 안내서(The Hitchhiker’s Guide to the Galaxy)는 총 여섯 권으로 대체로 재미있다.
  • 은하수를 여행하는 히치하이커를 위한 안내서(The Hitchhiker’s Guide to the Galaxy)
  • 우주 끝에 있는 레스토랑 (The Restaurant at the End of the Universe)
  • 삶, 우주 그리고 모든 것 (Life, the Universe and Everything)
  • 안녕히, 그리고 물고기는 고마웠어요 (So Long, and Thanks for All the Fish)
  • 대체로 무해함 (Mostly Harmless)
  • 그런데 한 가지 더 (And Another Thing...) - 이오인 콜퍼

재미도 재미지만 인생의 답이 무엇일까 궁금하다면 꼭 한번 읽어볼 만한 소설이다.
그 이유는 은하수를 여행하는 히치하이커를 위한 안내서엔 삶, 우주 그리고 모든 것에 대한 그 엄청난 해답이 나와 있기 때문이다.
‘삶은 무엇인가?’
‘우주는 왜 생겨났는가?’
이런 궁금증을 가져봤던 사람이라면 이 내용이 궁금하지 않을 수 없을 것이다.
이건 깊은 생각이라는 엄청난 슈퍼컴퓨터가 몇 세대에 거쳐 계산해야 나오는 답인데,
요즘엔 세상이 좋아져서 그런지 구글도 답을 알고 있다.
구글 검색창에 ‘the answer to life the universe and everything’ 이라고 치면 이 엄청난 질문에 대한 해답이 튀어나오는데,
혹시 심장이 약하다면 검색 전에 우황청심환을 한 알 먹어두는 편이 좋다.

시리즈-'은하수를 여행하는 히치하이커를 위한 안내서'

은하수를 여행하는 히치하이커를 위한 안내서 - 책갈피


인간은 계속해서 입을 움직이지 않으면 머리가 작동하기 시작한다는 이론이었다. 하지만 얼마 지나지 않아 그는 이 이론 역시 단념했고, 거추장스럽기만 한 냉소주의도 포기했다. 그는 결국 자신이 인간들을 꽤 좋아한다고 결론지었지만, 이들이 모르고 있는 그 수많은 것들을 생각하면 언제나 지독하게 걱정스러웠다.

뿌연 안개에 싸인 저 과거의 옛 시절, 전대(前代) 은하 제국의 위대하고 영광스러운 시절에는 인생은 멋지고 풍요로웠으며 대략 면세였다.

아서는 눈을 껌뻑이며 스크린을 바라보다가 자신이 뭔가 중요한 것을 잊고 있는 듯한 기분을 느꼈다. 그게 무엇인지 그는 문득 깨달았다.
"이 우주선에는 홍차가 없나?"그가 물었다.

그는 열까지 세기 시작했다. 언젠가는 지각 있는 생명체들이 이것마저 영영 잊어버리지 않을까 진심으로 걱정됐다. 숫자를 세는 것만이 인간이 컴퓨터로부터 독립해 있다는 사실을 증명할 수 있는 유일한 길이었다.

"난 제멋대로야. 뭔가를 해야겠다는 생각이 떠오르면, 여어, 못할 거 뭐 있어, 하고는 해버리지. 은하계의 대통령이 되어야지 생각하면 그대로 돼버리는 거야. 쉽다고. 이 배를 훔치자, 마그라테아를 구경하자, 하고 결심하면, 모두 그대로 되는 거야. 물론 어떻게 하면 가장 잘할 수 있을까 하고 계획을 꾸미는 것은 사실이애. 그래, 하지만 언제나 쉽게 잘 된다고. 마치 은하 신용 카드를 가지고 있는데, 내가 한 번도 지불 수표를 보내지 않았는데도 계속 사용이 가능한 거나 마찬가지야. 그러고는 '내가 왜 이 일을 하고 싶어 했지?', ' 그 방법을 어떻게 생각해냈지?' 이런 질문들에 대해 곰곰히 생각해보려 할 때마다 그 생각을 더 이상 하고 싶지 않은 강한 충동을 느끼게 되지. 지금처럼 말이야. 이런 이야기를 하는 것만 해도 너무 힘이 들어."

마치 불륜을 저지르고 있다가 여자의 남편이 방에 들어오는 바람에 혼비백산했는데 그 남편이라는 자가 바지를 갈아입더니 날씨가 어쩌고 하는 대수롭지 않은 말만 몇 마디 건네고 그냥 다시 방에서 나가버리는 일을 당한 것 같은 기이한 느낌이 들었다.

친구. 법률에 의하면, 궁극적인 진리 탐구는 사상가들의 양도할 수 없는 특권이라고 분명히 명시되어 있소. 어떤 빌어먹을 기계가 정말 진리를 찾아내 버리면, 우리는 당장 실직자가 된단 말이오. 안 그렇소?

그는 아서에게 마치 스테고사우루스 공룡의 갈비뼈로 만들어진 것처럼 보이는 의자 쪽으로 오라고 손짓해 보였다.
"그 의자는 스테고사우루스의 갈비뼈를 뽑아 만든 거라오."

"정말 한 가지 해답이 있나?" 푸흐그가 헐떡였다.
"정말 한 가지 해답이 있습니다." 깊은 생각이 확인해주었다.
"그 모든 것들에 대해서? 삶, 우주 그리고 모든 것에 대한 그 엄청난 질문에 대해서?"
"그렇습니다."

"말해줘!"
"그러죠." 깊은 생각이 말했다. "위대한 질문에 대한 해답은……."
"해답은……!"
"삶, 우주, 그리고 모든 것에 대한 해답은……." 깊은 생각이 말했다.
"해답은……!"
"그 해답은……." 깊은 생각이 말을 멈췄다.
"해답은……!!!"
"42입니다." 무지무지하게 엄숙하고 침착하게 깊은 생각이 말했다.

왜냐하면, 굉장히 지성적이고 꽤 재미있고 또 인간적인 이야기를 할 거니까! 자, 너희가 항복하고 나와서 우리한테 때릴 기회를 주든지…… 물론 우리는 쓸데없는 폭력에는 반대하기 때문에 너무 많이 때리지는 않을 거지만……아니면, 우리가 이 행성 전체를 날려버리고 가는 길에 눈에 띄는 한두 개를 더 날려버리게 하든지 선택해라!

은하계의 모든 주요 문명은 다음과 같이 뚜렷하고 확연한 세 단계를 거친다. 즉 생존, 의문, 그리고 세련의 단계다. 다른 말로 하면 어떻게 왜, 그리고 어디의 단계라고 할 수 있다.
예를 들어, 첫 번째 단계를 특징짓는 질문은 '어떻게 먹을까'이고, 두 번째 단계는 '우리는 왜 먹는가'이고, 마지막 단계는 '어디서 점심을 먹을까'이다.

나는 죽었기 때문에 알지. 죽음이라는 건 사물을 꿰뚫어 볼 수 있는 놀라운 혜안을 주거든. 여기 명부에는 이런 속담이 있다. 생명은 산 자들에게 쓸데없이 낭비되고 있다.

오래전, 이곳은 대단히 번창했고, 행복한 행성이었습니다. 사람들, 도시들, 가게들이 가득한 정상적인 세상이었죠. 이 도시들의 번화가에 좀 필요 이상으로 구두 가게가 많았다는 것만 제외하면요. 그런데 이 구두 가게들의 수가 서서히, 아무도 알아차리지 못하게 늘어난 겁니다. 그건 아주 널리 알려진 경제 현상이지만, 실제로 그런 일이 벌어지는 걸 보는 건 참 비극적이었죠. 즉, 구두 가게들이 늘어나면 늘어날수록 더 많은 구두를 만들어내야 했고, 그러면 그럴수록 구두들은 점점 더 질이 나빠지고 신을 수 없는 구두가 되었고, 구두의 질이 안 좋아질수록 신발을 신고 다니기 위해선 점점 더 많은 구두를 사야만 했죠. 그래서 신발 가게는 더 늘어만 갔고, 결국 전 경제는 신발 파동 수평선이라 불리는 선을 넘어버린 겁니다. 그 시점이 되면 신발 가게 외에 다른 것을 만드는 것이 경제학적으로 불가능해져버리죠. 그 결과는 파국과 폐허, 기근이었습니다.

당신은 그저 자기 시대에 예금 통장에 일 페니만 저금하면 된다. 시간이 끝나는 날에 당신이 도착하면, 복리(複利) 작용에 의해 엄청난 식사 비용은 이미 지불이 되어 있을 것이다.

포드는 팬 갈랙틱 가글 블래스터를 한 잔 더 마셨다. 이 술은 강도(强盜)의 술 버전에 해당되는 술이라고 회자되는 술이다. 즉, 대가가 값비싸고 머리가 빠개진다.

"난 자기를 먹어달라고 청하는 짐승을 먹고 싶진 않다고. 냉혹한 짓이야." 아서가 말했다.
"먹히고 싶어 하지 않는 짐승을 먹는 것보단 낫지." 자포드가 말했다.

예술의 기능은 자연에 거울을 들이대는 것이다. 하지만 그 정도로 큰 거울은 없다.

고(故) 핫블랙 데지아토 씨가 그의 보디가드의 도움을 받아 움직이는 통로를 타고 주차장으로 내려왔다.

이쯤에서 포드가 지구인을 처음 만났을 때 그들의 특이한 버릇에 대해 정립했던 이론을 다시 한번 되짚어보는 게 좋겠다. 그가 보기에 지구인들은 너무너무 명백한 사실들을 계속해서 말하고 또 말하는 괴상한 버릇이 있었다. '아, 좋은 날씨로군'이라든지 '키가 상당히 크시군요'라든지 '그래서 이걸로 끝이군, 우리는 죽는 거야'같은 소리들 말이다.
그의 첫 번째 이론은, 만일 지구인들이 계속해서 입술을 사용하지 않는다면 그들의 입은 시들어빠질 것이라는 것이었다.
몇 달간 관찰한 뒤 그는 두 번째 이론을 내놓았다. '만일 지구인들이 계속 입술을 움직이지 않는다면 그들의 머리가 작동하기 시작할 것이다.'

계획은 이런 거였어요. 첫 번째 우주선인 A 방주에는 뛰어난 지도자들, 과학자들, 위대한 예술가들, 뭐 그런 성공한 사람들 있잖아요, 그런 사람들이 타고, 세 번째 우주선인 C 방주에는 진짜 일을 하는 사람들, 그러니까 물건을 만들고 일을 하는 사람들이 탔죠. 그리고 B 방주에는---그게 우리 우주선이죠---그 밖의 사람들이 탔어요. 중간치들 말이에요.

내가 어찌 알겠어요? 과거란 현재의 나의 육체적 감각과 마음 상태 사이의 괴리를 설명하기 위해 만들어낸 허구일지도 모르는데.

"좋아요. 그게 존재한다는 건 어떻게 알죠? 당신이 잘해준다는 걸 그 녀석이 아는지 당신이 어떻게 알아요? 당신이 친절이라 생각하는 그걸 저 녀석이 좋아하는지 어떻게 알아요?" 자니우프가 자기의 주장을 밀어붙이며 말했다.
"물론 모르죠."그 사람이 미소를 띠며 대답했다. "전혀 몰라요. 고양이처럼 보이는 대상에게 어떤 특정한 방식으로 행동했을 때 내 기분이 좋을 뿐이죠. 당신은 다르게 행동하나요? 하여간, 이제 난 피곤한 것 같아요."

"우선 먹고 나서 나중에 생각해 보면 어떨까?" 아서가 말했다.
"아마 그게 바로 그 사람들이 원하는 것일 거야."
"좋아, 그럼 이렇게 생각해봐……."
"아직까지는 괜찮게 들리는데."
"저 과일은 우리가 먹으라고 저기 있어. 좋을 수도 있고 나쁠 수도 있지. 우리 배를 불려줄 수도 있고, 독으로 우리를 죽일 수도 있어. 만일 저게 독이 든 건데 우리가 안 먹는다면, 그들은 다른 방법으로 우리를 공격 할 거야. 우리가 먹지 않더라도 우리는 어쨌든 지는 거라고."
"네가 생각하는 방식이 맘에 들어. 그럼 하나 먹어봐."

다른 사람의 문제(Somebody Else’s Problem)
SEP라는 건, 우리가 볼 수 없는, 아니 보지 않는, 우리 뇌가 못 보게 하는 광경이야. 왜냐하면 다른 사람 문제라고 생각하기 때문이지. SEP의 뜻이 그거야. '다른 사람의 문제.' 뇌가 그 부분을 편집해 잘라내기 때문에 눈에 안 보이는, 맹점 같은 거라고. 그게 정확히 뭔지 모르는 경우에는 똑바로 쳐다보면 보이지 않아. 유일한 희망은 곁눈질로 어쩌다 재수 좋게 힐끗 보게 되는 거지.

식당의 구역 내에서 식당 청구서에 적히는 숫자들은 식당을 제외한 우주의 다른 구역에서 다른 종이 위에 적히는 숫자들이 따르는 수학적 법칙들을 전혀 따르지 않는다는 것이었다. 이 단 한 가지 사실이 전체 과학계를 폭풍처럼 초토화했으며, 과학 전체에 완벽한 혁명을 몰고 왔다. 헤아릴 수 없는 많은 수학 학회들이 훌륭한 식당에서 열리는 바람에, 당대 최고의 지성들 중 많은 이가 비만과 심장마비로 죽어나갔고 수학이라는 과학의 발전이 몇년씩 뒷걸음질을 쳤다.

이 쓰레기 같은 건 안 봐도 돼요. 그저 고개만 끄덕이지 마시오. 그러면 괜찮아.

이 치들은 뭘 믿냐 하면…… '평화, 정의, 윤리, 문화, 스포츠, 가족 생활, 그리고 다른 생명체의 말살'을 믿는다고 하는군요.

그는 검은 바지에, 배꼽 비슷한 데까지 단추를 풀어 젖힌 검은 실크 셔츠를 입고 있었다.

싸움은 ‘스트리테락스 행성의 사일라스틱 갑옷 악마’ 종족이 몹시 잘하는 일이었다. 그리고 워낙 잘하는 일이다 보니 싸움을 아주 많이 했다. 적들(즉, 다른 사람들 모두)과 싸웠고, 자기네끼리 서로 싸웠다. 그들의 행성은 철저히 폐허가 되었다. 행성 표면은 버려진 도시들로 가득 찼고, 주위는 버려진 무기들이 가득했으며, 그 주위에는 또 사일라스틱 갑옷 악마 종족이 살면서 시시한 일들로 서로 싸워대는 깊디깊은 벙커들이 있었다.
이 종족과 싸우려면, 제일 좋은 방법은 그냥 세상에 태어나는 것이었다. 그들은 누가 태어나는 걸 좋아하지 않았고, 심지어 몹시 비위 상하는 일이라고 여겼다. 그리고 이 종족이 성이 나면 꼭 다치는 사람이 생겼다. ‘인생을 뭐 그렇게 피곤하게 산담’ 하고 생각할지 모르지만, 그 종족은 정력이 어마어마하게 샘솟았던 모양이다.

“핑!” 자포드가 말했다. “피유우우우우우! 빵빵빵!”
“이봐요.” 컴퓨터가 일 분 후 명랑하게 말했다. “당신은 삼 점을 받았어요. 이제까지의 최고 점수는 칠백오십구만 칠백오십구만 칠천이백…….”

그는 새들과 의사소통하는 법을 배웠지만, 그들의 대화가 기가 막히게 지루하다는 사실을 깨달았다. 대개가 바람의 속도, 날개 길이, 체력과 무게의 비율에 대한 것이었고, 나아가 상당 부분이 딸기에 대한 것이었다. 불행하게도, 일단 새의 말을 배우게 되면 머지않아 허공에서 새의 말소리밖에 들리지 않는다는 걸 깨닫게 된다. 그저 무의미한 새들의 수다밖에 들리지 않는 것이다. 그것을 피해 도망갈 데가 없었다.

그날 저녁에는 해가 일찍 저물었다. 그맘때는 그게 정상이었다. 춥고 바람도 많이 불었다. 그맘때는 그게 정상이었다. 비가 오기 시작했다. 이건 더더구나 특히 정상적인 일이었다. 우주선 한 대가 착륙했다. 이건 정상이 아니었다.

청구서는 상당히 길었다.
맨 아래에는 오디오 세트 밑바닥에 새겨진 제품 번호와 비슷한 숫자가 쓰여 있었다. 등록을 하려고 베껴 쓰는 데 몹시 오래 걸리는 그 일련 번호들 말이다.

“구즈나…….” 포드 프리펙트가 말했다. 이건 뭔가 말은 하고 싶은데 특별히 할 말이 없을 때 그가 잘 쓰는 베텔게우스 행성어였다.

“이봐요, 당신도 그때 그 사건은 다 기억할 거 아뇨. 환각 말이에요. 사람들은 다 CIA가 전쟁에 마약을 사용하려고 실험을 했다든가 뭐 그랬다고 합디다. 다른 나라를 진짜로 침략하는 대신, 사람들이 침략당했다고 믿게 만드는 게 훨씬 비용이 저렴하다든가 뭐 그런 미친 이론이었지요.”

사브는 분노로 이글거리며 어둠 속으로 사라져 갔다. 아서는 떠나는 자동차 뒤를 하염없이 바라보고 있었는데, 그 꼬락서니는 마치 오 년 동안 자신이 장님이 된 줄 알고 지내던 사람이 어느 날 너무 큰 모자를 쓰고 있었을 뿐이라는 사실을 깨달은 것 같았다.

달은 물기를 촉촉이 머금은 채 하늘에 떠 있었다. 방금 세탁기에서 꺼낸 청바지 뒷주머니에서 나온 종이 한 뭉치 같았다. 시간이 지나고 다림질을 해야, 간신히 그것이 쇼핑 목록인지 오 파운드 지폐인지를 분간할수 있는 그런 꼬깃꼬깃한 종이들 말이다.

그는 BBC에 전화를 걸어서 팀장에게 연결해달라고 부탁했다.
“아, 안녕하세요, 아서 덴트입니다. 저, 육 개월 동안 결근을 해서 죄송한데요. 그동안 제가 좀 돌았었어요.”
“오, 걱정할 것 없네. 아마 그런 일일 거라고 생각했었지. 여기서는 늘 있는 일이니까. 그럼 언제부터 다시 출근할 수 있나?”
“고슴도치들이 동면을 시작하는 게 언제죠?”
“아마 봄쯤일걸.”
“그때쯤 뵙죠.”
“좋았어.”

“캘리포니아 사람들은 과잉 체지방을 황금으로 바꾸는 법을 발견했어.”

“그대의 땋아 내린 머리카락들이 모조리 풀려 / 한 올 한 올이 빳빳이 서리라 / 불안한 고슴도치의 가시들처럼”

“아주 굉장히 특별한 이유로 당신이 내게 아주 중요한 사람이라고 생각해보세요. 그리고 당신은 모르지만, 나도 그쪽한테 아주 중요한 사람이고 말이죠. 하지만 갈 길이 겨우 오 마일밖에 남지 않은 데다, 내가 멍청한 바보 천치라서 화물 트럭에 치이지 않고는 방금 처음 만난 사람한테 아주 중요한 말을 할 줄 모르는 인간이라서 그 모든 게 다 아무 의미가 없어진다면 어떻게 되겠어요……그러면 내가…….” 그는 어쩔 줄 몰라 하며 말을 멈추고는, 그녀를 바라보았다.
“……어떻게 하면 좋겠어요?”
“앞을 봐요!” 그녀가 비명을 질렀다.
“이런 망할!”
그는 수백 대의 이탈리아 세탁기들을 싣고 있는 독일 화물 트럭 측면에 충돌하는 사태를 간신히 면했다.
“내 생각에는…….” 그녀는 잠시 안도의 한숨을 쉰 후 이렇게 말했다.
“제 기차가 출발하기 전에 저한테 뭐 마실 거라도 한 잔 사셔야 할 거 같네요.”

영국에는 끈질기게 사라지지 않는 특유의 정서가 있다. 바로 샌드위치를 어떤 식으로든 흥미진진하고 매혹적이고 먹을 때 기분좋게 만드는 것은 죄악이며, 그건 오로지 외국인들이나 하는 짓이라는 생각이다.
‘되도록 말라빠지게 만들라’는 게 집단적인 국민 의식에 깊이 박혀 있는 요리 수칙이었다. “되도록 고무처럼 만들어라. 햄버거를 굳이 신선하게 보관해야 한다면, 일주일에 한 번씩 물로 씻도록 하라.”

햇살이 옥상의 정원들에 내리쬐었다. 건축가들과 배관공들의 머리 위에도 내리쬐었다. 변호사들과 강도들 머리 위에도 내리쬐었다. 피자 위에도 내리쬐었다. 부동산 중개업자의 명세서 위에도 내리쬐었다.

그도 태평양을 바라보았다. 해변을 따라 달리는 도요새가 몇 마리 있었는데, 그들에게는 이런 문제가 있었다. 모래 속에 묻어둔 먹이가 방금 파도에 쓸려갔는데, 발이 물에 젖는 건 참을 수가 없었던 것이다. 이 문제를 해결하기 위해서 도요새들은 굉장히 똑똑한 스위스 사람들이 만든 기계처럼 괴상하게 팔짝팔짝 뛰어다니고 있었다.

“이쑤시개의 중간 부분을 손으로 잡는다. 뾰족한 부분을 입 속에서 촉촉하게 적시도록 한다. 이빨 사이의 공간에 삽입하고, 뭉툭한 부분을 잇몸에 대도록 한다. 부드럽게 넣었다 뺐다 하는 동작을 반복한다.”
“그러니까.” 정신 멀쩡한 윙코가 말했다. “이쑤시개 상자에다가 사용설명서를 붙일 만큼 제정신을 잃어버린 문명이라면, 그런 문명 속에서 더 이상 우리가 맑은 정신을 유지할 수 없다는 생각이 들더군요.”

“그러니까 투표를 해서 도마뱀을 뽑았단 말이야?”
“오, 그럼.” 포드는 어깨를 으쓱하며 말했다. “당연하지.”
“하지만.” 아서는, 다시 큰 걸 하나 터뜨리기로 작정했다. “왜?”
“왜냐하면 도마뱀들한테 표를 던지지 않으면, 잘못된 도마뱀이 정권을 잡을까 봐 그렇지.” 포드가 말했다.

그들은 경이에 차서 하나님이 피조물에게 보내는 마지막 메시지를 바라보았고, 천천히 이루 말할 수 없는 평온한 느낌에 사로잡혔다. 궁극적으고 완전한 깨달음을 얻었던 것이다.
펜처치가 한숨을 쉬었다. “맞아요.” 그녀가 말했다. “저거였어요.”
그들은 족히 십 분 동안 글자를 물끄러미 바라보고 있다가, 그제야 두 사람의 어깨 사이에 대롱대롱 매달려 있는 마빈이 곤란을 겪고 있다는 사실을 깨달았다. 로봇은 이제 더 이상 고개를 들 수도 없었고, 아직 메시지를 읽지도 못했다. 그들은 마빈의 고개를 들어 올려주었지만, 그는 자신의 사각 회로가 거의 다 망가졌다도 투덜거렸다.
그들은 동전을 찾아서 그를 부축해 유료 망원경 앞으로 데리고 갔다. 마빈은 투덜거리면서 그들을 욕했지만, 그래도 그들은 마빈이 글자 하나 하나를 차례대로 볼 수 있도록 도와주었다. 첫 번째 글자는 ‘불’이었고, 두 번째 글자는 ‘편’이었고, ‘을’이 그 뒤를 이었다. 그리고는 한 칸이 떨어져 있었다. ‘끼’다음에는 ‘쳐’. 마빈은 잠시 쉬고 휴식을 취했다.
몇 분 후 그들은 다시 글자를 읽기 시작했고, 마빈이 ‘드’, ‘려’까지 볼 수 있게 해주었다. 다음 글자는 ‘서’였다. 마지막 단어가 길어서, 마빈은 그 단어에 도전하기까지 한 번은 더 쉬어야 했다.
그 단어는 ‘죄’로 시작했고 다음에는 ‘송’이었다. 그리고 ‘합’.
마지막으로 숨을 돌린 후, 마빈은 힘을 내어 마무리에 도전했다.
그는 ‘니’라는 글자와 마침내 ‘다’를 읽었고, 휘청거리며 아서와 펜처치의 품에 쓰러졌다.

“이 바다 밑바닥에 침몰한 배가 당신이 백 퍼센트 침몰 안 한다고 백 퍼센트 장담한다고 말했던 그 배가 맞다고 백 퍼센트 장담한단 말이죠?”

현재가 정말로 궁핍해지고 있다는 사실을 깨닫고 나서야, 그리고 그 이유가 저 이기적인 미래의 약탈꾼 녀석들이 똑같은 짓을 하고 있기 때문이라는 걸 깨닫고 나서야, 모든 사람들은 모든 아오리스트 막대 하나하나와 그걸 만드는 끔찍한 비법이 완전히, 영구히 폐기되어야 한다는 사실을 깨달았다. 그들은 이는 자신들의 할아버지와 손자들을 위한 것이라고 주장했지만, 이는 물론 자신의 할아버지의 손자들, 자기 손자들의 할아버지를 위한 것이었다.

사실 빛의 속도를 넘어설 수는 없다. 빛의 속도보다 더 빨리 여행하는 것은 없다. 나쁜 소식 정도라면 예외가 될 수 있을까. 나쁜 소식은 자신만의 특별한 법칙을 따르는 법이다.

“인생을 살면서 제가 한 가지 배운 게 있다면.” 트리시아가 말했다. “절대로 가방을 가지러 되돌아가지 말라는 거예요.”

조그마한 플라스틱 렌즈를 눈에 살살 집어넣으면서 그녀는 생각했다.
살아가면서 한 가지 배운 게 있다면, 가방을 가지러 되돌아가서는 안 되는 때가 있고 그래야 하는 때가 있다는 것이었다. 그 두 가지 경우를 구분하는 법은 아직 배우지 못했다.

그는 알지 못하는 사람들의 얼굴들을 지나쳐갔다. 그들은 자신과 같은 부류의 사람들이 아닌 것 같았다. 그들은 너무 말쑥하게 단장하고 있었다. 그들의 눈은 너무나 죽어 있었다. 저 멀리 자기가 아는 사람을 본 겉 같아서 인사를 하려고 달려가 보면, 항상 뭔가 다른 사람이었다. 자신이 아는 그 누구보다도 훨씬 더 단정한 헤어스타일에 위압적이고 결단력 있는 모습의 사람이었다.

“그건 하나의 미래죠.” 할이 말했다. “당신이 그걸 받아들이면, 그건 당신의 미래에요. 당신은 다차원적으로 사고하는 법을 배워야 해요. 이 순간으로부터 모든 방향으로 헤어릴 수 없이 많은 미래들이 뻗어나가고 있다고요. 또 지금 이 순간에서부터, 그리고 또 지금 이 순간에서부터. 수십억 개의 미래들이, 매 순간마다 두 갈래로 갈라지는 겁니다! 가능한 모든 전자들의 가능한 모든 위치가 급속히 증대하면서 수십억 개의 가능성으로 변하는 거죠! 수십억 개, 그리고 또 수십억 개의 반짝거리며 빛나는 미래들! 그게 무슨 뜻인지 아십니까?”

방의 왼쪽 편에서는 은하계 전역에서 현장 연구자들이 보내는 보고서들이 서브-에서-넷에 모아져서 곧바로 부편집자들의 사무실 네트워크로 입력되었고, 거기에서 괜찮은 부분은 몽땅 비서들에 의해 잘리게 된다. 왜냐하면 부편집자들은 점심식사를 하러 나가고 없기 때문이다. 그러고 나서 나머지 원고는 법무 팀이 있는 건물의 나머지 반쪽――에이치 모양 건물의 다른 한쪽 다리 말이다――으로 쏘아 보내진다. 법무 팀은 남은 원고 중에서 아직 조금이라도 괜찮은 부분을 잘라낸 뒤, 중역 편집자들의 사무실로 다시 날려 보내는데, 그들 역시 점심 먹으러 나가고 없다. 그래서 편집자들의 비서들이 그걸 읽어보고는 시시하다고 말한 뒤 대부분의 남은 원고를 잘라내 버린다.
편집자들 중 누군가는 마침내 점심식사를 마치고 비틀거리며 들어오면, 그들은 이렇게 소리 지른다. “X――X는 문제의 현장 연구자의 이름이다――가 젠장맞을 은하계 반대편에서 보내온 이 시시껄렁한 잡소리가 다 뭐하자는 거야? 이 매가리 없는 설사 같은 게 녀석이 보낼 수 있는 최고의 원고라면, 그 젠장맞을 가그라카카 마인드 존에서 공전 주기를 세 번이나 꽉 채워 보낼 필요가 뭐가 있어? 그렇게 사건들이 수도 없이 벌어지고 있는데도 말이야. 활동 경비를 없애버려”
“원고는 어떻게 할까요?” 비서가 묻는다.
“아, 네트워크 상에 발표해. 거기도 뭔가 있기는 해야 할 테니까. 난 머리가 아파서 집에 가야겠어.”
그래서 편집된 원고는 법무 팀을 돌며 마지막으로 난도질과 화형을 거치고 나서 다시 이곳으로 내려 보내지며, 여기서 원고는 은하게 어디에서건 즉시 검색할 수 있도록 서브-에서-넷을 통해 방송된다. 그 과정은 방의 오른쪽에 있는 터미널들에 의해 모니터되고 통제되는 장비에 의해 이루어진다.

그건 다른면에선 멀쩡하던 사람이 정치 고관만 되면 늘 생기는 일종의 정신 이상적 심리 차폐를 역으로 뒤집어 처리한 프로그래밍 기술이었다.

그는 은하계의 동쪽 경계로 향했다. 들리는 말에 의하면, 거기에서는 지혜와 진실을 찾을 수 있다고 했다. 특히 사제들과 선지자들과 점쟁이들, 그리고 배달 전문 피자집――신비주의자들은 거의 대부분 요리를 전혀 못하니까――의 행성인 하와리우스 행성이 바로 그런 곳이었다.

그녀는 아서에게 복사물을 건넸다.
“이게, 어, 이게 그러니까 당신의 충고입니까?” 아서가 자신 없이 복사물들을 뒤적이며 말했다.
“아냐.” 노파가 말했다. “이건 내가 살아온 이야기야. 알겠지만, 어떤 사람이 충고를 하던 간에, 그 충고의 질은 그 사람이 실제로 살아온 삶의 질에 견주어 판단해야 하는 거야. 이제 이 문서를 죽 훑어보면, 내가 중요한 결정들은 모두 잘 보이라고 밑줄을 쳐놓은 게 보일거야. 그것들은 다 색인이 되어 있고 앞뒤로 참조가 가능해. 알겠지? 내가 제안할 수 있는 건 다만, 내가 내린 결정과 정 반대의 결정을 내린다면, 아마도 인생의 말년을…….” 그녀는 잠시 말을 멈추더니 허파 가득 숨을 들이켜고는 냅다 소리를 질렀다. “이런 냄새 나는 낡은 동굴에서 보내진 않을 거야!”

거기서는 또한 굉장히 달고 끈적끈적한 다양한 초콜릿 케이크를 사서 수도자들 앞에서 먹을 수도 있다. 하지만 대체로 그것 때문에 대부분의 수도자들은 이제 사라져버리고 없다.

“내가 마흔 번의 봄, 여름, 가을을 장대 위에 앉아서 알아낸 것을 그런식으로 말해줄 거라고 생각하나?”
“겨울에는요?”
“겨울?”
“겨울에는 장대 위에 앉아 있지 않나요?”
“내 인생 대부분의 시간을 장대에 앉아 보낸다고 해서 내가 바보인 건 아니지. 겨울에는 남쪽으로 간다네. 바닷가에 별장을 가지고 있거든. 굴뚝에 앉아 있지.”
“여행자들에게 해줄 충고라도 있나요?”
“응, 바닷가에 별장을 가지게.”
“알겠어요.”

“바닷가 별정이라고 해서 꼭 바닷가에 있어야 할 필요도 없어. 물론 최고로 좋은 것들은 그렇지만. 우리는 모두 모이고 싶어 하거든.” 그가 말을 이었다. “경계 상황에 말이야.”
“그래요?” 아서가 말했다.
“땅과 물이 만나는 곳. 흙과 공기가 만나는 곳. 육체와 정신이 만나는 곳. 공간과 시간이 만나는 곳. 우린 한 쪽에서 다른 한쪽을 보는 걸 좋아하지.”

“자넨 자네가 보는 걸 보기 때문에 내가 보는 것을 볼 수 없어. 자넨 자네가 아는 것을 알기 때문에 내가 아는 것을 알 수 없어. 내가 보고 내가 아는 것은 자네가 보고 자네가 아는 것에 보태질 수가 없어. 왜냐하면 같은 게 아니니까. 그건 자네가 보고 자네가 아는 것을 대신할 수도 없어. 왜냐하면 그건 자네 자신을 대신하는 게 될 테니까.”

“아, 맞아.” 노인이 말했다. “여기 자네를 위한 기도가 있네. 연필 있나?”
“네.” 아서가 말했다.
“이런 거야. 이제 보자고. ‘제가 알 필요가 없는 것들로부터 저를 보호하소서. 제가 알아야 할 모르는 일들이 있다는 사실조차 알지 못하도록 저를 보호하소서. 제가 알지 않기로 결심한 것들에 대해 알지 않기로 결심했다는 것을 모르도록 저를 보호하소서. 아멘.’ 이거야. 어쨌거나 이건 자네가 속으로 조용히 기도하는 바 아닌가. 그러니 내놓고 기도하는 게 더 좋을 거야.”
“음, 저, 고맙습니다.” 아서가 말했다.
“그것과 짝을 이루는 굉장히 중요한 기도가 하나 더 있어. 그러니까 이것도 적는 게 좋을 거야.” 노인이 계속해서 말했다.
“좋아요.”
“이거야. ‘주여, 주여, 주여…….’ 만약의 경우를 대비해 이 부분을 넣는 게 좋아. 이왕이면 확실하게 하는 게 좋잖아. ‘주여, 주여, 주여. 위의 기도의 결과로부터 저를 보호하소서. 아멘.’ 이거야. 사람들이 살면서 겪는 대부분의 문제는 이 마지막 부분을 빼먹어서 생기지.”

자연스러움. 그건 교묘한 말이었다.
그가 자연스럽다고 생각했던 많은 것들, 예컨대 크리스마스에 선물을 산다거나 빨간 불에 멈춰 선다거나 초당 삼십이 피트의 속도로 떨어진다거나 하는 일들이 그저 자기 세계의 습관에 불과했으며 다른 곳에서도 반드시 같은 방식으로 작동하지는 않는다는 것을 그는 오래 전에 깨달았다. 하지만 바라지 않는다는 것――그건 정말로 자연스러울 수가 없었다. 그렇지 않은가? 그건 숨을 안 쉬는 것과 마찬가지였다.

그 모든 것은 창립 멤버 중 몇 명이 정착을 하고 욕심을 내기 시작하면서 생겼다. 그러는 동안 그와 다른 사람들은 계속 현장에 있으면서 조사를 하고 히치하이크를 하면서 악몽의 법인으로 냉혹하게 변해버린 <안내서>와 그것이 차지하게 된 괴물 같은 건축물에게서 점점 더 소외돼갔다. 그 안 어디에 꿈들이 있었나? 그는 건물의 반을 차지하고 있는 회사 변호사들, 지하층을 차지하고 있는 ‘직공들’, 모든 부편집자들과 그들의 비서들, 그 비서들의 변호사들과 그 비서들의 비서들, 변호사들의 비서들, 그 중 최악으로, 회계사들과 마케팅 부서들을 생각했다.

한 행성에서만 십오 년씩이나 조사를 해서 기사를 보냈는데, 녀석들은 단 두 마디로 줄여버렸지. “대체로 무해함.”

다른 히치하이커들은 타월을 색다른 방식으로 변형시키는 게 적당하다고 생각해서, 온갖 종류의 비밀 도구들과 설비들, 심지어 컴퓨터 장치들까지 직물 안에 짜 넣었다.

그 빌딩은 프로그스타 공격 이후 완전히 새로 지어지면서 단단하게 강화되었고, 아마도 그 업계에서 가장 중무장한 출판사였을 것이다. 하지만 그가 생각하기에 법인 위원회에서 디자인한 모든 시스템에는 항상 뭔가 약점이 있었다. 창문을 디자인한 기술자들은 그 창문들이 건물 안에서 짧은 사정거리에서 날아오는 로켓에 맞는다는 것은 예상하지 않았고, 그래서 창문이 깨졌던 것이다.

“전화 끊어, 새끼야! 네가 무슨 번호를 원하든, 어느 내선에서 전화를 걸든 내 알 바 아니야. 가서 불꽃놀이나 네 엉덩이에 쑤셔 박으라고! 이이이야아아! 우 우 우! 꽥꽥!”

물론, 칼들 중에서도 지존은 고기를 써는 칼이었다. 이는 빵 써는 칼처럼 칼질을 하는 대상을 뚫고 지나가면서 의지를 행사할 뿐만 아니라, 나아가 대상과 협력해야만 했다. 힘을 합쳐 고기의 결을 따라가며, 고깃덩어리에서 얄팍하게 접히며 썰려나가는, 최고로 훌륭한 질감과 투명감을 지닌 고기 조각을 만들어내야만 하는 것이었다.

트릴리언은 아서를 한참 동안 바라보더니, 어조를 싹 바꾸어 이렇게 말했다. “너도 이젠 책임을 좀 져야 할 때가 됐어, 아서.”

그는 여자아이에게로 걸어가서 안아주었다.
“나는 너를 사랑하지 않는단다.” 그가 말했다. “미안하구나. 아직 널 알지도 못하는걸. 하지만 몇 분만 시간을 주겠니.”

그는 하늘을 바라보았다. 찌무룩하고 불안한 납빛 하늘은 묵시록에 나오는 4인의 기사들이 말을 타고 달려 나와도 정신 나간 멍청이들처럼 보이지 않을 만한, 그런 하늘이었다.

“비입니다.” 새가 말했다. “아시겠어요? 그냥 비지요.”
“비가 뭔지는 나도 알아요.”
비가 겹겹이 겹쳐진 장막처럼 밤공기를 가르며 세차게 떨어지고 있었고, 그 사이로 달빛이 비쳐 들어오고 있었다.
“그럼 비가 뭡니까?”

“어떻게, 어, 어떻게 이 훌륭한 물건들의 값을 치르시는지요?”
지도자가 다시 킬킬거리고 웃었다.
“아메리칸 익스프레스를 씁니다.” 그는 아무렇지도 않은 일이라는 듯 어깨를 으쓱해 보였다.
트리시아는 다시 느릿느릿 고개를 끄덕였다. 그 회사는 특히 ‘아무나’한테 카드를 발급한다는 사실을 잘 알고 있었다.

“가끔 이럴 때는, 사실 공간-시간의 결이라든가 다차원적 개연성의 도상의 심상한 완전성이라든가 온갖 종류의 총체적 혼란에 발발한 파동 형태의 잠재적인 붕괴 가능성이라든가 내 머릿속을 괴롭히던 온갖 문제들이 그렇게 걱정할 가치가 있는 건가 하는 생각이 든단 말이야. 아마 저 덩치 큰 남자가 한 말이 옳다는 기분이 들어서 그런가봐. 그냥 될 대로 되라 마음을 놓으라고 하더군. 뭐가 그렇게 중요하겠느냐고? 될 대로 되라 하는 거지.”


<그리고 한가지 더> - 책갈피


“감정이라고? 너는 어떻게 머리도 하나밖에 없는 주제에 그렇게 멍청할 수가 있냐?”
“나는 멍청한 게 좋아. 너는 상황을 명료하게 보잖아. 멍청하다는 건 햇살을 통해서 곁눈질로 흘겨보는 거랑 비슷하니까.”
포드의 말 한마디 한마디가, 젖은 수건으로 때리는 것처럼 왼쪽 두뇌의 구체를 흔들어 놓았다. “햇살? 대체 무슨 헛소리야? 멍청하다는 건 무지와 암흑이야.”

“한동안 소아시아를 돌아다니면서 약간의 공포를 불어넣으려고 해봤는데, 이제 사람들은 페니실린을 갖고 있고, 심지어 가난한 사람들도 읽을거리를 가지고 있더란 말이요. 그러니 신들을 어디다 쓰겠소?”

홍차 생각만 해도 기분이 좀 좋아졌다. 홍차가 없으면 아일랜드 사람은 사족을 못 쓰는 법이다.

“사전적 의미로 사랑이 무슨 뜻인지는 말해줄 수 있지요. 동의어도 다 말해줄 수 있고요. 그리고 엔도르핀과 시냅스와 근육의 기억 같은 얘기도 해 드릴 수 있어요. 하지만 심장에서 울리는 열정의 메아리는 내게도 미스터리랍니다. 나는 컴퓨터에요, 아서.”

과거에 대한 그 문장 기억나? 그건 벌써 과거에 있잖아. 그 문장이 ‘과거’라는 단어를 포함하고 있었다는 거 말고는, 거의 기억도 안 나네. 과거는 기억들로 이루어지고, 기억은 이미 죽은 것들이라 상처를 줄 수가 없다고. 뭐랄까 뾰족한 막대기 구름 같은 것처럼 말이야.

“사람들은 편안함을 돈 주고 산단다.” 그녀는 옥수수 베는 낫으로 돼지 멱을 따면서 이렇게 말했다. “ 사람들을 편안하게 해주면, 네가 파는 건 뭐든지 살 거야.”
지혜와 동맥에서 뿜는 피의 조합은 불가항력적이었고, 힐먼은 할머니의 가르침을 절대 잊지 않았다.

옛날 것보다 훨씬 낫고 고장 나면 알아서 제조사에 연락을 취하는 인공 바이오 하이브리드 골반의 도움을 받아 넓은 영지를 걸어 다니곤 했다.
힐먼이 너무 흥분하는 바람에 왼쪽 골반이 일본에 전화를 넣을 지경이었다.

“여기 속아 넘어가는 사람은 아무도 없을걸요”라고 관광위원회에서 코웃음을 쳤다. “몹시 개연성이 없어요.” 이 말은 당연히 전체 사업이 엄청난 성공을 거둘 것임을 보장한 거나 마찬가지였다.

“창문도 필요하다고요?” 눈썹이 올라가다 못해 아예 날아갈 정도로 놀라더니, 십장이 물었다. “그런 건 육 개월 전에 미리 말씀해 주셨어야죠. 미리 알기만 했으면 우리 애들이 설치했을 거 아닙니까. 지금 창문을 설치하려고 하면, 벌써 현장에 와 있는 배관공들 일을 좀 보류해야 해요. 그러면 배관공들 다음에 일하는 도색업자들이 싫어할 거고요. 게다가 도색업자 중에는 배관공하고 결혼한 친구들이 있어서, 가정불화가 일어날 겁니다. 그리고 일하는 동안 현장에서 마사지해주는 인력이 부족해서, 현재 우리 애들 어깨에 극심한 젖산 축적이 일어나고 있단 말이에요. 어쨌든, 뭐 선생님이 물주니까 돈은 마음대로 쓰세요. 제 말은 아무렇게나 이것저것 요구해서 프로젝트 전체를 경제적 자유낙하 상태로 만들 게 아니라, 좀 편할 때 미리미리 말했으면 좋았지 않았겠느냐 이거죠.”

“하지만 이건 빵이잖아.”
“그래서?”
“오후 세 시 이후에 탄수화물? 너 미쳤냐?”
“그냥 빵 껍데이 하나만 먹을게. 그게 다야.”
티드필은 개인 트레이너와 미용 관리사들이 다 볼 수 있게 빵을 높이 치켜들었다. “빵 껍데기 하나래. 그게 다란다. 이 빵 껍데기 하나에 설탕 몇 숟가랑이 들었는지 알아? 누구 아느냐고?”
“두 숟가락.” 펙스가 용기를 내어 보았다.
“일곱이야!” 티드필이 빽 소리를 질렀다. “일곱. 세 시 이후에 이걸 먹느니 엉덩이에 차라리 설탕 펌프를 꽂아 넣는 게 낫다고.”

우리는 단 하루를 함께 보냈는데, 그 하루가 내 인생에서 가장 중요한 날이었어.

“당신도 썩 괜찮은 친구요, 비블브락스 씨. 우리가 원하는 건 뭐든, 그 멋진 우주선으로 가져다주니까. 가끔은 당신이 아예 안 오면, 우리도 필요한 게 아예 없을 거 같기도 하다니까.”

“당신이 해피엔딩이라고 생각하는 것은 죽었다고 생각했던 연쇄살인범이 되돌아와 가슴이 제일 큰 여자애만 빼고 다 죽이기 전에 잠시 갖는 짧은 휴지기에 불과하다. 게다가 그 여자애는 다음 해에 나오는 속편에서 제일 먼저 죽는다.”

“엔딩이라는 건 없다. 그렇게 따지면 시작도 없다. 모든 건 중간이다.”

교과서적인 인간 > 지독한 개자식


은하수를 여행하는 히치하이커를 위한 안내서에 나온 영어 속어와 농담

Closed book : 닫힌 책 (알 수 없는 일)
bee’s knees : 대단히 훌륭하다는 뜻의 속어
now what : 자, 이제 뭘 하지?
oh, well : ‘오, 이거 원’정도의 의미로 실망 낭패의 감정을 전달한다.
out of thin air : 희박한 대기 속에서 ‘느닷 없이’를 뜻하는 관용어.
lose one’s mind : 정신을 잃다. ‘미치다, 돌아버리다.’를 뜻하는 관용표현.
Silver-Tongued : 입담이 매끄러워 설득력이 있다.
STD(Sexually Transmitted Disease) : 성행위로 감염되는 질병
crap out :똥을 싸다. 혼비백산하다.
stiff upper lip : 사립학교 출신의 영국 지식인층은 발음할 때 윗입술을 잘 움직이지 않는다고 해서 그들을 ‘빳빳한 윗입술’이라고 부르기도 한다.
je ne sais quoi : 쥐느세쿠아. 프랑스어로 ‘나도 뭔지 몰라’라는 뜻. 표현할 수 없는 무엇인가를 뜻한다.
paddy : 패디. 패트릭의 애칭으로 영국 영어에서 아일랜드인을 폄하해 부르는 말이다.
begorrah : 베고라! 아일랜드 특유의 감탄사 신으로 부터(by God)의 완곡한 표현. 예) 날씨 참 좋네, 베고라!
보드라운 날씨를 하나님께 감사. 아일랜드식 표현
froody : 프루디는 grand; wonderful; cool과 동의어이다. 멋지다. 히치하이커 위키피디아(http://hitchhikers.wikia.com/wiki/Froody) 에는 The quality of being a frood.라고 나와있다.
Oh really, O’Reilly? : 오리얼리, 오라일리? ‘오, 그러셔, 이 친구야?’ 정도의 뜻으로 비꼬는 의미가 담겨 있는 말.
jumentous : ‘말 오줌 냄새가 나는’이라는 뜻의 형용사. 사전을 찾아보니 jument는 불어이고, 영어로는 mare(암말)을 뜻한다.
Go screw yourself : ‘엿 먹어’ 정도에 상응하는 욕. go f*ck yourself을 완화한 표현. f*ck you!의 다른 표현이다.
fruity pants: 영국 영어에서 여자 같은 동성애자를 폄하하는 말이다.



by


Tags : , , , , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

아마존 AWS Elastic Beanstalk에 Python Flask 배포환경 구축을 위한 설정

아마존 Elastic Beanstalk은 애플리케이션을 올리기만 하면 Elastic Beanstalk이 용량 프로비저닝, 로드 밸런싱, 자동 조정,
애플리케이션 상태 모니터링에 대한 배포 정보를 자동으로 처리한다.
개발자는 개발에만 신경 쓰면 인프라는 아마존에서 다 해주겠다는 말이다.
이 얼마나 반가운 소리인가?
그러나 막상 Elastic Beanstalk를 쓰려면 손수 설정해야 하는 부분이 많다.
이 글에서는 static 파일을 아마존 CDN인 CloudFront를 통해 제공한다는 가정하에 크게 세 부분으로 나누어 설명하겠다.
첫째는 아마존 콘솔 단에서 IAM,S3,CloudFront설정이고,
둘째는 Elastic Beanstalk .ebextensions 설정.
마지막은 Python boto를 이용한 배포 스크립트다.
게으른 개발자로서 좀 편해 보고자 아마존 AWS Elastic Beanstalk을 쓰면서 환경 설정 때문에 애를 많이 먹었다.
AWS Elastic Beanstalk을 고려 중인 또 다른 개발자가 이 글을 읽고 같은 삽질을 않으면 좋겠다.

AWS 콘솔 설정

IAM 설정

배포 권한을 가진 Group를 만든다.
예제에서 그룹명은 Dorajistyle-deploy로 하겠다.
User인 dorajistyle은 Dorajistyle-deploy 그룹에 소속되어, 배포시에 dorajistyle유저 정보로 배포하게 된다.
Dorajistyle-deploy그룹은 아래의 policy를 가진다.
{
  "Version": "2012-10-17",
  "Statement": [
     {
      "Effect": "Allow",
      "Action": [
        "elasticbeanstalk:*",
        "ec2:*",
        "elasticloadbalancing:*",
        "autoscaling:*",
        "cloudwatch:*",
        "s3:*",
        "sns:*",
        "cloudformation:*",
        "rds:*",
        "iam:AddRoleToInstanceProfile",
        "iam:CreateInstanceProfile",
        "iam:CreateRole",
        "iam:PassRole",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "QueueAccess",
      "Action": [
        "sqs:ChangeMessageVisibility",
        "sqs:DeleteMessage",
        "sqs:ReceiveMessage"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "MetricsAccess",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Effect": "Allow",
      "Resource": "*"
    },
    {
      "Sid": "Stmt110100200000",
      "Effect": "Allow",
      "Action": [
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::dorajistyle/*",
        "arn:aws:s3:::dorajistyle",
        "arn:aws:s3:::dorajistyle-static/*",
        "arn:aws:s3:::dorajistyle-static",
        "arn:aws:s3:::dorajistyle-deploy/*",
        "arn:aws:s3:::dorajistyle-deploy",
        "arn:aws:s3:::elasticbeanstalk-ap-northeast-1-000000000000",
        "arn:aws:s3:::elasticbeanstalk-ap-northeast-1-000000000000/*"
      ]
    },
    {
      "Sid": "Stmt130000013000",
      "Effect": "Allow",
      "Action": [
        "rds:*"
      ],
      "Resource": [
        "arn:aws:rds:ap-northeast-1:000000000000:db:dorajistyle"
      ]
    },
{
      "Sid": "Stmt1399636332000",
      "Effect": "Allow",
      "Action": [
        "elasticbeanstalk:*"
      ],
      "Resource": ["*","arn:aws:elasticbeanstalk:ap-northeast-1:000000000000:application/dorajistyle",
"arn:aws:elasticbeanstalk:ap-northeast-1:000000000000:environment/dorajistyle/dorajistyle"
,"arn:aws:elasticbeanstalk:ap-northeast-1:000000000000:applicationversion/dorajistyle/*"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:DescribeStacks",
        "cloudformation:DescribeStackEvents",
        "cloudformation:DescribeStackResources",
        "cloudformation:GetTemplate",
        "cloudformation:List*"
      ],
      "Resource": "*"
    }


S3 설정

S3버켓은 총 3개가 필요하다.

dorajistyle-deploy
배포용 zip파일을 업로드할 버켓이다. 사용자 dorajistyle만 접근 가능하며, 버켓 설정은 기본 그대로 사용하면 된다.

CORS Configuration
<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>


dorajistyle-static
static 파일을 저장할 버켓이다. 누구나 읽을 수 있는 버켓이다.

Bucket policy
{
 "Version": "2008-10-17",
 "Id": "Policy1394587645145",
 "Statement": [
  {
   "Sid": "Stmt1394587643817",
   "Effect": "Allow",
   "Principal": {
    "AWS": "*"
   },
   "Action": "s3:GetObject",
   "Resource": "arn:aws:s3:::dorajistyle-static/*"
  }
 ]
}


CORS Configuration
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>http://*.dorajistyle.pe.kr</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>http://*.www.dorajistyle.pe.kr</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>http://dorajistyle.elasticbeanstalk.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedMethod>DELETE</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedHeader>Authorization</AllowedHeader>
        <AllowedHeader>x-requested-with</AllowedHeader>
        <AllowedHeader>origin</AllowedHeader>
    </CORSRule>
</CORSConfiguration>


dorajistyle
이미지등의 유저 컨텐츠를 저장할 버켓이다.
예제에서는 모든 유저가 읽을 수 있도록 설정되었는데, 이는 사용 용도에 따라 변경이 가능하다.

Bucket Policy
{
 "Version": "2008-10-17",
 "Id": "Policy1394587559249",
 "Statement": [
  {
   "Sid": "Stmt1394587510887",
   "Effect": "Allow",
   "Principal": {
    "AWS": "*"
   },
   "Action": "s3:GetObject",
   "Resource": "arn:aws:s3:::dorajistyle/*"
  }
 ]
}


CORS Configuration
<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>


CloudFront 설정

dorajsityle-static S3에 CloudFront를 연결한다.
Origin Domain Name에 S3 버켓 주소를 적으면 된다.
만약 CloudFront에 연결이 잘 되었는데도 리소스를 찾지 못한다면 Invalidations에서 해당 리소스를 무효화한다.

.ebextensions 설정

Elastic Beanstalk에 어플리케이션을 올리면 마법처럼 돌아간다고는 하지만,
각 어플리케이션마다 필요한 라이브러리를 모두 설치해 둘 순 없다.
그래서 .ebextensions 설정을 통해 각 어플리케이션에 맞는 라이브러리 설치와, 서버 설정 변경등이 가능하다.
.ebextensions에 대한 설명은 아마존의 컨테이너 맞춤 설정 안내(http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html)를 참조하면 된다.
이 글에서는 yum 패키지 업데이트와 라이브러리 설치, 배포 hook 설정 변경과 아파치 서버 변경을 다룬다.

01_yum_update.config

yum 패키지를 업데이트 한다.
commands:
  yum_updates: 
    command: "yum --security update -y"


02_package_update.config

필요한 yum 패키지를 설치한다.
packages키를 이용해도 되지만, 충돌이 일어날 경우 command키를 이용한 설치도 한 방법이다.
commands:
  yum_package_updates: 
    command: "yum install python-devel python-pip libtiff-devel libjpeg-turbo-devel libzip-devel freetype-devel lcms2-devel tcl-devel php -y --skip-broken"


03_pre_requirements.config

Elastic Beanstalk에 파이썬 어플리케이션을 업로드 하면,
requirements.txt파일을 찾아 필요한 파이썬 라이브러리를 자동으로 설치해 준다.
그런데 간혹 한번에 설치가 안되어 나누어 설치해야 하는 라이브러리가 있다.
몇몇 라이브러리를 설치할때 pip에서 발생하는 문제로 미리 설치할 라이브러리를 pre_requirements.txt에 넣어두고 먼저 설치하면 문제없이 설치된다.
다만 pre_requirements.txt 파일을 먼저 설치하려면 배포 hook코드를 변경해야 한다.
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/03deploy.py":
    mode: "000755"
    owner: root
    group: users
    content: |
      #!/usr/bin/env python
      import os
      from subprocess import call, check_call
      import sys
      sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
      import config


      def install_virtualenv():
          # If python 2.7 is installed, make the virtualenv use it. Else use the default system 2.6
          if config.get_python_version() == '2.7':
              cmd = 'virtualenv -p /usr/bin/python27 {0}'
          else:
              cmd = 'virtualenv {0}'

          return_code = call(cmd.format(config.APP_VIRTUAL_ENV), shell=True)

          if return_code != 0:
              print "WARN: error running '%s'" % cmd


      def install_dependencies():
          pre_requirements_file = os.path.join(config.ON_DECK_DIR, 'app', 'pre_requirements.txt')
          requirements_file = os.path.join(config.ON_DECK_DIR, 'app', 'requirements.txt')
          if os.path.exists(pre_requirements_file):
              check_call('%s install --use-mirrors -r %s' % (os.path.join(config.APP_VIRTUAL_ENV, 'bin', 'pip'), pre_requirements_file), shell=True)
          if os.path.exists(requirements_file):
              # Note, we're sharing the virtualenv across multiple deploys, which implies
              # this is an additive operation. This is normally not a problem and is done
              # to minimize deployment time (the requirements are not likely to drastically
              # change between deploys).
              check_call('%s install --use-mirrors -r %s' % (os.path.join(config.APP_VIRTUAL_ENV, 'bin', 'pip'), requirements_file), shell=True)


      def main():
          try:
              install_virtualenv()
              install_dependencies()
          except Exception, e:
              config.emit_error_event(config.USER_ERROR_MESSAGES['badrequirements'])
              config.diagnostic("Error installing dependencies: %s" % str(e))
              sys.exit(1)

      if __name__ == '__main__':
          config.configure_stdout_logger()
          main()


04_wsgi.config

아파치 서버 설정 파일을 입맛에 맞게 변경한다. wsgi.conf 파일을 .ebextensions 폴더에 넣어두고,
wsgi.config 훅에 아래 코드를 넣으면 서버로 설정을 복사한다.
container_commands:
  replace_wsgi_config:
    command: "cp .ebextensions/wsgi.conf /opt/python/ondeck/wsgi.conf"


wsgi.conf

캐쉬와 gzip압축등 설정을 담았다.
# LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On

<VirtualHost *:80>
###############
# TYPES FIX #
###############
AddType text/css .css
AddType text/javascript .js

############################
# IE 11 Prevent Cache      #
############################
BrowserMatch "MSIE 11.0;" IE11FOUND
BrowserMatch "Trident/7.0;" IE11FOUND
# FileETag None
Header unset ETag env=IE11FOUND
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"  env=IE11FOUND
Header set Pragma "no-cache" env=IE11FOUND
Header set Expires "Thu, 24 Feb 1983 02:50:00 GMT" env=IE11FOUND

####################################
# Serve Pre-Compressed statics #
####################################
RewriteEngine On
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.(html|css|js|json|woff) $1\.$2\.gz [QSA]

# Prevent double gzip and give the correct mime-type
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=FORCE_GZIP]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=FORCE_GZIP]
RewriteRule \.html\.gz$ - [T=text/html,E=no-gzip:1,E=FORCE_GZIP]
RewriteRule \.json\.gz$ - [T=application/json,E=no-gzip:1,E=FORCE_GZIP]
RewriteRule \.woff\.gz$ - [T=application/x-font-woff,E=no-gzip:1,E=FORCE_GZIP]

Header set Content-Encoding gzip env=FORCE_GZIP

#######################
# GZIP COMPRESSION #
######################
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml text/javascript application/x-javascript application/x-httpd-php
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
Header append Vary User-Agent env=!dont-vary

################################
# Leverage browser caching #
###############################
<FilesMatch ".(ico|pdf|jpg|jpeg|png|gif|html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=31536050"
</FilesMatch>

############################
# CDN Rewrite Setting   #
############################
# Header set Access-Control-Allow-Origin: "*"
# UseCanonicalName On
# Don't redirect if the static hostname(s) loops back.
# RewriteCond %{HTTP_HOST} !^static\.
# Include only those static file extensions that we want to off-load.
# RewriteCond %{REQUEST_FILENAME} ^/.*\.(html|xml|txt|zip|gz|tgz|swf|mov|wmv|wav|mp3|pdf|svg|otf|eot|ttf|woff|jpg|jpeg|png|gif|ico|css|js|json)$
# RewriteRule /static/(.*)? http://static.dorajistyle.pe.kr/$1 [redirect=permanent,last]

#########################
# WSGI configuration #
#########################

WSGIScriptAlias / /opt/python/current/app/application.py

<Directory /opt/python/current/app/>
# Order allow,deny
# Allow from all
Require all granted
</Directory>

WSGIDaemonProcess wsgi processes=1 threads=15 display-name=%{GROUP} \
python-path=/opt/python/current/app:/opt/python/run/venv/lib/python2.7/site-packages user=wsgi group=wsgi \
home=/opt/python/current/app
WSGIProcessGroup wsgi
# WSGIScriptReloading On
</VirtualHost>


배포 스크립트.


deploy.sh

static폴더를 최적화하고, DB스키마가 변경되었을 경우 업데이트 하며, 필요한 파일만 압축하여 aws에 올린다.
optimize_static.sh와 upload_to_aws.py이 중요하다.
#!/bin/bash
STARTTIME=$(date +%s)
./optimize_static.sh
rm *.zip
prefix=$(sed -n '/^PREFIX/ s/.*\= *//p' ./application/config/guid.py | tr -d \')
guid=$(sed -n '/^GUID/ s/.*\= *//p' ./application/config/guid.py | tr -d \')
name="$prefix-$guid"
zip -r $name * ./.ebextensions/* -x ./.git\* ./.idea\* ./docs\* ./node_modules\* ./alembic\* ./tests\* ./images\* *.zip  *.DS_Store  ./application/frontend/static/\*
zip_file=$name'.zip'
echo "$zip_file"
echo -e "Do you want to upgrade alembic schema? (Yes/No) : \c"
read ANSWER
if [ "$ANSWER" == "Yes" ]
then
    alembic revision --autogenerate -m "Alembic initilized boilerplate tables."
fi
echo -e "Do you want to update schema? (Yes/No) : \c"
read ANSWER
if [ "$ANSWER" == "Yes" ]
then
    alembic upgrade head
fi
echo -e "Did you reviewed source and confirmed running status? (Yes/No) : \c"
read ANSWER
if [ "$ANSWER" == "Yes" ]
then
    python2 upload_to_aws.py $name
else
    echo "Checking status and trying to deploy again."
fi
ENDTIME=$(date +%s)
echo "$name"
echo "It takes $(($ENDTIME - $STARTTIME)) seconds to complete this task..."


optimize_static.sh

guid를 생성하고 총 4개까지 히스토리를 남긴다. 혹시 배포가 잘못되어 롤백을 하게될 경우 이전 4버전까지 롤백이 가능하도록 한다.
테스트 서버에 먼저 배포하여 테스트 하고 문제가 없으면 실 서버에 배포를 하기 때문에 실 서버에서 4버전이나 롤백할 가능성은 상당히 희박하다.
static 파일은 require optimizer를 사용해 하나의 js와 하나의 css파일로 합치고, sed를 이용해 디버깅을 위해 사용하던 로그 코드와 공백을 날려 용량을 줄인다.
그리고 각 파일을 gzip으로 압축하여 용량을 다시 한번 줄인다.
#!/bin/bash
guid=$(uuidgen | tr -d '\n-' | tr '[:upper:]' '[:lower:]')
guid=${guid:0:8}
today=$(date '+%Y%m%d')
guid=$today'-'$guid
echo "$guid"
extremely_very_old_guid=$(sed -n '/^VERY_OLD_GUID/ s/.*\= *//p' ./application/config/guid.py)
sed -i "s/^EXTREMELY_VERY_OLD_GUID = .*/EXTREMELY_VERY_OLD_GUID = $extremely_very_old_guid/" ./application/config/guid.py
very_old_guid=$(sed -n '/^OLD_GUID/ s/.*\= *//p' ./application/config/guid.py)
sed -i "s/^VERY_OLD_GUID = .*/VERY_OLD_GUID = $very_old_guid/" ./application/config/guid.py
old_guid=$(sed -n '/^GUID/ s/.*\= *//p' ./application/config/guid.py)
sed -i "s/^OLD_GUID = .*/OLD_GUID = $old_guid/" ./application/config/guid.py
sed -i "s/^GUID = .*/GUID = '$guid'/" ./application/config/guid.py
cd './application/frontend/compiler/'
grunt static
grunt --gruntfile Gruntfile_uncss.js
cd '../../..'
cd './optimizer'
node ./r.js -o build.js
cd "../"
sed -i -r "s/(\ ?|\ +),(\ ?|\ +)[a-zA-Z]\.log(Error|Json|Object|Trace|Debug|Info|Warn)(\ ?|\ +)\([^)]*\)(\ ?|\ +),(\ ?|\ +)/,/g" ./application/frontend/static-build/js/app.js
sed -i -r "s/(\ ?|\ +),(\ ?|\ +)[a-zA-Z]\.log(Error|Json|Object|Trace|Debug|Info|Warn)(\ ?|\ +)\([^)]*\)(\ ?|\ +),?(\ ?|\ +);/;/g" ./application/frontend/static-build/js/app.js
sed -i -r "s/(\ ?|\ +),?(\ ?|\ +)[a-zA-Z]\.log(Error|Json|Object|race|Debug|Info|Warn)(\ ?|\ +)\([^)]*\)(\ ?|\ +),?(\ ?|\ +);//g" ./application/frontend/static-build/js/app.js
sed -i -r "s/(\ ?|\ +),?(\ ?|\ +)[a-zA-Z]\.log(Error|Json|Object|race|Debug|Info|Warn)(\ ?|\ +)\([^)]*\)(\ ?|\ +),?(\ ?|\ +);?/\n/g" ./application/frontend/static-build/js/app.js

cd './application/frontend/static-build/locales'
find . -name '*.json' -exec sed -i '/^\s∗\/\//d' {} \;
find . -name '*.json' -exec sed -i 's/^[ \t]*//g; s/[ \t]*$//g;' {} \;
find . -name '*.json' -exec sed -i ':a;N;$!ba;s/\n/ /g' {} \;
find . -name '*.json' -exec sed -i 's/\"\s*:\s*\"/\":\"/g' {} \;
find . -name '*.json' -exec sed -i 's/\"\s*,\s*\"/\",\"/g' {} \;
find . -name '*.json' -exec sed -i 's/\s*{\s*/{/g' {} \;
find . -name '*.json' -exec sed -i 's/\s*}\s*/}/g' {} \;
cd '../..'
gzip -r --best ./static-build
rename .gz '' `find static-build -name '*.gz'`


upload_to_aws.py

보토를 이용해 Elastic Beanstalk을 업데이트 한다. 배포가 끝나면 guid를 검사하여 오래된 버전 소스를 삭제한다.
static파일 업로드에서 눈여겨 볼 점은 key에 Content_Encoding 메타 데이터를 gzip으로 해 주어야 하는 것이다.
이는 위의 optimize static에서 이미 gzip으로 압축했기 때문이다.

# coding=UTF-8
"""
    application.util.__init__
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    by dorajistyle

    __init__ module

"""
from Queue import Queue
import logging
import os
import string
import boto
from boto.beanstalk import connect_to_region
import sys
# import time
from application.config.aws import AWS_STATIC_S3_BUCKET_NAME, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, \
    AWS_ELASTIC_BEANSTALK_REGION, AWS_ELASTIC_BEANSTALK_APP_NAME, AWS_ELASTIC_BEANSTALK_ENVIRONMENT_ID, \
    AWS_ELASTIC_BEANSTALK_ENVIRONMENT_NAME, AWS_ELASTIC_BEANSTALK_S3_BUCKET_NAME
from application.config.guid import OLD_GUID, VERY_OLD_GUID, PREFIX_GUID, EXTREMELY_VERY_OLD_GUID
from application.properties import STATIC_GUID
from threading import Thread
logging.basicConfig()
logger = logging.getLogger()


def log_exception(text):
    logger.error(msg=text)

q = Queue()
# source directory
sourceDir = 'application/frontend/static-build/'
# destination directory name (on s3)
destDir = STATIC_GUID+'/'

conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
                       AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(AWS_STATIC_S3_BUCKET_NAME)
eb_bucket = conn.get_bucket(AWS_ELASTIC_BEANSTALK_S3_BUCKET_NAME)
keys = list()
old_keys = list()
eb_keys = list()
for key in bucket.list():
    keys.append(key.name)
for key in eb_bucket.list():
    eb_keys.append(key.name)
eb = connect_to_region(AWS_ELASTIC_BEANSTALK_REGION,
                       aws_access_key_id=AWS_ACCESS_KEY_ID,
                       aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
uploadDirNames = []
uploadFileNames = []
for path in os.listdir( sourceDir ):
    if not os.path.isfile(os.path.join( sourceDir, path)):
        uploadDirNames.append(path+'/')


for (sourceDir, dirnames, filenames) in os.walk(sourceDir):
    for subDir in dirnames:
        # print('dirname:'+ subDir)
        for (subDir, sub_dirnames, subfilenames) in os.walk(sourceDir+subDir):
            for subfilename in subfilenames:
                sub_path = string.replace(subDir, sourceDir, '')
                uploadFileNames.append(os.path.join(sub_path, subfilename))
    uploadFileNames.extend(filenames)
    break


def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()


def upload_deploy(source_path, dest_path):
    """
    Upload static files to S3 bucket.
    :return:
    """

    try:
        dest_path = dest_path.encode('utf-8')
        key = eb_bucket.new_key(dest_path)
        key.set_contents_from_filename(source_path,
                                       cb=percent_cb, num_cb=10)
    except BaseException as be:
        log_exception(be)
        return False
    return True


def upload_static(source_path, dest_path):
    """
    Upload static files to S3 bucket.
    :return:
    """

    try:
        dest_path = dest_path.encode('utf-8')
        key = bucket.new_key(dest_path)
        # if key.name.endswith(('.gz', '.gzip')):
        key.set_metadata('Content-Encoding', 'gzip')
        key.set_contents_from_filename(source_path,
                                       cb=percent_cb, num_cb=10)
    except BaseException as be:
        log_exception(be)
        return False
    return True


def worker():
    while True:
        item = q.get()
        if item['source_path'] == item['dest_path']:
            upload_deploy(item['source_path'], item['dest_path'])
        else:
            upload_static(item['source_path'], item['dest_path'])
        q.task_done()
        print 'Uploading %s to Amazon S3 bucket %s' % \
              (item['source_path'], item['dest_path'])

# threads = []
if len(sys.argv) == 2:
    eb_app = eb.describe_applications(application_names=AWS_ELASTIC_BEANSTALK_APP_NAME)
    versions = eb_app['DescribeApplicationsResponse']['DescribeApplicationsResult']['Applications'][0]['Versions']
    # if len(versions) > 2:
    #     versions = versions[:2]
    latest_version = PREFIX_GUID.replace('\'', '')+'-'+OLD_GUID.replace('\'', '')
    very_old_version = PREFIX_GUID.replace('\'', '')+'-'+VERY_OLD_GUID.replace('\'', '')
    extremely_very_old_version = PREFIX_GUID.replace('\'', '')+'-'+EXTREMELY_VERY_OLD_GUID.replace('\'', '')
    try:
        if latest_version in versions:
            versions.remove(latest_version)
        if very_old_version in versions:
            versions.remove(very_old_version)
        if extremely_very_old_version in versions:
            versions.remove(extremely_very_old_version)

        for key in bucket.list(prefix=OLD_GUID.replace('\'', '')):
            keys.remove(key.name)
        for key in bucket.list(prefix=VERY_OLD_GUID.replace('\'', '')):
            keys.remove(key.name)
        for key in bucket.list(prefix=EXTREMELY_VERY_OLD_GUID.replace('\'', '')):
            keys.remove(key.name)

        for eb_key in eb_bucket.list(prefix=latest_version):
            eb_keys.remove(eb_key.name)
        for eb_key in eb_bucket.list(prefix=very_old_version):
            eb_keys.remove(eb_key.name)
        for eb_key in eb_bucket.list(prefix=extremely_very_old_version):
            eb_keys.remove(eb_key.name)

        file_name = sys.argv[1]
        zip_file = file_name + '.zip'
        for i in range(8):
            t = Thread(target=worker)
            t.daemon = True
            t.start()
        item = {}
        item['source_path'] = zip_file
        item['dest_path'] = zip_file
        q.put(item)
        for filename in uploadFileNames:
            source_path = os.path.join(sourceDir + filename)
            dest_path = os.path.join(destDir, filename)
            item = {}
            item['source_path'] = source_path
            item['dest_path'] = dest_path
            q.put(item)
        q.join()
        eb.create_application_version(AWS_ELASTIC_BEANSTALK_APP_NAME, version_label=file_name,
                                      description=None, s3_bucket=AWS_ELASTIC_BEANSTALK_S3_BUCKET_NAME, s3_key=zip_file)
        eb.update_environment(environment_id=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_ID,
                              environment_name=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_NAME,
                              version_label=file_name)
        bucket.delete_keys(keys)
        eb_bucket.delete_keys(eb_keys)
        for version in versions:
            eb.delete_application_version(application_name=AWS_ELASTIC_BEANSTALK_APP_NAME, version_label=version, delete_source_bundle=False)
    except BaseException as be:
        print(str(be))
        if latest_version is not None:
            eb.update_environment(environment_id=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_ID,
                                  environment_name=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_NAME,
                                  version_label=latest_version)
    # print('eb application' + str(eb.retrieve_environment_info(environment_id=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_ID,
    #                       environment_name=AWS_ELASTIC_BEANSTALK_ENVIRONMENT_NAME)))
    print('AWS Elastic Beanstalk updated.')
print('Bye Bye!')



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

소설가와 드라마 작가. 영화 시나리오 작가는 어떻게 다른가?

어떻게 하면 더 좋은 콘텐츠를 만들어 낼까 고민하던 중 도서관에서 진행하는 12주짜리 창작 프로그램을 발견했다.
고수 작가의 창작 비법과 더불어 작가로 살아가는 인생 경험담도 얻어들으면 하는 바람으로 수강을 시작했다.

오늘 첫 강의에선 소설, 드라마, 영화 창작의 차이점에 대한 내용을 들었다.
소설(순수문학)은 내면에서 나오는 이야기를 쓰지만, 드라마와 영화는 시청자와 관객 호응을 생각해야 한다.
영화는 일단 돈을 내고 극장에 들어온 이상 영화가 끝날 때까지는 관객이 앉아있지만,
드라마는 재미가 없으면 바로 채널을 바꾼다.
영화는 관객이 영화를 다 보고 나갈 때 재미있는 영화였다는 최면을 걸어주면 성공하고,
드라마는 한 회가 끝나기 전에 시청자의 호기심을 자극하면 성공한다.

소설

자신의 내면을 풀어내는 것이다.
그것이 시대 흐름과 맞았을 때 그에 공감하는 많은 독자가 생긴다.
모든 것은 나(소설가)로부터 시작되어 이에 공감하는 독자, 평론가, 출판사와 함께 작가의 삶을 영위한다.

1990년대에는 여성소설이 인기가 좋았고,
2000년대에는 서사 소설이 인기 좋았다.
2014년 현재는 위안과 희망을 담은 소설이 인기를 누린다.

소설가 자신의 내면을 풀어내는 것이지만, 시대에 그를 잘 녹여내지 못하면 대중에게 외면받는다.

영화

내용도 중요하지만, 예고와 홍보, 입소문이 중요해서 대중에게 어떻게 알릴 것인가가 중요하게 작용한다.
예를 들면 요즘 흥행하는 ‘명량’은 믿을만한 영웅이 없는 현대인들에게 이순신이라는 ‘영웅’의 이미지를 줌으로써 흥행에 성공하였다.
영화에서 중요한 것은 관객이 영화를 다 보고 나왔을 때 ‘재미있게 봤다.’라는 최면을 걸어주면 성공이다.

영화 시나리오 작가가 되려면 시나리오 마켓(http://www.scenariomarket.or.kr/)에 시나리오를 올리거나
영화학과를 졸업하고 같은 학교 인맥의 도움을 얻는 방법.
그리고 심산스쿨(http://www.simsanschool.com/)등에서 교육을 듣고 작가가 되는 방법이 있다.


영화 시나리오 작성에 도움이 되는 책

  • Story 시나리오 어떻게 쓸 것인가, 로버트 맥기
  • 시나리오 성공의 법칙, 알렉스 엡스타인
  • Save the cat 흥행하는 영화 시나리오의 8가지 법칙, 블레이크 스나이더

영화 흥행 5분의 법칙

  1. 초반 5분에 승부수를 던진다. (굉장한 웃음, 공포, 사건의 시작 등 깊은 인상을 주는 영화의 주된 사건과, 주인공에 대한 정보를 알려준다.)
  2. 15분까지는 초반 사건에 대한 수습, 파장등으로 흘러가면서 주인공의 조력자, 적 등에 대한 어느 정도의 정보가 자연스럽게 제공한다.
  3. 15분이 지나면 관객은 지루함을 느끼니 15분~20분 사이에 초반보다는 약한, 이벤트 정도의 사건 하나가 터져서 다시 흥미진진하게 만든다.
  4. 그 이후에는 롤러코스터를 타 듯, 10~15분 간격으로 작은 사건이 연속적으로 발생하고 이를 해결한다.
  5. 전체의 약 2/3 지점 쯤에 이르러서는 메인 사건이 크게 터져주거나,가장 최종적인 적 vs 주인공의 싸움이 드러난다.
로맨틱 코미디나 멜로물은 법칙과 다르게 흘러가기도 하고,
스릴러의 경우, 차근차근 쌓아가다가 마지막에 터뜨리는 식으로 가기도 한다.

드라마

드라마 작가가 되기 위해서는 방송 3사에서 진행하는 드라마 공모전에 참여하여 입상하는 방법(장편에서 신인이 입상하는 경우는 드물어서 단막극에 신인이 몰린다.).
그리고 드라마 제작사에 들어가서 작가가 되는 방법이 있다.
드라마 제작사에서 신인 작가에게 장난을 치는 경우가 종종 있으므로 드라마 제작사와 일을 할 땐 숙고해야 한다.
드라마는 연속성이 강하기 때문에 후반 10분에서 15분사이에 다음회를 궁금하게 만들면 성공한다.

극 창작의 4대 요소

  • 소재 - 독특한 소재일수록 좋지만, 소재는 재료에 불과하다.
  • 캐릭터 - 얼마나 매력적인 캐릭터를 만들어 내느냐가 관건이다. 한국에서는 사랑스럽고 믿을만한 캐릭터가 인기가 좋다.
  • 대사 - 전문 용어등에는 문어체를 쓰기도 하지만 되도록 구어체를 쓴다. 캐릭터를 잘 이해해야 그에 맞는 대사가 나온다. 잘 쓰여진 대본은 대사만 보아도 말하는 캐릭터가 떠오른다. 소재는 좋은데 재미없는 컨텐츠는 모든 캐릭터의 말투가 비슷해서 캐릭터의 특색이 없기 때문인 경우가 많다.
  • 구성 - 잘 짜여진 구성은 매력적이다. 전체적인 스토리에서 시간의 흐름이나 일어나는 사건에 따라 캐릭터가 어떤 변화를 겪을 것인가를 잘 연구해야 한다.



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

연기 걱정 없이 고기 구워 먹기 좋은 인천 송도 바비큐장.

섬으로 백패킹 가려고 짐을 챙겨 나왔는데 안개 때문에 배가 뜨지 않는다.
나온 김에 고기라도 좀 구워 먹으려고 근처에 갈만한 곳이 없나 둘러보다가 발견한 송도 바비큐장.
늦은 오후에 도착했더니 빈자리를 찾아보기 힘들 정도로 사람이 많다.

자리 잡기-'송도 바비큐장 Songdo BBQ'

돗자리-'송도 바비큐장 Songdo BBQ'

다행히 자리를 접으시는 한 중년 부부가 보여서 냉큼 가서 자리를 잡았다.
“우리가 아침 열 시에 나와서 겨우 잡은 명당인데 운이 좋구먼~”
아침부터 경쟁이 치열한가 보다.
자리를 깔고 주위를 둘러본다.

안개 낀 인천-'송도 바비큐장 Songdo BBQ'

안개가 많이 껴서인지 몽환적인 느낌을 자아낸다.

BBQ-'송도 바비큐장 Songdo BBQ'

고기를 먹으러 왔으니 구워야지!
“치익~~~!”
고기냄새가 코로 스며든다.

야경-'송도 바비큐장 Songdo BBQ'

야경-'송도 바비큐장 Songdo BBQ'

배고플 땐 먹느라 바빴는데, 배가 어느 정도 차고나니 주위를 둘러볼 여유가 생긴다.
다른 이들도 삼삼오오 모여 도심 숲 속에서 여유를 만끽한다.
송도 바비큐장
인천에 산다면 지인들과 고기 구워 먹으며 술 한잔 걸치기 좋은 곳이다.

인천 송도 바비큐장 위치

송도 3교 바로 옆이다.
약도-'송도 바비큐장 Songdo BBQ'



by


Tags : , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

구월동 멕시칸 음식 맛집. 타코 씨엘로.

내부-'구월동 타코 씨엘로 Taco Cielo'

메뉴-'구월동 타코 씨엘로 Taco Cielo'

멕시코는 아직 안 가봤지만,
타코 씨엘로는 지금껏 가본 멕시칸 음식점 중 최고다.
처음엔 일요일에 문을 닫는지 모르고 헛걸음을 했지만, 그래도 왠지 끌리는 곳이라 날을 잘 맞춰 다시 찾았다.
구월동에서 가본 식당 중에 맛으로 승부하는 곳은 여기가 유일하다.
이 동네에 맛집이 워낙 없어서 그렇기도 하지만,
타코 씨엘로는 어디에 자리를 잡더라도 맛집 소리를 들을 멕시칸 요리 전문점이다.
멕시칸 패스트푸드 타코벨이나 프렌차이즈 레스토랑 온더보더 같은 곳이랑 급이 다르다.
뭐 주관적인 견해이니 호불호가 갈릴지 모른다.
고수풀등 향신료를 좋아하지 않고 무난한 맛을 좋아한다면 온더보더가 더 나을 수도 있으니까.

기네스 세트-'구월동 타코 씨엘로 Taco Cielo'

기네스-'구월동 타코 씨엘로 Taco Cielo'

또 이 집은 기네스 생맥주가 일품인데,
타코 씨엘로 덕에 멕시칸 요리랑 기네스랑 이렇게 잘 어울린다는 걸 알았다.

멕시칸 볶음밥-'구월동 타코 씨엘로 Taco Cielo'

퀘사디야-'구월동 타코 씨엘로 Taco Cielo'

상당히 여러 종류의 음식을 파는데, 모두 다 먹어보진 않았으나 대체로 맛있다.
지금껏 가장 만족스러웠던 음식들을 꼽자면 퀘사디야, 타코, 치즈 감자튀김, 부리또.
맛있다.
기네스 생맥주랑 먹으면 더 맛있다.
타코 씨엘로.
멕시칸 요리의 진수다.

구월동 멕시칸 음식 맛집. 타코 씨엘로 위치.

인천시 남동구 구월동 1474-2, 대광프라자6층

큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

구월동 브런치 카페. 도레도레 골든 파이.

자리-'도레도레 골든파이 dore dore Golden pie'

메뉴-'도레도레 골든파이 dore dore Golden pie'

식당과 술집이 즐비한 구월 로데오거리지만,
이른 시간에 요기할 집은 많지 않다.
도레도레 브런치 카페인 골든 파이는 아침 9시 30분 부터 문을 여니,
조조 영화 한 편 보고서 밥 먹기 좋은 곳이다.
아침엔 사람도 별로 없고 조용한 편인 데다가 맛도 괜찮으니 만족스럽다.

치아바타-'도레도레 골든파이 dore dore Golden pie'

파니니-'도레도레 골든파이 dore dore Golden pie'

팬케이크 메뉴가 많지만, 식사로는 치아바타나 파니니가 든든하다.

파이-'도레도레 골든파이 dore dore Golden pie'

이름이 ‘골든 파이’인 만큼 파이를 파는데 너무 달다.
옆집 ‘고마워 케이크’가 낫다.
도레도레 장사가 잘 되어 그런지 예전처럼 친절하지 않다.
그래도 자주 찾게 되는 건 이 동네에 견줄만한 곳이 없어서다.
아쉽다.
구월동에 맛과 친절함을 두루 갖춘 멋진 브런치 카페가 생기면 좋겠다.

구월동 도레도레 골든파이 브런치 카페 위치


큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

분위기 좋은 이자카야. 신포동 물고기.

입구-'신포동 이자카야 물고기 Izakaya Mulgogi '

물고기-'신포동 이자카야 물고기 Izakaya Mulgogi '

지인들과 대화를 나누는 장소로 주로 이용되는 술집은 대체로 시끌벅적하다.
또 이런 공간은 흡연자와 비흡연자가 뒤섞이기 일쑤고, 담배 연기가 가득 찬다면 비흡연자들은 괴롭기 마련이다.
이자카야 물고기는 천장을 높이 하여 활기찬 분위기는 살리면서,
소음과 담배 연기를 잡아 쾌적한 분위기를 만드는 요리 주점이다.

오코노미야키-'신포동 이자카야 물고기 Izakaya Mulgogi '

분위기뿐 아니라 음식 맛도 괜찮은 편이니 한잔하고 싶을 때면 발걸음을 잡아끄는 매력이 있는 곳이다.
이자카야 물고기의 훤칠한 청년은 항상 주위를 살피다가 필요한 것을 바로바로 가져다주신다.
여러 주점이나 음식점에서 처음 주문할 때 말고는 직원이 테이블을 살피지 않는 경우가 많은데,
이자카야 물고기는 그런 면에서도 참 마음에 드는 곳이다.
이자카야 물고기.
이야기 나누며 가볍게 한 잔 걸치기 좋은 주점이다.

신포동 이자카야 물고기 위치

큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

직접 굽는 빵이 맛있는 신포동 카페. 더 도자기.

입구-'신포동 더 도자기 The Dojagi Cafe'

최근 들어 신포동에 새로운 음식점이 많이 들어섰다.
어떤 곳은 호기심에 들렀다가 실망만 하고 나오게 되고,
또 어떤 곳은 한 번 들어가 보려고 마음을 먹더라도 소리소문없이 사라지기도 한다.
더 도자기도 지날 때마다 눈에 자꾸 밟히던 곳으로,
이번에 새로운 동네 맛집으로 등극했다.:D
날이 더워서 묵밥을 먹으려다가 묵밥집이 문을 닫아서 차선책으로 선택한 더 도자기.
매우 만족스러운 카페다.
더 도자기 메뉴는 그리 다양하지 않다.
숙주가 들어간 면을 먹으려고 시켰는데 재료가 다 떨어져서 가지 볶음밥과 리코타 치즈 샐러드를 먹었다.

가지 볶음밥-'신포동 더 도자기 The Dojagi Cafe'

가지 볶음밥은 그냥 괜찮은 맛으로 집에서도 이 정도 맛을 내는 것이 어렵지 않다.

리코타 치즈 샐러드-'신포동 더 도자기 The Dojagi Cafe'

더 도자기 리코타 치즈 샐러드는 바게트와 함께 나오는데,
이게 정말 맛있다.
운이 좋아 빵이 막 구워진 시간에 맞춰 가서 빵이 참 맛있었다.
지금껏 살면서 먹어본 바게트 중에 으뜸이다.
어쩜 그 날 특별히 빵 반죽이 잘되었을 지도 모르지만,
바로 구워 나온 바게트를 먹었더니 지금껏 먹어왔던 바게트가 과연 그 바게트인가 싶다.
바게트에 감동해서 디저트까지 먹었다.

케이크-'신포동 더 도자기 The Dojagi Cafe'

조각 케이크는 맛이 나쁘지 않은 정도로 그냥 그렇다.
그러나 요거트 크림 롤케이크가 일품이다.
촉촉한 롤에 요거트 크림이 딱 붙었다.
롤 케이크 안에 발라진 크림 혹은 잼과 빵이 따로 노는 느낌이라 항상 아쉬웠는데,
더 도자기에서 만든 이 롤케이크는 마치 오랜 기간 호흡을 맞춰온 듀엣 가수의 노래처럼 혀에서 감미롭게 녹아든다.
더 도자기.
신포동 맛집으로 자리 잡을 듯하다.

신포동 더 도자기 위치


큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

바다 위를 걷는 기분. 장봉도 가막머리 백패킹.

높은 산을 다녀온 뒤라 몸이 여기저기 쑤시고 피곤했다.
어디 가까운 데서 돗자리 깔고 맑은 공기 쐬며 푹 쉬고 싶은 마음에 백패킹을 결정했다.
‘산과 바다가 어우러진 장봉도 가막머리에서 백패킹의 여유를~!’
그러나 역시 집 나가면 고생이다.

우선 삼목 선착장까지 거리가 꽤 된다.
동인천에서 삼목 선착장 직행 공영버스가 얼마 전에 새로 생겼는데, 미리 알지 못해서 대중교통을 이용해서 다녀왔다.

버스는 삼목 선착장에서 07:50, 10:50, 13:50, 15:50분에 출발하고 동인천역에서는 09:00, 11:50, 14:50, 16:50분에 출발한단다.
(http://www.ongjin.go.kr/ndsys/ndbbs/bbsview.asp?bbscode=board5&seq=7200&gotopage=4&keyfield=&keyword=&deptidx=&search_dept=p&sid=134)
동인천에서 대중교통을 이용해서 삼목 선착장 가는 체감거리는 동인천에서 서울 잠실 가는 거리정도 된다. 멀다.

지도-'장봉도 백패킹 Jangbongdo Backpacking'

삼목 선착장에서 장봉도행 배는 한 시간에 한 대 정도로 자주 있는 편인데,
삼십 분 가량 배를 타고 가면 장봉도에 도착한다.
주말을 맞아 나들이 나온 수많은 인파와 콩나물놀이를 하며 버스에 올라탄다.
버스는 현금만 되는데, 카드만 들고 온 사람들이 큰소리로 불만을 토로한다.
휴식하러 왔는데 사람에 치이니 피곤하다.

매점-'장봉도 백패킹 Jangbongdo Backpacking'

장봉도는 꽤 큰 섬이다. 이 넓은 섬 어디에서 야영할까 고민하다가 진촌 해변 쪽으로 마음을 정했다.
진촌 해변 정류장 앞에는 조그마한 매점이 있는데,
육지에서 잊고 온 물건은 정이 매점에서 사면 된다.
정류장에 내려 진촌해변을 향해 걸어갔다.
여기에서 야영하려다 현금이 없어서 못 했다.
야영장 이용료가 현금으로 만원인데,
혹시 배표도 현금으로 내야 할까 봐 비상금을 남겨두느라 야영장 이용을 못 했다. (배표는 카드로 결제해도 된다.)
아무튼 섬에는 꼭 현금을 넉넉히 가지고 와야 한다.

흑염소-'장봉도 백패킹 Jangbongdo Backpacking'

식수가 넉넉하지 않으니, 지도에 나온 찬 우물 약수터 근처에 자리를 잡으려고 이리저리 헤맸다. 땡볕에 짐을 잔뜩 지고 이리저리 헤맸더니 피곤하다.
장봉도 염소는 길을 잃은 백패커를 신기하게 쳐다본다.

결국, 약수터를 못 찾고 다른 곳에 자리를 잡기로 마음먹었다.
매점에서 식수를 보충해 6ℓ 물을 짊어지고 가막머리 방향으로 향한다.

가막머리 가는 길-'장봉도 백패킹 Jangbongdo Backpacking'

가막머리 가는 길-'장봉도 백패킹 Jangbongdo Backpacking'

배낭-'장봉도 백패킹 Jangbongdo Backpacking'

경치가 제법 좋은 곳을 만났다.
야영하기 적당한 자리를 발견해서 짐을 풀었더니 살겠다.
인기 좋고 시끄러운 곳 보다는 한적한 곳에 자리 잡길 잘했다는 생각이다.
가막머리는 워낙 인기가 좋은 곳이니 시끄러울 테니까.
저녁을 맛있게 먹고, 일찌감치 잠자리에 들었다.

‘저벅. 저벅.’
낯선 발소리에 잠에서 깼다.
시간은 새벽 2시. 납량특집이 시작된 시간이다.
랜턴도 켜지 않은 낯선 누군가가 텐트주위를 서성인다.
“누구세요?”
대답이 없다.
간담이 서늘하다.
발소리는 조용히 멀어지는가 싶더니,
조심스레 텐트 주위를 맴돈다.
무섭다.
등산스틱을 텐트 밖 멀리 놓아둔 것이 아쉽다.
급하게 주머니칼을 꺼내 머리맡에 두었지만 빨라진 심박 수는 줄어들 생각을 안 한다.
‘간첩인가?’
장봉도까지 올 정도 간첩이면 내가 무슨 수를 쓴들 살아남긴 힘들겠지.
별별 생각이 다 든다.
얼마 전 보았던 영화 ‘조난자들’이 떠오른다.
사냥당하는 느낌.
‘야 저거 무섭겠는데~’
영화볼 땐 실감이 안 났는데 막상 내가 그 상황에 부닥치니 정말 무섭다.

비가 내리기 시작한다.
삼십 분간 눈을 말똥말똥 뜨고 밖에 소리에 귀 기울였다.
밖에 나가서 확인해 보고 싶은 마음이 굴뚝 같았지만 참았다.
공포영화의 조연들은 모두 그렇게 죽으니까.
나는 그가 어디 있는지 모르고, 그는 내가 어디 있는 줄 안다.
만약 그가 곡괭이나 도끼로 텐트를 내리쳐서 한방에 끝내지 못한다면,
그 역시 위험에 노출되리라.
피가 마른다.
그가 텐트를 찢고 덤비는 무시무시한 일은 일어나지 않았고,
난 해가 뜰 무렵까지 선잠을 잤다.
피곤하다.
지금껏 살면서 가장 두려웠던 시간이다.
장봉도의 긴 밤이 지나고, 아침이 밝았다.
그가 누구였는지 궁금하지만, 호기심보다 목숨이 중요하다.
이렇게 무사히 살아남은 것에 고마움을 느낀다.

가막머리-'장봉도 백패킹 Jangbongdo Backpacking'

가막머리-'장봉도 백패킹 Jangbongdo Backpacking'

아름다운 장봉도 앞바다.
죽어서 여기 빠져 물고기 밥이 되지 않고, 살아서 바다를 보니 감개무량하다.
어제 그건 도대체 누구였을까?!

해안 트레킹-'장봉도 백패킹 Jangbongdo Backpacking'

해안 트레킹-'장봉도 백패킹 Jangbongdo Backpacking'

가막머리를 지나 해안 트레킹을 시작.
이런 덴 괴나리봇짐이나 매고 걸어야지.
짐을 한 수레 싣고 걷기엔 힘들다.
산길은 걸을만한데, 갯바위를 폴짝폴짝 뛰어다닐 땐 배낭 무게가 배로 느껴진다.
그래도 특이한 모양의 돌이 많아 눈은 즐거웠다.

해안 트레킹-'장봉도 백패킹 Jangbongdo Backpacking'

이정표-'장봉도 백패킹 Jangbongdo Backpacking'

해안 트레킹을 끝으로 드디어 기이한 체험을 선사해준 장봉도를 떠난다.

카모메 식당 냉모밀-'장봉도 백패킹 Jangbongdo Backpacking'

운서역에 도착해 카모메 식당 냉모밀로 허기를 채우고 장봉도 백패킹을 마쳤다!
살았다!



by


Tags : , , , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

가맛비 좋은 이탈리안 레스토랑. 구월동 어스 팩토리.

구월동엔 식당과 술집이 수두룩하지만, 막상 맛집을 찾기 어렵다.
어스 팩토리는 최근에 생긴 이탈리안 레스토랑으로, 어스 키친(Us Kitchen)이라는 식당의 분점이다.
다른 이탈리안 레스토랑에 비해 착한 가격으로 괜찮은 음식을 만드는 어스 키친과 쏙 빼닮은 어스 팩토리.
처음 가보았음에도 낯설지 않다.

호가든 생맥주-'구월동 어스 팩토리 Us Factory Inchoen'

호가든 생맥주 + 고르곤졸라 피자 세트가 눈에 띄어서 주문했는데,
아쉽게도 맥주 맛이 별로였다.

스테이크-'구월동 어스 팩토리 Us Factory Inchoen'

빠네-'구월동 어스 팩토리 Us Factory Inchoen'

고르곤졸라 피자-'구월동 어스 팩토리 Us Factory Inchoen'

스테이크가 적당히 잘 구워 나와서 맛있게 잘 먹었고,
다른 음식 맛도 대체로 괜찮은 편이다.

구월동은 워낙 유동인구가 많다 보니 맛없는 식당도 오래 살아남는 편인데,
어스 키친과 어스 팩토리는 어디 가서도 꾸준히 장사가 될만한 식당이다.
어스 팩토리.
깔끔하고, 직원 친절하고, 가격 착하고, 맛 괜찮다.
좋은 식당이다.

어스 팩토리 위치


큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

초코 빙수 맛집. 인천 구월동 도레도레 카페.

진동벨-'구월동 도레도레 Doré Doré Cafe'

이름을 날리는 유명 커피 가맹점이 수두룩한 이토타워 도레도레란 카페가 있다.
구월동을 대표하는 카페라고 생각된다.
처음에 도레도레를 찾았을 땐 점포 하나에서 브런치도 팔고 커피도 팔고 했었는데,
이젠 도레도레 계열 점포가 무려 네 곳으로, 2층 도레 식탁에서는 밥을 팔고,
1층엔 도레도레 브런치 카페, 도레도레 고마워 케이크, 그리고 도레도레 디저트 카페가 자리를 잡고 있다.
이 중에서 가장 많이 찾는 곳은 단연 이토타워 중앙에 위치한 도레도레 디저트 카페.
고마워 케이크가 처음에 생겼을 땐 자주 갔었지만, 요즘엔 거의 찾질 않는다.
막 문을 열었을 땐 케이크 한 조각이 엄청나게 컸었는데 케이크 크기도 줄어들었고,
손님이 많아져서 줄을 서서 기다릴 정도가 되었기 때문이다.
고마워 케이크에서 파는 대부분 케이크를 맛보았는데 대체로 맛이 좋다.
하지만 디저트 한 조각 먹으려고 줄 서서 기다리는 데 지쳐서 이젠 아주 가끔만 찾는다.

반면에 이토타워 중앙에 위치한 도레도레 디저트 카페는 맛이 훌륭한 맛에 비해 자리 여유가 있는 편이다.
물론 빈자리가 없을 때도 간혹 있지만, 대부분은 앉을 자리가 있다.

도레 빙수, 커피 빙수-'구월동 도레도레 Doré Doré Cafe'

요즘엔 여름이라 빙수를 파는데, 이 집 빙수가 일품이다.
도레 빙수, 딸기 빙수, 초코 빙수, 커피 빙수를 팔았었는데,
요즘에 딸기 수급이 어렵다며 딸기 빙수가 없어지고 망고 빙수가 새로 생겼다.
도레도레 커피 빙수는 정말 맛이 없다.
사실 도레도레 커피가 유난히 맛없어서 커피 빙수도 그냥 그럴 거라 생각했지만,
호기심에 한 번 먹어봤는데 역시나 꽝이다.
반면에 다른 빙수들은 괜찮다.
기본 팥빙수인 도레 빙수도 이름을 날리는 여러 빙수 전문점보다 괜찮다.

초코 빙수-'구월동 도레도레 Doré Doré Cafe'

최고의 빙수는 초코 빙수!
우유 얼음에 초콜릿 소스만 올라간 이 단순한 빙수가 제일이다.
도레도레는 전문 쇼콜라티에가 초콜릿을 직접 만드는데,
초콜릿 소스가 얼음을 살짝 덮은 빙수는 정말 감탄이 나올 정도로 맛있다.
여름은 너무 더워서 빨리 지나면 좋겠는데,
막상 여름이 지나면 도레도레 초코 빙수가 생각나서 여름이 기다려질 것 같다.


도레도레 위치


큰 지도에서 월풍 맛집 지도 보기



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!

최고의 휴식. 코타키나발루 키나발루 산 비아 페라타.


비아 페라타(Via Ferrata)는 ‘철의 길’이라는 뜻의 이탈리아어로 1차 세계 대전 때 알프스 돌로미테에서 병력이 안전하게 움직이기 위해 설치되었다.
그런데 이 비아 페라타가 쉽게 암벽을 오가며 멋진 풍광을 감상하는데 안성맞춤인 거다.
그래서 이를 즐기는 사람들이 여러 루트를 개발했고, 현재는 세계 곳곳에 비아 페라타 루트가 있다.
원래 이 활동을 하려던 것은 아니고, 키나발루 산 숙소 예약이 모두 차서 별수 없이 비아 페라타 활동이 포함된 숙소를 예약했다.
궁금해서 찾아봤더니 키나발루 산 비아페라타는 세계에서 제일 높은 비아 페라타로 기네스북에 올랐단다.

키나발루 산 산장에서 정상에 오르기 전에 비아 페라타에 대한 간단한 설명을 해준다.
“무리하지 마세요. 정상에서 내려오다 힘들다면 비아 페라타는 포기하고 그냥 내려오는 게 좋아요. 위험하니까요.”
예전에 암벽등반을 한번 시도해보고 온몸이 욱신거렸던 기억이 떠올랐다.
‘비아페라타도 그렇게 힘든 건 아닐까?’
정상에 올라갔다 내려오는 길에 비아 페라타하다가 손에 힘 풀려서 절벽에서 떨어지는 건 아닐까?’
키나발루 산 정상에 올랐을 때는 날씨도 안 좋고 힘들어서 그냥 내려갈까 고민했지만,
막상 내려오다 보니 비도 그치고 몸도 편해져서 예정대로 비아 페라타를 하기로 마음먹었다.

준비-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

안전모를 쓰고 장비를 갖추니 꼭 건설현장 일꾼이 된 기분이다.
‘안전제일 근면‧성실’

진행-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

진행-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

바위에 매달려 산 아래를 내려다보니 걸어내려올때랑 다른 맛이다.
선선한 바람을 맞으며 풍경과 하나가 되어 암벽을 내려가는 재미가 있다.

장비-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

암벽-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

혹시 힘들지 않을까 했던 걱정은 기우였다.
비아 페라타는 편하고 안전하게 암벽을 오르내리기 위한 거지 인간의 한계를 시험하기 위해 만든 게 아니니 말이다.
물론 비바람이 몰아치는 날이라면 고생스럽겠지만, 날씨가 좋아 편안히 내려왔다.
우선 밧줄을 안전 고리에 건다.
카라비너 하나를 빼서 쇠에 걸고, 나머지 카라비너도 쇠 줄에 건 다음 줄을 잡고 쭉 가면 끝!
비록 수직에 가까운 경사지만 움직이는 데 어려움이 없다.

풍경-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

나무-'키나발루 산 비아 페라타.  The highst Via Ferrata Kinabalu mountain '

움직이는 게 힘들다 싶으면 바위에 잠시 걸터앉아 쉬며 주위를 둘러보는 여유를 만끽하고,
앉아 쉬는 게 좀 쑤시면 다시 움직이면 된다.
뒷걸음질로 내려오기 때문에 앞으로만 걸어 뭉친 근육을 풀어주기도 좋다.
힘든 산행에 휴식을 준 키나발루 산 비아 페라타.
기회가 되면 또 하고 싶다.



by


Tags : , , , , , , , ,

  • 재미있게 읽으셨나요?
    광고를 클릭해주시면,
    블로그 운영에 큰 도움이 됩니다!