728x90
반응형

  주로 DB를 사용하고자 할때 요즘은 SQL Lite등을 사용하지만 개발을 진행하다가 보면 보안적인 측면 그리고 성능적인 측면에서 수십, 수백만건의 데이터가 넘어 갈 경우에는 파일 DB로는 불가능한 경우를 종종 만나게 된다. 그럴때 사용할 만한 RDBMS로 MySQL을 사용하는데 매번 설정을 찾아 보는게 귀찮아 한번에 정리한 버전을 만들어 본다.

 

환경

OS : CentOS 7.X (amd64)

설치 방법 : yum을 이용한 설치

설치 대상 : MariaDB 10.5.2-1.el7.centos

 

yum repository에 등록

yum으로 최신 버전의 MariaDB를 설치하고자 한다면 먼저 /etc/yum.repos.d/ 하위에 신규 파일을 생성하고 아래와 같이 넣어 준다.

 

maria.repo

 

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

 

간략 설명

: 위의 yum.mariadb.org 에 접속하면 버전과 OS까지 선택할수 있게 되어 있다. 

설치하고자 하는 버전별로 OS를 선택해서 위의 baseurl을 업데이트 하기 바란다.

 

설치

이제는 설치를 진행해 보자.

아래의 명령어만으로 관련된 모든 패키지를 설치 할수 있다.

yum install MariaDB*

 

(2/435): MariaDB-common-10.5.2-1.el7.centos.x86_64.rpm                 |  81 kB  00:00:07     
(3/435): MariaDB-compat-10.5.2-1.el7.centos.x86_64.rpm                 | 2.2 MB  00:00:17     
(4/435): MariaDB-devel-10.5.2-1.el7.centos.x86_64.rpm                  | 8.1 MB  00:00:43     
(5/435): MariaDB-client-10.5.2-1.el7.centos.x86_64.rpm                 |  12 MB  00:01:16     
(6/435): MariaDB-shared-10.5.2-1.el7.centos.x86_64.rpm                 | 113 kB  00:00:02     

 

만약 구버전을 사용하다가 위의 yum을 업데이트 한다면 관련된 많은 패키지가 업데이트 된다.

 

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr//bin/mysqladmin' -u root password 'new-password'
'/usr//bin/mysqladmin' -u root -h sokoban.co.kr password 'new-password'

Alternatively you can run:
'/usr//bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr/' ; /usr//bin/mysqld_safe --datadir='/data/mysql/'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr//mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

 

잘 설치 되었다면 위의 메시지가 뜨면서 MariaDB가 실행된것을 PS로 확인할 수 있다.

 

후속 작업

먼저 접속을 위해서 아래의 명령어를 통해서 root 패스워드를 설정 한다.

 

/usr/sbin/mysqladmin -u root password 'new-password'

 

 

설정 변경

DB의 캐릭터 설정과 메모리 사용량 등을 설정한다.

my.cnf 파일의 변경

 

 

[client-server]

[mysqld]
datadir=/data/mysql
general_log_file=/data/mysql/log/general.log
socket=/var/lib/mysql/mysql.sock
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET NAMES utf8"
#default-character-set = utf8
character-set-server = utf8
collation-server = utf8_general_ci
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size =1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 16M
query_cache_limit = 32M
thread_concurrency = 4
max_connections = 100 #200

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set = utf8

[mysqldump]
default-character-set = utf8
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

 

 

 

시작 할때 datadir을 변경하고자 한다면 아래와 같이 /etc/init.d/mysql 스크립트내의 datadir에 명시해준다.


# If you change base dir, you must also change datadir. These may get
# overwritten by settings in the MariaDB configuration files.

basedir=
datadir=/data/mysql

# Default value, in seconds, afterwhich the script should timeout waiting
# for server start. 
# Value here is overriden by value in my.cnf. 
# 0 means don't wait at all
# Negative numbers mean to wait indefinitely

 

 

예외상황 처리

 

설치 이후 초기 DB 파일이 설치 되지 않았을 경우 대처

sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/data/mysql/

 

서비스 포트 변경

보안성 향상을 위해 Port를 변경해 주어야 할 필요가 있을때 아래의 방법으로 변경한다.

 

SE Linux가 활성화 되어 있다면

아래의 명령어를 이용하여 SE Linux에 포트를 추가해야 한다.

semanage port -a -t mysqld_port_t -p tcp 13306

 

그리고 방화벽의 포트를 열어 준다.

firewall-cmd --permanent --zone=public --add-port=13306/tcp

firewall-cmd --reload

 

마지막으로 서비스에서 포트를 변경한다.

vim /etc/my.cnf.d/server.cnf

 

[mariadb]

port=13306

 

서비스 접속 IP 허용

최초 설치하게 되면 자기 자신의 IP만 허용되어 있고 root 계정만 존재하는 상태이다. 

계정을 생성한 다음 본인이 접근하고자 하는 외부 IP를 설정하여 외부 IP에서 접근할 수 있도록 설정해 주어야 한다.

 

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'teddy'@'10.0.0.%' IDENTIFIED BY 'Password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

