카테고리 보관물: Uncategorized

의식적인 연습 deliberate practice

안데르스 에릭슨은 “1만 시간의 재발견 (Peak)”이라는 책에서 의식적인 연습(deliberate practice)에 대해 설명하고 있습니다. 의식적인 연습은 특정 기술의 전문성을 획득하기 위한 연습으로, 단순한 연습에 비해 훨씬 목적 의식이 강하고 용의주도하며 집중적인 연습입니다. 의식적인 연습은 다음과 같은 특성들이 있습니다.

  • 다른 사람들이 이미 방법을 알고 있고, 효과적 훈련 기법이 수립되어 있는 기술을 연마하는데 사용합니다.
  • 편하게 여기는 컴포트존을 벗어난 지점에서 진행됩니다. 현재의 능력을 살짝 넘어서는 작업을 지속적으로 시도합니다.
  • 명확하고 구체적인 목표가 있고, 훈련 성과를 가시적으로 확인할 수 있습니다.
  • 신중하고 계획적입니다. 온전히 집중하고 의식적으로 행동합니다.
  • 피드백이 존재하고 그에 따라 행동을 바꿉니다.
  • 효과적인 심적 표상(mental model)을 만들어내고 심적 표상에 의존합니다.
  • 기존에 습득한 기술의 특정 부분을 집중적으로 개선합니다. 이를 위해서는 교사나 코치가 초보자에게 정확한 기본 기술을 가르쳐주는 것이 중요합니다.

실력 향상을 위해서는 올바른 연습을 충분한 기간에 걸쳐 수행해야 하며 시간을 단축시켜주는 지름길은 없습니다. 의식적인 연습에서는 지식보다 행동, 기술에 집중합니다. ‘무엇을 아는가’보다 ‘무엇을 할 수 있는가’에 초점을 맞추는거죠. 지식은 기술을 익히며 자연스럽게 얻게 됩니다. 노력의 대부분은 교사가 내준 과제를 하며 혼자 하는 연습에 들어갑니다. 만약 교사 없이 연습하려면 집중(Focus)하고 피드백(Feedback)을 받아 수정(Fix)하는 과정을 반복해야 합니다.

대학원 생활에 의식적인 연습을 적용한다면, 전공 지식 쌓기, 논문 쓰기, 프로그래밍, 특정 프로그램 다루기 등 각 전공에서 필요한 기술별로 적용해야겠죠. 연구 능력이나 창의성 향상과 같이 목표가 모호한 경우에는 구체적으로 성과를 확인할 수 있도록 다른 접근이 필요할 듯 합니다.
의식적인 연습에는 빠른 피드백이 중요한데, 현실적으로 학생들이 지도교수님께 각각의 기술들에 대해 매번 빠르게 피드백을 받기는 어렵습니다. 지도교수님께도 피드백을 받되, 스스로도 피드백을 받고 수정할 수 있는 환경을 구축하는 것이 좋습니다.
전공 지식 쌓기 같은 경우 전공 서적에 연습 문제가 있다면 풀어보며 스스로 피드백을 얻을 수 있습니다.
논문 쓰기의 경우 자신의 글과 출판된 논문의 글을 비교하며 피드백을 받을 수 있습니다. 학술지에 자주 논문을 제출하면 그만큼 자주 피드백을 받을 수 있겠죠. 단, 피드백이 기분 좋지 않은 경우도 많을겁니다.
프로그래밍의 경우에는 애자일 방법론에서 사용하는 테스트주도 개발이 유용할 듯 합니다.
전공 연구에 필요한 특정 프로그램을 다룰 경우에는 프로그램의 기능을 하나씩 이용해 필요한 작업을 실행해가며 피드백을 얻을 수 있습니다.
이렇게 피드백을 통해 하나씩 수정해가는 과정을 꾸준히 반복하다보면 어느새 실력이 향상되어 있을 것입니다. 조급해하지 맙시다. 천재도 전문가 수준에 도달하기 위해서는 많은 연습이 필요다하고 합니다.

대학원을 졸업하고 전문가가 된다고 해서 의식적인 연습이 끝나는 것은 아닙니다. 전문가는 끊임없이 연습하고 기술을 연마할 방법을 모색하는 사람입니다. 훈련을 멈추면 능력이 사라지기 시작하기 때문이죠. 많은 경우 어떤 기술이나 능력을 비범한 수준으로 발전시킨 사람들은 다른 영역에서는 오히려 뒤쳐지는 모습을 보인다고 합니다. 여러분의 교수님이 전공 외의 다른 부분에서 좀 모자라보여도 이해해주세요^^

전문가에 이르는 길

앤디 헌트는 프로그래머를 위한 “실용주의 사고와 학습”이라는 책에서 드라이퍼스 모델이라는, 기술 습득과 통달에 관한 연구를 소개하고 있습니다. 드라이퍼스 모델에 따르면 초보자에서 전문가에 이르는 과정은 다음과 같습니다.

  • 초보자
  • 고급입문자
  • 중급자
  • 숙련자
  • 전문가

