스노우보드 배우기

오즈 엠티에 이어 2박 3일의 일정으로 휘닉스파크에 다녀왔다. 엠티에서 방은 작은데 사람이 많아서 도저히 잘 수 없는 지경이라 밤을 새우고, 다음날은 다시 하루를 뒤집어 새벽 6시에 이어나 8시에 삼성역에서 윤서누나를 만나 휘팍으로 가는 버스를 탔다. 물론 매우 피곤한 상태로 …

숙소에 도착해 라면을 끓여먹은 후 장비를 빌려 11시쯤 스패로우를 오르는 리프트를 탈 수 있었다. 보드는 작년에 3시간 타본 것이 전부. 과연 그때만큼 탈 수 있을까 불안을 떨칠 수가 없었다. 그러나 다행히 약간 불안하긴 했지만 사이드 슬리핑과 펜쥴럼으로 내려오는데에는 큰 무리가 없었다. 스패로우를 한번 내려오며 예전의 감을 회복한 후, 연구실 사람들을 만나지 못한 관계로 홀로 동영상 강좌에서 본대로 베이직 턴을 시도해보았다. 의외로 몇 번만에 양방향의 베이직 턴을 어설프게 구사할 수 있게 되었다. 그렇게 첫 날은 스패로우에서만 베이직 턴을 연습하며 보냈다. 저녁시간은 보드게임과 맥주와 “주몽”과 함께 보내고 잠들었다.

둘째날 아침에 일어나보니 온몸이 만신창이! 라면으로 아침을 때우고 다시 스키장으로 고고싱! 보드를 잘타는 요셉이가 가세하여 얼떨결에 시작부터 몽블랑에 올랐다. 안그래도 눈이 내리고 안개낀 날씨에 몽블랑을 오르는 리프트(콘돌) 위에서 “이게 잘하는 짓인가?”하는 생각을 떨쳐낼 수가 없었다. 어제의 어설픈 턴조차 구사하기 힘든 상황에서 무작정 파노라마로 내려가기 시작했다. 산등성이의 완만한 경사에서 요셉이의 가르침을 받으며 감을 잡고 내 자세가 상당히 불안하다는 지적을 받았다. 거의 서서 타고 있었고 무게 중심이 뒤에 실려 있었다. 드디어 본격적인 경사를 만나 턴을 시도하고 넘어져 눈위를 질질 끌려가기를 몇 차례 반복하며 조금씩 나아갔다. 그렇게 오전에는 조금은(?) 버거운 파노라마에서 연습을 했다.

점심을 먹으려고 12시 30분에 모였는데, 지갑이 사라졌다는 사실을 깨달았다. 작년에는 순일이한테 빌린 보드장갑을 잊어버리더니 이번에는 내 지갑이란 말인가? 심하게 몇 번 구르면서 주머니의 자크가 조금씩 열렸고 언젠가 어디에선가 빠져나간 것 같다. 분실물 센터에 신고하긴 했으나 찾으리라는 기대는 안드로메다로 …

스키장에 가기 직전에 마트에 들러 10만원을 뽑으려고 시도했으나 CMA 현금카드라서 그런건지 안뽑아진 것이 전화위복! 잃어버린 지갑에는 단 돈 천원이 들어 있었다. 돈은 그렇다 치고 애지중지 하던 지갑과 그 안에 들어 있던 주민등록증, 운전면허증, CMA 보안카드, CMA 현금카드, TTL 멤버쉽 카드, 학생증, LG카드, 신한맥스카드, 삼성카드 등을 다시 재발급 받을 생각을 하니 정신적 데미지가 느껴진다. (칠칠맞지 못한 영혼이여 빨리 꼼꼼하고 야무진 아가씨를 만나야 할텐데 …)

지갑분실건만 아니면 다 좋을 것 같은 오후, 스패로우까지 걸어가는 것이 귀찮다는 것에 의견을 모으고 초급자 탑승금지라고 써있는 리프트(팔콘)를 타고 불새마루에 올랐다. 키위에서 보드를 착용하며 아래로 보이는 상당한 경사에 후회가 밀려왔다. 도저히 턴이라고는 시도조차 해볼 수 없어 보였다. 처음에는 사이드 슬리핑으로 낙엽쓸면서 겨우 내려오다가 몇 번 가다 보니 힘들게 턴을 하며 내려올 수 있었다. 키위 아래로 이어지는 팽귄은 작년의 추억을 떠올리게 했다. 워낙 겁이 많아서 무게 중심을 뒤로 빼는 습관이 완전히 고쳐지지 않았지만 대략 턴으로 끝까지 내려올 수 있게 되어 나름대로 흡족했다.