728x90
반응형
728x90
반응형

   누구나 핸드폰은 하나 가지고 있는 시대이고 두개, 세개 가지고 있는 사람도 있을 것이다. 언제부터인가 회원 가입이나 본인을 인증하기 위한 수단으로서 핸드폰은 무엇보다도 중요한 수단이 되었다. 다만 국내가 아닌 해외의 경우 본인의 인증을 해야 하는경우, 혹은 전혀 신뢰성 없는 곳에서 SMS 문자를 받아야 하는 경우등이 발생될 수 있다. 

  이럴때 사용해 보면 좋은 온라인 무료 SMS 번호이다.

 

  % 국내 혹은 본인의 인증이 꼭 필요한 곳에는 본인 명의의 핸드폰을 사용하길 바란다. 아래의 경우 SMS 결과가 웹상에 인증없이 노출되어 있기 때문에 중요한 본인을 인증하는 서비스등에 사용할 경우 본인의 메일 노출, 메신저 대화 노출 등이 발생할 가능성이 높다. 

 

미국 번호를 제공하는 사이트

 

아래는 우크라이나 전화 번호로 실제 수령된 SMS 내용이다. 위에서 주의 한대로 임시로 혹은 본인 인증이 필요없는 곳에 사용하기 바란다. 만약 신용카드 번호를 등록하는 곳에 이런 전화번호를 사용 했다고 상상해 보라.. 그리고 누군가 그것을 알았다면 ? (결과가 웹상에 공개되어 버리기 때문에 누군가는 수신된 내역을 검토할 것이고 ID는 웹 사이트의 고객 ID 찾기를 통해서, 패스워드 까지도 변경 가능할 것이다.)

 

  구글링에 노출되는 10개 정도 사이트이다. 다만 실제로 수신된 시간이 최근이 아니고 작게는 10일전, 몇달전으로 된 경우 SMS 수신하지 못한다. 필요한 경우 마지막 수신 시간이 최근인지 확인하고 사용하는것이 필요하다.

 

https://www.raymond.cc/blog/top-10-sites-receive-sms-online-without-phone/

 

Top 10 Sites to Receive SMS Online without a Phone • Raymond.CC

If websites like Google, Yahoo or Microsoft are asking for your telephone number to verify that you are a real user, but if you are not comfortable in providing one, here are the top 10 sites that have free public phone numbers to receive SMS online.

www.raymond.cc

728x90
반응형

'보안' 카테고리의 다른 글

Kali Linux Docker에서 사용하기  (0) 2022.12.31
데이터 연계/결합의 개념  (0) 2020.03.01
일회용 메일 주소  (0) 2018.06.25
728x90
반응형

  윈도우즈에서 Pycharm을 사용해서 개발을 하는 경우가 종종 있다. PyCharm으로 개발은 하였지만 실제 코드가 동작하는 환경은 리눅스이기 때문에 이를 옮겨 주어야 한다. 

 

  이때 PyCharm의 편리한 기능중 하나인 Python 가상 환경으로 개발을 진행할수 있다.

  다만 이때 윈도우즈에서 가상환경으로 개발을 진행하게 되면 가상 환경의 실행 파일들이 모두 윈도우즈 exe 파일로 설치되게 된다. 이렇게 개발된 가상환경을 바로 유닉스 환경에서는 실행이 되지 않고 당연히 별도의 가상 환경을 해당 유닉스 시스템에 만들어 준 이후에 해주어야 한다. (윈도우즈의 가상 환경을 바로 이동 시킬수 있는 방법이 있는지는 모르겠다.)

 

   이때 해당 파이선 버전의 환경은 가상환경으로 유닉스상에서 만들기 편하지만 라이브러리의 경우에는 모두 이동을 해주어야 한다.

 

  여러가지 의존성들이 설치된 상태

 

  이때 아래의 명령어를 이용해서 간단하게 의존성을 추출하고 설치를 진행 할수 있다.

 

  방법

1. PyCharm 상에서 터미널창을 연 다음 아래의 명령어 수행

 

  > pip freeze > requirements.txt

 

2. requirements.txt 로 위의 버전 정보 추출 확인

 

beautifulsoup4==4.8.1
html5lib==1.0.1
lxml==4.4.2
numpy==1.17.4
pandas==0.25.3
psycopg2==2.8.4
python-dateutil==2.8.1
pytz==2019.3
singleton==0.1.0
six==1.13.0
soupsieve==1.9.5
webencodings==0.5.1

 

3. 유닉스 환경에서 아래의 명령어들을 이용하여 가상 환경 생성

 

> python -m venv env --without-pip

  (--without-pip 옵션은 제거하여도 된다. 에러가 난다면 추가한다.)

> source env/bin/activate

> pip install -r requirements.txt

 

pip가 제대로 설치되지 않아 --without-pip를 설정하였으므로 pip가 설치되지 않은 상태이므로 아래의 명령어로 설치해준다.

> curl https://bootstrap.pypa.io/get-pip.py | python

 

  이제 윈도우에서 개발한 환경 그대로 사용이 가능해 질 것이다.

728x90
반응형
728x90
반응형

데이터 연계 결합 지원제도 도입 방안 연구 (정보인권연구소) 발취

 

데이터 연계의 개념

 

데이터 연계(Data Linkage)란 두 개 이상의 출처로부터 동일인이나 동일한 사건, 기관, 장소에 연관된 정보를 함께 가져오는 것을 의미한다. 정보를 결합함으로써 단일 출처의 정보만으로는 알기 힘든 정보 요소 간의 관계가 밝혀질 가능성이 있다. 데이 터 연계는 레코드 연계(record linkage), 데이터 매칭(data matching), 데이터 통합 (data integration) 등으로도 불린다.2)

 

