2017년 3월 28일 화요일

[시간의향기]를 읽고

전작 [피로사회]를 수년 전에 읽었었다. 대학교 시절 독서토론을 하면서 이 강렬한 내용을 보면서 모두가 놀랬었다. 아주 짧은 글인데 한 장 한 장 넘기는 종이가 무겁다. 들어 올리다가도 이내 내리고 다시 읽는다. 글 자체에 대한 이해가 힘들었다. 원래 책을 읽으면서 이해가 안되면 책 탓을 하지만, 이 책은 나의 탓이라는 주문을 걸면서 인터넷으로 단어들을 검색하며 읽고 또 읽었다.

그 후 한병철이라는 철학가의 다른 책을 꼭 읽기로 했었는데, 이제야 [시간의 향기]라는 책을 구매했다. 역시나 시집보다 작은 책임에도 내 마음은 '언제 이 다 읽나' 하는 무거운 마음이 들었다. 한 장 넘기다가 다시 돌아오고, 한 문장 한 문장 곱씹다가 책을 완독했지만, 작가가 말하는 세계관을 완벽하게 이해하지 못했다. 분명 나의 부족함이라 생각하기에 나중에 좀 더 시간이 지나서 다시 읽기로 하며 책을 덮었다.

[시간의 향기] 내용

세상은 너무 빨라서 이제는 역사가 만들어지지 않고 있다. 세상이 너무 빠르게 나아가기 때문에 우리는 따라잡기 바쁘다. 우리는 숨이 턱밑까지 차오르게 하는 속도 때문에 시간의 향기를 맡을 수 없다.

느리게 걷기나 느린 삶을 추구하려는 것, 이런 것들은 이 빠른 세상 속에서 살아남기 위한 치료법이 아닌 증상일 뿐이다. 우리는 빠르게 나아가는 시간을 잡을 방법이 없는 것 같다. 시간은 적당히 느려야 세상에 그 발자취가 새겨지고 우리는 그것을 기억하게 되고 되짚고 반성하고 진화한다. 그리고 세상이 빨라졌다고 우리 인생이 편해진 것은 아니다. 이것이 우리 마음의 조급함을 대신해주지 않는다. 우리는 그 속도를 따라잡으려 애쓰고, 그 위에 올라타 더 조급해진다.

우리가 가는 길의 향기, 시간의 향기를 맡을 세도 없이 우리는 이곳저곳으로 갈 뿐이다. 우리는 멈춰야 하며, 아무것도 하지 않음으로 바로 보아야 한다. 그리고 사색해야 한다.
노동은 자유롭게 만들지 않는다. 일의 명령은 새로운 노예사회를 낳는다.

노동을 멈추고 사색하는 삶은 가지자.

2017년 3월 22일 수요일

[타르튀프]를 읽고

열린책들 세계문학서적 중에 아주 특이한 이름의 책을 보았다. [타르튀프]라는 글인데 이 책이 나를 이끈 이유는 머리말을 읽고 나서였다. 글쓴이 몰리에르는 신에 대한 내용도 과감히 희극의 소재로 사용해왔는데, 권력자들을 소재로 사용할 때부터, 그의 서적이 불온서적이 되며, 무대에 올릴 수 없는 등 갖가지 제약을 받게 된다. 머리말에는 그들에 대한 작가의 절제된 분노를 느낄 수 있는데, 그것은 권력자들을 향한 질타였다.
 

[타르튀프]는 이 책에 실려있는 세 편의 희극 중 하나이다. 아주 옛날에 쓴 희극임에도 호흡이 현대와 맞다. 아주 빠르다 못해 가파른 느낌이 준다.분명 그 당시에는 쉴세 없이 웃다보니 막이 내려오는 느낌이 있었으리라.
권력자들은 자신들의 악행을 비난하는 것은 참지만
놀림감이 되는 것은 참지 못한다.
이 바로 위에 있는 글은 [타르튀프]의 머리말에 나오는 문장 중 하나이다. 희극의 중요성은 웃음 속에 감춰진 무엇이라는 것. 웃음으로 밖에 해소할 수 없는 그 무엇을 아주 잘 다룬 작품이었다. 특히 귀족들의 위선된 행동을 풍자한 [타르튀프]라는 희극은 참으로 많은 생각을 하게 해준다.



