Categories
Daily

Mock up 환경에 DNS 도 꾸겨 넣기

동기

  • dev.servername.com 같은 주소 사용하기 싫어서
  • 목업 환경에 기기 한대밖에 없다면 모를까 /etc/hosts 혹은 Windows/system32/drivers/etc/hosts 수정은 한계가 있다.
  • 소스코드를 수정할 수 없는 프로그램들에게 훼이크 먹이기 위해.

해결책

포터블한 적당한 오픈소스 DNS를 구한다. 나는 아무래도 Java 가 제일 편해서 dnsjava 를 사용하기로 했다. 지금 이 글을 쓰는 시점 최신버전은 2011년 10월 24일에 릴리즈된 2.1.3 이다.

압축을 풀면 살짝 머리가 아프다. 루트 디렉토리에 jnamed 란 클래스가 있다. 이녀석은 jnamed.conf 파일을 필요로 하는데 예제 파일이 존재하지 않는다. jnamed.java 소스를 보면 되는데 이것 역시 귀찮은 사람들은 아래와 같이 한 줄 적어주시면 되겠다.

primary 도메인명 zone파일명

도메인명이 service.com 이고 zone 파일 이름이 service.com.zone 이라면

primary service.com service.com.zone

zone 파일은 ISC BIND 의 zone 파일을 그대로 사용할 수 있으니 추가 설명은 생략한다.

한가지 문제. dnsjava 는 forward 기능을 제공하지 않는 것만 같다. 즉, 이 dns 에 등록되지 않은 룩업이 생기면 NXDOMAIN (Non-Existent Domain) 을 리턴하게 된다. 지극히 정상적인 행동이지만 목업 환경에는 어울리지 않는 모습이다. 오픈소스이기도 하니 성급히 고치는 전략을 택한다.

일단 org.xbill.DNS.Message.java 에 아래와 같은 메소드를 꾸겨 넣는다.

	public boolean didFind() {
		boolean found = false;
		for (List section : sections) {
			if (section == null)
				continue;
			for (Object aSection : section) {
				Record record = (Record) aSection;
				if (!(record instanceof EmptyRecord)) {
					found = true;
					break;
				}
			}
		}
		return found;
	}

레코드를 찾았는지 못찾았는지 확인하는 메소드를 만들어봤다. 이제 jnamed.java 의 generateReply 메서드 마지막에 방금 만든 didFind()를 꾸겨넣자. canonical name 을 무시하는 어이없음은 귀엽게 봐주시길.

		response.setTSIG(tsig, Rcode.NOERROR, queryTSIG);

		if( !response.didFind() ) {
			Record[] run = new Lookup(queryRecord.getName(), queryRecord.getType()).run();
			if( run!=null ) {
				for (Record record : run) {
					response.addRecord(record.withName(queryRecord.getName()), Section.ANSWER);
				}
			}
		}

		return response.toWire(maxLength);

이제 네트워크 환경설정에서 DNS 서버를 하나 추가하자. 주소는 127.0.0.1. 이렇게되면 Forward Query 를 보낼 DNS 서버 주소가 localhost 가 되서 쿼리가 뺑이치게 된다. 이를 방지하기 위해 jnamed.java 의 main 메서드 맨 위에 아래와 같은 코드를 넣어준다.


	Lookup.setDefaultResolver(new ExtendedResolver(new String[]{"8.8.8.8", "168.126.63.1"}));

300KB 짜리 목업 DNS 서버 구축 끝.

Categories
Books Development

‘괴테와의 대화’ 1825년 3월 27일 일요일 에서

소프트웨어 이야기인줄 알았다.

이렇게 멋진 극장에는 아름다운 무대 장식과 지금까지보다는 더 나은 의상이 필요할 거라고 누군가가 말했다. 그리고 또 단원들의 수도 점차 부족해져 가고 있는 실정이므로 연극을 하든 오페라를 하든 간에 젊고 실력 있는 단원 몇 명을 새로 채용해야 한다는 것이 자리에 모인 사람들의 대체적인 의견이었다. 그러나 이런 일을 하기 위해서는 상당한 비용이 들어야 했다. 현재까지의 재정 수입으로는 충분치 못하다는 견해도 있었다.

“나도 잘 알고 있어요.” 하고 괴테가 중간에 끼어들어 말했다.

“돈을 절약한다는 이유로 임금이 싼 배우들 몇 명을 고용할 테지요. 하지만 그런 조처로 재정에 도움이 되리라고 생각하는 건 어림없는 일이오. 그와 같은 필수적인 비용을 절약하겠다고 나서는 것보다 더 재정에 해로운 일은 없을테니까. 그보다는 매일 저녁 극장을 관객으로 가득 메울 방법을 생각해 내야 하는 것이오. 그러기 위해서는 젊은 남녀 가수 각각 한 사람에다가 유능한 주연급 남자 배우 한 사람, 그리고 뛰어난 재능과 상당한 미모를 갖춘 주연급 젊은 여배우 한 사람이 있으면 크게 도움이 될 테지요. 말이 나왔으니 말이지 내가 아직 극장 운영을 책임지는 자리에 있다면 재정 상태를 최대한으로 호전시키기 위해 한 걸음 더 나아간 조치를 취할 것이고, 그렇게 되면 필요한 비용이 모자란다는 소리는 더 이상 나오지 않게 될거요.”