데이터를 연결할 때 사용되는 변수들은 식별 변수와 관심변수, 크게 두 종류로 구 분된다. 식별 변수(Identifying variables)는 이름, 주소, 의료보험번호 등과 같이 개인 식별에 사용되는 변수로서 서로 다른 데이터셋의 연계에 사용된다. 관심변수 (Variables of interest)는 나이, 성별, 수입, 질병, 직업 등 연구의 주된 관심사가 되는 변수들을 의미한다.

 

식별자에는 직접적인 식별자(direct identifiers)와 간접적인 식별자(indirect identifiers) 두 종류가 있다. 직접적인 식별자는 이름, 주민등록번호, 주소 등과 같이 개인을 정확히 구별해낼 수 있는 식별자이며, 데이터들을 연결할 때만 가치가 있는 정보로 연구자들은 별로 관심을 두지 않는 대상이다. 하지만, 직접 식별자는 개인 식 별이 가능하므로 매우 민감한 정보일 수 있다. 그러므로 연구목적의 데이터셋에서 직 접적인 식별자들은 제거한 후에 연구자들이 접근하도록 하는 것이 일반적이다.

 

간접적인 식별자는 다른 정보와의 결합을 통해서만 개인을 구별해낼 수 있다. 대부 분의 간접적인 식별자는 위의 관심변수와 중첩되는 경우가 많다. 예를 들어, 나이, 성 별, 인종과 같은 정보는 개인을 구별하는 데도 사용되지만 중요한 설명요인이 되는 경우가 많다. 간접적인 식별자를 통해서도 개인이 재식별될 가능성이 있는데, 특히 데 이터셋이 연계될 경우 이러한 특징적인 정보들이 증가함에 따라 개인 재식별 가능성 이 증가하게 된다.

 

(2) 데이터 연계의 유형

데이터셋의 상태나 연구의 목적 등에 따라 다양한 데이터 연계 방법을 활용할 수 있다.

 

가. 정확 연계(exact/deterministic linking)

정확 연계는 두 개의 데이터 출처가 고유한 참조번호(reference number)를 공유하 고 있는 경우에 가능하다. 예를 들어, 영국에서는 국가보건서비스(NHS) 번호를 이용 해서 NHS 의료기록들을 연결할 수 있다. 이론적으로 정확 연계의 장점은 확실하고 단순하다는 점이다. 이때 연결에 사용되는 고유식별자가 다른 개인정보를 포함하지 않는 임의번호인 경우가 좋다. 혹시 의도하지 않게 데이터가 유출될 경우, 개인정보를 포함하고 있는 고유식별자보다는 개인정보 노출의 위험성이 낮아지기 때문이다.3)

정확 연계는 연계 필드(match field)의 고유성과 함께, 그 데이터가 정확하다는 것 을 전제로 한다. 연계 필드의 데이터에 오류가 있다면, 당연히 연계로 생성된 데이터 셋에 오류가 발생할 수밖에 없기 때문이다. 이는 연계 필드를 생성하는 기관이 얼마 나 많은 자원을 갖고 있는지와 정확한 연계의 중요성 정도에 달려있다. 예를 들어, 카 드번호와 같이 데이터값의 정확성이 중요한 경우에는 값의 정확성을 즉시 자체 점검 할 수 있는 메커니즘을 가지고 있다.

 

정확 연계가 반드시 임의의 참조번호에 의해서만 이루어지는 것은 아니다. 경우에 따라 이름이나 생년월일 등의 정보를 통해서도 충분히 연계가 가능할 수도 있다. 그 러나 이 경우에는 연계 필드가 고유하고, 정확하다는 전제가 취약해질 수 있다.

 

나. 확률연계(probabilistic matching)

확률연계는 두 개 이상의 데이터셋에서 식별 변수에 해당하는 값을 비교하여 두 레 코드가 동일인에 관한 기록일 가능성을 추정하는 방식이다. 이 방법은 데이터가 부정 확하거나 불완전할 수 있다는 점, 그리고 데이터 출처마다 값이 다른 포맷으로 입력 되었을 수도 있다는 점을 전제로 한다.

서로 다른 데이터 소스가 정확 연계를 위해 동일한 참조번호를 사용하기 위해서는 기관 간의 조정이 필요하지만, 이름, 주소, 나이, 성별 등은 많은 데이터 소스에서 일 반적으로 사용하는 정보들이다. 서로 다른 데이터셋에 공통적인 고유한 참조번호가 없거나, 혹은 법적인 문제를 포함한 여러 가지 이유로 사용하기 힘들 경우 확률연계 를 수행할 수 있다.

두 레코드가 동일인에 관한 것일 확률을 측정하는 것이므로 오류 가능성이 존재한 다. 이러한 오류 가능성은 동일인에 관련된 레코드가 아님에도 연결하는 경우와 실제 로 연결되는 레코드가 있음에도 연계되지 않는 경우가 있을 수 있는데, 전자를 1종 오류(false positives), 후자를 2종 오류(false negatives)라고 부른다.

연계 실제

True Match

True Non-Match

Link

True Positive

False Positive (1종 오류)

Non-Link

False Negative (2종 오류)

True Negative

표 2-1 데이터 연계 오류

* 출처: 오미애 등 (2014)

 

