2018년 11월 17일(토)

오늘의 여정 : 크로아티아 스플리트 → 플리트비체

 

또 다른 하루의 시작이다.

긴 동유럽 여행을 하면서 매번 맞는 아침은 새로운 느낌이다.

창문 사이로 보이는 따뜻한 빛 줄기와 시원한 바다 풍경.

오늘 아침식사는 어제 마트에서 구입한 재료들로...

간단하게 해결을 하고...

오늘은 플리트비체로 이동하는 날이다.

꽃보다 누나라는 프로그램을 통해 익히 잘 알려진 곳이다.

TV에서 보여진 그 동화 같은 풍경을 고대하며 길을 나섰다.

고속도로로 한참을 달리기 시작했다.

한참을 달리다 보니 저쪽 끝에 산맥이 보이고 산맥은 신비롭게 구름에 봉우리를 숨기고 있다.

지도 상으로는 아마도 저 곳을 넘으면 얼마가지 않아 플리트비체가 있다.

멀리 보이던 산맥의 자락에 도착해서 쉽지 않은 꾸불꾸불한 허리쯤을 돌고 나니 산봉우리를 구름이 짙게 뒤덮고 있는데,

자연에 대한 경외감 때문인지 두려움이 살짝 느껴졌다.

저곳을 잘 넘어 가야할텐데...

드디어 정상에 구름을 뚫고 정상에 도착했다.

정상위에는 또다른 구름들이 뒤덮고 있었지만,

곧게 뻗은 길 때문인지 꾸불꾸불 올라왔던 길에 비하면 한결 마음이 편하다.

봉우리들을 스쳐지나가고 나니, 저 멀리 또 큰 산들이 보인다.

높은 산 봉우리들을 옆에 끼고 다시 달리기를 몇번 끝에,

드디어 플리트비체에 도착했다.

이동하는 중에 여러가지 간식을 먹다 보니 배가 불러서 점심은 자연스럽게 스킵을하고,

곧바로 플리트비체 관광을 시작하기로 했다.

주차장에 차를 주차하고 입구로 향해 길을 건너는 나무로 만들어진 육교를 지난다.

북쪽으로 많이 올라와서 인지, 날씨가 꽤 쌀쌀하다.

그리고, 이미 가을은 훌쩍 지나고 초겨울 풍경이 우리를 맞이했다.

스플리트의 화창한 날씨와 초록들과는 매우 상반된 풍경이다.

나중에 후회를 했지만, 더 두꺼운 오리털 파카를 입었어야 했다.

플리트비체 호수로 가까이 갈 수록 바람이 많이 불어 체감 온도는 더 내려갔다.

우리 가족은 플리트비체 입장료를 구입할 수 있는 매표소에 도착을 했다.

입장료 가격은 시즌에 따라 다른 것 같다.

참고로, 우리 가족의 경우, 막내는 공짜 나머지 3명해서 HRK145/\24,960 정도이다.

나무 뒤로 보이는 선착장에서 배를 타고 이동을 한다.

지도에서 현재 P1 위치이고, 배를 타고 P2를 들렀다가 다시 배를 타고 P3로 이동하는 코스이다.

배를 이용하여 건너편인 P2로 이동하자마자

TV에서 보던 아기자기하고 예쁜 짧은 폭포들이 펼쳐져 있다.

나무 바닥길을 따라 쭈욱 걸어나가면 새로운 풍경들이 펼쳐진다.

물 웅덩이라고 해야 할까?? 조그마한 물 웅덩이들이 옹기종기 모여 있고,

그 물 웅덩이들은 서로 연결이 되어 있어서,

높은 곳에서 낮은 곳으로 연결된 부분은 마치 작은 폭포와 같다.

한 바퀴돌고 이제 P2에서 P3로 이동을 했다.

P3 지역은 넓은 잔디 밭도 있어서, P2 지역과는 사뭇 다른 풍경이였다.

경사진 도로를 올라가니 넓은 호수가 눈에 들어왔다.

그리고 점점 좁아지는 길을 따라 얇은 언덕을 넘어가면,

아까 넓은 호수물이 얇은 언덕을 따라 폭포를 이뤄 물이 흘러가고 있다.

길을 따라 쭈욱 올라가다 보면 높은 지대를 지나고,

이어서 제법 높은 폭포가 등장 한다.

이곳이 핫스팟인지 많은 사람들이 사진을 찍기 위해 모여 있다.

시간이 점점 흘러 벌써 어두워질 시간인 4시를 향해가고 있어서

서둘러 주차장으로 이동을 하기 위해 위로위로 발걸음을 재촉했다.

위에서 바라본 호수도 경이로운 풍경이었다.

주차장까지 가는 길은 여태 배를 타고 온길과 걸어서 온길을 되돌아 가야 하기 때문에 꽤 먼거리이다.

그래서 정기적으로 운행하는 버스를 타고 이동을 했다.

막차여서, 조금만 늦었더라도 엄청난 고생을 했을것이다.

이제 자그레브로 이동해서 크로아티아 여행을 마무리 할 예정이다.

버스를 타고 주차장으로 이동 중에 우리나라에서 온 사람들을 몇팀 만났다.

그 중에서 우리나라에서 온 젊은 여학생 2명이 대중교통을 이용하여

오늘 자그레브로 들어갈 예정이라는 소리를 우연히 듣게 되었다.

몇십분이 지나면 어둠이 깔릴텐데 조금 걱정이 되어 와이프에게 눈짓을 하니,

와이프가 좁지만 우리차에 태워 가자고 한다.

그래서, 성인 4명 어린이 2명 모두 6명이 승용차에 의지하여 어둠이 깔린 도로를 헤치고 자그레브로 이동을 했다.

얘기를 듣자 하니, 2명의 젊은 학생은 교환학생으로 독일에 와서 잠시 기업에서 인턴 경험을 쌓다가

주말을 이용하여 크로아티아로 놀러온 길이라고 한다.

학생때 좋은 경험을 할 수 있어서 부러워했지만, 그 학생 2명은 우리가족을 부러워하는군... ㅎㅎ

덕분에 애들과 말벗을 해주면서 게임도 하고 지루하지 않게 자그레브에 도착을 했다.

학생 2명을 자그레브 시내 어디쯤 호텔 근처에 내려 주고

