쉘에서는 다른 스크립트 언어에서 다루는 것처럼 아주 많은 문자열을 조작할 수 있는 기능을 제공합니다.


문자열의 길이(length) 구하기

        vStr="abcdefghijk"
        echo ${#vStr}

문자열 조각(substring) 구하기
용법 : ${string:position}  -> $string의 $position부터의 문자열을 추출
          ${string:position:length} -> $string의 $position부터 $length만큼의 문자열을 추출

         vStr="123abc!@"
         echo ${vStr:3} -> "abc!@"
         echo ${vStr:3:3} -> "abc"

문자열 삭제(remove)하기
용법 : ${string#substring} -> $string의 앞 부분에서부터 가장 짧게 일치하는 $substring을 삭제
          ${string##substring} -> $string의 앞 부분에서부터 가장 길게 일치하는 $substring을 삭제
          ${string%substring} -> $string의 뒷 부분에서부터 가장 짧게 일치하는 $substring을 삭제
          ${string%%substring} -> $string의 뒷 부분에서부터 가장 길게 일치하는 $substring을 삭제

        vStr="123abc!@123456abc"
        echo ${vStr#1} -> "23abc!@123456abc"
        echo ${vStr#1*a} -> "bc!@123456abc" => 1과 a사이에서 가장 짧게 일치되는 부분을 삭제
        echo ${vStr##1*a} -> "bc" => 1과 a사이에서 가장 길게 일치되는 부분을 삭제
        echo ${vStr%a*c} -> "123abc!@123456"
        echo ${vStr%%a*c} -> "123"

문자열 대치(replace)하기
용법 : ${string/substring/replacement} -> 처음 일치하는 $substring을 $replacement로 대치.
          ${string//substring/replacement} -> 일치하는 모든 $substring을 $replacement로 대치.
          ${string/#substring/replacement} -> $substring이 $string의 맨 앞에서 일치하면 $replacement로 대치.
          ${string/%substring/replacement} -> $substring이 $string의 맨 뒤에서 일치하면 $replacement로 대치.

        vStr="123abc!@123456abc"
        echo ${vStr/123/ABC} -> "ABCabc!@123456abc"
        echo ${vStr//123/ABC} -> "ABCabc!@ABC456abc"
        echo ${vStr/#123/ABC} -> "ABCabc!@123456abc"
        echo ${vStr/%abc/ABC} -> "123abc!@123456ABC"


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

About ZooKeeper

IT/개념 2017. 4. 19. 11:29

분산 작업 제어 트리 형태의 데이터 저장소
- 분산된 어플리케이션들을 위한 분산 Coordination 서비스입니다.
- Coordination이란 다양한 노드가 함께 잘 어울릴 수 있도록 동작하도록 조정하는 행위

Zookeeper의 Cluster를 Ensemble(앙상블)이라 부름.


위 Zookeeper 클러스터는 자동으로 Leader를 선정하며 이 Leader는 데이터 저장을 주도합니다.
클라이언트가 Follower 노드로 데이터 저장 요청이 들어오면 Follower는 Leader에게 전달하고
Leader는 과반 이상의 Follower가 쓰기 가능한 상태가 되면 Follower에게 쓰기 명령을 한다.
반면, 데이터 읽기 요청은 어떤 노드(Leader or Followers)로 들어와도 즉시 데이터를 리턴한다.

클라이언트는 단일 Zookeeper 서버에 연결하고, TCP 연결을 유지합니다.
TCP 연결이 끊어지면 다른 서버에 연결을 시도합니다.

활용 용도

  1.   분산 서버간의 정보 공유
  2.   서버 투입 / 제거 시 이벤트 처리
  3.   서버 모니터링
  4.   시스템 관리
  5.   분산 락 처리
  6.   장애 상황 판단
  7.   데이터 변경을 감시


위 활용도 중에 데이터 변경 감시를 위한 Watcher 활용도가 가장 높습니다.
데이터가 변경되면 Data Polling없이 특정 Node에 등록되어 있는 Watcher의 콜백으로 알려줍니다..
그러나, 주의하셔야 할 것이 자주 변경되는 데이터를 감시하는 곳에는 사용하지 않는 것이 좋습니다.
Zookeeper가 버벅댑니다 ㅠ.ㅠ

Zookeepr가 데이터를 디렉토리 구조로 저장을 하고,
지속성(Persistent)을 위해 트랜잭션 로그, 스냅샷 파일을 디스크에 저장을 합니다.
서버를 재시작을 해도 서비스가 유지되도록 하기 위합니다.

또한, 중요한 기능 중에 하나는 노드별 ACL(Access Control List)를 제공해줍니다.
Zookeeper와 같은 코디네이션 시스템은 중요한 상태 정보나 설정 정보를 유지하기 때문에 시스템에 망가지면 전면 장애로 이어지는 경우가 발생할 수 있어서 적어도 이중화를 유지하여 고가용성을 유지합니다.
그러다 보니, Zookeeper를 유지함에 있어서 물리적으로는 시스템 낭비가 심한 경우에 포함이 되죠.
다만, 하나의 클러스터를 구성하여 여러 어플리케이션이 사용하면 시스템 낭비를 줄일 수 있는데,
여기서 문제점은 여러 어플리케이션이 여러 노드에 접근 가능하여 오히려 보안성에 문제가 발생할 수 있는데
이럴 경우에는 ACL 기능을 사용하면 좋겠습니다.

'IT > 개념' 카테고리의 다른 글

[웹 2.0] 소개  (0) 2008.05.22
Mash-up 이란... 오십세주  (0) 2008.02.18
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
<쉬어 가는 코너>

sort | uniq를 사용합니다.

그러나, 위 명령보다는 sort -u가 I/O 소모가 덜합니다.

기왕 사용하는 거 효율적인 방법으로 사용하는게 좋겠죠?


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

쉘에서 문자열을 치환하는 방법은 여러가지 방법이 존재합니다.
그 중에 대표적인 방법 2가지를 살펴보도록 합니다.

1. tr (translate)를 사용합니다.
문자열을 변환하거나 삭제하기 위한 간단한 변환기입니다.
먼저, 변환하는 방법에 대해서 살펴보겠습니다.

용법 : tr 'A' 'B'  -> translate A to B
예제
    - echo 'This is a that' | tr 'This' 'That' -> That at a that
      a) "is"가 전부 "at"으로 변환됨에 주의하세요.

    - echo 'THIS IS A THAT' | tr '[A-Z]' '[a-z]' -> this is a that
      a) 대문자를 소문자로 변환합니다.
      b) echo 'THIS IS A THAT' | tr '[:upper:]' '[:lower:]'와 동일합니다.

    - echo 'THIS        IS A THAT' | tr '\t' ' ' -> THIS IS A THAT
      a) tab 문자를 하나의 공백으로 변환합니다.
      b) echo 'THIS      IS A THAT' | tr '[:blank:]' ' '와 동일하지만 [:blank:]는 tab 문자 뿐만 아니라, 공백 문자도 처리하게 됩니다.

다음은 삭제하는 방법에 대해서 살펴보겠습니다.
용법 : tr -d 'A' -> translate A to ''
예제 : echo 'THIS IS A THAT' | tr -d 'A' -> THIS IS THT

2. sed를 사용합니다.
문자열의 스트림을 변경할 때는 sed를 사용합니다.
위 예제를 sed로 변경해 보도록 하겠습니다.

예제
    - echo 'This is a that' | sed 's/This/That/g' -> That is a that
      a) 위 예제와 결과에 차이가 있습니다. "This"와 매칭되는 문자

    - echo 'THIS IS A THAT' | sed 's/\(.*\)/\L\1/'-> this is a that
      a) echo 'this is a that' | sed 's/\(.*\)/\U\1/' -> THIS IS A THAT

    - echo 'THIS      IS A  THAT' | sed 's/\t/ /g' -> THIS IS A THAT
      a) tab 문자를 하나의 공백으로 변환합니다.

    - echo 'THIS IS A THAT' | sed 's/A//g' -> THIS IS THT
      a) A 문자를 없앱니다

좀 더 세부적인 문자열을 다루는 것은 실전에서는 tr보다는 sed를 많이 쓰는 경향이 있습니다.

조만간 sed에 대한 정리를 한 번 하면 좋을 거 같네요^*

블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,

shell에서 Array를 어떻게 사용 할까요?
shell에서 Array를 사용 할 수 있긴 할까요?

기본 sh에서는 딱히 방법이 없습니다.
그러나, 배열처럼 사용할 수는 있지요.

#!/bin/sh

vArray="A,B"

for i in `echo ${vArray} | tr ',' '\n'` ; do
   echo ${i}
done

위 결과는 다음과 같이
A
B
로 나옵니다.

"tr"은 문자열 변환, 삭제에 사용하는 명령어인데, 이 명령어를 사용하면 마치 Array에서 가져오는 것처럼 사용할 수는 있으나, direct access는 힘듭니다.
위 프로그램은 vArray 변수를 출력하면서 "," -> "\n"로 변환하여 한 라인씩 처리하기 위함입니다.

기본 shell에서는 안되지만, POSIX 계열인 bash에서는 사용 가능합니다.
#!/bin/bash

declare -a vArray

vArray=("A" "B")
vArraySize=${#vArray[@]}
vNo=0

while [ $vNo -lt $vArraySize ]
do
        echo ${vArray[$vNo]}
        vNo=`expr $vNo + 1`
done

unset vArray

vArray에서 ""로 값들을 나열하고 있으며,  vArray의 size도 구할 수 있습니다. ${#vArray[@]}
sh에서 안 되는 direct access도 가능합니다. ${vArray[$vNo]}
Array 변수 사용은 반드시 괄호를 사용해야 합니다.
그리고, 1차원 배열은 지원합니다.
declare와 unset은 사용하지 않아도 됩니다.

이런 Array를 함수의 인자로도 전달 가능할까요?

#!/bin/bash

vArray1=("A" "B")
vArray2=("C" "D")


#-------------- [print_array function] -----------------
print_array()
{

        vArray=("${!1}")
        vArraySize=${#vArray[@]}
        vNo=0

        while [ $vNo -lt $vArraySize ]
        do
                echo ${vArray[$vNo]}
                vNo=`expr $vNo + 1`
        done

}

echo "================="
print_array vArray1[@]
print_array vArray2[@]

vArray1=(${vArray1[@]} "a")
unset vArray2[1]

echo "================="
print_array vArray1[@]
print_array vArray2[@]

위의 결과는 다음과 같습니다.
=================
A
B
C
D
=================
A
B
a
C

함수를 호출할 경우에는 함수명 뒤에 vArray[@], 함수 내에서는 ("${!1}")로 표현해야 합니다.
함수 내에서 사용하는 표현이 약간 어렵죠? 그냥 외웁시다.
참고로, 표현 내의 숫자("${!1}")는 몇 번째 인자인지 나타냅니다.

${vArray[@]}은 배열 전체를 의미합니다.
${#vArray[@]}은 배열의 크기를 의미합니다.

위 프로그램에서 배열에 값을 추가하고 삭제하는 표현도 두었습니다.
배열에 값을 추가하는 것은 vArray=(${vArray[@]} "a")
배열에 값을 삭제하는 것은 unset vArray[1]

쉘에서도 배열을 자유자재로 사용한다면 프로그래밍이 쉬워지지 않을까요?


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
import threading
import time

class MyThread(threading.Thread):
    def __init__(self, msg):
        threading.Thread.__init__(self)
        self.g_msg = msg
        self.g_daemon = True
    # End of __init__

    def run(self):
        while True:
            time.sleep(1)
            print self.g_msg

# End of MyThread

for v_msg in ['I', 'love', 'you']:
    v_thread = MyThread(v_msg)
    v_thread.start()
# for

for i in range(100):
    time.sleep(0.1)
    print i
# for

Python에서 쓰레드를 가능하게 해주는 모듈은 "threading.Thread"
  1. MyThread class는 threading.Thread를 상속받고 MyThread(threading.Thread)
  2. 쓰레드를 클래스로 정의할 경우에는 __init__ 함수에서 부모 클래스의 생성자 threading.Thread.__init__(self)를 반드시 호출 !!
  3. MyThread의 instance의 start 함수를 실행하면 MyThread 클래스의 run 함수가 자동 실행

클래스를 사용하지 않고 함수 내에서 thread를 사용하고 싶을 경우에는 어떻게 해야 할까요?

import threading

def MyThread():

    def consumer(v_value):

        print "{} => {}".format(threading.currentThread().getName(), v_value)

    # End of consumer

    for i in range(10):
        threading.Thread(target=consumer, args=(i, )).start()

# End of MyThread

간단합니다.
함수 내의 함수 (nested function)를 정의 후 이 또한 threading.Thread로 호출해주면 됩니다.
클래스로 구현한 경우에는 클래스 내에서 __init__함수와 run 함수를 구현해줘야 하지만,
함수 내에서는 target과, args를 정의하고 start를 해주면 됩니다.

위의 경우에는 잘 다룬다면야 상관없지만, 값의 범위를 미리 알아야 하고 그 개수만큼 쓰레드를 생성해야 합니다.
다시 말해서, 2~3개의 쓰레드 개수로도 충분히 해결할 수 있는데, 쓸데없이 더 많은 쓰레드를 생성해야 하는 상황입니다.

그럼, 2~3개의 쓰레드만 생성하고 10 혹은 100개의 값을 처리하고자 할 때는 어떻게 할까요?
일반적으로, 프로그램을 설계할 때 Queue를 많이 사용합니다.
비단, Python으로만 국한되지 않고, C/C++, Java와 같이 어떤 언어에서라도 Queue를 많이 도입합니다.


import sys
import threading
import Queue

def MyThread():

    v_queue = Queue.Queue()

    def consumer():
        while True:
            try:
                v_value = v_queue.get(False, 10)
                print "{} => {}".format(threading.currentThread().getName(), v_value)
                v_queue.task_done()
            except Exception:
                pass

            if v_queue.empty():
                break

    # End of consumer

    for i in range(1000):
        v_queue.put(i)

    for _ in range(5):
        threading.Thread(target=consumer).start()

    v_queue.join()

# End of MyThread

이러 방식으로 Queue를 발행 후, produce(put 함수)와 consume(get함수)을 한다면 값의 개수에 따라 쓰레드를 생성하지 않아도 시스템을 효율적으로 사용할 수도 있겠습니다.


마지막으로, 1번째 클래스를 이용한 방법과 3번째 Queue를 이용하는 방법을 믹스합니다.
위의 방법을 사용하는 건데, 프로그램을 작성하다 보면 깔끔하게 작성해야 합니다.
1번처럼 작성하다 보면 하나의 파일에 너무 많은 코드가 들어가면서 복잡해지겠죠?

최종적으로 다음과 같이 합니다.
  1. Producer와 Consumer가 같은 Queue를 바라봐야 합니다. -> Queue는 전역처럼 관리되어야겠죠?
  2. 당연히 쓰레딩이 되도록 합니다.

import sys
import threading
import Queue

class Consumer(threading.Thread):

    def __init__(self, v_queue):

        # for thread
        threading.Thread.__init__(self)
        self.setDaemon(True)

        # for queue
        self.g_queue = v_queue

    # End of __init__

    def run(self):

        while True:
            try:
                v_value = self.g_queue.get()   # if queue is empty, queue is blocked
                print "{} => {}".format(threading.currentThread().getName(), v_value)
                self.g_queue.task_done()
            except Exception:
                pass

            if self.g_queue.empty():
                break
        # while

    # End of run

# End of Consumer


def MyThread():

        v_queue = Queue.Queue()

        for i in range(5):
                v_consumer = Consumer(v_queue)
                v_consumer.start()

        for i in range(1000):
                v_queue.put(i)

        v_queue.join()

# End of MyThread


Queue를 전역 변수로 생성 후 사용해도 되겠지만, 실전에서는 그렇게 하면 안 되겠죠?
함수에서 Queue를 생성 후 Consumer thread에 인자로 전달했습니다.

참고로,
이번에는 MyThread 함수에서 Consumer thread가 먼저 호출되고, Producer가 작업토록 했습니다.
왜일까요?

그렇지 않고, Producer 작업 후 Consumer해도 되지만, 시스템 상으로 좋아 보이지가 않습니다.
Producing을 다 한 후 Consuming을 한다는 의미는 값들을 메모리 상에 전부 올려놓고 처리하겠다는 말과 같겠지요.

그래서, Consumer가 Queue에 값들이 들어오는지 안 오는지 모니터링하고 있다가  Producer가 값들을 넣자 말자 Consuming해서 처리한다면 시스템을 좀 더 효율적으로 사용한다고 봐야겠습니다.

Python에서 Threading 어렵지 않죠??


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
Life is... 삶(인생)이란... 
Imagine life as a game in which you are juggling five balls in the air.
인생을 공중에서 5개의 공을 돌리는 것(저글링)이라고 상상해 보자 

You name them: work, family, health, friends, and spirit, and you're keeping all of them in the air.
각각의 공을 일, 가족, 건강, 친구, 그리고 영혼(나) 이라고 생각하고 모두 공중에서 돌리고 있다고 생각하자 

You will soon understand that work is a rubber ball. If you drop it, it will bounce back.
얼마 되지 않아 일이라는 공은 고무공이어서 떨어뜨리더라도 바로 튀어 오른다는 것을 알게될 것이다 

But the other four balls -- family, health, friends, and spirit are made of glass.
그러나 다른 4개의 공들(가족, 건강, 친구, 그리고 영혼(나)) 은 유리로 되어있다는 것도 알게될 것이다 

If you drop one of these, they will be irrevocably scuffed, marked, nicked, damaged, or even shattered. They will never be the same.
만일 당신이 이중 하나라도 떨어뜨리게 되면 떨어진 공들은 상처입고, 긁히고, 깨지고 심지어 흩어져 버리게 되어 결코 다시는 전과 같이 될 수 없을 것이다 

You must understand that and strive for balance in your life.
당신은 이 사실을 이해하고 당신의 인생에 있어서 이 5개의 공들의 균형을 잡기 위해 고군 분투해야 한다. 

How?
그럼 어떻게 균형을 유지 할 수 있단 말인가? 

Don't undermine your worth by comparing yourself with others. It is because we are different that each of us is special.
당신 자신을 다른 사람들과 비교함으로써 당신 자신을 과소 평가하지 말아라. 왜냐하면 우리들 각자는 모두 다르고 특별한 존재이기 때문이다 

Don't set your goals by what other people deem important. Only you know what is best for you.
당신의 목표를 다른 사람들이 중요하다고 생각하는 것들에 두지 말고 당신 자신에게 가장 좋다고 생각되는 것에 두어라 
Don't take for granted the things closest to your heart. Cling to them as you would your life, for without them, life is meaningless.
당신 마음에 가장 가까이 있는 것들을 당연하게 생각하지 말아라. 당신의 삶처럼 그것들에 충실하라. 그것들이 없는 당신의 삶은 무의미하다 

Don't let life slip through your fingers by living in the past or for the future. By living your life one day at a time, you live ALL the days of your life.
과거나 미래에 집착해 당신의 삶이 손가락 사이로 빠져나가게 하지 말라. 당신의 삶이 하루에 한번인 것처럼 삶으로써 인생의 모든 날들을 살게 되는 것이다 

Don't give up when you still have something to give. Nothing is really over until the moment you stop trying.
아직 줄(give) 수 있는 것이 남아 있다면 결코 포기하지 말라(give up). 당신이 노력을 멈추지 않는한 아무것도 진정으로 끝난 것은 아무 것도 없으니깐... 

Don't be afraid to admit that you are less than perfect. It is this fragile thread that binds us together.
당신이 완전하지 못하다는 것을 인정하기를 두려워 말라. 우리들을 구속하는 것이 바로 이 덧없는 두려움이다. 

Don't be afraid to encounter risks. It is by taking chances that we learn to be brave.
위험에 부딪히기를 두려워 말라. 우리가 용기를 배울 수 있는 기회로 삼으라. 

Don't shut love out of your life by saying it's impossible to find. The quickest way to receive love is to give; the fastest way to lose love is to hold it too tightly; and the best way to keep love is to give it wings.
찾을 수 없다고 말함으로써 당신의 인생에서 사랑의 문을 닫지 말아라. 사랑을 얻는 가장 빠른 길은 주는 것이고, 사랑을 잃는 가장 빠른 길은 사랑을 너무 꽉 쥐고 놓지 않는 것이고, 사랑을 유지하는 최선의 길은 그 사랑에 날개를 달아 주는 것이다 

Don't run through life so fast that you forget not only where you've been, but also where you are going.
당신이 어디에 있는지도 모르고 어디로 향해 가고 있는지도 모를 정도로 바쁘게 삶을 살지 말아라. 

Don't forget that a person's greatest emotional need is to feel appreciated.
사람이 가장 필요로 하는 감정은 다른 이들이 그 사람에게 고맙다고 느끼는 그것이다. 

Don't use time or words carelessly. Neither can be retrieved.
시간이나 말을 함부로 사용하지 말아라. 둘다 다시는 주워 담을 수 없다. 

Life is not a race, but a journey to be savored each step of the way.
인생은 경주가 아니라 그 길을 한 걸음 한 걸음을 음미하는 여행이다 

Yesterday is History, Tomorrow is a Mystery, and Today is a gift: that's why we call it - the present...
어제는 역사이고, 내일은 비밀이고 그리고 오늘은 선물이다. 그렇기에 우리는 현재(present)를 선물(present)이라고 말한다...
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
5월은 가히 어린이를 위한 달인데, 내가 바쁘다는 핑계로 제대로 놀아주질 못했던 참에 아내가 다른 식구들하고 놀러가자는 제안을 해서 하루 휴가를 내고 에버랜드로  Go Go!!

에버랜드는 2번째로 가는 건데, 한 번은 회사에서 놀이기구 타러 한 번 갔었고, 이번에는 애들을 위해서 갔는데, 사실 너무 힘들었다.
애들을 위해서 봉사한다는게 쉽지 않다는 걸 새삼느꼈다.
 
초입에 있는 동물체험관이였나??
암튼, 뒤쪽의 펭귄을 배경으로 한 컷^^
시형이 얼굴이 영 시무룩 한 것이 재미없나 보당.

역시 장난꾸러기 시형이~~

아인이가 많이 컸다.
예전엔 무서워서 근처에 가지도 못하던 놈이 이젠 덥석 악어 위에 올라타다니... ㅋㅋ

이 곳 이름도 모르겠다.
암튼, 초입에 들어서자 말자 앵무새들의 천국이였다.
뭔 놈의 앵무새들이 그렇게도 종류가 많은지...
이름도 다 못 외운다.
가장 기억에 남는 요 앵무새는 내가 이름을 지었다.
"테크노 앵무새" ㅋㅋ
한때 테크노 댄스가 유행했었는데, 저 놈이 아 글쎄 똑같이 테크노 댄스를 춘다.
안 믿기면 직접 가서 확인하시길...

뒤에 보이는 백호를 배경으로...
백호띠가 될 복이를 위해...
복아~ 너는 정말 복덩이야~~
많이 많이 사랑해줄께^^

백곰~~~
무대 매너가 짱인 놈이 한 놈 있다.
다른 놈들은 그냥 수영을 즐기는데, 오로지 한 놈은 관중들을 의식한다.
유유히 관중석 벽으로 잠수해서 벽을 차고 배영을 한다.
백곰이 배영을???
우리가 환호성을 지르면 또 한다.
그러고선 우리의 반응을 살핀다.
그 백곰은 관중들의 환호를 먹고 사는 것이 분명하다..
암튼, 멋진 놈이였다.
그 거대한 몸짓으로 배영을 하다니...
이것도 안 믿겨??
직접 확인해보심이 좋을 듯...

원숭이들을 모아놓은 곳이다.
저 뒤에 자세히 보면 알락꼬리여우원숭이던가...
이름이 정확히 기억이 나지 않는데, 하여간 웃긴 원숭이들이 있다...

사파리~
첫 번째 왔을 때 사파리를 구경하지 못해서 이번에는 1시간여를 기다려 사파리 구경을 했다.

젠장!!!
애들만 아니면 다시는 오고 싶지 않다.
뭐 볼 것도 없더만...
초식사파리?? 핏. 웃겨~~

기린 몇 마리...

낙타 3~4쌍...

얼룩말 몇 마리...
이게 초식사파리란다~~
뉘미럴~~
물론, 국내로 들여오는데 많은 돈을 들였겠지만 이래놓구선 초식사파리라고 하기엔 넘 민망하지 않나??
돈 많은 삼성 그룹에서 이 정도로 밖에 못하나?
돈 쌓아놓지 말고, 제대로된 사파리를 좀 만들면 안 되겠니?

백호가 10여마리 정도...
이전엔 사자들이 판 치던것이 이 백호가 들어오면서 권좌를 넘겨줬다고 한다.
역시 백호가 대단한가 보다... 그치 복이야??

백호에서 밀려나 한 곳에서 쪼그리고 있는 불쌍한 사자 녀석들...

웃긴 곰탱이들...
사람들 말을 다 알아 듣는다...
기사 아저씨가 일어서라면 일어서고, 안녕하면 손을 흔든다.
젠장할...
건빵의 위력이 이렇게 대단한가??

이 곳은 물개쑈 공연장...
모, 애들에게는 재미있는 곳이였는지 몰라도, 어른인 나에겐 지루함의 연속일 뿐...
뭔가 체험하지 못하고 그저 구경만 한다는 것이 이렇게 지치고 힘들게 하는지 몰랐다.
그러나, 이 곳 공연이 끝나자 말자, 피터팬 쇼가 옆 공연장에서 하는데 이것은 괜찮다.
추천!!!
머리 위로 수 많은 새들이 오가고 동물들의 환상 호흡에 아주 신났다..

이제는 놀이기구 타러 가는 시간이였다.
꼬마 자동차, 컵 돌기를 타고 나니 시간이 벌써 오후 6시를 훌쩍 지났다.
난 이번에 생긴 목조를 만들어진 청룡열차(?)를 타보리라 다짐을 했건만, 애들 꽁무니만 졸졸 따라 다니느라, 젠장 근처만 갔다 왔다.
수학 여행을 온 학생들이 워낙 많아 1시간 30분을 기다려야 한다니 ㅠ.ㅠ

결국, 시형이와 나만 양해를 구하고, 아주 짧은 코스의 청룡열차를 탔다.
의외로 시형이가 재미있어 하고 들떠했었다.
1번 타고 나더니 재미있다고 1번 더 타자고 해서 2번을 타고 왔다.

나의 놀이기구에 대한 아쉬움은 같이 간 식구들의 눈총으로 인하여 더블샥스핀도 포기하고 돌아왔다.

다음엔 꼭 목조로 만든 청룡열차(?)와 더블샥스핀을 꼭 타리라~~ ㅋㅋ


블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
처제들이 놀러와서 가까운 곳을 찾아간 곳이 남양주 종합 촬영소이다.
올 초에도 갔었지만, 근처에 맛있는 흑돼지/보리밥 집도 있고 해서 겸사겸사 찾아간 곳이다.

날씨도 너무나 화창하고, 흑돼지로 배를 채워서인지 나른하기만 한 오후였는데,
다행히 이쁜 처제들이 동행을 해서인지 즐거운 나들이였다.

많은 곳이 지난 번에도 블로깅을 한 곳과 겹쳐서 최소한의 사진만 올린다.
뜨거운 햇살에 찌푸리고 있는 막내 처제...
이 곳이 드라마 추노를 보면서 많이 봐왔던 세트장이다.
대길이와 추장군, 왕손이가 처음 만나 싸우던 곳이 이 곳에서 촬영한 곳이다.
물론, 그 장면 뿐만 아니라, 다른 많은 장면들두 나왔다.

이 곳에서 200m 위에 있는 운당에서는 최근에 "신데렐라의 언니"라는 드라마를 촬영하고 있다.
문근영의 집의 대문으로 나오기도 한다.

벚꽃과 개나리가 한창이다.
한가로운 오후를 보내기에 딱 좋은 곳이다.

3D 입체 영상관에서 찍은 장면들이다.
그냥 찍으면 잘 안 나올 거 같아 3D 안경을 렌즈 위에 덧씌워 찍은 것이다.
요 화면은 잘 나온 거 같진 않다.

이 장면도 좀 흐리게 나온 거 같구...

그러나 이 장면은 그나마 3D의 한 장면처럼 찍히지 않았나 싶다.
3D를 간단하게 체험할 수 있는 코스이다.
암튼, 나는 이 곳 남양주 종합 촬영소에서 괜찮은 곳 중에 한 곳이 이 곳 애니메이션관이다.

여러분들도 꼭 이 곳에 들러서 찬찬히 둘러보시기 바란다.
나머지 광경들은 아래 관련글에서 찾아보시길..

** 관련글 **
남양주 종합 촬영소 나들이

'쩐의여행 > 가자, 발길 닿는대로' 카테고리의 다른 글

에버랜드  (0) 2010.05.15
[피아노 화장실]  (0) 2010.05.15
[홍유릉] 어린이날에 들리다.  (0) 2010.05.15
커피박물관에서 커피향에 빠지다  (0) 2010.02.27
남양주 종합 촬영소 나들이  (1) 2010.02.07
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,
남양주시 화도정수장을 관광지화한 곳이 피아노 화장실이다.
정수장이라 하면 혐오시설로만 여겨지던 이 곳이 남양주시의 명실상부한 관광지의 일부를 차지하고 있다.
사고의 전환이라는 것이 이런 게 아닐까하는 대표적인 장소이다.

이 곳에 자주가는 편인데, 카메라를 가지고 간 적이 없어서 아쉬움만 남았다.
이번에도 카메라를 챙겨가지 않아서 나의 아이폰으로 사진을 찍어 아쉬움을 달랜다.

정면에 들어서면 보이는 곳이 이 곳 인공폭포이다.
폭포가 내려오는 시간이 정해져 있다.
하절기와 동절기로 나뉘는데, 대충 5시 전까지 가면 물이 떨어지는 것을 볼 수 있다.

이 곳이 폭포 바로 옆에 보이는 피아노 화장실~~
계단을 걸어올라가면 피아노 건반 소리가 난다.

피아노 화장실의 남자 화장실에서 폭포를 배경으로 찍은 사진이다.
잘 어울리는 배치로 꽤 운치가 있다.

우리 이쁜 처제가 바깥에 핀 벚꽃과 갖가지 꽃들을 보며 감상하고 있다.
이 곳 반대편으로 조그만한 분수가 있는데,
여름이면 이 곳에 꼬맹이들로 인산인해를 이룬다.
전부 그 곳에서 물놀이를 하느라 빼곡하다.


꽃들도 주변 환경과 잘 어울려지게 가꿔놓았다.
우리가 갔을 때 관광차가 한 대 왔었는데, 거기에서 내리신 아저씨, 아줌마들이 하시는 소리가
살다가 관광하러 화장실에 온 건 처음이라면서 우스갯 소리로 웃던 소리가 아직도 귀에 생생하다.

나중에 이 곳 물놀이 장소와 생태체험장을 찍어 다시 보충해야겠다.
블로그 이미지

쩐의시대

나답게 살아가고 나답게 살아가자

,