십여 년 전, 스크립트 언어를 배워야 할 일이 생겼을 때 비주류 좋아하는 성격 탓에 당시 한창 뜨던 중인 파이썬을 안 하고 슬슬 지기 시작하던 펄을 공부했었다. C로 - 그러고보니 C++도 아니고 - 문자열 처리 코드 짜고 있던 나에게 펄은 신세계였다. 요즘은 당연하게 여겨지는 것이지만 배열 마지막 원소를 arr[-1] 같이 -1이라는 인덱스로 접근할 수 있는 것도 C에서는 상상도 못 했던 일이었다.

펄은 참 재미있는 언어였다. 한국어로 치자면 "거시기"에 해당되는 변수가 자동으로 존재한다. $_ 라는 변수인데, 그 덕에 코드를 듬성듬성 짤 수 있었다. 다른 언어에서는 명확하게 변수와 값을 지정해주었어야 할 상황에서 펄은 "거시기" 변수만 불러와 보면 얼추 필요한 값이 들어있었기 때문에 변수를 생략하는 것이 가능했다. 그리고 if문과 함께 unless 문도 있었다. Unless 문의 작동방식은 if문의 정반대. 즉 if (true)는 unless (false)와 같고... 이런 조건문을 겹쳐서 if ( unless ( if ( true ) ) ) 같은 식으로 볼썽사나운 코드를 짜는 것도 가능했다.

물론 이런 코딩이 가능하다 보니 남이 짠 펄 코드를 이해하는 건 정말 어렵고 어쩔때는 내가 예전에 짠 펄 코드도 이해가 안 가기도 했다. 그래서 펄 사용자가 많이 떨어져 나가기도 했고. 이런 펄의 특성은 "어떤 일을 하는 데에는 하나 이상의 길이 있다 (There's more than one way to do it, TMTOWTDI)" 라는 펄의 슬로건에 잘 나타나 있다. 펄 코드에는 개발자의 개성이 원없이 묻어난다. 어쨌든 나는 펄이 참 좋았고, 펄은 내 석사 연구의 꽤 많은 부분과 함께 했다.

펄과 완전 반대편에 있는 언어가 바로 파이썬이다. 파이썬에서 import this를 치면 파이썬의 철학이 죽 나오는데 그 중에 이런 말이 있다. "어떤 작업을 하기 위한 하나의, 되도록이면 단 하나의 자명한 방법이 존재한다. (There should be one-- and preferably only one --obvious way to do it.)" 그래서 파이썬은 띄어쓰기를 몇 칸으로 할 것인지까지도 한번 정하면 끝까지 지켜야 한다. 펄은? 펄 사용자들끼리 신나서 자주 하는 게 어떻게 하면 한 줄 안에 코드를 잘 구겨넣을까 하는 일이다.

이런 면에서 여러모로 펄은 한국어(와 일본어)를, 파이썬은 영어를 닮았다. 한국어에서는 온갖 생략이 가능하다. "사랑해" 라고 하면 내가 너를 사랑한다는 말인 줄 다 안다. 영어에서는 "Love" 라고 하면 못 알아듣기 때문에 단 둘이 있어도 굳이 "I love you" 라고, I가 you를 love한다고 다 꼬치꼬치 말해줘야 한다. 우리는 사과를 먹었으면 됐는데 영어에서는 굳이 사과를 한 개 (an apple) 먹었는지 두 개 이상 (apples) 먹었는지를 말해줘야 한다. 영화 황산벌에 나오는 계백 장군의 대사인 "그러니께 이번 여그 황산벌 전투에서 우리의 전략 전술적인 거시기는, 한 마디로 뭐시기 할 때꺼정 갑옷을 거시기한다, 바로 요거여. 알겄제?" 는 영어로는 말이 안 되고, 번역해 봐야 억지스럽다.

이런 다양성, 다의성은 인간의 언어에서는 언어를 풍요롭게 하고 문학의 비옥한 토양이 되는 존재이지만 프로그래밍 언어에서는 그다지 환영받지 못한다. 프로그래밍에서는 간단함과 명료함이 미덕이다. 그래서 날이 갈수록 파이썬 사용자는 많아지고 펄 사용자는 줄어만 간다.

예전, 대략 버전 관리 시스템으로 git이 아니라 cvs나 svn을 쓰던 때, 수많은 개발자들의 땀과 눈물이 서려있을 Visual C++ 6.0이 현역이었을 때, 간혹 3.5인치 디스켓 드라이브를 볼 수 있었을 때, 안드로이드는 나왔는데 안드로이드 스튜디오는 없어서 이클립스로 앱 만들던 때, 도스에서 터보C를 쓰던 때의 코딩은 참 자유로웠다. 참조할 수 있는 자료가 제한되어 있으니 다 개발자가 어떻게든 직접 해야 했고, 그러다보면 좀 삐그덕대더라도 분명 내 손에서 나왔다고 자부할 수 있는 프로그램이 생기곤 했다. 홈페이지도 메모장에 직접 html 코드를 쳐 가면서 만들곤 했지.