이번 경험으로 지금까지 총 3일동안 스노우보드를 배웠는데, 속도감도 좋고 엣지로 눈을 긁는(?) 느낌도 좋다. 다만 몇 번 심하게 넘어져서 현재의 몸상태가 엉망이라는 것과 지갑을 잊어버려 집에 오자마자 여기저기 재발급 받으러 다니고 있다는 사실이 에러! 어느정도의 기초를 닦았으니 다음주에 회사 워크샵에서 스키장을 찾게 되면 좀더 능숙하게 탈 수 있도록 연습해 보아야겠다.

마지막 방학

인생의 마지막 방학을 보내고 있다. 오늘까지는 집에서 빈둥빈둥. 역시 놀고는 못사는 성격이라 그런지 빈둥빈둥 노는 것이 즐겁지만은 않다. 게다가 내 책상이 없다는 핑계로, TV 소리가 들린다는 핑계로 책도 읽지 않고 있으니 조금은 스스로 한심하다는 생각도 들지만 이것도 이번이 마지막이라고 생각하고 그냥 내버려 두고 있다.
 
내일부터 졸업식까지는 살인일정(?)이 기다리고 있다. 주말에는 오즈 엠티를 다녀올 예정이고, 다음주 월요일부터는 연구실 식구들과 함께 휘닉스파크에 2박 3일 일정으로 보드를 타게 될 것이다. (연구실을 떠난 처지에 조금 민망하기도 하지만. ^^;)

게다가 오늘 회사에서 전화가 왔는데, 연구소 입사 첫 날 회사 워크샵으로 스키장에 간다는 반가운 소식을 전달받았다. 일체의 렌탈비와 리프트권 비용을 모두 지원해준다는 파격적인 사실과 함께! 그리고 내가 어떤팀에 들어가게 될지도 알게 되었다.

작년 2월 난생 처음 스키장에 갔고, 엉덩이 보호대 없이 보드복이 아닌 100kg 나갈때 즐겨입던 파카잠바를 입고 힘들게 보드타는 법을 배웠다. 3시간의 넘어짐 끝에 펜쥴렴을 어느정도 자유롭게 구사하게 되었을 때, 주간권이 끝나는 시간이 다가와 무리하게 빨리 내려오다 그만 심하게 넘어졌는데, 잠깐 거동을 할 수 없을 정도로 고통스러웠다. 그리고 그 이후로 안탔다 ……

올해는 보호대와 함께 보드복도 제대로 갖춰입고, 겁은 상실하고, 턴까지 꼭 배워보고 싶다. 돈 생각하지 말고 마지막 방학을 만끽하자!

떠나오다

나에게는 결코 짧지 않았던 2년간의 대전생활을 정리하고 집으로 돌아왔다. 떠나기 이틀 전에는 볼링클럽인 SIGBOWL 식구들과 볼링 게임이 끝난 후 와인, 맥주 파티에 이어 새벽 2시까지 보드게임을 즐기며 마지막 시간을 함께 했고, 떠나기 하루 전인 어제 밤에는 동문들과 저녁을 먹고 영화를 보며 역시 즐거운 시간을 보냈다. (함께 해주신 분들께 감사 드려요!)

난생 처음 이사다운 이사를 해봤는데 하루만에 끝나긴 했지만 역시 만만치 않았다. 120~130권 가량 되는 책을 운반하는 것이 걱정스러웠는데 오히려 가장 힘들었던 것은 옷을 담은 거대한(?) 보따리를 옮기는 작업이였다. 아침에 순일이가 도와준 덕분에 무난히 기숙사를 비우고, 오후에는 윤경 누나, 재호형, 현석군이 도와준 덕분에 연구실의 책과 잡동사니를 담고 있는 다섯 박스의 짐을 쉽게 차에 옮길 수 있었다. (이사 도와주신 분들께 감사 드려요!)

