싱글톤
지난 포스트에서 가상 환경 친화적 앱이 어떤 특성을 가져야 하는지 설명했다. 그 글에서 마지막에 소개한 Application Singleton을 이제 구현해보려고 한다.
싱글톤을 만드는 방법부터 시작하자.
역사는 수메르에서 시작되었다
![]() | 역사는 수메르에서 시작되었다 - ![]() 새뮤얼 노아 크레이머 지음, 박성식 옮김/가람기획 |
기원전 2333년. 단군이 고조선을 건국했다고 믿고 있는 해다. 이 당시의 사람들은 어떤 생각을 하면서 살았을지 궁금했다. 비슷했겠지? 고작 4천 년 동안 사람이라는 동물이 뭐 그리 많이 달라졌을까? 동물로서의 사람은 그대로일지 몰라도 문화는 다를 수도 있지 않을까? 그 시절에 남겨놓은 기록이 없으니 궁금해도 참고 살 수밖에요.
하지만 비슷한 시기에 지금의 이라크 남부 지역에서는 수메르인들이 쐐기문자로 점토판에 기록을 남기고 있었습니다. 수메르인들이 이곳에 살기 시작한 지는 훨씬 더 오래되었지만, 대략 기원전 3,000년쯤부터 상형문자를 쓰기 시작했고, 기원전 2,500~2,000년쯤에는 표음문자 체계로 넘어옵니다. 일단 표음문자가 되면 해독이 비교적 쉬워집니다. 그래서 고조선 사람들과 비슷한 시기에 살고 있던 수메르인들의 생각을 엿볼 수 있게 됩니다. 평생 수메르에 매달린 학자가 이 점토들에서 발견된 생각들을 39개의 주제로 나누어 소개하고 있습니다. 잘 알려진 길가메시 이야기도 있지만, 제가 제일 좋아하는 부분은 처음 세 가지입니다. <학교>, <촌지>, <청소년 문제>입니다. 그 당시에도 "요즘 젊은것들은...", "선생님 저희 아이 좀 잘 부탁합니다" 가 있었다는 내용인데, 듣기만 해도 웃음이 나옵니다.
소위 세계 4대 문명 중 메소포타미아 문명을 가장 오래된 것으로 보고 있고, 이 책이 사방에서 <최초>라는 단어를 사용하는 것은 그 때문입니다. 하지만 모르는 일이지요, 아마 더 앞선 문명들의 증거는 또 등장할 겁니다. 하지만 그 문명들이 이처럼 상세한 기록을 남겨두었을지는 의문입니다. 그러니 기록으로만 따지면 계속 최초를 유지할 수 있을지도 모르겠습니다.
이 책이 처음 번역되어 출간된 것은 2000년이고, 제가 읽은 것도 그 근방일 겁니다. 원서(History Begins at Sumer: Thirty-Nine Firsts in Recorded History)는 더 오래되었는데, 초판이 나온 것이 1956년, 이 번역본이 원전으로 삼고 있는 3판이 나온 것이 1981년입니다. 그런데 얼마 전 도서관에 가니 새로 들어온 책 전시대에 놓여 있더군요. 서지 정보를 보니 올해 개정판이 나왔다네요. 가진 책과 대조해보았습니다. 그런데 도대체 뭘 개정했다는 건가? 내용에서는 차이점을 찾지 못했습니다. 과거에는 "역사 명저 시리즈" 의 1권으로 나왔으나, 이번 책은 그런 시리즈에 속하지는 않았습니다. ISBN이 바뀌었고, 표지가 좀 달라졌고, 가격이 20% 올랐습니다.
나이트 플라이어
![]() | 나이트플라이어 (일러스트 에디션) - ![]() 조지 R. R. 마틴 지음, 김상훈 옮김/은행나무 |
가늠도 되지 않는 먼 미래를 배경으로 하는 판타지 호러. 곁들여진 컬러 삽화로 그래픽 노블의 느낌을 가미한 중편. 재킷 주머니에 넣고 다니며 하루나 이틀만에 끝내기에 적당한 판형과 분량.
<조지 R. R. 마틴> 이라는 이름 때문에 집어든 책이지만, 1980년에 처음 나온 책이 지금 번역되어 나온 이유는, 아마도 Syfy 에서 드라마로 만들기 때문이 아닐까? 전에 만들어진 영화는 망했다는 것 같은데, <익스팬스> 만큼만 만들어주면 볼만 할 수도.
이 작품의 중심 키워드는 <호러>인데, <샤이닝>과 비교하는 서평이 붙어있기도 하지만, 그 정도에는 미치지 못한다. 중편이라 캐릭터를 깊이 파고들지도 못한다. 초능력이 등장하는 작품에 SF 라는 단어를 붙이는 것은 늘 불편하다. 그냥 판타지라고 하면 격이 떨어지나?
가상 환경 친화적 앱
Rule 0 - 응용 프로그램은 가상 환경에서 실행된다
좀 오래 묵은 글이지만 파이썬의 가상 환경의 장점에 대해서는 이미 소개한바있다.
그래서 일단 가상 환경을 쓰기로했다고 가정해보자. 그러면 거꾸로 응용 프로그램을 만들 때, 이 가상 환경에 좀 더 친화적이고, 가상 환경이 주는 혜택을 좀 더 끌어낼 수 있도록 만드는 방법이 있을까?
이 질문에 답하는 것이 이 글의 목적이다.
데이비드 코퍼필드
![]() |
![]() |
![]() |
디킨스 번역판들을 연대순으로 훑고 있다. <올리버 트위스트> 와 <오래된 골동품 상점> 를 거쳐 이제 막 <데이비드 코퍼필드> 를 마쳤다. 원래 한 권짜리 동서문화사 판을 사뒀는데, 결국 읽은 것은 도서관에서 빌린 비꽃에서 나온 세권짜리다.
디킨스 작품과 코드가 맞는 편이라 재미있게 보기는 했지만, 그래도 좀 지친다. 자전적 소설이라고 알려진만큼, 디킨스 자신의 인생 행보와 묘하게 겹치는 장면이 많다.
지금 생각해보니 두 가지 의문이 남는다. 하나는 작품속에 드러나는 사회가 상당히 계급화되어 있는데, 이 작품만으로는 충분히 감이 잡히지 않는다. 그 당시 영국의 계급 사회에 대해 딴 책을 한 권 찾아읽어야하겠다. 둘째는, 술에 관한 것이다. 작품 초반에 코퍼필드가 런던 공장에서 일할 때, 모은 돈으로 술집에 가서 맥주를 시키는 장면이 나온다. 이 때의 주인공 나이가 8세(11세인가?). 이런식으로 어린 아이들이 술을 찾아다니는 장면은 쥘 베른의 <십오소년 표류기> 에도 등장한다. 난파선에서 탈출한 후에 다시 돌아가 생필품들을 챙겨오는데, 처음 찾아 다니는 것이 브랜디 상자다. 옛날 유럽이 알콜 중독 상태였다는 말이 빈말은 아닌듯.
트레이스백 들여다보기
파이썬은 처리되지 않은 예외를 만날 때 트레이스백을 인쇄합니다. 문제를 파악하는데 결정적인 정보가 포함된 경우가 많습니다. 하지만 예외가 발생했을 때 제공되는 트레이스백 객체에는 이렇게 인쇄되는 내용보다 더 많은 정보가 포함되어 있습니다.
트레이스백 객체를 들여다보는 방법을 설명하려고 합니다.
데이터 클래스
파이썬 3.7 의 안정판 출시를 앞두고 있는 시점이라 한글 도큐멘테이션을 그에 맞추어 업데이트하느라 꽤 시간과 노력을 들이고 있습니다. 어떤 변화가 있는지는 파이썬 3.7 의 새로운 기능은? 에 정리되어 있습니다.
모든 변경이 중요하겠지만, 그중 눈에 띄는 것은 새로 추가된 dataclasses 모듈입니다. 쓰기도 쉽고 그 용도도 광범위합니다. 3.6 버전을 위한 백포트도 제공되는데 이렇게 설치하면 됩니다:
pip install dataclasses
아쉽지만, 변수 어노테이션을 필요로 하는 모듈이기 때문에, 파이썬 3.5 나 그 이전 버전에서는 지원할 방법이 없습니다.
자 이제 어떤 녀석인지 조금 더 들여다봅시다.
The Annotated Python Language Reference #3
2. 구문 분석
2.1. 줄 구조(Line structure)
2.1.7. 빈 줄
스페이스, 탭, 폼 피드(formfeed) 와 주석만으로 구성된 논리적인 줄은 무시된다. (즉 NEWLINE 토큰이 만들어지지 않는다.) 대화형으로 문장이 입력되는 도중에는 빈 줄의 처리가 REPL 구현에 따라 달라질 수 있다. 표준 대화형 인터프리터에서는, 완전히 빈 줄(즉 공백이나 주석조차 없는 것)은 다중 행 문장을 종료시킨다.
APLR
스페이스(space)는 ' ' 문자를 가리킬 때 사용합니다. 반면 공백(whitespace)은 스페이스, 탭, 폼피드 문자들을 통칭할 때 사용합니다.
APLR
REPL 은 Read-Eval-Print Loop 의 약자입니다. 문장을 입력받고 실행한 후 결과를 출력하는 것을 반복하는 대화형 환경의 인터페이스를 뜻합니다.
파이썬 한국어 선택기
http://docs.python.org 사이트에서는 언어 선택 옵션으로 English, French, Japanese 를 제공해왔습니다. 오늘 부터 네번째 언어로 Korean 이 추가되었습니다. 지금 당장은 3.7 버전 이상에서만 등장하는데, 일단 3.7 버전에서 Korean 을 선택한 후에, 3.6 버전으로 바꾸면 3.6 버전의 한글판이 나옵니다. 곧 3.6 버전에서도 자연스럽게 선택할 수 있으리라 봅니다.
좋은 소식이 하나 더 있습니다.
파이썬 한글 번역팀에 식구가 늘었습니다. 그래서 파이썬 한국어 번역 에 간단한 공동 번역 가이드라인도 추가했습니다. 차츰 살을 더 붙여나가겠습니다.
The Annotated Python Language Reference #2
2. 구문 분석
파이썬 프로그램은 파서(parser) 에 의해 읽힌다. 파서의 입력은 구문 분석기(lexical analyzer) 가 만들어내는 토큰(token) 들의 스트림이다. 이 장에서는 구문 분석기가 어떻게 파일을 토큰들로 분해하는지 설명한다.
파이썬은 프로그램 텍스트를 유니코드 코드값으로 읽는다; 소스 파일의 인코딩은 인코딩 선언을 통해 지정될 수 있고, 기본값은 UTF-8이다. 자세한 내용은 PEP 3120 에 나온다. 소스 파일을 디코딩할 수 없을 때는 SyntaxError 가 발생한다.