우리는 우리가 예약한 호텔로 이동을 했다.

주차를 하고 짐만 방에 넣어 놓고 주린 배를 채우기 위해 시내로 이동을 했다.

자그레브 대성당이 보이는 곳으로 말이다.

그 이유는 대성당 건너편 돌라츠시장 주변에 먹을 곳이 많다고 해서이다.

위의 사진의 왼쪽에 위치한 BISTRO NOKTURNO이라는 식당을 들어갔다.

크로아티아 전통음식이 아니지만 Pub과 같이 맥주와 음식을 곁들일 수 있는 곳이었다.

일단 맥주를 하나씩 주문하고,

첫번째 요리는 그릴에 구운 닭고기 + 감자튀김

두번째 요리는 해산물 스파게티

세번째 요리는 오징어 튀김과 감자튀김

그리고 마지막 메뉴는 구운빵이다.

배가 고파서인지 접시를 깨끗이 비웠다.

맛도 괜찮았고, 북적이긴 했지만 분위기도 나쁘지 않았다.

4가지 메뉴에 맥주 2잔 그리고 물.

저녁으로 HRK240/\41,312.23원을 지출했다.

이정도면 무척 저렴한 가격에 훌륭한 저녁 한끼를 해결한것이다.

 

배를 채우고 나서 만사가 귀찮아지니 재빨리 호텔로 복귀해서 꿈나라로~!!!

 

참고로, 오늘 여행 경비를 정산하자면,

- 고속도로 톨비(스플리트->플리트비체) HRK 36/₩6,196.83

- 플리트비체 입장료 HRK 145 /₩24,959.47

- 고속도로 톨비(플리트비체 → 자그레브) HRK 19 /₩3,270.55

- 저녁식사 HRK 240.00 /₩41,312.23

 

그래서 오늘 사용한 여행 경비는

총 ₩75,740

 

그리고 오늘까지 총 누적 여행 경비

- 총 6,677,985 (어제까지의 총여행 경비 6,602,245 포함)

 

부제 : Ubuntu에서 Make compile 코드에 Qt GUI 추가하기

 

프롤로그

Ubuntu terminal 창에서 make compile 코드에 Qt GUI 추가하는 방법은 없을까?라는 단순한 호기심에서 작업을 시작하게 되었다.

 

작업 내용

Make 정상적으로 compile 코드(GNU Make 4.2.1 컴파일러 사용 했음) 준비가 되어 있고, Ubuntu에서 Qt 설치하는 작업을 해야 한다.

참고로, 본인이 사용하는 Ubuntu version 20.04이다.

 

1. Qt 설치 준비

$ sudo apt update
$ sudo apt upgrade

 

컴파일러를 이미 갖고 있다는 가정하에 설명을 하지만, 혹시라도 compiler 없는 경우는 하기 명령어를 실행한다.

$ sudo apt install build-essential

 

2. Qt 설치하기

Qt 관련 페키지를 설치한다. 참고로 qt5 설치하지만, 다른 버전을 설치할 수도 있다. 예를 들어 qt4 ...

$ sudo apt install qt5-default

 

Qt creator 설치하기 위해 아래 그림과 같이 "ubuntu software" 클릭하여 실행한다.

 

검색창에서 "Qt creator" 입력한 설치를 한다. 하기 1 / 2 / 3 참고. 본인은 이미 install 해서 설치 과정은 생략한다.

 

3. Qt 작업환경 만들기

Qt 실행한다. 다음 "Projects" 버튼을 누른 , "+ New" 버튼을 누른다.

 

"+ New" 버튼을 누르면 "Qt Widgets Application" 선택 하단의 "Choose" 누른다.

 

다음 하기의 붉은 부분에 원하는 PRJ 이름 경로를 각각 설정 "Next" 버튼을 누른다.

 

다음 창에서 Build system 디폴트로 설정된 qmake 그대로 사용하기 위해, 별도의 추가 설정 없이 "Next" 버튼을 누른다.

 

Class Information에서도 디폴트 상태로 "Next" 버튼을 누른다. 혹시라도 이름을 변경하고 싶다면 변경해도 무방.

 

다음 번역 파일 설정에서 디폴트 상태로 사용해도 되고 한국어를 설치해도 된다. 다음 "Next" 버튼을 누른다.

 

다음이 중요한 부분이다. 컴파일러를 설정하는 부분인데, 하기 options 눌러서 qmake(Qt 컴파일러) 현재 사용하고 있는 , make compile 코드에서 사용한 컴파일러를 이곳에서 선택해주면 된다.

 

먼저 Qt 다음과 같이 설정한다.

"Option" 누른 다음 "Qt versions" 탭을 선택 è Add 버튼 선택 è위에서 설치한 qt5 qmake 선택 è"Apply" 버튼 선택한다.

경로는 /usr/lib/x86_64_linux_gnu/qt5/bin/qmake 이다.

 

 

다음 "Kits " 선택 è  Qt version에서 방금 설정한 qt5 변경한다.

 

그리고 마지막으로 소스 컴파일시 사용했던 compiler gcc 다음과 같이 설정하여 준다.

 

 

만약 해당 버전이 없는 경우 "compilers" 탭에서 Manual 선택 è C++ 선택 Add 버튼을 눌러 C++ 컴파일러 설정 è C 선택 Add 버튼을 눌러 C 컴파일러를 설정하면 된다. 다음 다시 부분 설정으로 돌아가서 선택하면 된다.

 

Apply 버튼과 OK 버튼을 눌러 설정을 모두 완료해 준다.

 

이상 설정이 제대로 되었다면 다음과 같이 "Desktop" 보일 것이다.

Check 하고 Next 버튼을 누른다.

 

하기 화면에서 Finsh 누르면 모든 설정이 완료된다.

 

설정이 완료되면 하기 코드가 나타난 화면을 있다.

빨간 안에 실행 버튼을 누르면 GUI 실행해 있다.

 

실행을 하면 다음과 같은 GUI 표시된다.

 

4. Qt 이용한 디자인

위에서 GUI 화면이 정상적으로 표시 되었다면, Project 작업창에서 "Forms" 아래 있는 "mainwindow.ui" 더블 클릭한다.

 

 

그럼 아래와 같이 우리에게 익숙한 UI들이 왼쪽에 표시 되어 있는 것을 확인 있다.