초보자는 해당 기술 영역에서 사전 경험이 거의 없는 사람으로, 일하기 위해서는 정해진 규칙이 필요한 사람을 말합니다.
고급 입문자는 고정된 규칙에서 조금씩 벗어나기 시작하지만, 문제 해결에 어려움을 느끼고 아직 큰 그림은 잘 모르는 사람입니다.
중급자는 문제 영역에서 개념적 모델을 만들고 활용할 수 있습니다. 문제를 스스로 해결하고 새로운 문제를 해결할 방법을 찾아내기도 하죠. 그러나 자신을 돌아보고 잘못을 스스로 교정할 수 있는 능력은 아직 부족한 상태입니다.
숙련자는 이전에 잘못했던 일을 스스로 교정할 수 있습니다. 다른 사람의 경험으로부터 배울 수도 있습니다. 경험이 풍부하고 뭔가가 잘 안 될 때 무엇을 바꿔야 해결할 수 있는지도 압니다. 중급자보다는 전문가에 가깝습니다.
전문가는 어떤 분야든 지식과 정보의 근원으로 늘 더 나은 방법과 수단을 찾습니다. 적절한 맥락에서 써먹을 수 있을만큼 방대한 경험을 가지고 있고, 직관적으로 세부사항 중에서 중요한 것과 그렇지 않은 것을 가려낼 수 있습니다.

이 모델은 기술 및 분야별로 적용되는 모델로, 한 분야에서 전문가가 된다고 해서 다른 분야에서도 전문가가 되는 것은 아닙니다. 하지만, 한 분야에서 전문가가 되고 나면 다른 분야에서 전문성을 얻기가 훨씬 쉬워집니다.

무술 수련에서도 수, 파, 리라고 유사한 개념이 있습니다. ‘수’는 가르침을 받은대로 따라하는 단계, ‘파’는 수련의 의미와 목적을 되새겨보고 더 깊이 이해하고 흡수하는 단계입니다. ‘리’는 가르침을 넘어서고 경험을 초월하는 단계로, 더이상 학생이 아니며 새로운 방법을 창출해낼 수 있습니다.

박사과정에 진학한 학생은 전문가가 되기 위한 길에 들어섰다고 생각할 수 있습니다. 석사과정을 초보자에서 고급 입문자가 되기 위한 단계(수)라고 한다면 박사과정은 중급자를 거쳐 숙련자가 되기 위한 단계(파)라고 할 수 있겠네요. 전문가(리)가 되기 위해서는 박사 졸업후에도 몇 년의 경험이 더 필요합니다. 1만 시간의 법칙을 적용해보자면 1년에 250일씩, 하루 4시간의 의식적인 연습을 한다고 했을 때 10년의 기간이 필요합니다(물론 1만 시간이 절대적인 값은 아닙니다).

의식적인 연습은 쉽지 않지만 이를 통해 일을 잘 하게 되면 자율성이 커지고 일 자체로부터 내적인 보상도 얻을 수 있습니다. 자신이 잘 하는 일에 몰입하며 행복감을 느끼게 됩니다. 꾸준히 노력하여 자신의 전문 기술로 사회를 더 좋게 만드는데 기여하는 훌륭한 전문가가 되시길 바랍니다(자율성, 숙련, 목적).

연구실 도커 기본 이미지 pkgpl_base

탄성파탐사 연구실에서 연구할 때 많이 사용하는 라이브러리들을 설치해놓은 도커 이미지를 공개해두었습니다. 도커 허브에서 이미지를 받거나, 깃허브에서 도커 파일을 받을 수도 있지만, Docker와 GitHub를 이용한 소프트웨어 연구 환경 구축에서 설명한 연구 프로젝트 템플릿을 통해 이용하는 것을 추천합니다.

설치된 주요 라이브러리들은 다음과 같습니다.

  • 탄성파 자료 처리 관련
    • Seismic Unix
    • Madagascar
  • 수치 연산 관련
    • nvcc
    • gcc/gfortran
    • python
    • numpy
    • numba
    • mpi4py
    • mkl
  • 딥러닝 관련 (horovod 도커 이미지 사용)
    • pytorch
    • tensorflow
    • mxnet
    • horovod
  • 기타 머신러닝 관련
    • scikit-learn
    • pandas
    • jupyterlab
    • matplotlib
    • bokeh

Docker와 GitHub를 이용한 소프트웨어 연구 환경 구축

소프트웨어를 이용한 연구와 수업을 위해 도커와 깃허브를 이용한 연구 프로젝트 템플릿을 만들어서 공개했습니다. 도커를 이용하면 소프트웨어와 관련된 라이브러리를 설치하고 환경을 설정하는 과정을 쉽게 만들 수 있고, 깃과 깃허브를 이용하면 도커 설정 파일과 프로그래밍 소스 코드를 안전하게 관리할 수 있습니다. 도커 사용 경험이 없는 연구자들이 도커를 쉽게 사용할 수 있도록 프로젝트 템플릿에 도커 관련 리눅스 스크립트들을 추가하였습니다.

프로젝트 템플릿은 깃허브 계정을 만들고 Fork하면 됩니다.

사용 방법은 리눅스 컨테이너와 버전 관리 시스템을 이용한 소프트웨어 연구 환경 구축 논문이나 유튜브에서 확인할 수 있습니다.

소프트웨어 기술 발달에 따라 점점 더 많은 과학자와 공학자들이 연구를 위해 컴퓨터 소프트웨어와 프로그래밍 도구들을 사용하고 있다. 소프트웨어를 이용한 연구에서는 환경 설정, 재현성 및 소스 코드 손실과 같은 문제들이 발생할 수 있다. 이 해설에서는 리눅스 컨테이너와 버전 관리 시스템을 사용하여 이러한 문제를 방지하는 방법에 대해 조사하였다. 연구 프로젝트 단위로 클라우드 저장소를 통해 코드를 관리하고 리눅스 컨테이너에 연구 환경을 구축하면 위의 문제들을 방지하고 협동 연구를 더 쉽게 만들 수 있다. 리눅스 컨테이너 사용경험이 없는 연구자들을 위해 컨테이너 생성과 실행에 필요한 스크립트를 포함한 연구 프로젝트 템플릿 저장소를 공개하였다.