… (중략) …

이어서 배우에 대한 문제가 화제에 올랐고, 그들의 능력을 제대로 활용하거나 오용하는 문제를 둘러싸고 많은 이야기가 오갔다. 괴테가 말했다.

“나의 오랜 공연 경험에 비추어 보건대 중요한 사실은 연극이든 오페라든 몇 해 동안에 걸쳐 어느 정도 성공을 거두리라고 분명하게 예상되지 않는 작품이라면 결코 연습시켜서는 안 된다는 것입니다. 5막 짜리 연극이라든지 그와 같은 길이의 오페라를 연습하는데 얼마나 많은 힘이 드는지를 제대로 생각하는 사람은 드뭅니다. 그렇습니다. 여러분, 한 사람의 가수가 모든 장면과 막에 걸쳐서 자기가 맡은 배역을 완전히 소화하려면 많은 노력이 듭니다. 또한 합창단이 제대로 궤도에 오르기까지는 엄청난 노력이 필요한 것입니다. 나는 가끔 어떤 오페라의 성공 여부에 대해 아무 예측도 못하면서 몇몇 불확실한 신문기사만을 믿고 경솔하게 연습 명령을 내리는 사람들이 있다는 소리를 들으면 섬뜩한 마음이 들기도 합니다. 이제 우리 독일에도 그런대로 쓸 만한 역마차 제대로 완비되어 있고 심지어 급행 역마차까지 운행이 시작되었지요. 그러므로 다른 지방에서 새 오페라가 공연되어 호평받았다는 소식이라도 들려오면, 나는 연출가나 믿을 만한 단원을 현장으로 보내 실제 공연을 직접 보고 확인토록 할 것입니다. 즉 찬사를 받고 있는 새 오페라 작품의 좋은점과 유용한 점이 무엇인지 그리고 우리의 능력으로 공연이 가능한지 아닌지를 확인하여 알아 오게 할 것입니다. 이러한 여행에 들어가는 경비는, 그로써 얻게 될 막대한 이익이나 혹은 불행한 실패를 사전에 방지함으로써 얻게 되는 이익과 비교한다면 아무 문제도 아닌 것이지요.”

“그리고 공연 연습을 끝낸 좋은 작품이나 좋은 오페라가 관객들의 호응을 받아 극장의 좌석이 가득 메워진다면 며칠씩 짧게 간격을 두고 계속 공연해야 할 테지요. 나온지 오래된 좋은 작품들의 경우도 마찬가집니다. 그러한 작품들은 오랜 기간 동안 공연되지 않고 묵혀져 있었으니까, 이제 그것들을 무대에 올려 다시 성공을 거두자면 마찬가지로 적잖은 연구가 필요할 테지요. 물론 이러한 작품들의 공연도 관객들이 관심을 보이는 한 짧은 간격을 두고 되풀이하여 공연해야 합니다. 항상 새로운 것만 찾는다든지, 각고의 노력으로 연습한 좋은 연극 작품이나 오페라를 단 한 번 아니면 고작 두 번만 보고 만다든지, 또 이러한 작품의 공연 간격을 주에서 8주 정도로 길게 잡아놓고 그 사이에 다른 작품을 새로 연구하는 일을 반복한다면, 이런것들이야말로 연극을 망치는 일이며 참여하고 있는 사람들의 힘을 남용케 하는 것으로서 도저히 용납할 수 없는 일이지요.”

괴테는 이 문제를 아주 중요하게 보고 있고 또 절실하게 가슴에 담아두고 있는 것 같았다. 그래서 이런 말을 하며 흥분하는 모습을 보였는데, 그것은 평소에 너무도 침착한 그로서는 보기 드문 일이었다.

Categories
Life productivity

절제

한 방향으로만 하염없이 나아가는 사람들이 있다.

이것은 단순히 욕심이나 일중독이 아니다. 아주 빠르게 달리고 있는 자동차나 가속도가 붙어 바닥을 향해 떨어지는 물체와 비슷하다. 별다른 노력을 기울이지 않아도 어떤 일을 할 수 있는게 아니라 그 행동을 멈추려면 많은량의 에너지가 필요한 거다. 단순히 많은 양의 에너지가 필요한 것 뿐만이 아니라 기술도 필요하다. 시속 250km로 달리던 자동차의 운전자가 급브레이크를 밟는다거나, 63 빌딩 꼭대기에서 떨어지던 물체를 1층에서 받아내야 한다고 생각해보라.

