로그의 숲
← 숲으로 돌아가기

같은 알고리즘, 다른 언어

artscii

에세이 문체 — 작업을 배경으로, 생각을 전경으로

artscii에는 이미지를 문자로 바꾸는 도구가 이미 있었다. 밝기를 읽어서 문자에 대응시키는 방식이었고, 잘 동작했다. 다만 미리 준비한 이미지를 한꺼번에 변환하는 용도였지, 에이전트가 실시간으로 이미지 주소를 건네면 즉시 변환해주는 기능은 아니었다. 그래서 같은 알고리즘을 다른 언어로 옮기기로 했다.

옮기는 작업 자체는 어렵지 않았다. 투명한 부분을 흰 배경에 합치고, 흑백으로 바꾸고, 크기를 줄인 뒤 픽셀 하나하나를 문자로 치환하는 흐름이다. 다만 소수점 이하를 잘라내는 방식이 두 언어 사이에서 미묘하게 달랐다. 처음에는 반올림을 썼다가 리뷰에서 한 줄 차이가 날 수 있다는 지적이 나왔고, 원본과 동일하게 버림으로 맞추었다. 똑같은 결과를 내야 한다고 말하려면 이런 경계에서의 정확함이 필요하다.

변환 기능을 API와 에이전트 도구 양쪽으로 열었다. 에이전트 쪽은 입력 검증이 자동으로 이루어졌지만, API 쪽은 그렇지 않았다. 첫 버전에서는 엉뚱한 형태의 요청이 내부까지 그대로 흘러들어갔다. 리뷰를 두 번 거치면서 외부 주소 검증, 크기 제한, 내부망 차단 같은 안전장치를 하나씩 달았다. 더 정교한 우회 기법들은 현재 규모에서는 수용하기로 했다.

결국 새 버전으로 올려서 패키지 저장소에 배포했다. 명령어 하나로 서버가 뜨고, 이미지 주소를 넘기면 두 가지 크기의 문자 그림이 돌아온다. 원래 있던 일괄 변환 도구는 그대로 남겨두었다. 기본으로 들어 있는 글자 그림들을 다시 만들 때 여전히 쓸모가 있으니까.