확률연계를 수행하는 소프트웨어는 데이터를 사용자가 설정한 일정한 오차범위를 갖고, ‘매칭됨(matched)’, ‘매칭되지 않음(unmatched)’, ‘불확실(uncertain)’ 등으로 분류 하게 된다. 그 목적은 사용자가 ‘매칭됨’ 및 ‘매칭되지 않음’은 유효하다고 생각하고, ‘불확실’ 영역에 초점을 맞추어 검토하도록 하는 것이다. 이렇게 사람이 직접 개입함 으로써(이를 clerical matching이라고 한다) 연계율을 높일 수 있다.

확률연계는 정확 연계보다 다소 주관적인 절차가 더 많을 수밖에 없다. 사람들이 많은 결정을 내려주어야 하기 때문이다. 예를 들어, 어떠한 변수의 조합을 사용하는 것이 적절한가, 연계 여부 결정을 위한 요구조건은 얼마나 엄격하게 설정되어야 하는 가4), 일치하지 않는 값들은 오류로 처리할 것인가, 어떤 변수에서의 불일치는 다른 것보다 중요한 것으로 봐야 할 것인가.5) 또한, 확률연계를 통한 분석을 다른 연구자 가 검증할 수 있도록 하기 위해서는 이러한 결정이 투명하고, 기록되고, 일관된 방식 으로 이루어질 필요가 있다.

  확률연계는 그 속성상 정확 연계보다는 오류에 덜 민감하다. 그럼에도 불구하고, 데 이터 연계 작업 전에 데이터 정제(data cleaning) 작업이 선행되어야 할 수 있다. 예 를 들어, 문자열 데이터의 양식을 통일하거나 불필요한 부분을 제거하는 절차가 필요 하다. 또한, 문자열을 비교하는 알고리즘의 특성은 연계 결과에 큰 영향을 미칠 수 있 다. 예를 들어, 소리 기반 연계 알고리즘은 ‘beat’ 와 ‘beath’보다는 ‘Jon’과 ‘John’이 더 가깝다고 판단할 수 있겠지만, 바이그램(bigram) 분석 알고리즘(‘be/ea/at’와 ‘be/ea/at/th’처럼 문자열을 문자 쌍들로 분리하여 분석하는 방식)에서는 반대가 될 것 이다.

 

다. 통계적 연계(statistical linking)

정확 연계 및 확률연계가 정확한 두 개인을 연계하는 것이라면, 통계적 연계는 서 로 다른 개인에 관한 두 개의 레코드가 마치 동일인에 관한 레코드인 것처럼 연계하 여 분석하기 위해 개발된 방법으로 데이터 퓨전(data fusion)이라고도 한다. 예를 들 어, 50세 경상도 남성인 홍길동의 어떤 특성(교육수준, 정치적 성향 등)이 다른 50세 경상도 남성과 유사하다면, 홍길동의 의료 데이터를 그와 유사한 다른 누군가의 정보 와 연계했을 때 통계적으로 유의미한 결과를 얻을 수 있을 것이다. 공중보건 분야에 서는 연구자가 정책 평가를 위해서 시뮬레이션 모델을 만들기 위해 사용한다.

이 방법의 장점은 연계의 질이 덜 중요해진다는 점이다. 그러나 이 방법은 많은 통 계적 가정에 의존하고 있다. 우선 연계할 여러 데이터의 표본은 동일한 모집단에서 조사되었다고 가정한다. 또한, 매칭 변수가 주어졌을 때, 두 데이터셋의 관심변수가 서로 독립적이어야 한다는 것이다. 이는 하나의 연계 후보가 다른 것과 유사하다는 전제를 위해 필요하다.

그러나 통계적 연계의 문제점은 그 전제가 충족되지 않았을 경우, 분석의 결과를 신뢰할 수 없게 된다는 점이다. 두 데이터셋의 조사 혹은 생산 시점이 다를 경우, 두 데이터의 모집단이 다르거나 가중치가 다른 경우, 공통 변수 선택 등 고려해야 할 문 제가 많으며, 연계 데이터의 품질을 어떻게 측정할 것인지도 중요한 문제이다. (오미 애 등, 2014)

라. 다층 연계(multilevel linking)

데이터 연계가 반드시 개인 레벨일 필요 없이 환경정보와 연결되어도 유용성이 높 다. 즉, 개별 단위(사람과 사람, 단체와 단체)의 연계가 아니라, 서로 다른 차원 사이 에 ‘수직적으로’(예를 들어 개인을 의사 혹은 병원과 연계), 혹은 ‘수평적으로’(개인을 작은 지역의 데이터와 연계) 연계할 수도 있다. 예를 들어, HIV 감염 데이터를 지역 적 데이터와 연계할 경우, 지역에 따라 다른 특성을 보여줄 수 있다. 다층연계를 사용 할 경우 정확도가 높으면서도 보안상의 위험도는 낮출 수 있다.

(3) 연계 데이터 유형별 특징

가. 횡단면조사 데이터(Cross-sectional survey data)

사회경제적 데이터를 수집할 때는 주로 설문을 이용하게 되는데, 통계를 낼 목적이 므로 설문조사 결과 데이터는 표면적으로는 깨끗하다. 즉, 통상적인 표준에 따라, 통 상적인 정의와 메타데이터와 함께 수집·생산된다.

그러나 설문 데이터는 주로 표본조사를 하므로 이 데이터가 관심 인구의 대표성을 갖고 있는지가 관건이 된다. 적은 비용으로 가치 있는 데이터를 추출하기 위해, 군집 화(clustering, 특정 지역 혹은 그룹에 초점을 맞춘다)와 계층화(어떤 외부 특성에 따 라 다른 샘플링 방법을 사용) 기법이 사용된다.