필요한 요소들을 Drag해서 왼쪽 상단 작업창에 끌어 놓으면 된다. 간단하게 GUI 작업을 있다.

 

 

Push button 2개와 Line Edit 1개로 다음과 같이 꾸며 보았다.

 

실행 버튼을 누르면 정상적으로 실행이 되는 것을 확인 있다.

 

5. 기존 소스코드를 qt main.c 합치기

기존 make compile 했던 source code main.c qt main.c 합친다.

Qt main.c Qt creator에서 더블 클릭하면 다음과 같이 간단한 코드로 구성이 되어 있는 것을 있다.

 

main.c 파일에 기존 make compile했던 코드를 합치면 간단히 해결된다.

본인은 7 라인 이전에 기존 main.c 파일의 main 함수 내용을 copy 했다.

다음 실행버튼을 눌러 컴파일을 실시하면 다음과 같이 Error 발생한다.

 

Error 발생하는 Header 파일을 Projects 포함시킨다.

Project 창에서 Headers è 오른쪽 클릭 "Add Existing Files…" 선택한다.

이런식으로 Lib 포함 시킨다.

그러면 .pro 파일은 다음과 같이 표시된다.

 

다음 컴파일을 하여 Error 발생하지 않으면 성공!!!

Error 발생한다면 위와 같은 방법으로 하나씩 Error 잡아가면 된다. -_-;;

Error를 다 잡고 Build RUN 성공적으로 하면, 위에서 만들었던 GUI 나타나면 완성이다.

 

 

본인은 GUI 업데이트 하여 최종적으로 다음과 같이 구현 하였다. 상세한 GUI 구현기는 다음에 계속 하도록 하겠다…. ㅎㅎ

- 끝

 

Ubuntu에서 Qt5 설치하기

  • 쉬운 방법 : Ubuntu software tool에서 qt creator 검색 설치하는 방법이 가장 쉽다.

 

여러가지 방법이 있겠지만, Qt 사이트에서 인터넷 접속을 하여 직접 받는 방법을 사용한다.

Firefox 실행하여 하기 링크로 이동.

https://www.qt.io/download-open-source#section-2

 

Download Qt Open Source

The Qt framework is available under both open source and commercial licenses. Learn which license is right for you and get started with your development today!

www.qt.io

제일 아래 페이지로 이동하여 "Download the Qt Online Installer" 클릭한다.

그러면 하기와 같이 나의 시스템에 대해서 분석한 결과가 표시된다. "Download" 클릭!!!

다음과 같이 저장 곳을 지정하고 확인을 눌러준다.

해당 파일은 다운로드 폴더에 저장이 된다.

Firefox 스크롤을 아래로 내리면 Getting Started with Qt 부분을 있다.

https://www.qt.io/download-thank-you

 

Download Qt: Install and get started

 

www.qt.io

여기서 여러가지 비디오를 있는데, install 관련된 첫행 가운데 컨텐츠를 보면 된다.

 

설치하는 방법은 다음과 같다.

Download 받은 폴더로 이동 후에 파일(본인이 받은 파일은 "qt-unified-linux-x64-4.0.1-online.run") 선택하고 오른쪽 클릭--> 속성 선택 --> 권한 선택 --> 실행: 파일을 프로그램으로 실행 허용(E) 체크 표시한다.

다음 파일을 더블 클릭하면, 프로그램이 실행 된다.

하기와 같이 실행이 되면 Qt account 없기 때문에 Don't have Qt account 부분을 선택한다.

하기의 화면이 나오면 정보를 입력한다. 정보를 정확히 입력하면 NEXT 활성화 된다.

활성화된 NEXT키를 누르면 다음과 같이 입력한 e-mail verify e-mail 보냈으니 확인하라는 문구가 나온다.

Qt에서 발신한 e-mail 에서 verify 누르면 다음과 같이 정보를 입력하도록 되어 있다. 참고로 select role student 하면 되겠다.

입력을 완료 하면 아까 입력한 e-mail 주소와 패스워드를 입력해야 한다.

모두 완료 다음 화면으로 돌아가서 Next 누른다.

그러면 하기와 같은 화면이 표시되고 하기 빨간 부분을 체크 다음 Next 누른다.

다음화면이 표시되면 Next 누른다.

다음 화면에서 하나를 클릭하면 되는데, 정보 공유를 하지 않기 위해 하단을 클릭했다. 다음 Next 버튼을 누른다.

경로 등은 그대로 두고 설치할 예정이므로 Next 버튼을 누른다.

Agree 선택한 다음 Next 누른다.

다음 Next

그러면 다운로드가 시작된다.

다운로드가 완료가 되면 이제 Finish 누른다.

- 끝

$ tar zxvf make-4.1.tar.gz
$ cd make-4.1
$ ./configure
$ make
$ sudo make install

Ubuntu 기반 플랫폼에 기가지니인사이드 SDK 설치 및 테스트

기가지니 SDK를 Ubuntu에 설치하여 테스트 하기 위해 하기 링크된 KT 문서를 바탕으로 실행하였다.

참고로 본인 PC에 Vmware(WORKSTATION 15.5 Pro)를 이용 Ubuntu를 설치하여 테스트를 실시하였다. ( 환경 : ubuntu-20.04-desktop-amd64 / cmake v3.16.3 / gcc v9.3.0 / GNU Make 4.2.1)

https://github.com/gigagenie/sample-client-linux-grpc

 

gigagenie/sample-client-linux-grpc

G-INSIDE Linux Sample Client (using gRPC Device SDK) - gigagenie/sample-client-linux-grpc

github.com

위의 설명대로 작업은 크게 다음과 같이 나누어 볼수 있다.

  • 인사이드 클라이언트 키 발급
  • 개발 환경 설정 
  • 필수 라이브러리 및 파일 소스
  • 디렉토리(src/) 내 파일 구성 
  • Linux용 Sample 빌드
  • Sample App 실행

이 중에서 "인사이드 클라이언트 키 발급"은 위에 링크된 KT 문서를 참고로 하면 되므로 Pass하고 나머지 주제들로 글을 써본다.

개발 환경 설정

  • Build Tool 설치

위의 내용을 참고하면 먼저 Build Tool을 설치해야 한다.

$ sudo apt-get install build-essential autoconf automake libtool pkg-config curl make cmake g++ unzip git