//리눅스 컨테이너와 버전 관리 시스템을 이용한 소프트웨어 연구 환경 구축 – 초록

Git과 GitHub를 이용한 소스 코드 버전 관리

대학원에서 연구를 위해 또는 수업을 위해 프로그래밍을 사용하는 경우가 있습니다. 프로그래밍 언어를 이용해 직접 프로그램을 개발할 경우 소스 코드를 관리해주는 프로그램을 버전 관리 시스템이라고 합니다. 버전 관리 시스템을 이용하면 소스 코드 변경 사항을 기록하여 필요할 경우 이전 상태로 되돌릴 수 있고, 실수로 코드를 지워도 복구가 가능합니다. 대학원생들에게 다양한 버전 관리 시스템들 중 깃(Git)을 추천합니다.

주요 Git 명령어들

Git에서 주로 사용하는 명령줄(Command line) 명령어들은 아래와 같습니다. 명령줄이 익숙하지 않은 학생들은 GUI 프로그램을 이용해도 됩니다.

  • git init: 현재 디렉토리를 git 저장소로 만들어줍니다.
  • git add <files>: 파일들(새 파일 또는 수정한 파일)의 변경 사항을 추적하겠다고 git에게 알려줍니다.
  • git commit: 앞에서 추적하기로 한 변경 사항들을 실제로 기록합니다.
  • git status: 현재 저장소 상황을 보여줍니다. 추적 중인 파일들 중 어떤 파일들이 변경되었는지 알 수 있습니다.
  • git diff: 어떤 내용들이 변경되었는지 확인합니다.
  • git log: 그동안의 commit 내역을 확인합니다.
  • git clone <remote>: 원격 저장소가 있을 경우 원격 저장소를 현재 컴퓨터에 복사합니다.
  • git pull: 원격 저장소에서 최신 변경 사항을 가지고 옵니다.
  • git push: 현재 저장소에서 commit한 변경 사항을 원격 저장소에 기록합니다.

소스 코드에 주요 변경 사항이 있을 때마다 git add, git commit 명령을 실행합니다. 위의 명령어들은 일단 변경 사항을 저장하기 위한 명령어들이고 문제가 생겼을 때 복구하기 위한 명령어들이나 branch(가지 치기) 기능과 관련된 명령어들도 여러 가지가 있습니다. 평소에는 add, commit 명령으로 소스 코드 변경 사항을 잘 기록해두고 다른 명령어들은 필요할 때 찾아서 사용하면 됩니다(한글판 Pro Git 책).

GitHub

원격 저장소가 필수는 아니지만 사용중인 컴퓨터 전체에 문제가 생겼을 경우에는 git으로도 소스 코드를 복구할 수 없기 때문에 중요한 코드라면 별도의 컴퓨터에 원격 저장소를 만들어두는 것이 좋습니다. 원격 저장소로 사용하기 좋은 클라우드 서비스들이 몇 가지 있는데 그중 깃허브(GitHub)를 가장 많이 사용합니다. GitHub를 사용하면 다른 사람과 공동으로 작업하기도 좋습니다.

GitHub에 저장소를 만들고 작업중인 컴퓨터에서 clone하면 GitHub 저장소가 자동으로 원격 저장소로 등록되기 때문에 컴퓨터에서 코드를 수정하고 add, commit한 후 push해서 GitHub 저장소를 업데이트할 수 있습니다. 이미 컴퓨터에 git 저장소가 있을 경우에는 GitHub에 새로운 저장소를 만들고 작업중인 컴퓨터에서 GitHub 저장소를 원격 저장소로 등록해주면 됩니다. 이 때 필요한 명령은 GitHub에서 새로운 저장소를 만들면 자세히 설명해줍니다.

GitHub를 이용하면 작업중인 컴퓨터와 GitHub 두 군데에 소스 코드를 백업하는 셈입니다. 여러 대의 컴퓨터에서 작업하더라도 GitHub를 통해 소스 코드를 쉽게 동기화할 수 있습니다. 프로그래밍이 본인의 연구에서 중요하다면 꼭 버전 관리 시스템을 사용합시다. git add/commit/push를 기억합시다.

GPU를 이용한 병렬 처리/전산 유체 역학 시뮬레이션 성능 향상

본 연구실에서는 파동 전파 모델링을 위해 병렬 프로그래밍을 사용하고 있습니다. 최근 GPU 성능 향상에 따라 GPU를 이용한 파동 전파 모델링과 완전 파형 역산도 진행하고 있습니다. 그동안 진행해 왔던 GPU 관련 과제들은 다음과 같습니다.

  • 2014-2019 자원개발특성화대학사업 – 산학협력 연구단 석유가스 물리탐사
  • 2015-2016 한국지질자원연구원 – GPU를 이용한 파동 전파 모델링 기술 개발, GPU를 이용한 속도 모델링 기술 개발
  • 2016 부산과학기술기획평가원 – 범용 그래픽 처리장치와 OpenACC를 이용한 병렬 컴퓨팅 성능 향상
  • 2017-2019 한국지질자원연구원 – 다중 GPU 기반 고성능 역시간 구조보정 성능 비교 연구
  • 2019-2020 국방과학연구소 – 저주파 수중음향 전달특성 및 고속화 성능 분석