설문조사 데이터는 한번 수집되면 그 정확성을 검증하기 힘들다. 설문 응답자를 추 적해서 확인하는 것이 비용이 많이 들어 사실상 불가능하기 때문이다. 또한, 설문조사 데이터는 일반적으로 가명화되기 때문에 데이터 연계 시 문제가 발생할 수도 있다. 예를 들어 연령이 42세가 아니라 43세로 잘못 기록되었을 때, 이는 통계적으로는 큰 문제가 아닐 수 있지만, 데이터 연계 시에는 문제를 야기할 수 있다.

728x90
반응형

'보안' 카테고리의 다른 글

Kali Linux Docker에서 사용하기  (0) 2022.12.31
해외 임시 핸드폰 번호, 해외 무료 SMS 받기  (1) 2020.03.24
일회용 메일 주소  (0) 2018.06.25
728x90
반응형

전문적으로 Python으로 개발하지 않더라도 Python으로 이것저것 개발하거나 혹은 인터넷이나 Github상에서 다운로드한 소스코드를 동작해야 할 일이 꽤 많을 것이다.  그럴때 아래와 같이 잘 예외 처리가 된 코드를 보았다고 생각해 보자..


    lineList = []

    try:

        f = open(fileName, 'r', encoding='latin-1')


    except IOError:

        print("[!] Could not open file " + fileName)

        exit(1)


    except:

        print("[!] Could not access file " + fileName)

        exit(1)


    for line in f.readlines():

        newLine = line.replace('\n', '')

        lineList.append(newLine)


  단지 파일의 내용을 읽은 다음 단순히 리스트에 하나씩 넣어주는 단순한 코드 이다.

 근대 위의 코드를 실행해 보면 아래와 같이 에러가 난다.



[!] Could not access file ./usernames.txt


예외처리가 되어 있어 아무런 에러 메시지가 나지 않는다. 제일 쉬운 에러 메시지를 보는 방법은 try, except를 모두 제거 해버리면 된다. 그러나 열심히 짜둔 코드를 에러 하나 보겠다고 즉 Stack Trace 하나 하겠다고 지우고 다시 짜기엔 귀차니즘이 용납하지 않는다. 이럴때 에러 로깅을 한가지 넣어서 해결 해 보자.


아래와 같이 코드를 수정한다.


    import traceback

    lineList = []

    try:

        f = open(fileName, 'r', encoding='latin-1')


    except IOError:

        print("[!] Could not open file " + fileName)

        traceback.print_stack()

        traceback.print_exc()

        exit(1)


    except:

        print("[!] Could not access file " + fileName)

        traceback.print_stack()

        traceback.print_exc()

        exit(1)


    for line in f.readlines():

        newLine = line.replace('\n', '')

        lineList.append(newLine)


   위와 같이 변경하고 나면 아래와 같이 encoding이 잘못된 키워드로 함수내에 정의되었다는 에러 메시지를 볼수 있다.


TypeError: 'encoding' is an invalid keyword argument for this function


  위에서 사용한 traceback은 python상에서 위와 같이 예외처리등이 수행된 상태에서 Stack Trace를 출력하기에 상당히 유용한 모듈이다. 상세한 설명은 아래의 링크를 참고하기 바란다.


https://docs.python.org/2/library/traceback.html


This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace. This is useful when you want to print stack traces under program control, such as in a “wrapper” around the interpreter





728x90
반응형
728x90
반응형

Death Valley 관광하기

미국 서부를 여행하면서 제대로 황무지를 즐기고 볼수 있는 곳이라고 생각한다. 데스 밸리도 역시 국립공원으로 지정되어 있기 떄문에 보존이 잘 되어 있고 군대군대 관광을 할만한 포인트가 상당히 많이 있는 편이다. 다만 데스밸리의 경우 기온이 너무 올라가면 입장을 제한하기도 하니 기온을 잘 알아 보고 가는것은 필요해 보인다. 그리고 너무나 날씨가 더운 상태에서 차량으로 언덕을 계속 오르는 관광 코스의 경우 차에 무리가 많이 갈수도 있다.


이번 여행에서는 라스베가스에서 Yosemite로 가기 위해서 Bishop을 지나기로 했기 때문에 가는길에 있는 데스 밸리를 여행하는건 어찌보면 당연하지 않을까 생각된다. 천천히 짐을 챙겨서 오전 9시쯤 라스베가스의 호텔에서 출발하면 약 2시간 정도 가면 데스밸리의 관광 포인트로 들어갈 수 있다. 


이번에 내가 지나간 경로는 아래와 같다.



% 평소에도 더운 편이지만 내가 방문했던 7월은 한여름인지라 섭씨 50도까지 올라갔다. 실제로 장시간 돌아다니는것이 힘든 상태이기 때문에 다양한 포인트를 보지는 못했다.



Dante`s View

  해발 1,669m 높이에 있는 전망대로 데스 밸리 전체를 전망하기에 아주 좋은 장소이다. 


 단테의 전망(Dantes View)라는 이름이 지어진것은 신곡을 쓴 단테 알리기에리의 이름에서 따온것으로 1926년 Pacific Coast Borax 회사의 사업가들 몇명이 데스밸리에서 가장 전망이 좋은 곳을 찾다가 이 지점을 보고 꼭 단테의 신곡에 나오는 지옥과 연옥을 보는것 같다고 하여 Dante`s View라고 이름 붙였다고 한다.


  고도가 높은편이므로 올라가는 길은 상당히 오르막길이다. 운전을 약간은 조심하면서 올라가야 하고 거의 다 올라간 지점쯤에 임시 화장실이 하나 있다. 다만 시골 화장실이라고 생각하면 된다. ^^