Ubuntu에서 Terminal 창을 열고 다음과 같이 위의 cmd를 입력하여 실행하면 쉽게 설치할 수 있다.

설치가 완료되면 하기와 같이 g++ version(Ubuntu gcc)을 확인할 수 있다.

$ g++ -v

 

  • gPRC v1.20.0 및 protobuf 설치

Setup 환경을 하기와 같이 먼저 실행한다.

$ export MY_INSTALL_DIR=$HOME/.local
$ mkdir -p $MY_INSTALL_DIR
$ export PATH="$PATH:$MY_INSTALL_DIR/bin"

Git에서 gRPC v.1.20.0을 받는다.

$ git clone --recurse-submodules -b v1.20.0 https://github.com/grpc/grpc
$ cd grpc
$ make

하지만 여기서 make error가 발생한다.

오류 : error: ambiguating new declaration of ‘long int gettid()’
이유 : GCC 9 리드
솔루션 출처 : 
Github에서 / GRPC : # 20043
해결 방법 : 
src/core/lib/gpr/log_linux.ccsrc/core/lib/gpr/log_posix.ccsrc/core/lib/iomgr/ev_epollex_linux.cc이 파일은
gettid() --> local_gettid() 변경

다시 make를 실행하면 다음과 같이 Error가 또 발생.

Error 내용은 모든 warning을 Error로 처리하면서 발생하는 문제이다.

이 warning을 수정하는게 정석이지만, 일단은 다음과 같이 컴파일러 옵션을 추가하여 문제를 해결한다.

$ export CFLAGS=-Wno-error
$ export CXXFLAGS=-Wno-error

다시 make를 실행하면 문제 없이 compile 될것이다. 

$ make
$ sudo make install
$ cd third_party/protobuf
$ sudo make install

그 다음 위와 같이 make한 결과물을 install 하기 위해 sudo make install을 실행한다.

protobuf를 install 하기 위해 cd third_party/protobuf로 이동 후 sudo make install을 실행한다.

그 다음으로 make install을 입력을 해야하는데, sudo make install이라고 입력을 해야 한다.

그러면 이번 절의 모든 작업이 완료 된다.

 

  • cJSON 설치
$ git clone https://github.com/DaveGamble/cJSON
$ cd cJSON
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=$MY_INSTALL_DIR ..
$ make
$ sudo make install

다음과 같이 위의 cmd를 차례대로 실행한다.

그 다음은 make install 명령어를 실행해야 하지만, Error를 회피하기 위해서 sudo make install로 실행을 해야 한다.

  • OpenSSL
$ sudo apt install libssl-dev

하기와 같이 cmd를 실행한다.

  • ALSA library

하기 명령어를 실행하여, 호출어/음성인식을 위한 voice recording 및 미디어 재생을 위해 ALSA 라이브러리를 설치한다.

$ sudo apt-get install libasound2-dev libasound2

 

필수 라이브러리 및 파일

  • SDK 라이브러리

하기 KT의 Ubuntu 라이브러리 링크에서 libginiside.so, libKwsRnet.so 파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/lib/ubuntu-x86_64

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

  • SDK 헤더파일

하기 KT의 Ubuntu SDK 헤더파일 링크에서 ginisde.h, ginsidedef.h 파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/include

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

  • 호출어 모델파일

하기 KT 링크에서 모델파일을 다운로드 한다.

github.com/gigagenie/ginside-sdk/tree/master/g-sdk-linux/conf

 

gigagenie/ginside-sdk

GiGA Genie INSIDE(G-INSIDE) SDK. Contribute to gigagenie/ginside-sdk development by creating an account on GitHub.

github.com

 

소스 디렉토리(src/) 내 파일 구성

하기 KT 링크에서 sample-client-linux-grpc를 다운로드 후 src/ 로 이동 한다.

github.com/gigagenie/sample-client-linux-grpc

 

gigagenie/sample-client-linux-grpc

G-INSIDE Linux Sample Client (using gRPC Device SDK) - gigagenie/sample-client-linux-grpc

github.com

위의 "필수 라이브러리 및 파일" 섹션에서 다운로드한 파일들을 다음 설명을 참고로 src 폴더 안에 Sub 폴더(conf, include, lib)에 위치 시킨다.

나머지 설명은 참고 사항이다.

  • conf/ : 호출어 모델 파일 저장 위치
  • include/ : SDK용 헤더파일 저장 위치 (ginside.h, ginsidedef.h)
  • lib/ : SDK 라이브러리 저장 위치 (libginside.so, libKwsRnet.so)
  • key.txt : API Link에서 발급받은 개발키 정보를 저장
  • server_info.txt : G-INISDE 개발 서버 정보 저장
  • test_sample.cpp : sample app main 소스

 

Linux용 Sample 빌드

  • sample-client-linux-grpc를 다운로드 후 src/ 로 이동
  • Makefile에서 lpthread, lcjson, lasound 라이브러리와 헤더파일의 위치를 수정한다.
1. cJSON
  - 변경 전
    CFG_INC = -I./include -I/usr/include -I/usr/local/include -I/usr/local/include/cjson
  - 변경 후
    CFG_INC = -I./include -I/usr/include -I/usr/local/include -I/home/mskim/cJSON
  • SDK 라이브러리, 헤더파일, 호출어 모델 파일 등을 lib/, include/, conf/ 디렉토리에 각각 복사하고 Makefile에서 경로 정보를 수정한다.
  • 실제 발급받은 클라이언트 키값을 key.txt 파일에 하기 설명 부분을 지우고 동일한 자리에 입력한다.
YOUR-CLIENT-ID
YOUR-CLIENT-KEY
YOUR-CLIENT-SECRET
  • make 명령어 실행 전에 test_sample.cpp 파일에서 다음 header 파일의 위치를 수정 해야 한다.
#include  "../include/ginside.h"
#include  "../include/ginsidedef.h"
  • $ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH; 입력 후 make를 하면 문제 없이 컴파일 완료
$ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH; 
$ make
  • 컴파일한 실행파일을 실행하는 방법은 다음과 같다.
$ export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH;
$ ./test_sample

파일을 실행 후 "지니야"를 호출하면 정상적으로 동작하는 것을 확인 할 수 있다.

물론 마이크와 스피커가 있는 상태에서 말이다. 본인은 우분투 설정에서 노트북 마이크/스피커 설정 후 테스트 함.