요즘은 컴퓨터 프로그램이 거대해지면서 많은 부분이 규격화되었다. 이미 남이 만들어놓은 코드를 "라이브러리"라는 이름으로 잘 가져다가 쓰는 게 중요한 시대가 되었다. 예전처럼 내가 다 하려다가는 "왜 바퀴를 재발명하고 있냐?" 라는 핀잔을 듣기 일쑤다. 깃허브에서 여러 코드를 받아오고 스택 오버플로우에서 이것저것 찾아서 어떻게 하다 보면 금세 프로그램 하나를 뚝딱 만들 수 있다. 요즘 간단한 스마트폰 앱은 파워포인트 만들듯이 마우스로도 만들 수 있고. 그런데 그렇게 해서 나온 결과물을 보고 있노라면 마음 속 한 구석이 왠지 허전하다. '이 프로그램에서 내가 만든 부분이 도대체 뭐지?' 하는 생각과 함께.

펄을 마지막으로 써 본 지도 거의 10년이 다 되어 간다. 옛 생각이 나서 인터넷에서 펄을 검색해 보니 5년 안에 사용자가 사라질 언어 중 하나로 펄이 꼽혀 있었다. 바퀴를 재발명하던 때가 그립다. 스택 오버플로우 없이 프로그램을 짜던 때가 그립다. 괜히 커맨드 창에서 perl을 실행시키고 이것저것 눌러보다가 창을 닫았다. 기분이 참 $_ 한 오늘이다.

캘리포니아 2022 - 9. 아무렇지도 않고 예쁠 것도 없는

 

https://youtu.be/PVvgPrHEqCA

 

대학생 때 한 달 넘게 일본 배낭여행을 간 적이 있었다. 하루에 한국 돈 약 4만원 정도로 숙박비와 식비를 포함한 여행비를 충당하던 빠듯한 여행이었다. 여행 중 오키나와에서 우민추(海人, 바닷사람이라는 뜻의 오키나와어)라고 적혀있는 티셔츠를 보았었는데 맘에 쏙 들었지만 한국 돈으로 약 2만원 정도 되던 금액이 당시에는 부담이 되어 몇 날 며칠을 고민하다 오키나와를 떠날 때까지 결국 사지 못했다. 웃기게도 그렇게 돈을 아껴서 그랬는지 여행 후반에는 돈이 남았었다. 그 티셔츠를 몇 장은 충분히 살 수 있을 정도로.

비록 티셔츠는 못 샀지만 그 경험 덕에 깨달은 것이 있다. 살까 말까 고민되면 일상에서는 사지 말아야 하지만 여행중에는 사야 하고, 할까 말까 고민되면 일상에서는 하지 말아야 하지만 여행중에는 해야 한다. 일상에서는 다음, 다다음 기회가 있지만 여행중에는 기회가 한 번씩 밖에 없기 때문이다. 설령 나중에 후회하더라도 여행 중에는 하고 나서 후회하는 것이 하지 않고 아쉬워하는 것 보다 낫다.

캘리포니아 1번 주도(州道)에서의 운전이 7시간을 넘어 8시간 째로 접어들던 때였다. 해는 뉘엿뉘엿 져 가고 도로에는 산그림자가 깔리기 시작했다. 이제는 밤이 되기 전에 빨리 산타 바바라에 도착해서 숙소에 짐을 풀어야 했다. 1번 주도를 달리며 태평양을 보겠다는 목표는 이미 충분히 달성한 후였다. 1번 주도가 아직 남아있기는 했지만 남은 부분은 바닷가가 아니라 내륙의 외진 마을들을 거쳐가는 길이었다. 내비게이션은 빙빙 돌아가는 1번 주도 대신 가까운 길을 알려주고 있었다.

하지만 나는 1번 주도를 더 달려보고 싶었다. 특별히 그래야 할 이유는 없었다. 반대로 그러지 말아야 할 이유는 많았다. 11년만에 운전대를 잡은 것이어서 아직 밤 운전은 위험했고, 남아있는 1번 주도는 딱히 특별할 것이 없는 평범한 도로일 것 같아 보였으며, 내일의 일정을 생각하면 조금이라도 빨리 숙소에 도착해서 쉬는 것이 좋을 것 같았다. 하지만 결국 고민 끝에 잠시 차를 멈추고 일부러 강제로 1번 주도를 달리도록 네비게이션을 재설정했다. 이유는 단 하나였다. 그러고 싶어서. 숙소에 좀 늦게 도착하면 어떻고 다음날 좀 피곤하면 어때. 여행중에 할까 말까 고민될 때에는 모름지기 해야 한다.