정상에서 바라본 데스 밸리










zabriskie point

Pacific Coast Borax 회사의 부사장 겸 총 책임자였던 Christian Brevoort Zavriskie의 이름을 따서 지어진 전망대로서 낮은 위치에서 퇴적물들로 만들어진 황무지를 전망할수 있게 해줍니다. 










Furnace Creek Visitor Center

데스 밸리에 있는 여행자 안내소로 데스밸리에 대한 전반적인 설명을 볼수 있다.

간단한 음식도 판매하고 있기 때문에 라스베가스를 떠난 이후에 마땅히 식사를 할 장소가 없으므로 여기서 간단한 샌드위치를 사서 먹으면 좋다. 



관광 안내소 앞에 온도계 화씨 120도를 가리키고 있다. (섭씨로 약 49도 정도.. )



  



728x90
반응형
728x90
반응형


  미국 서부를 관광하면서 빼놓을수 없는 것중에 하나가 Yosemite 국립공원이 아닐까 생각한다. MAC OS를 사용하는 사람이라면 엘 캐피탄이나 시에라와 같은 버전명을 많이 들었을 것이다. 뿐만아니라 바탕화면으로 제공되는 수려한 자연의 사진들 모두 실제 Yosemite 국립공원의 장소 이름과 그 장소의 사진들이다. 


  Yosemite를 관광하는 방법에는 샌프란시스코에서 출발하여 진입하는 방법 한가지가 있을것이고 라스베가스나 LA쪽에서 올라가는 방법이 있다. 