- 끝

2018년 11월 16일(금)

오늘의 여정 : 크로아티아 두브로브니크 → 스플리트

 

두브로브니크에서의 마지막 아침이다.

아침 식사는 어제 장을 봐온 재료로,

계란 후라이, 빵, 햄 등으로 간단히 해결을 했다.

오늘은 스플리트로 이동.

지난번 블레드에서 두브로브니크로 왔던 길을 거슬러 올라가면 된다.

이제는 익숙해진 보스니아 헤르체고비나를 들어가는 검문소가 보인다.

이른 아침임에도 불구하고 많은 차들이 늘어서 있다.

조금 지나지 않아 보스니아 헤르체고비나의 유일한 해변도시인 Neum에 도착했다.

해변가에 아름다운 건물들이 늘어서 있는게

이곳도 해양 휴양지가 아닐까 생각된다.

언제일지 모르겠지만,

다음에 기회가 된다면 한 번 들러보고 싶은 풍경이다.

다시 얼마 지나지 않아

보스니아 헤르체고비나를 지나

크로아티아로 들어가는 검문소가 나온다.

이곳 검문소에도 크로아티아로 들어가려는 차들의 행렬이 길게 늘어서 있었다.

그래도 검문 시간이 그렇게 길지 않아서 금방 통과 할 수 있었다.

 

한참을 달리다 보니, 눈이 쌓인 것 같은 산이 멀리 보인다.

날이 따뜻한데 눈이 쌓여 있다니 좀 이상하다.

멀리서 보면 눈이 쌓인 산이라고 생각을 했는데,

다가가서 보니 그냥 돌로 이루어진 돌산이다.

이내 크로아티아 고속도로 톨게이트가 모습을 나타냈다.

230Km 가량을 한참 달린 끝에 스플리트에 도착을 했다.

스플리트는 크로아티아 남북 길이의 중간쯤 위치한 휴양도시이다.

고대 로마의 디오클레티아누스 황제가 여생을 보내기 위해 디오클레티안 궁전을 이곳에 만들었다.

일찍이 유럽에서도 기원전에 지은 황제의 궁전으로 스플리트가 매우 유명했다고 한다.

주차장 모습도 이국적인 모습과 고풍적인 유적의 모습이 공존해 있다.

날씨도 11월의 날씨 답지 않게 따뜻하고 쾌적했다.

주차장을 나서면 곧바로

디오클레티안 궁전 앞에 위치한 해변가가 눈 앞에 다가와 있다.

벤치에 앉아서 맑은 공기를 쐬며 바닷가를 한동안 바라보았다.

바닷가 왼쪽에는 페리 선착장이, 오른쪽에는 산이 감싸고 있는 풍경이다.

궁전 앞에 있는 거리에서 찍은 풍경들도 매우 예쁘다.

벤치에 앉아서 풍경을 바라보는 사람들,

거리를 거닐고 있는 사람들,

노상 테이블에 앉아서 음식을 먹는 사람들 등.

모두 제 할일을 하고 있는 사람들이 거리를 채우고 있다.

따사로운 햇볕을 받으며 한가히 앉아 있다보니,

배가 슬슬 고프기 시작한다.

그래서, 노상 테이블이 차려진 음식점으로 이동하기로 결정.

구글에서 음식점 리뷰를 검색해 보니 평점이 다 비슷하다.

우선, 사람이 많이 있는 음식점으로 무작정 돌진.

자리에 앉자마자 우선 아이들을 위한 물과 어른들을 위한 맥주+와인을 주문

그리고, 구운 생선 요리 + 먹물 리조또 + 오징어 샐러드를 주문했다.

먹물 리조또는 약간 싱겁고 미묘한 맛이라서 인기가 없었지만

나머지 2가지 요리는 너무 맛있게 먹었다.

경치도 좋고 따스한 햇볕 아래서 음식을 즐길 수 있어서

노상 테이블에서의 식사는 강추이다.

 

맛있게 점심식사를 마치고,

본격적으로 스플리트의 명소인 디오클레티안 궁전을 관광할 차례이다.

티오클레티안 궁전은 동서남북으로 입구가 있다.

우리는 수산시장 쪽에서 들어갈 수 있는 서문(철의 문)으로 들어간다.

입구 앞에는 Marco Marulic 동상이 서 있다.

Marco Marulic은 ( 1450 ~ 1524 )은 크로아티아의 민족 시인으로 유명하며,

크로아티아 500쿠나 지폐의 인물로도 유명하다.

 

조금 걸어 들어가니 지하궁전 홀이 나온다.

어두침침한 지하에서 기념품을 파는 가게들이 여럿있다.

상점가 안쪽으로 조금 더 들어가면 1960년대에 발굴된 지하궁전 홀이 나온다고 하던데...

아이들이 음산한 분위기가 싫다고 하여 패스.

성 도미니우스 대성당이 웅장하고 고풍스러운 자태를 뽐내고 있다.

이곳은 원래 디오클레티아누스 황제의 무덤이 있던 자리였다고 한다.

하지만, 황제의 무덤은 사라지고 그곳에 성 도미니우스 대성당을 지었다고 한다.

그리고 이 성당은 황제에게 죽임을 당한 성 도미니우스를 위해 지어졌다고 한다.

성당으로 올라가는 계단에는 스핑크스가 마치 입구를 지키는것 처럼 자리 잡고 있다.

이 스핑크스는 이집트에서 가져온(?) 것이라고 한다.

아마도 약탈해 온것이 아닐지??

성당 앞에는 열주광장이 자리잡고 있다.

성 도미니우스 대성당에는 60m 높이의 종탑이 있다.

이곳에 오르면 스플리트의 아름다운 도시를 한 눈에 볼 수 있다고 한다.

헌데, 어른들도 오르다가 무서움에 포기를 한다고 한다.

그때는 왜 어른들이 포기할까 라는 생각을 했는데, 올라가보니 그럴만했다.

그래서 6살 먹은 작은 아들 녀석과 둘이서 도전하기로 하고 종탑 입구로 이동했다.

종탑으로 올라가는 길이 가파르게 보여지고 있다.

실제로 올라가다 보니 고소공포증이 있는 분들은 오르기가 어려울 듯 했다.

중간 넘어서 부터는 난간이 부실한 계단이고