병렬 프로그래밍 기술은 탄성파 탐사 분야 뿐 아니라 물리학, 기계, 조선이나 화학 공학의 전산 유체 시뮬레이션 분야에서도 중요하게 사용되는 기술입니다. 특히 GPU 계산은 CPU를 이용한 계산보다 빠르고 효율적이기 때문에 대학/연구소/기업 등에서 연산 성능 향상 및 비용 절감을 위해 수요가 점점 증가하고 있습니다. 그러나 안타깝게도 부산 지역에 GPU 프로그래밍을 하는 사람이 많지 않기 때문에 GPU 병렬 프로그래밍 도입에 어려움을 겪는 사례들이 있습니다.

올해 여름에 부산대학교 조선해양공학과 교수님으로부터 쇄빙선에 가해지는 빙하중을 시뮬레이션하는 프로그램을 GPU에서 빠르게 돌아가도록 만들어달라는 제안을 받고 방학 기간 동안 작업을 진행했습니다. 부산대에서 OpenMP와 MPI를 이용해 클러스터 컴퓨터에서 돌아가도록 개발한 프로그램을 자체적으로 GPU용으로 바꿨는데 성능이 안 나와서 본 연구실에서 GPU 프로그램의 성능을 향상시키는 작업을 수행했습니다. 그 결과 클러스터 컴퓨터에서 CPU 56 코어를 사용해 8시간 30분 정도 걸리던 벤치마킹 모델 시뮬레이션 작업이 GPU 최적화를 통해 Nvidia Tesla V100 GPU 카드 한 장을 사용했을 때 30분 정도로 단축되었습니다. 여러 장의 GPU를 사용할 수 있도록 개선하여 GPU 카드 네 장을 사용하면 10분 정도에 결과를 얻을 수 있습니다. 해당 연구는 최근 대한조선학회에 발표했습니다.

현재 대학원 수업에서 병렬 프로그래밍을 다루기는 하지만 컴퓨터 관련 학과가 아니다보니 GPU 성능 최적화에 대해 깊이 다루지는 않습니다. 평소 컴퓨터와 프로그래밍에 관심이 있고 고성능 병렬 프로그래밍에 대해 배우고 싶다면, 본 연구실에 들어와서 병렬 연산 쪽으로 연구하는 것도 좋겠네요. 병렬 프로그래밍에서 주로 다루는 언어는 Fortran/C/C++/CUDA 이니 해당 언어 사용 경험이 있다면 더 좋습니다.

Tip: 리눅스 환경(Centos 7)에서 SSH Terminal + Docker + Jupyter Notebook을 이용한 Tensorflow GPU 버전 사용

리눅스 환경(Centos 7 기준)에서 Nvidia Docker를 이용하여 Tensorflow GPU 버전을 사용하는 방법에 대해 알아보겠습니다.

먼저 리눅스 환경에서 Docker를 설치합니다.
Docker 설치 방법은 아래 링크를 참고해주세요.
https://github.com/NVIDIA/nvidia-docker
https://docs.docker.com/install/linux/docker-ce/centos/

Docker 설치 후 일반 계정에서 Docker를 사용할 수 있도록 권한을 부여해줍니다.
root 계정으로 로그인 한 다음, shell에서 usermod -aG docker <id> 를 입력해줍니다.
입력 후 다시 로그인합니다.

Nvidia Docker를 사용하면 CUDA, CUDNN 등 CUDA 프로그래밍에 필요한 파일들을 설치하지 않아도 됩니다. Graphic Driver만 설치되어 있으면 사용이 가능합니다.
shell에서 nvidia-smi 명령어를 사용하여 Graphic Driver가 설치되어있는지 확인합니다.
만약 드라이버가 설치되어 있지 않다면 설치합니다.
https://www.nvidia.com/Download/index.aspx

드라이버가 설치되었으면, Nvidia tensorflow gpu 버전 docker 이미지를 다운받습니다.
docker pull 명령어를 통해 docker image를 다운받는데, 이 때 다양한 태그를 통해 여러 버전의 이미지를 받을 수 있습니다.
(참고 : https://www.tensorflow.org/install/docker )
이번에는 Tensorflow GPU, Python3, Jupyter notebook 환경을 사용할 것이기 때문에, 아래와 같이 shell에 명령어를 입력합니다.
docker pull tensorflow/tensorflow:latest-gpu-py3-jupyter

다운로드가 완료됐으면 docker images 명령어를 통해 이미지를 확인해줍니다.

그 다음 docker container를 만듭니다. container를 만드는 명령어는 다음과 같습니다.

docker run –runtime=nvidia –name=<name> -v </home/ID/directory:/directory -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

위의 명령어를 실행하기 전에 위에서 사용된 docker 명령어에 대해 알아봅시다.
1) –name=<name> 도커 컨테이너의 이름을 지정해주는 명령어입니다. 컨테이너를 다시 시작할 때, 복잡한 컨테이너 ID를 사용하기 번거로우므로, 별명을 지정해줘서 사용하기 편하게 해줍니다. <name> 부분에 본인이 원하는 이름을 적어주면 됩니다.

2) -v 호스트의 디렉토리를 도커 컨테이너에 마운트 하는 명령어입니다. 호스트에 있는 파일을 작업하기 편하도록 마운트 해줍니다. 마운트하기 원하는 디렉토리의 주소(pwd 명령어로 확인)를 </home/ID/directory:/directory> 형식으로 입력합니다.

3) -it 명령어로 shell에 입출력이 가능해집니다.

4) –entrypoint=bash 컨테이너 시작시에 수행할 명령어입니다. 위의 예시의 경우 Jupyter notebook이 자동으로 실행되지 않게 하기 위해 입력한 것입니다.

5) -p 8888:8888 -p 6006:6006 Jupyter notebook (8888)과 tensorboard (6006)를 사용하기 위해 포트 설정을 해주는 옵션입니다.