대부분의 연구실 사람들은 다음주 스키장에서 다시 만날 수 있는 관계로 가볍게 인사를 드리려고 한분한분 찾아뵙고 잠깐의 이야기를 나누면서 나는 그분들의 정이 느껴져서 따뜻한(?) 울음을 목으로 삼켜야만했다. (항상 따뜻하게 대해주신 연구실 식구들께 감사 드려요!)

사실 떠나기 직전까지는 별로 실감이 나지 않았다. 이삿짐을 꾸리는 그 순간까지도 그저 무덤덤했는데. 고속도로로 나와 경부고속도로와 합류하는 지점에 들어서자 짧은 순간 그 동안의 추억들이 주마등처럼 머리속을 스쳐가며 나는 바보처럼 서럽게 울고 있었다. 대전에 처음 왔던 순간의 다짐만큼 열심히 하지 않아서 지난 2년이 후회스러웠을까? 결코 다시는 돌아오지 않을 순간들을 놓치고 싶지 않았던걸까? 항상 따뜻하게 대해주던 연구실 식구들이 벌써 그리웠던걸까? ……

사택배정

사용자 삽입 이미지
드디어 2월 입사 이후에 거주하게 될 사택을 배정 받았다. 분당 서현역을 중심으로 왼쪽 위에 빨간 네모가 회사 연구소, 오른쪽 아래 파란 네모가 사택이다. 지하철 몇 정거장 떨어진 곳에서 회사를 다니게 될 것으로 예상했는데 정말 가까운 곳이라서 마음에 든다.

왼쪽 아래 초록색으로 보이는 부분이 분당 중앙공원! 달리기를 좋아하는 나에게 최적의 장소가 될 것 같다. 걸어서 출퇴근하고, 회사에서 밥먹고, 놀 시간 없이(?) 열심히 일하면 그야말로 돈이 굴러 들어오겠구나!

View

이클립스의 기본적인 사용자 인터페이스는 크게 view와 editor로 구성됩니다. 이 글에서는 매우 간단한(!) VICODE의 Log View를 가지고 View의 구현방법을 소개하겠습니다.

사용자 삽입 이미지
먼저 plugin.xml에서 View를 확장하는 부분을 보겠습니다.

<extension
         point=”org.eclipse.ui.views“>
      <view
            category=”kr.ac.kaist.vicode”
            class=”kr.ac.kaist.vicode.view.log.LogView
            icon=”icons/esterel_image.gif”
            id=”kr.ac.kaist.vicode.logview”
            name=”Log”/>
      <category
            id=”kr.ac.kaist.vicode”
            name=”VICODE”/>
   </extension>

org.eclipse.ui.views 확장점을 사용합니다. 해당 View를 포함할 카테고리를 지정하고 View를 표현하는 아이콘을 정의합니다. 이제 LogView.java 코드를 보겠습니다. 그렇게 길지 않으니 전체 코드를 늘어놓고 글을 이어나가도록 하지요.

public class LogView extends ViewPart
{
 private Table table;
 private TableColumn[] columns;
 private final String[] TABLE_COLUMN_NAMES = { “Message”, “Location”, “Time” };
 private final int[] TABLE_COLUMN_WIDTH = { 400, 400, 150 };
 public LogView()
 {
  super();
 }
 public void createPartControl(Composite parent)
 {
  table = new Table(parent, SWT.BORDER | SWT.V_SCROLL);
  columns = new TableColumn[TABLE_COLUMN_NAMES.length];
  for(int i=0, n=TABLE_COLUMN_NAMES.length; i < n; i++)
  {
   columns[i] = new TableColumn(table, SWT.NONE);
   columns[i].setText(TABLE_COLUMN_NAMES[i]);
   columns[i].setWidth(TABLE_COLUMN_WIDTH[i]);
  }
  table.setHeaderVisible(true);
  table.setLinesVisible(true);
 }
 public void setLog(String message, String location)
 {
  Date date = new Date();
  SimpleDateFormat dateFormat = new SimpleDateFormat(“hh:mm:ss”);
  String dateString = dateFormat.format(date);
  TableItem ti = new TableItem(table, SWT.NONE);
  ti.setText(0, message);
  ti.setText(1, location);
  ti.setText(2, dateString);
  for (int i = 0; i < columns.length; i++)
  {
   columns[i].pack();
  }
 }
 public void clearLog()
 {
  table.clearAll();
 }
 public void setFocus()
 {
  table.setFocus();
 }
}