난간 너머서는 바로 아래로 추락할 수 있는 구조라서 말이다.

또한, 올라가는 중간에 더이상 오르지 못하고

오르기를 포기하고 내려가는 사람을 몇명 보았다.

둘째 아들 녀석과 종탑 정상에 올라서서 기념사진 한컷을 찍어 보았다.

종탑 전망대가 이 지역에서 가장 높은 위치이기 때문에

전망대에서 바라 본 경치는 속이 뻥 뚤릴 정도로 드넓은 경치를 보여준다.

고풍스러운 건물들과 햇살을 머금은 아드리안해의 눈부신 풍경이 잘 어울러져 있다.

종탑 전망대를 뒤로하고 이제 북문(황금의 문)을 향해 간다.

북문을 향해 가는 길에 마주하는 작은 골목길이 예쁘기만 하다.

북문(황금의 문)에 도착하여 기념사진을 한 컷~

북문 앞에는 검은색 그레고리우스 닌의 동상이 자리하고 있다.

그레고리우스 닌은 10세기에 대주교로 크로아티아인이 모국어로 예배를 드릴 수 있도록 투쟁한 인물이다.

동상의 왼쪽 엄지 발가락을 만지면 행운이 온다는 이야기 때문에

그 부분은 황금색으로 반짝이고 있었다.

이제 다시 성 내부로 들어가서 수산시장 쪽으로 갈 예정이다.

수산시장에서 해물을 조금 사서 AirBnB로 예약한 숙소에서 저녁을 해결할 예정.

수산시장에 도착을 했는데 시장이 텅 비어있다.

확인을 해보니 영업시간이 이미 종료가 된것이다.

해물 사는건 어렵게 되었고, 다시 바닷가 쪽으로 이동하여 주차장으로 간다.

어느덧 노을이 하늘에 드리워지기 시작했다.

주차장을 가는 길에 군밤을 파는 곳이 있다.

그냥 방앗간을 지나칠 참새들이 아니지...

주자장 부근에 야외시장이 있어서 잠시 들러보았다.

시장도 이미 파장 분위기이다.

주차된 차를 몰고 근처 마트에 가서 간단하게 저녁 장을 보았다.

AirBnB로 예약한 숙소에 도착.

오늘도 내가 요리사~ ㅎㅎ

빵, 생선, 새우 그리고 베이컨 요리이다.

그리고 슬로베니아 블레드에서 구입한 와인을 오늘 깔끔하게 드링킹 할 예정.

참고로, 오늘 여행 경비를 정산하자면,

- 스플릿 숙소(애어비앤비) - ₩51,143

- 주유비 HRK 379.43 /₩65,312.92

- 고속도로 톨비 HRK 50 /₩8,607.71

- 점심값 HRK 442.00 /₩76,083.36

- 점심팁 €5.0 /₩6,359.17 (현금)

- 주차비 HRK 75 /₩12,910.07

- 군밤(간식) HRK 2.50 /₩430.34 (현금)

- 저녁장 HRK 168.98 /₩29,087.25

 

그래서 오늘 사용한 여행 경비는

총 ₩249,933

 

그리고 오늘까지 총 누적 여행 경비

- 총 6,602,245 (어제까지의 총여행 경비 6,352,312 포함)

2018년 11월 15일(목)

오늘의 여정 : 크로아티아 두브로브니크(두브로브티크 요새/구시가지 → 스르지 산 정상 전망대)

 

크로아티아에서의 동이 터올랐다.

아침에 일어나 보니

하늘 위로 해가 빼꼼이 얼굴을 비추려고 하길래

잽싼 동작으로 한 컷을 찍었다.

의외로 멋진 일출 사진이 연출되서 블로그에 올릴 수 밖에 없다 ㅎㅎ

숙소가 산 언저리 윗부분에 위치해서 그런지 전망이 좋은지라

테라스에서 내려 보이는

멋진 항구의 모습에 셔터를 누를 수 밖에 없군...

자~ 어제 미리 구입한 스프를 끓이고,

간단하게 빵을 곁들어 아침을 해결.

아침도 먹었겠다 이젠 슬슬 나가보기로 한다.

외출하기 전에 잠시 숙소 테라스에서 한컷~

두브로브니크는 산등성이에서 부터 산자락까지

비탈진 곳에 경사면에 집을 지어서

내려가는 계단이 끝이 없어보인다.

하지만 이국적인 경치인지라

내려가는 동안 경치 구경도 쏠쏠하다.

한참을 내려가니 도로가 나오고,

그 다음 또 내리막이다.

그러기를 여러차례 반복을 했더니

드디어 바다가 보이는 멋진 산책로에 도착을 했다.

바닷가 산책로를 뒤로 하고,

버스 정류장을 향해서 이동.

숙소 앞에도 버스를 타는 곳이 있었으나,

크로아티아 돈으로 환전을 미리 하지 못해서,

은행 근처로 이동해서 환전 후 탑승을 하기로 해서이다.

어제 장을 봤던 Tommy 슈퍼마켓.

드디어 버스정류장 도착~

버스표 가격은

버스표 파는 곳에서 왕복으로

성인2명+어린이1명(둘째 녀석은 어린이 무임 승차) = 72KN(1인당 편도 12KN)이다.

참고로, 버스표 파는 곳 말고 버스 안에서 운전기사에게 버스표를 구입 할 수 있다고 하던데,

그 경우는 좀 더 비싸다고 한다(1인당 편도 15KN).

우리나라 버스와 크게 다른 점이라면 좌석이 많지 않고,

자리가 넓직하다는 거.

그리고 충격적인건 정류장에서 손님들이 탑승할 때,

갑자기 버스 운전사도 바뀐다는거...

우리가 버스 탑승 할때는 남자 운전사였는데,

정류장에서 승객들과 같이 탑승한 여자분이랑 잠시 얘기하더니,

그 남자 운전사는 하차하고,

그 여자분이 운전석에 앉아서 자리 잡고 운전을 하더라는...

여튼 종점은 구시가지의 두브로브니크 요새 앞.

하차해서 보니 바다의 풍광과 잘 어울러진요새의 모습이

반사적으로 카메라 셔터를 누르게 만드는 군.

버스에서 내리자 마자 구경거리가 많아서

아직 요새 안으로 들어 가지를 못했다.