그 중에서 가장 유명한 엘 캐피탄을 중심으로 많은 분들이 경로를 잡는데 실제로 내가 경로를 잡았을때에는 아래와 같은 경로가 있었다.


 1.  LA->Fresno -> Yosemite

 2. Las Vegas -> Fresno -> Yosemite

 3. Las Vegas -> Bishop -> Yosemite


  검색을 해본 결과 주로 한국 단체 여행의 경우 프레즈노(Fresno)를 경유한 다음에 Yosemite 국립공원으로 진입하는 경로가 많았기 떄문에 최초에 그 경로를 잡았지만 구글 맵에서 경로를 검색해보니 Bishop을 통과하는 120번 도로를 알려 주었다. 결과적으로 위에서 3번의 경로를 선택하였고 Bishop에서 Yosemite 엘캐피탄으로 가기 위해서는 120번 도로를 통과해야 한다.


   일명 Tioga 도로로 불리는 120번 도로는 요세미티 국립공원 한 중간을 통과하는 해발 3,000미터 높이의 도로이다. 한 중간을 통과한다는 말은 곧 그 도로를 통과하는 것으로도 요세미티를 많이 볼수 있다고 생각되었다. 


  이 도로의 중요한점은 보통 겨울기간에는 11월 ~5월까지는 폐쇄되고 일년에 약 5-6개월만 지나갈수 있다. (혹시라도 방문하시고자 하는 분은 열려 있는지 닫혀 있는지 반드시 확인해야 한다.)


  지금 이 글을 적는 시점에서는 닫혀 있다. ( https://www.nps.gov/yose/planyourvisit/conditions.htm )


  % 120번 도로를 타고 가면 초입에 입장료를 받는 곳이 나온다. 입장료는 차 한대에 30$ 였던것으로 기억한다. (다만 최근 $70까지 인상한다는 기사가 나오는데 고려하시기 바란다.)


Tioga Load 120 Load

요세미티 국립공원(Yosemite National Park) 동쪽 입구로 가려면 티오가 패스(Tioga Pass)라는 별명으로 불리는 120번 하이웨이를 타야 합니다. 이 도로는 해발 9,945피트(3,031m) 높이에 있으며, 겨울이 다가오면 통제됩니다(보통 11월부터 5월까지 통제되며, 여행 전에 현재 통제 상황을 확인하세요). 리 바이닝(Lee Vining) 마을 인근, 120번 도로의 시작점에 있는 후아 넬리 델리(Whoa Nellie Deli)라는 놀라우리만큼 훌륭한 레스토랑도 도로가 개방되어 있는 기간에만 영업합니다. 무엇이 놀랍냐구요? 이 식당은 다름 아닌 주유소에 딸린 마트 안에 있기 때문입니다. 우선 바닷가재 타퀴토스나 야생 버팔로 미트로프를 주문한 후, 밖으로 나가서 모노 레이크(Mono Lake)가 잘 보이는 곳에 자리를 잡으세요. 이곳은 고대에 바다였던 곳으로, 튜파 타워(tufa towers)라 불리는 초자연적인 지형 때문에 특히 사진작가들에게 인기가 좋은 곳입니다. 거대한 탑들이 마치 세월에 깎여나간 체스 말들처럼 호수 주변에 열지어 서 있습니다. 조류탐사를 하는 사람들도 이곳을 무척 좋아합니다. 호수가 사막 고지대에 있고, 화학적으로 독특하여(해수보다 염도가 세 배나 높습니다) 수백만 마리의 새들이 이곳에 모여들기 때문입니다. 모노 레이크 석회화 주립 자연보호지구(Mono Lake Tufa State Natural Reserve) 방문자 센터에서 더 많은 정보를 얻을 수 있습니다.

리 바이닝에서 요세미티로 가는 120번 고속도로를 타면 티오가 레이크(Tioga Lake)나 엘러리 레이크(Ellery Lake) 같은 고산 호수, 화강암 돔, 야생화 가득한 투올러미 초원(Tuolumne Meadows)입구를 지나게 됩니다. 계속 더 가서 북쪽으로 방향을 틀면 에버그린 로드(Evergreen Road)를 통해 고즈넉한 헷치 헷치 밸리(Hetch Hetchy Valley)가 나타납니다. 연중 가장 오랫동안 하이킹을 즐길 수 있으면서도 아직 사람들에게 많이 알려지지 않은 곳이죠. 등산로를 따라 걷다 보면 와파마 폭포(Wapama Falls) 비하이브 메도우 트레일(Beehive Meadow Trail)에 펼쳐진 야생화도 볼 수 있습니다.

https://www.visitcalifornia.com/kr/attraction/120%EB%B2%88-%ED%95%98%EC%9D%B4%EC%9B%A8%EC%9D%B4

미국 여행 공식 사이트 발췌



티오가 로드로 가기 바로 직전에 있는 주유소겸 마트 


( 이 마트 직전까지는 리 바이닝 근처에 대형 주유소와 식사할 곳이 많지만 이 마트를 지나고 나서는 Yosemite를 지나갈때까지는 전혀 마트나 주유소가 없기 때문에 진입하기 전에 충분히 2~3시간 정도 운행이 가능한 (약 200km 이상) 정도의 기름을 주유하길 권장한다. )











120번 도로에 있는 요세미티 여행자 안내소





% 단지 도로를 통과하는 중간중간에 차를 세우고 구경할만한 곳이 아주 많이 나온다. 


% 120번 도로를 이용 가능한 기간에 서부 여행을 하신다고 꼭 한번 지나가 보시기를 권장해 드리고 싶다.











728x90
반응형
728x90
반응형

캘리포니아 여행으로 그랜드 캐년으로 가기 전에 세도나에서 하루를 머무르면서 저녁을 보내었다.


세도나에서 멋진 저녁식사를 위해서 몇군대를 Yelp를 통해서 찾아 보았다. 숙소 바로 옆에 Yelp에 별 4.5 짜리 식당이 있어서 바로 가 보았다.


가게 이름은 The Hudson 이라는 식당으로 식당 앞 전망이 멋진 집이였다. 다만 자리가 없었고 대기 줄이 너무나 긴 관계로 어쩔수 없이 다른 식당을 찾을수 밖엔 없었다. 만약 다음에 또 세도나를 가게 된다면 한번 가보고 싶은 식당이였다. ( 다만 식당이 약간 성인들 위주로 되어 있어서인지 식당 내부에 어린이들은 상대적으로 적은 편이였고 약간은 젊은 취향이였다.)



Creekside Sedona

hudson에 사람이 많은 관계로 다시 yelp로 검색을 하다가 찾은 집이다. 별 4.5 이상의 집들은 모두 대기가 있는듯 하였고 실제로 갔을때 전혀 대기 없이 들어 갈수 있었다.  다만 테라스에도 자리가 있는데 그 자리로 가기 위해서는 약 20분 가량을 기다려야 했다.






전형적인 미국 음식을 파는 집이였고 샌드위치와 햄버거 등의 메뉴가 많았다. 우리는 샌드위치와 토마토를 이용한 전체 요리등 몇가지 주문하였다.




파스타였던것으로 기억하는 요리인데 먹을만 하다.





토마토와 바게트를 이용한 요리와 샌드위치에 감자튀김 요리.. 



  가족단위의 손님이 조용하게 식사를 할수 있는 장소였고 뷰가 좋다고는 할수 없지만 (실제로 허드슨이나 다른곳에서는 세도나의 메인 관광지를 한눈에 볼수 있다. ) 나름 테라스에서 저녁 식사를 조용히 할수 있고 전반적인 서비스도 좋았던 장소이다.


% 가족 단위로 갔을때 애기들을 위해서 패밀리 레스토랑 처럼 조그마한 크레파스와 색칠판을 주었던 것이 인상 깊다. 

% 맥주를 두잔 정도 먹었는데 추천 맥주로 에일 맥주가 괜찮았었다. 


% 주변에 4.5 짜리 식당을 가보지 못해 평가를 내릴수는 없지만 미국에서 먹었던 식당중에서 그냥 무난한 식당중 하나였다.






728x90
반응형
728x90
반응형



미국 서부를 여행하면서 LA와 San Diego를 거쳐 세도나로 가기전에 잠깐 쉬어가기 위해서 머물렀던 팜스프링이다.

 휴양지 느낌의 장소로 호텔이 가격대비 미국내에서 숙박한 어느곳 보다도 가성비가 좋았고 주변이 거의 45도를 넘어가는 사막임에도 불구하고 오후에는 수영장에서 충분히 놀수 있었다.


Embassy Suites Hotel La Quinta (4성급 호텔)

주소 : 50777 Santa Rosa Plaza, 라 퀸타, CA 92253


https://www.booking.com/hotel/us/embassy-suites-la-quinta-spa.ko.html?label=gen173nr-1FCAEoggI46AdIM1gEaH2IAQGYARe4AQfIAQzYAQHoAQH4AQuIAgGoAgO4AoDhuOQFwAIB;sid=b0997c105d19ddf99c35992ab2fe186f


별도로 전경이나 수영장을 찍어 두지 않아서 위의 링크로 대신한다. 실제로 호텔 전경이나 수영장 그리고 방의 컨디션이 아주 휼륭했고 내가 예약한 방은 퀸 스위트룸으로 4인 가족이 더블침대 2개에서 편안하게 쉬었다. 방과 별도로 거실에 침대 겸용 쇼파가 있는데 그건 아예 사용도 하지 않았고.. 간단하게 음식을 해서 먹을수 있는 식당도 잘 되어 있었다. 


  만약 서부 여행중에 쉬어갈 만한 기간이 허락 된다면 여기에 가보기 바란다. Booking.com 9 점을 받은 곳이다.



호텔 특이사항

  해피 아워 

 오후 5시부터 오후 7시까지 약 2시간동안 아래에 보이는 바에서 주류와 간단한 음식을 무료로 즐길수 있다. 실제로 주류가 무제한으로 제공된다. 다만 주류를 주는 분에게 팁을 까먹지 말고 주길 바란다.



오전 조식

해피아워에서 제공되는 장소에서 아침 조식을 제공한다. 상당히 조식이 훌륭하다. 





1층에 있는 오락실 간단한 오락기가 준비되어 있다.



  




팜스프링스 에어리얼 트램웨이 (Palm Springs Aerial Tramway)

주소 : 1 Tram Way, Palm Springs, CA 92262


  팜스프링스에서 가장 가볼만한 곳이 아닐까 생각되는 트램웨이 이다. 


  사진에서 보이는 둥근 트램이 빙글빙글 돌아가면서 해발 2,595M까지 올라간다. 그냥 케이블카인데 별거 있겠냐라고 탔지만 웬만한 놀이기구 타는거 보다 훨씬 재미 있다.


팜스프링스 에어리얼 트램웨이(Palm Springs Aerial Tramway)는 미국 캘리포니아주 팜스프링스에 있는 세계 최대 회전식 로프 웨이. 1963년 9월 , 코아첼라 밸리 ( Coachella Valley)로부터 산타로자 (Santa Rosa) 및 산하신토 (San Jacinto)산 주립공원까지 교통 수단으로서 만들어졌다. 80명 승차 가능한 트램이 산 기슭의 밸리역 (표고 2463 피트/ 약 805 미터)로부터 정상의 위치한 마운트역 (표고 8516 피트/ 약 2595 미터)까지, 1800미터 차이의 거리를 360도 회전하면서 올라간다. 산 정상 뒷 편에는 14000 에이커 (약 5600 헥타르) 가 되는 산하신토산 주립공원 자연보호구가 펼쳐지고 있다. ( from wikipedia )




어린이는 16.95$, 성인은 25.95$ 이다. 상세한 티켓 가격은 www.pstramway.com을 참고하기 바랍니다.


트램을 타기 위해 자동차로 올라가는길



해발 800미터 위치에 있는 트램을 타는 건물을 바라본 사진.. 구름에 가려서 얼마나 높은지는 알기 힘들다. 





정상은 해발 2,595미터 이다. 백두산이 약 2,800미터 정도이니 상당히 높은 산임을 알수 있다.


꼭대기에서 바라본 팜스프링스 전경





올라갈때와 내려갈때 아래를 보면 정말 아찔한 광경을 볼수 있다.




Desert Hills PreMium Outlests

주소 : 48400 Seminole Dr, Cabazon, CA 92230


팜스프링스에 있는 프리미엄 아울렛 센터중 한곳이다. 한국에도 있는 아울렛과 같은 체인인 관계로 유사한 상품을 많이 판매하고 있다. 다만 가격은 약간은 차이가 난다. 하지만 미국 내에서만 싸게 살수 있는 몇가지를 제외하고는 다른점은 없었던것 같다.











728x90
반응형
728x90
반응형


  샌프란시스코 나파 밸리 (Napa Valley)의 와이너리를 여행하면서 온 가족이 점심 식사를 할 장소를 찾고 있었다. 

막상 검색도 해보고 했지만 마땅히 괜찮은 가격대의 식당을 찾기가 힘들었다. 그래서 Yelp를 열심히 뒤진 결과 PROTEA라는 라틴 음식을 파는 식당을 찾을 수 있었다.


식당 이름 : PROTEA Restaurant

주소 : 6488 Washington St Yountville, CA 94599




위치



Yelp의 링크
https://www.yelp.com/biz/prot%C3%A9a-restaurant-yountville-2



앱에서 검색할수 있다.


  가격은 Yelp에서 달러 두개가 달려 있는 만큼 각 메뉴가 10$ 이하이다. 그리고 무엇보다도 좋은 점은 팁을 줄 필요 없는 구조이다. 


식당에 들어가면 일반 햄버거 가게처럼 주문을 할수 있고 계산을 한다. 캘리포니아의 살인적인 팁을 계산하지는 않으며 팁을 주고 싶다면 병이 놓여져 있으므로 거기에 담아 주면 된다. (물론 음식은 가져다 준다.)




가게 1층에도 좌석이 있고 1층 앞뒤에 야외 좌석이 그리고 2층에도 좌석이 있다.




햄버거와 밥이 있는 메뉴등 총 3가지를 시켰는데 26$ 정도 나왔던걸로 기억된다. 합리적인 가격에 식사를 할 수 있다.



728x90
반응형

+ Recent posts