January 27, 2022

호환성

최근 새롭게 라즈베리 파이를 사용하여 만든 시스템이 너무 마음에 든다. 기존과 대비해서 장점이 너무 많은 것이다. 하나를 꼽아 보자면 성능이 확연히 차이가 날 정도로 더 좋다는 것인데, 기존에 사용했던 ODROID-U3는 출시일이 대략 2013~2014년 사이니까 벌써 10년전 제품이다. 라즈베리 파이 4로 말하자면 출시된 지 길어야 1~2년이니 아무래도 성능이 차이가 날 수밖에 없는 것. 기존 시스템에서 힘들었던 것으로 어플리케이션의 속도가 느리다는 것이었다. 개인 코드 저장소로 사용하는 gogs가 너무 느리고, 특히 커밋이 많은 코드일수록 더 느려진다. 링크 클릭 한 번에 3초 가량을 기다려야 했으므로 gogs의 좋은 기능을 더 쓰고 싶어도 그럴 수가 없었다. 그러나 이제는 이슈 트래커 기능까지 빠르게 사용할 수 있다. gogs로도 체감 성능이 굉장히 많이 빨라졌으므로 내친 김에 코드 기여와 개선 속도가 gogs대비 매우 빠른 gitea로 마이그레이션까지 진행했는데, 절차가 굉장히 복잡하고 직접 DB 필드를 수정하거나 업데이트한 것도 있어서 쉽지 않았지만 다 옮기고 나니 생각보다 더 만족스럽다.

IO적인 측면에서 보면 오드로이드는 emmc를 사용하므로 라즈베리 파이보다는 그 쪽에서 더 강점이 있지 않을까 했지만, fio로 측정해보니 오히려 SD카드를 쓰는 라즈베리 파이와 크게 다르지 않아 살짝 당황했다. 코드 최적화고 뭐고간에 역시 하드웨어 성능이 높은 것이 최고인 것이다. 메모리도 8GB이므로 오드로이드보다 무려 네 배나 더 크다. 덕분에 더 많은 컨테이너를 실행할 수도 있고.

오늘은 성능 이야기만 하려는 것은 아니고, 구축한 시스템의 아키텍처가 변경되며 얻은 가장 뛰어난 장점을 이야기해보고 싶어서 이 글을 쓰게 되었다. 그 장점이란 바로, 이제 유명한 오픈소스 프로젝트를 직접 컴파일할 필요가 없어졌다는 것이다.

오드로이드는 GOARCH로 따지면 arm이다. 대부분의 프로그램이 arm 플랫폼의 바이너리를 제공하지 않았기 때문에 힘든 부분이 굉장히 많았다. 그나마 요즘은 go로 작성된 유명한 어플리케이션이 많아서 어떻게든 하려고 하면 올릴 수 있긴 했긴 했다. 그래서 어떤 것들은 코드를 직접 받아 컴파일하기도 했고, 어떤 것들은 최신 버전을 사용할 수 없었다. 아예 불가능한 것도 있었고. 반면 라즈베리 파이는 플랫폼 arm64이며, 많은 오픈소스 프로젝트들이 이 플랫폼의 바이너리나 도커 이미지도 함께 제공하고 있다. 아마 라즈베리 파이가 워낙 유명하기도 하고, 애플 M1도 이쪽이라 자연스레 준비해주는 것이 아닐까 한다. 덕분에 이제는 그동안 사용하지 못했던 여러 어플리케이션을 손쉽게 올릴 수 있다고 기대하고 있다.

호환성이란 정말 뛰어난 장점이다. 어떤 것이 호환성을 갖춘 채로 누군가에게 제공되었다면, 그걸 사용하는 사용자는 특별한 예외 처리를 할 필요가 없다. 그래서 기대하는 대로 동작하길 기대할 수 있다. 받은 그대로 실행하더라도 (왠만하면)문제가 없고, 또 문제가 발생했다 하더라도 매뉴얼에, 혹은 이슈 트래커에서 내용을 확인해볼 수 있다. 같은 문제를 겪는 사람이 나 말고도 많으며, 그런 사람들이 인터넷에 남겨 놓은, 그 사람의 시행착오를 보며 나의 문제 해결 시간을 줄일 수 있다.

호환성, 호환이란 서로互, 바꿀換 수 있다는 뜻이다. 바꿀 수 있다는 것은 바꾸어야 할 대상이 동등하다는 것이고, 당신이 가지고 있는 것과 내가 가지고 있는 것이 동등하기 때문에 바꾸더라도 큰 차이가 없다는 말이다. 단순히 보드가 같다는 뜻을 넘어 어떤 사람과 나의 시행착오까지도 동등하다.

이제 나는 대부분의 사람들과 같은 문제를 가지게 되었고, 또 같은 해결책을 가지게 되었다. 나와 다른 사람 사이에 호환성이 생긴 것이다.