View를 구현한 클래스는 ViewPart 클래스를 상속합니다. 예제의 Log View 처럼 단순히 정보를 보여주는 View를 구현하는 경우에는 createPartControl() 메서드에서 보여주고 싶은 위짓을 정의하는 것으로 간단히 View를 구성할 수 있습니다. View에 Action을 추가한다던가 워크벤치의 다른 View 혹은 Editor와 상호작용하도록 하려면 조금 더 복잡해지겠지요.

여기서 한가지 명확히 해야할 것은 JFace viewer의 위상입니다. JFace viewer는 모델-뷰 구조를 기반으로 사용자가 쉽게 유려한 viewer를 만들 수 있도록 돕기 위해 제작된 일종의 UI 프레임워크입니다. 따라서 JFace viewer를 제작할 때 모델의 데이터를 뷰에 전달하는 Contents Provider, Label Provider 등을 구현해야 하는 것이죠. 중요한 것은(!) JFace viewer는 이클립스에서 UI를 표현할 수 있는 어떤 곳에도 붙일 수 있다는 것 입니다. 마법사의 한 페이지에 붙일 수도 있고 Editor에 붙일 수도 있죠. 이 글에서 말하는 Viewer가 아닌 View는 이클립스 워크벤치의 일부로서 화면에 정보를 나타내기 위한 부분이라고 생각할 수 있습니다. 구현하기에 따라서는 ViewPart를 상속하여 Editor의 역할을 수행하도록 만들 수도 있습니다.

본론으로 돌아와서 createPartControl() 메서드에서 SWT의 table 컨트롤을 추가하고 초기화 합니다. View에 정보를 제공하고자 하는 다른 클래스에서는 clearLog(), setLog() 메서드를 이용해서 View에 포함된 table 위짓에 값을 추가 및 삭제하게 됩니다. LogView의 인스턴스는 id를 이용해서 다음과 같이 얻을 수 있습니다.
 

 public void init(IWorkbenchWindow window)
 {
  this.window = window;
 }

 …
 LogView logView =
    (LogView) window.getActivePage().findView(IResourceIDs.LOG_VIEW_ID);

Multi-page Editor

Multi-page Editor는 여러페이지를 가진 에디터로, VICODE에서 spec.xml을 편집하는 Specifiaction Editor를 다음과 같이 총 4페이지로 구성된 형태의 에디터로 작성하였습니다. 이 글에서는 에디터 자체에 대한 내용보다는 여러페이지로 구성된 에디터를 작성하는 경우에 구현방법과 고려해야할 사항들에 대해서 소개하겠습니다.

Specification Editor
Specification Editor
Specification Editor
Specification Editor

Specification Editor에서 편집할 spec.xml 파일은 총 3가지 section으로 구성되어 있습니다. 에디터의 처음 3페이지는 각 section의 편집과정을 돕기 위해 컨트롤로 구성된 폼 에디터를 제공하며 마지막 페이지는 spec.xml을 직접 편집할 수 있도록 XML 에디터를 포함하고 있습니다.

구현 디테일로 들어가기 이전에 Multi-page Editor를 구현할 때 고려해야 할 사항에 대해서 설명하겠습니다. Multi-page Editor는 하나의 EditorInput을 여러 페이지에서 편집하게 되므로 편집하는 내용이 겹치는 경우에는 서로 다른 페이지 간의 값을 동기화 처리를 해주어야 합니다. 이 글에서 설명하는 페이지간의 동기화 방법은 직접 고안한 것이므로 효율적이지 않을 수 있습니다. ^^;

VICODE의 Specification Editor의 경우에 EditorInput은 spec.xml 입니다. 처음 3페이지의 폼 에디터와 마지막 페이지의 spec.xml 페이지는 편집의 범위가 겹치게 됩니다. 게다가 spec.xml을 구성하는 3가지 section 사이에서도 서로 값이 의존적으로 사용되기 때문에 각 페이지에서 변경된 값은 항상 다른 페이지에도 적용되어야 합니다. VICODE의 경우 다음과 같이 3가지 객체의 값이 동기화된 상태로 유지되어야 합니다.