빨리 다리를 건너 요새 입구로~

요새로 들어 갈 수 있는 3개의 문 중에 하나인 필레문(서문)이다.

필리문을 지나고 나면 확트인 구시가의 플라차 대로가 우리를 반긴다.

플라차 대로 중간 중간에 위치한 옆길인 골목길들의 모습 역시 언덕을 따라 형성 되어 있고,

그 좁은 길을 따라서 식당 및 상점이 위치해서,

또 다른 아기자기한 볼거리를 선사한다.

오를란도르 게양대를 지나

성 브라이세 성당에 다달았다.

그리고 곧곧에 펼쳐진 작은 길들.

큰 대로 부터 작은 길까지

바닥에 깔려 있는 돌들은 모두 반짝반짝 하다.

대리석은 아닌거 같은데... 대리석인가(??)

아이들이 배가 고픈지 보채기 시작한다.

그래서 요새를 빠져나간다.

요새를 빠져 나오니 아름다운 항구가 나타났다.

오늘 점심은

케이블카 탑승장 주변에 위치한

한인숙박에서 조그맣게 운영하는 한식당으로 이동.

큰 아들 녀석의 강력한 요청으로 이곳에서 점심을 해결하기로 결정.

고양이가 호시탐탐 기회를 옆보고 있다.. ㅎㅎ

민박을 메인으로 하시기에, 메뉴가 다양하지 않아 보였다.

라면 2개 + 공기밥 2개 + 라볶이 + 튀김우동 사발면 + 이슬(ㅋㅋ) 하나로 우리 4인 가족이 한끼를 해결.

솔직한 후기로 큰 기대를 하고 가면 낭패고,

그리운 한국의 맛을 간단히 맛보고 싶다면 OK.

참고로, 가격이 장난이 아니다.

아까 언급한 메뉴가 우리나라돈으로 5만원 조금 넘는다.... -_-;;

여튼, 식사를 마치고 바로 위에 위치한 캐이블카 탑승장으로 이동.

아래는 티켓 가격표다.

왕복 티켓 대인 2명 + 소인 1명(물론 둘째 아들 녀석은 여기서도 어린 나이로 공짜~)

가격이 우리나라 돈으로 6만2천원 정도로 만만치 않은 가격이다.

케이블카가 도착하기 전에 남는 시간을 활용하여

사진을 찍어본다.

케이블카 탑승하는 곳에서 찍은 경치도 전망대 못지 않은거 같다.

이제 케이블카에 탑승~

가파른 산을 무서운 속도로 올라 간다.

반대편에서 내려오는 케이블카와 조우 하는 순간 셔터를 눌렀다 ㅎㅎ

케이블카를 타고 스르지 산 정상 전망대에 도착하니

시원하게 뚫려있는 풍광들이 속을 뻥하니 뚫어 준다.

이 산의 높이는 412m 정도라고 한다.

산 밑에 구시가지가 정말 조그맣게 보인다.

정상 부근에는 크로아티아 국기가 바람에 휘날리고 있고,

그리고 그 옆에는 십자가가 자리를 잡고 있다.

그리고 바다쪽은 아드리안해의 끝없는 수평선이 펼쳐져 있다.

그리고 바다 반대편에 커다랗고 길다랗게 놓여 있는 산맥이 또 하나의 장관이다.

케이블카의 비싼 비용이 전혀 아깝지 않은

시원시원한 경치를 보니그 동안 눌러져있던 체증이 싹 사라지는 그런 느낌이다.

친절한 직원 한 분이 우리가족 사진을 찍어주셨다.

직원 분이라서 그런지 핫스팟을 잘 골라서 찍어 주신듯 하다.

어느 방향에서 셔터를 누르든지 사진이 다 잘 나온다.

드디어 산에서 내려와서 다시 요새 근방 항구에서 경치가 좋아 셔터를 눌러댔다.

햇살이 풍성한 바닷가 항구가 마음을 따뜻히게 만드는 것만 같았다.

항구에서 바라 본 전망대쪽 하늘은 맑기 그지 없고, 파랗기 그지 없다. 좋다~!

다시 요새 안에 구시가지를 지나가다가

피자에 그만 넘어가버린 우리 마나님께서 피자 한 조각을 꿀꺽...

참고로 한 조각에 25KN로 우리 돈 가치로 4천원이 조금 넘는다.

어느덧 시간이 오후 4시 30분을 넘어 가고 나니,

아름답게 노을이 하늘에 물들었다.

두블로부니크의 노을은 세상 어디서도 볼 수 없는 아름다운 노을이라고 하던데,

역시 명불허전이었다.

이 아름다움을 사진에 남기려 했지만,

그 모습 그대로 사진에 남길 수 없다는게 너무 아쉬웠다.

이제 저녁 식사를 위해 집주인 아주머니가 추천해준

크로아티아 전통 방식으로 해물을 잘하는 EDEN이라는 음식점으로 이동.

차분한 분위기와 친절한 웨이터 아저씨가 무척 기분을 편안하게 만드는 곳이었다.

오랜만에 분위기를 낼 겸, 큰 맘먹고 와인을 시켜서 와이프와 한 잔~

와인을 즐겨 하지 않기 때문에 맛은 무어라 표현하기가 어렵지만 여튼 분위기 내는데는 성공?? ㅎㅎ

생선과 오징어 그리고 새우 등을 따로 시켰는데, 큰 요리 접시에 다 같이 나오는 군.

음식은 정말 만족 스럽게 맛있게 먹었다.

모든 식구들이 먹고나서 엄지 손을 척 하고 올렸다는...

 

저녁 식사는 720KN으로 한화로 따지면 대략 12만원이 조금 넘는다.

와인 한 병 값까지 포함해서 이정도면 괜찮은거 같다.

특히 맛나게 먹었다는게 가장 중요할 뿐 ~~ ㅎㅎ

다시 숙소에 도착 한 후,

테라스에 나와 찍은 아름다운 두블로부니크의 야경을 마지막으로 하루가 저물고 있다.

참고로, 오늘 여행 경비를 정산하자면,

- 버스비 HRK 60/\10,328.06 (현금)

- 아이스크림 HRK 20/₩3,442,68 (현금)

- 점심(한식) HRK 100/₩17,213.43 (현금)

- 점심(한식) €23.0/₩29,417.79