이렇게 시스템 전체가 특정 방향으로 나아가는 것에만 튜닝된 상태가 지속되면 어느 시점부터는 자기가 빨리 달리고 있다는 것 자체를 잊게 된다. 그래서 주위에서 ‘대단하십니다’ 라는 말이라도 해온다면 그는 당췌 이해할 수가 없다. 자기가 달리고 있다는 것을 자각하지도 못하게 됐기 때문이다. 그는 이 세상이 이상하다고 생각하기까지 한다.

 

Categories
Life

Moral Self-Licensing

서문

나는 디아블로 3 악사 유저다.  유럽서버에서 외롭게 솔플하는 내게 불지옥 Act 2 는 힘들다. 절제가 부족해서 죽는 경우가 잦다. 절제.. 절제.. 잉여력을 발휘하여 아마존에서 discipline 으로 검색했다. 네번째로 나온 책이 The Skinny on Willpower: How to develop self-discipline 이다. 내겐 흥미로운 책이 아니라 키워드를 willpower 로 바꿨다. 그랬더니 표지에는 비타민 약통이 그려있고 제목이 Maximum Willpower 라고 되어있는 자극적인 책이 검색됐다. 얼마나 골때리는 책인지 호기심에 열어봤는데 내용이 의외로 신선하여 구매했다. 28% 정도 읽은 시점에 Moral Licensing 이란 키워드를 발견했는데 신선도가 넘쳐서 이를 공유해본다.

내용

Maximum Willpower 에 Moral Licensing 이 소개되는 부분은 Location 1352 부분의 From Saints to Sinners 다. 성차별이 가득한 문장을 주고 동의하냐 안하냐 설문을 한다. 동의하기 아주 어렵게, 대부분의 여성은 일을 하기보다는 집에서 애나 보는 것이 더 좋다” 같은 문장을 준다. 이 문장에 대해 “절대 동의하지 않음” 이라고 답한 남성들에게 “건축이나 금융권같은 남성위주의 산업의 회사에 지원함에 있어 여성이 적절한가” 를 물으면 동의하지 않는다는 것을 발견했다는 것이다. 이런 의외의 행동을 설명하는 것 중 하나가 Moral Licensing 이다.

“어떤 사람이 좋은 행동을 하고나면, 스스로 좋은 사람이라고 느끼게 되고, 그렇게되면 자신의 충동을 더 신뢰하게 되는 경향이 있다” 는 것이다.  책의 내용을 최대한 그대로 옮기려하니 쉽지가 않다. 내 블로그 제목은 Rath World 이니 만큼 내 스타일로 표현하면

1) 도덕적으로 올바른 일을 한 번 함.
2) 스스로를 좋게 평가함.
3) 자신의 충동을 충동인지 아닌지 구분하기 어려워짐. 나는 좋은 행동과 좋은 생각을 했던 사람이니까.

하며 자기가 자기한테 은연중에 뻘짓 라이센스를 주는 것이다. 혹은 나쁜 것을 인지했으면서도 라이센스 반납하면 되지 뭐. 하는 상태가 되는거랄까. 성차별이니 도덕이니 하는 단어들이 난무하여 내용이 다소 무거워진 것 같아 쉬운 예들을 꺼내보겠다.

  • 야근수당도 받지 않고 혼신의 힘을 기울여 회사 업무에 몰두했다. 그날 퇴근길에 회사카드를 개인적인 일에 쓰면서 괜찮다고 생각한다.
  • 헬스클럽에 등록했다. 집에 가는 길에 아무 생각없이 맥도날드에 들린다.

좀 더 요약하면 A 영역에서 좋은 일을 해놓고 전혀 상관이 없는 B 영역에서 뻘짓을 하는거다. 이렇게 된 이유는 영역간 구분이 무너져서이고, 이것이 무너진 이유는 ‘는 좋은 사람이다’ 가 됐기 때문이다. 책에서 제시하는 추가 예제로

  • 유부남 성직자가 자기 비서랑 성관계를 가짐
  • 국회의원이 공금으로 자기 집 리모델링함
  • 경찰관이 조금도 저항하지 않는 범죄자에게 마구 폭력을 행사함

이런 것들이 있다.

마치며

Moral Licensing 이 Willpower 와 무슨 관계가 있는지는 이 포스트의 목표와 무관하므로 관심이 있는 분은 책을 사서 읽으시길 권한다. 이 포스트의 목표는 Moral Licensing 이라는 흥미로운 키워드를 찾게되어 기쁘고, 이를 삶의 여러가지 현상에 대입해보며 재미를 보고 있던 중, 혼자 재미보면 재미없다는 생각에 소개글을 쓰는 것이기 때문이다.

본문에서 소개했던 예제들의 봐도 알 수 있듯이, 나 스스로가 내 생활에서 느낀 moral licensing 패턴을 공유할 수 없음을 이해해주기 바란다. 너무나도 사적이다.

마지막으로 논문 읽기 좋아하는 사람들을 위하여. Moral Self-Licensing: When Being Good Frees Us to Be Bad