spec.xml – AST – 각 페이지의 컨트롤이 가지는 값


AST는 spec.xml을 파싱해서 얻게 되는 Abstract Syntax Tree를 의미합니다. 에디터가 실행되면 spec.xml을 파싱해서 AST에 저장하게 되고 각 페이지의 컨트롤의 값은 AST의 값을 바탕으로 채워지게 됩니다. 이 것은 제가 말한 동기화의 아주 일부분이죠. 상세내용은 뒤에서 다루기로 하고 일단 코드를 보도록 하겠습니다.

우선 Editor의 확장점은 org.eclipse.ui.editors 입니다. Multi-page editor의 확장은 다른 editor의 확장방법과 다르지 않습니다. 다음은 확장을 정의한 plugin.xml의 일부입니다.

<extension
         point=”org.eclipse.ui.editors“>
      <editor
            class=”kr.ac.kaist.vicode.editor.spec.SpecEditor
            contributorClass=”kr.ac.kaist.vicode.editor.spec.SpecEditorContributor”
            default=”true”
            filenames=”spec.xml
            icon=”icons/sample.gif”
            id=”kr.ac.kaist.vicode.editor.spec.SpecEditor”
            name=”Specification Editor“/>
</extension>

filenames 속성을 통해 spec.xml 파일에만 적용되도록 정의하였습니다. 이제 에디터를 구현한 SpecEditor 클래스를 살펴보겠습니다.