- 라면 HRK 23/₩3,959.09 (현금)

- 케이블카 HRK 360/₩61,968.35

- 기념품 컵 HRK 49/₩8,434.58

- 물 HRK11.68/₩2,010.53

- 피자 HRK 25 /₩4,303.36 (현금)

- 저녁식사 HRK 720 /₩123,936.69

- 간식/내일 아침식사 HRK 69.26 /₩11,922.02

 

그래서 오늘 사용한 여행 경비는

총 ₩276,936

 

그리고 오늘까지 총 누적 여행 경비

- 총 6,352,312 (어제까지의 총여행 경비 6,075,376 포함)

내가 일러스트까지 하게 될줄은 몰랐지만, 어떻게 하다하다보니 일러스트 강좌를 듣고 필요한 부분에 적용하게 되었다. 그런데, 강좌에서 들은 내용에는 없는 "펜툴로 원하는 부분만 남기고 나머지 부분 삭제" 문제를 접하고 구글링을 해서 지식을 쌓게 되었다.

나중에 잊지 않기 위해서 기록을 해둔다.

 

펜툴로 원하는 부분만 남기고 나머지 부분 삭제

1. 일러스트에 그림 파일 열기

 

2. 펜툴(펜의 선과 면색은 투명으로 설정)을 이용하여 원하는 부분만 선택하기

 

3. 선택한 면에 색을 입힌다. 본인은 흰색 적용

 

4. 상단 메뉴바에서 Window → Transparency 를 선택

 

5. 하기와 같이 Transparency 창에서 Multiply를 선택

 

6. 전체 선택툴을 이용하여 전체 이미지와 펜툴을 이용해 그린 부분을 선택한다.

 

7. 상단 메뉴바에서 Object → Flatten Transparency...를 선택

 

8. Flatten Tranparency 창이 뜨면 하기 빨간 네모 안에 부분만 그림과 동일하게 만들면 된다.

 

9. 오늘쪽 Click 후 메뉴에서 Ungroup을 설정

 

10. 빈공간을 선택하여 선택 해제 후, 직접 선택 툴(Direct selection tool)을 선택

 

11. 직접 선택 툴로 키티 이미지(빨간원)를 제외한 외곽 부분을 클릭

 

12. 키보드에서 Delete 키를 누르면 원하는 키티 이미지외에 나머지 부분이 삭제 !!!

 

- 끝

프롤로그

한 달 동안인가? 열심히 Python 코드를 작성 한 후, 여러 가지 테스트 끝에 Release를 실시했었다. 파이썬이 깔려 있지 않은 PC에서도 실행이 가능하도록 Pyinstaller로 Exe 파일로 변환해서 말이다.

그런데 지난 주에 내 노트북 SSD가 문제가 생겨 부팅이 되지 않는 것이었다. 모든 데이터가 순식간에 다 날라가 버린것이다. 물론 그 Python 코드도 말이다.

구글링을 통해 열심히 복구하기 위해 노력했지만, 데이터 복구 업체가 괜히 있는게 아니라는 생각이 들었다. 복구와 같은 고급 기술은 몇날 몇일을 구글링해도 나와있지 않았다. 물론 간단한 복구 툴소개 및 진단 방법에 대해서는 적지 않은 자료가 있지만 말이다.

결국 구글링은 포기하고 데이터 복구 업체를 컨택해서 복구 비용을 물어 보았지만, SSD의 경우는 일반 HDD 대비 복구 비용이 3배 이상은 비쌌다. 일반 HDD의 경우 1TB 용량은 20~30만원선이었지만, SSD의 경우 1TB 용량은 60~80만원이었다.

고민끝에 Cloud 서비스들에 그나마 조금씩 공유했던 자료들을 긁어 모으기 시작했고, 고생 고생 끝에 그럭저럭 데이터들을 복구할 수 있었다.

하지만 한 달 동안 고생하며 짰던 Python 코드는 복구 할 수 없었다. 하지만 천만 다행으로 Pyinstaller로 Release 했던 Exe 파일하나를 찾을 수 있었다.

자, Pyinstaller로 만든 파이썬 exe 파일을 원래 파이썬 소스 파일인 py로 변환하기만 하면 된다 !!!

 

어떻게 하면 될까?

3일 동안 틈나는 대로 구글링을 하여 Exe 파일을 py 파일로 변환하는 것을 찾아보았다. 외국의 사례에서도 나와 같은 경험을 한 사람들이 꽤나 있었다. 하지만, 의외로 명쾌한 답을 찾기는 어려워 보였다. 하지만 다행이도 Jako 님의 Blog를 통해 좀 더 확실히 솔루션에 접근을 할 수 있었다.

https://klonic.tistory.com/115

 

pyinstaller로 변환 된 exe 파일 디컴파일 시키기

Pyinstaller 디컴파일 pyinstaller란 .py 파일을 .exe 파일로 변환할 때 쓰는 프로그램 입니다. pip install pyinstaller로 설치가 가능하고 설치가 되고나면 윈도우 커맨드에서 pyinstaller 라는 명령어로 실행..

klonic.tistory.com

위의 Blog의 내용을 바탕으로 본인이 실습한 내용을 다음과 같이 설명하고자 한다.

 

준비

다음과 같은 Tool이 필요하다.

 

exe 파일을 py 파일로 변환하기

준비가 끝마쳐졌으면, 파이썬 exe 파일을 작업을 할 폴더로 이동을 한다(참고로, 본인의 경우 "findgoodprice_naver.exe" 파일이며, 작업 폴더는 "D:\04_Code" 이며, 또한 Visual Studio Code를 Editor로 사용하고 있다).

하기와 같이 Visual Studio Code(VSC)의 Terminal 창에서 작업 폴더로 이동한 후, 미리 Down 받은 Pyinstxtractor.py을 실행하여 exe 파일을 pyc 파일로 변환한다.

python pyinstxtractor.py findgoodprice_naver.exe

참고로, 파이썬으로 만든 exe 파일의 파이썬 버젼과 동일한 버젼의 파이썬을 이용해야 한다.

본인의 경우 exe 파일은 3.76으로 작성을 하였으며, 새로 설치한 파이썬도 3.76 버젼이다.

만약 버젼이 맞지 않은 경우 하기와 같이 Warning 메시지가 뜬다.

+ Recent posts