이 문서 내용은 좀 낡았습니다.
60일이나 편집 안된 오래된 망한 문서니 개발 문서인 경우 참고할 때 조심하세요. 최신 정보를 알고 싶으면 게시판에 글 써주세요


목차

1. 개요
2. 성능
2.1. AI
2.2. DB
3. 설치에 대한 접근성
4. 호환성
5. 보안 문제
6. 사용층의 예상과 다른 사용
7. 그냥 고려 안하면 되는 게 아니냐 생각할 수도 있지만...
8. 사실 이 문제를 어느 정도 해결할 방법이 있는데...

1. 개요

개인적으로 개발하면서 개인 서비스를 위한 프로젝트가 아니라 아무나 돌릴 수 있는 오픈소스 프로젝트기 때문에 일반 프로젝트보다 더 힘들었던 경우에 대해서 논해보려고 한다

2. 성능

2.1. AI

AI 기능을 넣어보고 싶다는 생각은 항상 하는데 문제는 로컬 서비스는 매우 매우 높은 성능을 요구한다는 점이 문제이다

LLM은 말할 것도 없고 이미지 생성 AI도 장난 아니게 GPU 성능을 많이 요구한다 이런 기능은 넣어도 일반적으로 오픈나무를 돌리는 환경에서는 돌아가는 경우가 거의 없을 것이다

게다 외부 API를 쓰고 싶어도 문제인 게 한결 같이 다들 돈을 요구한다... 그것도 싸지가 않다 적자 오픈소스 될 위기다

2.2. DB

일반적인 개인 서비스 프로젝트라면 DB 성능이 딸린다 싶으면 DB 서버를 분산 시키거나 검색 구현 등은 엘라스틱 서치 등에 위탁하는 방법이 있으나

문제는 오픈나무에 그걸 적용하면 사용자가 서버에서 돌릴 때 설치해야하는 과정이 여러 개 더 늘어나고 그 결과 접근 장벽이 높아져버린다... 당장 미디어위키라이믹스 설치도 어려워 하는 사람이 태반이라 그렇게 하질 못하겠다

그 결과 DB 성능 문제가 있다

3. 설치에 대한 접근성

위 두 문제는 여기에 사실 포함된다 결국 뭔가 추가 기능을 보여주려면 바닥부터 짜는 게 아니라면 외부 라이브러리를 새로 추가해서 서비스 해야하는데 그러면 사용자들도 그러한 라이브러리를 추가 설치해야한다

하지만 라이브러리를 추가 설치하기 쉬운 라이브러리도 있는 반면 되게 까다롭고 (특히 바이너리로 컴파일 되어 있는 라이브러리들) 또 다른 라이브러리에 호환성을 가지고 있는 경우도 있고 심지어는 아예 다른 프로그램을 설치해야 하는 경우도 존재한다

이러한 라이브러리를 추가하면 결국 설치 과정이 늘어나는 것이고 이는 설치에 대한 접근성을 악화시키는 결과를 가져온다

4. 호환성

이것도 위 내용과 관련 있다

예를 들어서 쓰려는 라이브러리가 리눅스 전용이거나 ARM64 환경을 지원하지 않거나 하는 문제가 있다면 특정 환경에서는 서비스 제공이 달라지는 결과를 초래할 수도 있다 (실제로 오픈나무 코드에서도 그런 부분이 있다)

게다 이러한 호환성을 또 여러 환경에서 돌려봄으로 테스트를 해야하는데 이 과정에서 또 다양한 버그와 마주하고 또한 그 결과 막대한 시간이 소모된다

5. 보안 문제

클로즈 코드 서비스라면 보안 문제가 터져도 외부에 그런 취약점이 누출되지 않았다면 별 탈 없이 지나간다

하지만 오픈소스 프로젝트라면 이런 보안 문제가 터졌을 때 그 코드를 알아차리고 이미 그걸 악용하고 있는 사람이 있을 가능성이 높다

당장 예전에 제로보드모니위키에서 보안 허점으로 사이트를 턴 사례가 무수히 많다

그래서 코드 작성에 더 신중해야하지만... 사람이라는 존재가 그게 쉽지 않다

게다 xz 라이브러리에서 메인테이너가 악성코드를 심는 사건도 벌어지는 걸 봐선 대규모 서비스에서도 그건 참... 어려운 문제인 것 같다

6. 사용층의 예상과 다른 사용

오픈나무의 브런치만 봐도 안정화 빌드(stable), 베타(beta), 개발용(dev)로 브런치가 나누어져 있으나... stable 빌드를 쓰는 사람은 극히 드물다 (물론 stable이라고 버그가 안 터지는 게 아니라는 것도 문제에 기여한다고 생각하지만...)

또한 여러 기능들도 원래 의도와 다르게 쓰이는 경우도 가끔 있었다

7. 그냥 고려 안하면 되는 게 아니냐 생각할 수도 있지만...

요즘은 상용 서비스 중에 괜찮은 게 이미 많기 때문에 이런 사항을 고려하지 않으면 불편함을 감안해서라도 대체 서비스로 다 넘어가버린다

결국은 설치형 오픈소스 프로젝트의 장점을 최대한 보여주면서 간단히 설치할 수 있어야 한다는 결론이 나온다... 아님 때려치고 그냥 서비스를 만들던지

8. 사실 이 문제를 어느 정도 해결할 방법이 있는데...

그냥 바이너리로 컴파일해서 제공하면 된다(...)

근데 호스팅에서는 바이너리로 실행하기 까다로운 경우도 있고

파이썬을 바이너리로 만드는 건 사실 바이너리로 만드는 게 아니라 압축 파일에 다 쑤셔 넣는 것과 같은거라 매우매우 비효율적이라는 문제가 있다

결국 모든 문제를 해결할 방법은 없다는 게 내가 낸 결론이였다...