사용 예시) 만약, test라는 계정의 works 디렉토리를 컨테이너에 works 디렉토리로 만들고 컨테이너 이름을 hello로 만들고 싶다면, 다음과 같이 입력하면 됩니다. (v, it, p 앞에는 – 1개, runtime, name, entrypoint 앞에는 – 2개)
docker run –runtime=nvidia –name=hello -v /home/test/works:/works -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

성공적으로 컨테이너가 만들어 졌다면 아래와 같은 화면이 출력됩니다.

호스트의 디렉토리가 마운트 된 것도 확인할 수 있습니다.

이어서 사용환경 setting에 대해 알아보겠습니다.
nvidia docker 이미지는 ubuntu os가 설치되어 있습니다. 하지만 기본적인 프로그램 설치가 되어있지 않기 때문에 필요한 프로그램을 설치해줍니다.
저는 우선 vim 편집기를 설치했습니다
shell에 apt-get install vim 입력하고 설치합니다.

그 다음 jupyter notebook을 실행합니다.
그러면 아래와 같은 에러 메시지가 출력됩니다.

해당 에러를 해결하기 위해, jupyter notebook configuration 파일을 생성해줍니다.
shell에 jupyter notebook –generate-config 명령어를 입력합니다. (generate 앞에 – 2개, config 앞에 – 1개)

그 다음 vim 편집기를 이용해 config 파일을 수정해줍니다.
shell에 vi /root/.jupyter/jupyter_notebook_config.py 를 입력해줍니다.

vim 편집기 에서 / 를 사용하여 notebook_dir, NotebookApp.ip, NotebookApp.port, allow_root, 를 각각 검색합니다.
notebook_dir는 노트북 시작시 홈 디렉토리를 설정하는 파라미터입니다. 마운트 한 디렉토리로 바꾸는것이 사용에 편리할 것입니다.
ip 는 ‘0.0.0.0’ 으로 수정합니다.
port 는 8888로 수정합니다.
allow_root는 True로 바꿔줍니다.

