LOLWUT: 데이터베이스 명령어 안에 담긴 예술 작품
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
지난 며칠은 꽤 격렬했다. Redis 복제에 사용되는 단어를 다른 단어로 교체할지 말지를 둘러싼 논쟁에서 나온 주장 중 하나는 다음과 같았다. 기술적인 성과를 전혀 만들어내지 못하는 일에 굳이 수고를 들일 가치가 있는가 하는 것이었다.
가능한 곳에서는 특정 단어를 없애기 위해 Redis 소스 코드를 수정하면서, 나는 내가 하고 있는 작업에 대해 어떤 생각을 갖고 있든 간에, 측정 가능한 기술적 효과가 없는 코드를 작성하는 것을 즐기는 사람이라는 생각이 들기 시작했다. 단어를 교체하는 일은 그저 성가실 뿐이다. 물론 그 과정에서도 몇 가지 해볼 만한 기술적 도전은 있었다. 하지만 나는 ‘hack value’라고 부를 만한 특성을 지닌, 다른 종류의 코드가 있다고 믿는다. 그런 코드는 어떤 기술적 문제도 해결하지 못할지 몰라도 작성할 가치가 있다. 때로는 코드를 작성하는 과정 자체가 보상이 되기 때문이고, 때로는 쓸모없는 문제를 해결하는 데 매우 고도의 기술적 아이디어가 동원되기 때문이다. 때로는 코드가 순전히 예술적인 이유로 작성되기도 한다.
어느 면에서 지난 며칠간 트위터에서 벌어진 논의는 대부분 제대로 알지도 못한 채 혼란스럽고 과열된 양상을 보였는데, 이를 보며 우리는 이제 60년대 최초의 해커들과는 매우 멀어졌다는 생각이 들었다. 나이가 들수록 벽도 없고 미리 만들어진 정답도 없으며 탐구 자체가 한계가 되는, 해킹의 관점에서 기술에 대해 이야기하는 것이 점점 더 어려워진다는 것을 느낀다. 무슨 말을 하든 모범 사례가 있고, 어떤 아이디어를 내든 금기가 따른다. 나는 이런 새로운 풍조에 대해 LOLWUT라고 말하고 싶다. 나는 거기에서 대변된다고 느끼지 않으며, 적어도 내가 생각하는 해킹을 대변한다고도 생각하지 않기 때문이다. 그래서 60년대의 무언가를 탐구하기 위해 기술적으로는 쓸모없는 시간을 좀 써보자는 생각이 들었다.
내 관심은 곧바로 내가 가장 좋아하는 컴퓨터 아트 작품 중 하나인 게오르크 네스(Georg Nees)의 Schotter로 향했다(https://en.wikipedia.org/wiki/Georg_Nees). 네스는 플로터와 ALGOL 프로그램을 이용해 카오스(무작위성)와 반복 패턴을 활용해 예술을 생성하는 프로그램을 탐구했다. Schotter는 작품 자체의 단순함과 관찰자가 그 안에서 발견할 수 있는 깊은 의미 때문에 주목할 만하다. 완벽한 평온과 질서라는 표면 아래, 그 깊숙한 곳에는 무질서가 숨어 있다. 혹은 뒤집어 놓으면 폭풍 속 바다처럼 보인다. 표면이 아무리 격렬해 보여도, 깊은 바다는 고요함을 유지한다.
예술 작품을 데이터베이스 명령어로 만들 수 있을까? Redis가 주로 커맨드 라인 인터페이스로 사용된다는 점 때문에 이는 도전적인 과제였다. 오늘날의 터미널이 과거보다 확실히 훨씬 세련되긴 했지만, 그럼에도 제대로 된 그래픽을 표시하기는 여전히 어렵다. 반면 실시간 연산이라는 엄청난 장점도 있다. 예술 작품을 동적으로 만들어 생성될 때마다 다른 모습으로 바꿀 수 있다는 것이다.
계속하기 전에 최종 결과물을 먼저 보여주고 싶다:

해상도는 매우 낮지만 원작의 아이디어는 여전히 살아 있다. 이를 가능하게 하기 위해 나는 최근 텍스트 콘솔에서 흥미로운 것을 표시하려는 여러 프로그램에서 사용된 트릭을 활용했다. 점자 Braille 유니코드 문자 집합을 이용해 콘솔의 개별 문자보다 훨씬 더 조밀한 픽셀 매트릭스를 만드는 방식이다. 구체적으로, 문자 하나당 2x8 크기의 픽셀 격자를 넣을 수 있다.
실험의 두 번째 부분은 이 예술 작품을 파라메트릭하게 만드는 것이었다:

사각형의 개수와 출력 해상도를 바꿔 원작의 다양한 버전을 생성할 수 있다. 마지막으로 소스 코드는 문학적 프로그래밍(literate programming)의 예시가 되고자 했다. 불투명한 생성기가 아니라, 각 부분이 무엇을 하고 왜 하는지를 설명하는 튜토리얼에 더 가까운 형태로 작성되었다. 코드는 여기에서 확인할 수 있다:
https://github.com/antirez/redis/blob/unstable/src/lolwut.c
LOLWUT는 Redis 5부터 전통으로 자리 잡게 될 것이다. Redis의 각 새로운 메이저 버전마다 이 명령어가 하는 일은 완전히 바뀌겠지만, 몇 가지 규칙만은 고정될 것이다:
- 기술적으로 유용한 일을 해서는 안 된다.
- 하는 일은 빨라야 하며, 그래서 프로덕션 인스턴스에서 LOLWUT를 호출해도 안전해야 한다.
- 출력은 어떤 식으로든 재미있어야 한다.
나는 Redis 5를 위한 첫 번째 버전을 작성했다. 다음 버전들에 대해서는, 관심을 보이는 사람이 있다면 Redis에 기여한 다른 누군가에게 다음 LOLWUT 버전을 작성해 달라고 부탁할 것이고, 그렇지 않다면 내가 다시 직접 작성할 것이다(하지만 그렇지 않기를 바란다). LOLWUT는 우리가 하는 일, 즉 프로그래밍이 단지 유용한 무언가를 만들어내기 위해 시작된 것이 아니라는 사실을 우리 스스로에게 상기시켜 주어야 한다. 처음에는 무엇보다 가능성을 탐구하는 일이었다. 나는 LOLWUT가 Redis 커뮤니티에 컴퓨터는 결국 사람에 관한 것이며, 기술적 함의만을 생각하며 무균적인 방식으로 사고하는 것은 불가능하다는 점을 상기시켜 주기를 바란다. 시스템을 사용하는 사람, 시스템을 만드는 사람 등이 있기 때문이다.
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기