캘리포니아 1번 주도는 태평양 해안 도로 (Pacific Coast Highway, PCH), 카브릴로 도로 (Cabrillo Highway), 쇼어라인 도로 (Shoreline Highway), 해안 도로 (Coast Highway) 등의 구간으로 나뉘는데 보통 여행 책자에서 소개하는 캘리포니아 1번 주도는 태평양 해안 도로 구간이다. 강한 바람, 깎아지른 절벽, 태평양이 만들어내는 육중한 파도와 굉음이 계속해서 이어지는 길로, 내가 그 날 오전부터 줄기차게 달려왔던 바로 그 길이었다. 이제 태평양 해안 도로는 끝이 났고, 내가 네비게이션의 충고를 무시하고 더 가기로 한 캘리포니아 1번 주도는 카브릴로 도로 (Cabrillo Highway) 구간이었다.

별 기대 없이 들어선 카브릴로 도로는 조용한 시골길, 정지용 시인의 시 '향수'의 표현을 빌자면 아무렇지도 않고 예쁠 것도 없는 그런 곳이었다. 하지만 그래서 좋았다. 특별히 멋지거나 화려한 경치는 없었지만 그렇기 때문에 마음이 편안해졌다. 사람도 차도 거의 없는 시골길을 운전하며 카브릴로 도로의 한적함을 충분히 누리고 또 누렸다. 낮 내내 태평양 해안 도로를 달리며 바람과 절벽과 파도와 바다 때문에 흥분되었던 마음이 시골길을 천천히 달리는 동안 기분 좋게 차분해졌다.

소설은 발단, 전개, 위기, 절정을 거쳐 결말이 나야 하고 한시(漢詩)는 기, 승, 전을 지나 결까지 가야 한다. 독자를 흥분시키고 긴장하게 하는 것도 중요하지만 마지막에 가서 독자의 긴장을 풀어주고 마음을 편안하게 해 주는 것 역시 중요한 일이기 때문이다. 그런 면에서 카브릴로 도로는 캘리포니아 1번 주도를 달리는 사람이라면 꼭 가 보아야 하는 곳이다. 태평양 해안 도로가 1번 주도의 절정이라면 카브릴로 도로는 잔잔한 마무리다. '향수'의 아무렇지도 않고 예쁠 것도 없다는 표현이 참 잘 어울리는 곳, 그래서 그 곳이 차마 꿈엔들 잊히겠냐는 그 다음 표현 역시 참 잘 어울리는 곳이 바로 카브릴로 도로다.

카브릴로 도로는 롬폭(Lompoc)이라는 마을을 지나면서 끝이 났고 그 즈음부터 산타 바바라까지는 미국 101번 국도가 캘리포니아 1번 주도를 대체하면서 1번 주도가 잠시 끊어져 있었다. 해는 진작에 다 져서 깜깜한 밤이었고 아침에 운전을 시작한 지 10시간이 지나서야 산타 바바라의 숙소에 들어설 수 있었다. 체크인을 하면서 직원과 이야기를 하다가 오늘 아침에 몬터레이에서 출발해서 온 거라고 했더니 직원이 말했다. "와우, 롱 트립."

101번 국도 때문에 끊어진 캘리포니아 1번 주도는 산타 바바라 이후에 다시 나타나서 LA로 향하게 된다. 원하면 다음 날 1번 주도를 더 탈 수도 있었다. 하지만 카브릴로 도로가 내 캘리포니아 1번 주도 여행을 잘 마무리해 주었기에 더 이상 미련은 없었다. 내일 LA로 갈 때에는 고속도로를 타야지. 노곤한 몸으로 기분좋게 잠에 들었다.

[리눅스] Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션의 차이

 

Bash Shell에서 파일 존재 여부 검사 시 -e와 -f 옵션을 사용할 수 있는데, -e는 단순히 파일이 존재하는지만 검사하고 -f는 해당 경로에 있는 것이 디렉토리나 마운트 된 기기 등이 아니라 정말로 파일인지까지 검사해줍니다. 보통 if문 안에서 다음과 같이 사용하게 되지요.

 

# 해당 운영체제가 우분투인지를 검사하는 코드입니다.
if [[ -f /etc/lsb-release ]];

 

참조한 곳: https://linuxize.com/post/bash-check-if-file-exists/

+ Recent posts