(수정할 때 앞의 주석처리 #을 지워주는것을 잊지 마세요!)

위와 같이 수정했다면 :wq 를 입력하여 수정한 파일을 저장합니다. 그 다음 다시 jupyter notebook을 실행합니다.

이렇게 된 상태에서 터미널을 하나 더 실행하여 host 계정으로 접속합니다. host에서 웹 브라우저를 실행합니다. 저는 firefox를 사용하겠습니다.

웹브라우저 주소창에 127.0.0.1:8888 을 입력합니다.

아래와 같은 창이 뜨면, 도커 컨테이너에서 token 값을 복사하여 입력합니다.
그리고 필요에 따라 password를 설정해서 사용할 수 있습니다.

토큰을 입력하면 다음과 같이 실행됨을 알 수 있습니다.

수고하셨습니다. 연구에 도움이 되길 바랍니다.

책: 국가란 무엇인가(유시민 작가)

“국가란 무엇인가”라는 다소 식상하고 지루할 수 있는 주제를 유시민 작가만의 독특한 화법으로 이해하기 쉽게 설명해줍니다. 앞 장에서는 ‘국가란 무엇인가’ , ‘누가 다스려야 하는가’ 라는 주제로 동서고금 철학자들의 생각을 시대순으로 언급하면서 국가관의 발전상을 보여주었고, 제 5장 ‘애국심은 고귀한 감정인가’ 라는 의문사 형태로 질문하면서 애국심이란 국가라는 특수한 집단에 의해 생겨난 상호 배타적인 감정이라고 말합니다. 그런 다음, 제 6장 ‘혁명이냐 개량이냐’에서는 혁명은 개량의 길이 봉쇄되었을 때 즉, 점진적 공학이 더 이상 소용이 없을 때 일어난다고 하였으며 제 7장 ‘진보정치란 무엇인가’에서부터 작가가 원하는 정의로운 국가의 모습이 어떠한 형태인지 나타나게 됩니다. 마지막 장에는 우리나라 정치와 국가 방향에 대한 솔직한 생각을 피력하면서 마무리합니다.

작가가 꿈꾸는 훌륭한 국가는 고대 그리스 목적론적 국가론처럼 사람들 사이에 정의를 실현하는 국가라고 합니다. 국민 한 사람 한 사람을 수단이 아니라 목적으로 대하고(칸트의 도덕법), 국민을 인간으로 존중하고 책임지고 보호해주는 그런 국가(진보자유주의, 복지국가)를 말합니다. 그는 촛불집회를 보면서 “이게 나라냐” , “이것이 국가란 말인가?”라는 구호를 듣게 되었고 2011년에 출판한 이 책이 개정신판으로 다시 세상에 나오게 되었습니다.

저는 아직까지 모두가 훌륭하다고 할 수 있는 그런 국가를 경험해보지 못 한 것 같습니다. 그러나 불행 중 다행인 점은 우리나라는 악을 최소화할 수 있는 제도가 있는 민주주의 사회에 살고 있으며 모든 시민들이 국정에 관심을 가지고 훌륭한 국가를 만들려고 노력한다면 마냥 불가능한 이야기는 아닐 것이라고 생각합니다.

‘국가’라는 정의는 다양하고 여러가지 국가론이 있지만 현재 우리나라의 경우 훌륭한 국가를 만든다고 하면 남녀노소 누구든지 책임윤리를 가지고 정치인의 말과 행동에 관심을 가져야 한다고 생각합니다. 민주주의 정치제도의 핵심은 국민의 참여와 소통인데 만약 이 부분이 결여된다면 국민을 속이고 사리사욕만 챙기는 악인이 민주적 절차를 통해 당선되는 경우가 발생할 수 있으며, 또는 국가와 국민을 위해 일하는 선인을 온갖 권모술수로 방해할 수도 있습니다. 정치에 염증을 느껴 떠난 사람들, 하루 먹고 살기 바쁜 사람들, 정치에 관심이 없는 사람들이 점점 사회에 많아질수록 민주주의는 고대 그리스 때처럼 중우정치에 빠질 확률이 높아질 것입니다. 따라서 본인의 행동에 책임윤리를 가지고 자신이 국가의 주인이라는 인식을 가진다면 예를 들어 적어도 투표는 선택이 아닌 권리이자 의무로 임할 것이라고 생각합니다.

유시민 작가는 우리나라 민주주의를 후불제 민주주의라고 표현하였습니다. 충분히 일리가 있는 표현이라고 생각합니다. 4·19 혁명 때 거리에 쓰러졌던 청년과 학생들, 유신시대에 목숨을 잃거나 고문을 당했던 대학생과 종교 지식인들, 5·18광주민중항쟁 희생자들, 6월민주항쟁 때 최루탄과 경찰과 맞섰던 시민들, 광우병 촛불시위와 박근혜 대통령 탄핵 요구 촛불시위 등 민주공화국을 세울 때 미리 치르지 않았던 비용을 후불하였다는 이야기입니다. 안타깝게도 저는 개인적으로 노무현 참여정부 이후 진보정치의 무능력 및 책임회피과 시민들의 정치 무관심이 민주주의 국가시스템의 근본이 위협받는 상황까지 가게 만들었고 결국 촛불시위가 일어난 것이 아닌가?라고 생각합니다.

앞서 언급한 것처럼 민주주의 제도 하에서 훌륭한 국가로 나아가기 위해서는 모든 시민들이 국정에 관심을 가지고 적극적으로 참여해야 하는 것이 중요하다고 생각합니다. 그 결과, 정치인이 국민을 두려워하고 국민의 요구를 파악하면서 의지를 대표할 수 있도록 노력할 것입니다. 마지막으로 이 책에서 언급한 아리스토텔레스의 인용구로 끝맺도록 하겠습니다. “훌륭한 국가는 우연과 행운이 아니라 지혜와 윤리적 결단의 산물이다. 국가가 훌륭해지려면 국정에 참여하는 시민이 훌륭해야 한다. 따라서 시민 각자가 어떻게 해야 스스로가 훌륭해질 수 있는지 고민해야 한다.”

책: 여행의 이유(김영하 산문)

소설가 김영하의 여행, 그리고 여행을 바라보는 아홉 가지 이야기.

1장 추방과 멀미

첫 번째 이야기는 2005년 당시, 작가가 집필을 위해 중국으로 떠났지만 입국을 거부당하고 추방당했던 일화로 시작합니다. 매우 불운한 일로 생각할 수 있지만 이러한 흔치 않은 경험이 결국 좋은 이야기 소재가 되었다고 말하면서 ‘여행의 의미가 무엇인가?”라는 본질적인 질문으로 이어집니다. 그는 여행이란 “여행을 떠난 주인공이 여러 시련을 겪다가 원래 성취하고자 했던 것과 다른 어떤 것을 얻고 오는 것”이라고 말합니다. 여러가지 이야기로 예시를 보여주는데, 여행을 떠난 많은 이들이 여행을 마쳤을 때 본인이 원하던 외면적 목적 달성 여부와 관계없이 평소에 인식하지 못 했던 내면적 목표를 달성하는 경우가 많다고 합니다. 그러나 한편, 여행의 어원이 travail(고역)에서 유래된 점을 보면 20세기 이전의 사람들은 여행이란 고향에서 머물지 못 하고 타지를 떠돌아 다니는 고통스럽고 힘든 시련이라고 여겼을 것이라 생각합니다. 즉, 현재 우리는 지루한 일상을 떠나 새로운 것을 얻고 싶은 마음과 안정적이고 통제된 삶에서 위험한 변수를 피하고 싶은 마음이 서로 상존하고 있을지도 모릅니다.

2장 상처를 몽땅 흡수한 물건들로부터 달아나기

작가는 서두에 “나는 호텔이 좋다.”라고 말하면서 운을 뗍니다. 결론부터 말하자면 호텔에 머무는 동안에는 일상과 가족, 인간관계로부터 받는 상처와 피로로부터 벗어날 수 있기 때문입니다. 실제로 삶이 부과하는 문제가 크면 클수록 작가는 여행을 더욱 갈망하였다고 합니다. 필자도 일상에서 주어지는 문제에 도피하고 싶을 때 소설이나 영화 속 이야기를 상상하곤 하는데 아마도 비슷한 감정이지 않을까 싶습니다.

3장 오직 현재

사람들은 대개 과거를 후회하고 다가올 미래에 대해 불안감을 느끼며 살아갑니다. 여행은 그런 우리를 과거와 미래로부터 끌어내 현재에 집중하게 만든다고 합니다. 그 경험들 중 의미있는 것들을 생각으로 바꿔 저장하고 이로부터 영감을 얻습니다. 그래서 작가는 언제나 그 순간에 있었던 여행지보다는 집에 누워있을 때 영감을 얻는다고 합니다.

4장 여행하는 인간, 호모 비아토르

철학자 가브리엘 마르셀은 인류를 호모 비아토르(여행하는 인간)으로 정의하기도 했는데 인간은 끝없이 이동해왔고 그런 본능이 우리 몸에 새겨져 있다고 합니다. 1995년 전에는 전 세계적으로 여행 인구가 5억 2천만 명이었으나 인터넷 시대가 도래하면서 2016년에는 12억 4천만 명으로 두 배가 넘게 증가하였습니다. 여행은 피곤하고 위험하면서 비용도 많이 들지만 인류의 본능이 여행을 포기하지 않고 기술이 발전하면 할수록 더 많이 이동하는 것을 통계가 보여주고 있습니다. 어쩌면 인류가 여행이 선택이 아닌 필수라고 생각하는 날이 올지도 모르는 일입니다.

5장 알아두면 쓸데없는 신비한 여행

다섯 번째 이야기는 “알아두면 쓸데없는 신비한 잡학사전”에 출연한 김영하 작가가 독특한 화법으로 방송 경험을 풀어내는데 특히 프로그램 편집에 대해 바라보는 관점이 놀라웠습니다. 출연자들이 뿔뿔히 흩어져 각자의 여행을 다니고 저녁 식사 때 모여 본인들이 겪은 여행 이야기를 들려주는 방식인데, 편집하는 제작진들도 모든 여행을 리뷰할 수 없어 최종 영상을 통해 간접적으로 경험하게 된다고 합니다. 작가도 최종 편집본을 통해 간접적으로 다른 여행들을 체험하게 되는데 심지어 본인이 직접 다녀온 여행지조차 편집하는 사람의 느낌과 색깔에 영향을 받아 좀 더 깊이 있고 색다른 여행을 경험한다고 합니다. 즉, 최종 영상은 타인이 보여주고 싶은 여행의 정수만 골라서 체험할 수 있으면서 본인은 여행 과정에 수반되는 고통과 비용을 지불하지 않아도 됩니다. 이를 “방구석 여행자”라고 표현했는데 모두가 어느정도는 방구석 여행자이며 일인칭 시점으로 수행한 이 ‘진짜’ 여행은 다른 사람들의 경험과 생각이 함께 숙성되면서 우리의 여행이 좀 더 명료해진다고 합니다.

6장 그림자를 판 사나이

아델베르트 폰 샤미소의 “그림자를 판 사나이” 소설을 보면 주인공은 자신의 그림자를 신비한 인물(악마)한테 파는 대가로 무엇이든 꺼낼 수 있는 ‘행운의 자루’를 얻게 됩니다. 그림자라는 평소에는 신경도 쓰지 않는 것을 파는 대신 엄청난 부를 얻었지만 주인공은 곧 그림자가 인간에게 매우 중요하다는 사실을 알게 됩니다. 그림자가 없는 인간은 사회에 환대받지 못 하였고 결국 혼자가 되었지만, 우연히 어디든지 갈 수 있는 마법의 장화를 얻게 되면서 여행자로 살아가게 됩니다. 즉, 현실에서 여행자는 그림자가 없는 존재이기 때문에 타지에서 어떤 의무와 책임도 또한 어떤 소속감도 가지지 않습니다.

7장 아폴로 8호에서 보내온 사진

일곱 번째 이야기는 여섯 번째 이야기의 반전을 담아냈는데, 여행을 통해 얻는 또다른 기쁨은 타지에서 경험하는 환대라고 합니다. 지구라는 작은 행성에 같이 탑승하고 있는 승객으로서 모두가 동료이고 소중한 존재라는 관점에서 보면 곤란한 여행자를 도와주는 것은 선순환을 유발합니다. 인류는 오랜 세월동안 서로를 적대하고 살육해왔지만 한편으로 낯선 이들을 손님으로 맞이하고 절실한 것들을 제공하면서 떠나보내기도 하였습니다. 거의 모든 문명에, 특히 유목민들에게는 손님을 잘 대접하라는 계율이 남아있다고 합니다.

8장 노바디의 여행

실뱅 테송은 “여행의 기쁨”에서 괴테를 인용하는데 ‘여행은 여행자가 외부 세계에 감행하는 습격이며 , 여행자는 언젠가 노획물을 잔뜩 짊어지고 집으로 돌아가는 약탈자다’라고 언급합니다. 반면에 식사와 잠자리를 제공하면 고마워하며 소식이나 정보 및 선물 등을 주고 떠나는 이들도 있으므로 외부인은 위험하면서도 동시에 매력적이라고 표현합니다. 성숙한 여행자라면 자신을 타지의 상황에 따라 “섬바디(특별한 사람)” 혹은 “노바디(현지인 코스프레)” 중 하나를 선택해서 현명하게 대처하게 되는데 이는 인생을 지혜롭게 살아가는 방법이기도 합니다.

9장 여행으로 돌아가다

일상과 여행의 관계는 마치 현실과 소설의 관계와 같다고 합니다. 현실은 어지럽고 복잡하고 무질서합니다. 그러나 소설은 현실과 비슷한 일이 일어나지만 질서가 있고 통제가 가능합니다. 여행은 우리를 집중시키고 한 도시의 정수만을 맛보길 원하며 여행에서 보고 듣는 모든 것들이 유기적으로 연결되어 있다는 느낌을 받습니다. 여행은 시작과 끝이 분명하다는 점에서 소설과 닮았으며 설렘과 흥분 속에서 낯선 세계를 탐험하고 안전하게 출발점에 돌아옵니다. 작가는 자신의 정체성을 여행자로 규정할 수 밖에 없는 최종적인 이유가 여기서 두드러지는데 지루한 일상을 벗어나 세상을 다시 느끼고 정신이 한껏 고양된 상태로 돌아오면서 다시 일상을 여행할 수 있는 힘을 얻는다고 합니다.

한 마디로 말하라 – Mini Goss

우리는 전달하고자 하는 메시지를 언어를 이용한 문장을 통해 의사소통을 합니다. 우리는 이러한 메시지를 하루에도 수백, 수천 개씩 처리해야 하고, 서로의 메시지를 제대로 이해하지 못하면 오해, 논쟁, 결렬 등이 발생할 수 있습니다. 따라서 우리는 전달하고자 하는 메시지를 정확하게 파악하고 간결한 문장으로 전달하는 것이 중요합니다. 저자는 이 간결한 문장을 ‘결정적 한 마디’라고 말하고 있습니다. 결정적 한 마디는 맥락과 무관하거나 지나치게 복잡한 정보를 제거하여 우리와 청중이 중요한 메시지에 집중할 수 있도록 만들어 줍니다. 이러한 결정적 한 마디는 면접, 발표, 연설, 협상 등 공적인 자리뿐만 아니라, 일상적인 대화나 유머, 심지어 술자리 건배사 같은 사적인 자리에서도 효과적인 기술입니다. 이 책에서 설명하는 힘 있고 인상적인 결정적 한 마디를 만들기 위한 방법과 우리에게 도움이 될 수 있는 활용법을 설명하겠습니다.

힘 있고 인상적인 결정적 한 마디를 만들기 위해서는 우리가 전달하고자 하는 메시지를 사람(1~5), 행동(6~8), 드라마(9~11)으로 나누고, 다음과 같은 항목에 대한 정보를 체크합니다.

  1. 주제와 관계있는 사람은 누구인가?
  2. 메시지를 듣는 사람은 누구인가?
  3. 그들에게서 알고자 하는 것은 무엇인가?
  4. 그들은 당신에 대해 무엇을 알고 있는가?
  5. 그것을 묘사하는 방직은 어떠한가”?
  6. 전달하고자 하는 정확한 내용이 무엇인가?
  7. 당신에게 가장 중요한 행동은 무엇인가?
  8. 청중에게 가장 중요한 행동은 무엇인가?
  9. 메시지에서 가장 흥미로운 극적 요소는 무엇인가?
  10. 그 요소로 어떤 대화를 시작할 수 있는가?
  11. 서로의 목표를 함께 달성할 수 있도록 청중을 사로잡을 수 있는가?

체크했다면, 각 항목에서 가장 중요하다고 생각하는 단어들을 표시합니다. 이 단어들이 결정적 한 마디에 들어가야 할 핵심 단어들입니다. 그리고 자신의 목표와 청중의 목표 중 중복되는 것에 기반을 두고 핵심 단어들을 활용하여 결정적 한 마디를 구성합니다. 결정적 한 마디를 구성했다면, 구상한 문장을 직접 읽어봅니다. 만약 자신이 읽었을 때 어색하게 들린다면, 대화체로 바꿔주는 것이 좋습니다. 또한 가능한 청중들이 마음속으로 메시지를 그릴 수 있도록 구체적이고 시각적인 표현을 사용하고, 쉽게 이해하고 기억할 수 있도록 쉽고 매력적인 단어들을 사용하는 것이 효과적입니다.

이러한 과정을 통해서 결정적 한 마디하는 활용해서, 우리가 전달하고자 하는 생각을 효과적으로 전달하는 방법도 존재합니다.

<빙산분석법>
빙산 분석법은 청중들이 듣기 원하는 메시지를 찾아서 전달하는 것으로, 우리가 청중에게 전달하고자 하는 전체 내용을 바다에 떠 있는 빙산에 비유한 방법입니다. 우리는 빙산 전체를 알고 있지만, 청중은 수면위로 드러난 빙산의 꼭대기만 볼 수 있습니다. 따라서 우리는 빙산의 꼭대기를 결정적 한 마디를 활용하여 채우고, 수면 아래는 뒷받침하는 내용들을 중요도에 따라서 채워야 합니다.
빙산 분석법은 언론 기자들이 효과적으로 독자의 관심을 끌고, 정보를 신속하게 파악할 수 있도록 기사나 보도를 편집할 때 사용하는 방법입니다. 언론 기자들은 독자들에게 전달할 중요 내용을 빙산 꼭대기에 배치하고, 뒷받침하는 내용들을 중요도에 따라 배치합니다. 그리고 주어진 기사나 보도의 길이에 맞추기 위해, 중요도가 낮은 내용부터 잘라냅니다.

<5분 미팅법>
5분 미팅법은 짧은 시간 내에 결정적 한 마디에 집중 할 수 있도록 도와주는 훈련법으로, 상대가 5분 동안 자신의 생각을 설명하라고 요구했다고 가정하는 방법입니다. 우리는 상대가 집중할 수 있도록 상대가 원하는 내용을 세심하게 고려하고 열정적으로 이야기할 수 있도록, 상대의 의견을 반영할 수 있도록 결정적 한 마디를 수정해야 합니다. 결정적 한 마디를 수정하면서, 결정적 한 마디를 뒷받침 하는 2~3가지의 정보와 현실성을 부여할 수 있는 흥미로운 통계수치나 사례를 함께 준비하는 것이 좋습니다. 또한 우리는 항상 상대의 생각이 우리와 같지 않을 수 있다는 것을 명심하고, 그들이 제시하는 핵심적인 반론을 신중하게 경청하는 자세를 유지해야 합니다.

우리는 때때로 면접이나 발표, 논문의 초록 등 짧은 시간 동안 상대방의 관심을 집중 시켜 중요한 메시지를 전달해야 하는 상황을 마주하게 됩니다. 이러한 상황에서 우리는 결정적 한 마디를 활용하여 청중들에게 효과적으로 우리의 생각을 전달할 수 있다고 생각합니다.