public class SpecEditor extends MultiPageEditorPart
    implements IResourceChangeListener
{
 private final String endl = “\n”;
 private TextEditor editor;
 private String specFilePath;
 private int currentPageIndex = 0;
 private int editorPageIndex;
 private CommunicationPage communicationPage;
 private ApiPage apiPage;
 private RulePage rulePage;

 private Spec spec;

MultiPageEditorPart를 상속하여 구현합니다. 멤버변수로 눈여겨 보아야 할 것은 각 페이지를 참조할 수 있는 인스턴스와 AST를 저장하는 spec 입니다. ApiPage 등은 Composite을 상속한 클래스로 페이지를 구성하는 컨트롤을 정의하고 있습니다. editor는 마지막 페이지를 구성하는 XML 에디터의 레퍼런스 입니다. 이제 각 페이지를 어떻게 에디터에 추가하는지 살펴보겠습니다.

 protected void createPages()
 {
  createCommunicationPage();
  createApiPage();
  createRulePage();
  createXmlEditorPage();
 }
 void createRulePage()
 {
  rulePage = new RulePage(getContainer(), SWT.NONE, this);
  int index = addPage(rulePage);
  setPageText(index, “Rule”);
  rulePage.setSpec(spec);
 }
 void createXmlEditorPage()
 {
  try
  {
   editor = new XMLEditor();
   editorPageIndex = addPage(editor, getEditorInput());
   setPageText(editorPageIndex, editor.getTitle());
  }
  catch (PartInitException e)
  {
   ErrorDialog.openError(getSite().getShell(), “Error creating nested text editor”, null, e.getStatus());
  }
 }

createPages() 메서드에 페이지를 추가하는 코드를 작성해 주어야 합니다. 여기서 불리는 createRulePage()를 살펴보면 addPage() 메서드를 이용해서 에디터에 페이지를 추가하는 것을 확인할 수 있습니다. XML 에디터를 추가하는 createXmlEditorPage() 메서드에서는 addPage() 메서드의 두번째 인자에 Multi-page Editor의 EditorInput(spec.xml)을 넘겨줍니다.

Multi-page Editor에서 save가 발생한 경우 호출되는 doSave() 메서드를 작성해야 합니다.

 public void doSave(IProgressMonitor monitor)
 {
  if (currentPageIndex == editorPageIndex)
  {
    getEditor(editorPageIndex).doSave(monitor); // save
   Xml2Spec parser = new Xml2Spec(specFilePath);
   spec = parser.parseSpec(); // parsing to get AST

   communicationPage.setSpec(spec); // set AST to each page
   apiPage.setSpec(spec);
   rulePage.setSpec(spec);

  }
 }

Specification Editor에서 첫 3페이지는 저장 명령이 유효하지 않고 Apply 버튼을 클릭함으로써 수정내용을 AST와 파일에 적용하도록 구성되어 있습니다. Reply 버튼을 클릭하면 AST의 내용으로 컨트롤의 값을 복구 합니다. 반면에 4번째 페이지인 XML 에디터 페이지를 선택한 경우에 저장하게 되면 XML 에디터의 doSave() 메서드를 호출하여 spec.xml에 저장하게 됩니다. 저장이 완료되면 spec.xml의 내용이 갱신되었기 때문에 이를 다시 파싱하여 새로운 AST를 얻고 각 페이지에 setSpec() 메서드를 이용해 AST를 갱신해줍니다. 각 페이지는 이 AST를 이용해 컨트롤에 값을 설정하겠죠.

다음으로는 페이지가 변경되었을 때 호출되는 pageChange() 메서드를 볼까요?

 protected void pageChange(int newPageIndex)
 {
  switch (newPageIndex)
  {
  case 0:
   communicationPage.updatePage(); // AST to control
   break;
  case 1:
   apiPage.updatePage();
   break;
  case 2:
   rulePage.updatePage();
   break;
  case 3:
   updateSpecFile(); // AST to spec.xml
   break;
  default:
  }
  currentPageIndex = newPageIndex; // save current page index
 }

처음 3페이지가 선택된 경우에는 AST의 내용을 바탕으로 컨트롤의 값을 채워주는 함수인 updatePage() 메서드를 호출합니다. 4페이지가 선택된 경우에는 AST의 내용을 spec.xml에 저장합니다. 따라서 XML 에디터는 최근 변경된 spec.xml의 코드를 출력하게 됩니다.

흐름을 다시 정리해보면, 에디터가 열리면서 spec.xml을 파싱하여 AST를 저장합니다. 처음 3페이지가 선택된 경우에는 AST의 내용을 가지고 페이지를 구성하는 컨트롤의 값을 채웁니다. 이 컨트롤의 값을 수정한 후 Apply 버튼을 누르게 되면 AST를 갱신함과 동시에 spec.xml 파일을 AST를 가지고 저장합니다. 반대로 XML 에디터에서 수정하고 저장한 경우에는 저장된 spec.xml 파일을 다시 파싱하여 AST를 구하고 이 것을 각 페이지에 넘겨줍니다.

이해를 돕기 위해 아래에 SpecEditor.java, RulePage.java 파일을 예제로 남깁니다.
 
bk36.java

헌법의 풍경

헌법의 풍경
김두식 지음/교양인

기숙사 침대 위에 올려져 있는 이 책을 보고 순일군은 명저라며 꼭 읽어보라고 권한적이 있다. 읽을 책을 고르는 방법 중에 개인적으로 가장 선호하는 것은 네트워크 독서법. 웹에서 하이퍼링크를 따라가듯 <21세기에는 바꿔야할 거짓말>에서 김두식님의 이야기를 듣고 그의 책을 읽고 싶어서 이 책을 선택하게 되었다. 아쉽게도 양심적 병역거부에 대해서 다룬 <칼을 쳐서 보습을>은 구할 수 없는 상태였다.

제목이 주는 위압감처럼 우리는 헌법에 대해서 “어려운 것”, “보통 사람은 알 수 없는 것”, “높으신 분들이 결정하는 것” 이라고 생각하며 살아왔다. 그러나 헌법의 존재 의미가 국가를 통제하고 우리의 인권과 권익을 보장하기 위한 것이라는 데에 생각이 미치면 결코 어렵게 느끼고 멀리해야 할 것이 아니라 충분히 이해하고 적극 활용해야 함을 깨달을 수 있다. 이 책은 우리에게 헌법에 좀 더 쉽게 다가갈 수 있도록 도와준다는 것에 큰 의미가 있다고 생각한다.

나는 이 책을 쓴 저자의 용기에 박수를 보낸다. 1년여의 짧은 시간동안 검사직을 수행하던 저자는 법조계의 오랜관행과 특권의식에 때문에 자신의 신념을 지키기 어려움을 괴로워 하다 과감히 검사직을 그만두고 미국에서 유학중인 아내를 위해 2년동안 전업주부(?)의 역할을 충실히 이행한다. 지금은 코넬대 법과대학에 진학하여 석사학위 취득후 경북대 법대에서 학생들을 가르치고 있다.

자신의 법대를 선택했던 이유에서 부터 검사를 관두기까지의 여정을 소개하고, 법에서 정답은 없다는 것을 음란과 예술사이에서 가르쳐준다. 특히 여기서는 토론을 통해 사회적 합의를 이루어가는 과정을 잘 그려놓고 있어 올바른 민주주의가 어떠한 절차를 통해서 완성될 수 있는지를 잘 설명해주고 있다. 2장에서는 “국가라는 이름의 괴물”의 위험성에 대해서 설명하고 국가를 견제하기 위한 법과 법조인의 역할에 대해서 성찰해본다. 3장은 법조인들이 어떻게 특권의식을 가지게 되는지를 자신의 경험을 통해 소개하고 있다. “어렵고 가난한 사람을 위해 일하겠다던” 법조인들의 초심이 어떻게 특권의식으로 변질되어 가는지를 잘 설명하고 있다. 그 밖에도 대한민국 검찰과 헌법 정신, 정당한 권리인 묵비권의 힘, 차별받지 않을 권리 등에 대하여 저자의 생각을 확인할 수 있다.

난 우리 법조인들이 가지고 있는 특권의식에 적잖이 놀랐다. “어렵고 가난한 사람을 위해 일하겠다던” 그들의 초심이 변질되어 가는 과정을 보면서, 의식있는 사람도 긴장의 끈을 놓으면 얼마든지 현실속에서 변질될 수 있다는 것을 확인할 수 있었다. 지금 내가 정의라고 믿는 것들을 지켜나갈 수 있도록 끝없이 읽고 생각하고 배우며 자신의 삶에 미학을 부여할 수 있도록 노력해야겠다는 생각이 든다.

당산역에서 만난 도인들

친구를 만나고 집으로 돌아오는 길에 당산역 앞에서 또 그들(?)을 만났다. 서울에 살때는 꽤 자주 만났는데 대전 생활을 하면서 만난 것은 오늘이 두번째(만남의 장소는 물론 모두 서울). 헤드폰에서 흘러나오는 이루마의 연주곡을 들으며 유유히 버스 정류장을 향하는데 어떤 사람이 말을 걸어왔다.

“당신에게서 좋은 운이 보입니다. 잠깐만 …”

나는 손사레를 치며 지나쳤다. 그를 뿌리치고 난 후 10초후에 또 다른 사람이 나를 잡으며,

“좋은 기운을 타고나셨네요. 잠깐만 …”
“관심 없습니다.”

두번째 도인(?)도 매정히 뿌리쳤다. 평소 같으면 호기심에 몇 마디 들어봤겠지만, 오늘은 빨리 들어가서 <하얀 거탑>을 봐야 하기에 자제의 미덕을 발휘했다.

난 유난히 도인(?)들에게 잘 찍히는 편이다. 정말 내가 비범한(?) 인물이여서 그런건지, 잘 속을 것 같아 보여서 그런건지는 모르겠으나 전자였으면 좋겠다. 작년 말에 고속버스터미널역에서 만난 여자도인(?)은 나를 보고 대단한 능력을 가지고 있는데 뭔가(?)가 기운을 막고 있어서 능력발휘를 못하고 있다고 이야기했다. 형편없는 집중력에 머리가 잘 돌아가지 않을 때면 가끔 이 여자도인의 말이 신경쓰이는 것을 보면 나도 참 …

지인의 지인의 경험담에 의하면 그들을 따르게 되면 어깨들이 지키고 있는 장소에 가서 절 하고 돈 내고 온다고 하는데 그들의 정체는 무엇일까?

비슷한 경험 다들 가지고 계신가요?

ETRI를 다녀와서


KAIST에 들어오기 이전에 정은 누나에게 이런 이야기를 한 적이 있다.

“KAIST 졸업하면 ETRI에 취직해서 대전에서 연구원으로 조용히 살고 싶어요.”

워낙 서울의 번잡함에 지친 나의 이런 반응에 누나는 “젊은이로서 바람직한 생각은 아닌 것 같다”라고 일침을 놓아주셨다. 대전 생활을 2년동안 해오면서 나는 충분히 정은 누나의 생각을 이해하게 되었다. 특히 바로 그 ETRI를 방문하고 나서 더욱 “서울의 활기”를 생각하게 되었다.

오늘은 프로젝트에 관련해서 발표를 하고 협력방안을 모색하기 위해 ETRI에 다녀왔다. 대략 8명 정도의 ETRI 연구원들 앞에서 발표 및 데모를 마치고 나오는 길에 홀가분한 마음으로 사진을 찍어보았다. ‘언제 다시 와보겠어’라고 생각하며 …

서울의 번잡함보다 싫었던 것은 출퇴근의 피곤함이였던 것 같다. 매일 3시간 가량을 길거리에서 허비해야 한다는 것이 항상 불만이였기에 대학원은 기숙사에서 걸어(!) 다닐 수 있는 곳으로 가야겠다고 마음먹었다. 꿈은 이루어져 동측기숙사에서 연구실까지는 걸어서 10분거리도 안되지만, 가끔은 출퇴근 하며 여러 사람과 스쳐 지나가던 때가 그립기도 했다. KAIST에서 느끼는 정체를 알 수 없는, 주기적으로 찾아오는 “외로움”도 아마 사람이 그리웠기 때문이었을 것 같다.

KAIST보다 ETRI의 분위기는 더 늘어지는 것 같다. (물론 개인적인 느낌임을 밝힌다.) 유원지에 온 것 같은 쾌적한 환경에 주위를 둘러봐도 사람 10명 찾아보기 힘든 한적함. 덕분에 “활기”라는 것을 찾기는 쉽지 않았다. 강력한 “귀차니즘”에 전염될 것만 같은 느낌.

여전히 나는 차분함을 좋아하는 사람이라 학교의 분위기를 좋아하긴 하지만, 대전에 있는 2년동안 사람들을 많이 만나지 못한 것이 아쉬움으로 남는다. 다행히 내가 일할 곳은 서울과 가깝지만 서울만큼 번잡하지 않은(?) 분당이고 내가 살 곳도 회사에서 지하철 몇 정거장거리에 있는 곳이 될 것이므로 걸어서 혹은 자전거 타고 출퇴근이 가능 할 것 같다. 게다가 강남과 가까워 사람들을 만나기도 좋다. 떠나는 아쉬움과 새로운 환경에 대한 기대로 싱숭생숭한 요즘이다.

피파온라인

요즘 내가 하는 유일한 게임은 피파온라인. 한번 손대면 끝도 없이 계속 플레이 하게되는 RPG게임과 달리 한 경기로 깔끔하게 마무리 되는 스포츠게임은 시간 부담없이 즐길 수 있다는 장점이 있다. 탄력 받으면 여러게임을 연달아 하기도 하지만.
 
피파온라인에서 나의 등수는 대략 82000등이다. 그럭저럭 중상위권(?)에 속하는 등수라고 할 수 있고, 승률은 대략 51.5%, 골득실은 대략 +30골. 빨간 유니폼이 마음에 들고 4-4-2 포메이션을 고집하는 관계로 영국대표님 혹은 맨유를 선택해서 게임을 즐기고 있다.
 
재밌게 하다가 이 게임을 지우게 될 때가 있다. 바로 매너와 배려라는 것을 전혀 모르는 초딩(?)을 만났을 때! 오늘 점심을 먹고 식후땡(?)으로 피파온라인을 몇 게임 했다. 나보다 등수는 하위권이였으나 승률과 골득실은 훨씬 뛰어난 친구와 게임을 즐기게 되었는데, 이 친구가 게임 중에 하는 소리가 가관이다. 골이 들어 갈때마다 혼자 “골”, “굿” 이러면서 슬슬 약올리기 시작하더니  나중에는 “그 실력으로 날 이기려고?”, “ㅉㅉㅉ” 이라고 혼잣말을 즐기고 있었다. 기억하고 싶지 않은 건지, 기억이 안나는 건지 그 밖에도 반말을 포함하여 상대방의 기분을 상하게 하는 말들을 지치치도 않고 혼자서(!) 열심히 쏟아냈다.

이럴 때 나는 철저히 침묵으로 일관한다. 어차피 대응해봐야 나도 똑같이 초딩(?)이 되어버린다는 생각이 들어서. 하지만 초딩(?)의 철 없는 몇 마디에 기분이 상하는 걸 보면 나도 아직 한참 어린 것 같다. 그렇게 기분이 상하고 나면 부질없음을 깨닫고 차분히 책으로 돌아간다.