권력자에게 칼을 휘두를 수 없지만, 그들을 깍아 내릴 수는 있다.
그들을 저 위에 있지 않으며, 우리와 같은 사람이고, 때론 우리보다 아래 있다. 그들이 가진 권능, 신의 축복은 그들이 대단해서가 아니며, 사실 그들이 가진 권능은 신이 준 것이 아닌 우리의 두려움과 그들의 힘에서 나온다. 그들을 희극으로 놀림감으로 만들어 우리 앞에 세우고 심판하도록 하자.


내가 느낀 감상이다. 하지만 몰리에르는 지속적인 압박에 지쳤는지 [타르튀프]의 마지막 희극 [인간 혐오자]에 그의 안타까움, 외로움이 느껴진다.


[linux] ssh은 되는데 sftp가 안되는 경우

sftp root@123.123.123.123
root@123.123.123.123's password:
subsystem request failed on channel 0
Connection closed

그런데 ssh은 잘 들어가진다면?
뭔가 설정을 잘못되어 있을 수 있다. 일단 이걸 열어보자.
#vi /etc/ssh/sshd_config
그리고 sftp를 찾아보자. /sftp-server로 해당 내용을 검색하니 맨 마지막에 내용이 있다.
없으면 넣어주도록 하자.
#override default of no subsystems
Subsystem    sftp    /usr/libexec/sftp-server
이런게 적혀 있어야 한다. 그런데 왜 안되었을까.
해당 패스에 가보기로 하였다.
#/usr/libexec/openssh/s
sftp-server    ssh-keycat    ssh-keysign    sh-pkcs11-helper
#/usr/libexec/openssh/s
뭔가 특이점이 보이는가? 패스가 틀려 있어서 sftp가 안되었던것!! 어서 바꿔주고 재시작을 해보자.
# service sshd restart
이제 잘 될겁니다.ㅎㅎ

2017년 3월 8일 수요일

[java][junit] private인 메소드는 어떻게 테스트를 해야 하나요?

오늘 JUNIT테스트 케이스를 작성하려고 하는데 이상한 것을 봤습니다.
바로 제가 테스트할 메소드가 JUNIT 테스트 케이스 안에 들어있는 것이었습니다.
상황이 뭐냐하면
다른 누군가가 해당 메소드가 privat으로 되어 있었기 때문에 JUNIT에서 불러 올 수 없었던 것이지요. 그래서 똑같은 메소드를 만들어서 테스트를 했던 것입니다.
문제는 이 테스트가 나중에 쓸모 없어진다는 것같아요.
테스트를 나중에 돌려도 잘된다고 나오겠죠. 버그가 있어도
그러면 JUNIT은 어떻게 테스트를 해야 하는거지?
간접적인 테스트를 하는 것이 방법일 것 같아요. private메소드를 사용하는 public 메소드는 최소한 하나는 있을 것이니 그것을 이용해서 테스트를 하는 것입니다.
하지만 그것으로 부족하다고 느끼시다면?
방법이 있습니다. 리플렉션을 사용하는 방법이죠.
코드를 보겠습니다.
import java.util.List;

public class A {
	private String name;
	public A (String name) { this.name = name; }
	
	private String dosthPrivate(int a, String b, List list) {
	  return "name: " + this.name + 
            ", a: " + a + ", b: " + b + ", List: " + list;
	}
}
현재 위에 있는 dosthPrivate은 실행할 방법이 없습니다.
JUnit으로 테스트를 하려면 어떻게 해야 할까요??
이제 테스트 코드를 보도록 합니다.
public class ATest {
  A a = new A("TEST");
  @Test
  public void test() throws Exception{
  Method method = 
    A.class.getDeclaredMethod("dosthPrivate", int.class, 
                              String.class, List.class);
    method.setAccessible(true);
    String result = String.class.cast(method.invoke
      (a, 1, "BBB", new ArrayList(Arrays.asList(1,2,3,5,8,13,21))));
    assertThat(result, CoreMatchers.is
      ("name: TEST, a: 1, b: BBB, List: [1, 2, 3, 5, 8, 13, 21]"));
  }
}
아주 간단하죠?

아주 간단합니다.