Rath World » 2012 » July

Archive

Archive for July, 2012

Mock up 환경에 DNS 도 꾸겨 넣기

July 13th, 2012 1 comment

동기

  • 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: Daily Tags:

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

July 8th, 2012 Comments off

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

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

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

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

… (중략) …

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

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

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

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

Categories: Books, Development Tags:

절제

July 8th, 2012 Comments off

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

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

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

 

Categories: Life, productivity Tags: