혼자서 하는 이미지 위주 머신 러닝 프로젝트의 데이터를 관리할 때 RDB가 필요한가?
더 정확한 물음은:
혼자서 하는 이미지 위주 머신 러닝 프로젝트의 데이터를 관리하는 가장 효율적인 모델(추상화)은 무엇인가?
아직도 답을 찾지 못하고 있다.
너무 어렵다.
처참하다. 한 달을 만들었는데(과거 블로그)
도저히 쓸만한 물건이 못 되는 거 같다.
알고리즘보다 아키텍처를 설계하는 게 더 어려운 거 같다.
알고리즘은 문제와 답이 명확한데 아키텍처는 문제도 정답도 불분명하다.그렇지만 내가 지금 시간 낭비를 하고 있다는 건 확실히 알겠다.
내가 도입한 구조 때문에 디버깅은 더 어렵고, 성능은 떨어지고, 유연성도 떨어진다.
이건 재앙이다. 그것도 내가 자초한 인재다.
정말로 쉬운 문제를 너무나도 어렵게 풀고 있다.
이건 아니다. 이대로는 안 된다.어쩔 수 없다.
한 달이나 짰지만 버려야 한다..
그저 참담한 심정이다.
데이터 관리를 RDB로 해보려다가 대가리가 완전히 깨졌었다.
머리통이 깨져보고 나니 DB에 대한 환상? 믿음? SQL의 유용함? 그런 거 다 버릴 수 있었다.
혼자서 하는데 DB는 정말로 소잡는 칼이었다.
진짜 문제는 사용은 생각하지 않고 DB 스키마를 짰다는 점이다.
관리하는 모든 객체를 데이터로 표현하기 위해 UUID를 id로 삼았다.
이렇게 하니까 이미지를 보고 싶으면 SQL을 써야했다. 정말 끔찍했다.
정말 간단한 데이터를 찾는 일에도 복잡한 SQL을 써야하니 개발 속도가 느려지다 못해 멈출 지경이였다.
이 때 ORM도 써보고, 타입 붙인 파이썬도 써봤다. 다 실패였다.
ORM은 그냥 사람만 빡치게 했고, 파이썬의 타입은 절름발이였다.
테스트도 항상 붙였지만 의미 있는 테스트는 전무했다.
DB에 들어간 행의 수를 세는 쓸모 없는 테스트나 해댔다.
그 딴 것보다 이미지를 직접 띄워 눈으로 보는 게 훨씬 나았다.
그러다 별 것도 아닌 관계를 SQL join으로 표현하다가 도무지 sql을 표현할 방법을 찾지 못해서
결국 개발을 그만두고 만다.
(내 SQL 실력 문제였겠지만 그냥 이것 떄문에 개발이 너무 늦어지다 못해 멈춰버렸다)
RDB도 은총알은 아니다.. 그렇지?
혼자서 일 하는 입장에서, DB는 그냥 관리 자체가 비용이 너무 많이 드는 거 같다.
혼자서 쓰니까 DB가 제공해주는 트랜잭션이니 동시성 처리니 하는 건 아무런 쓸모가 없다.
실시간 처리도 필요 없다. 그보다 아주 오랫동안 그냥 냅뒀다가 가끔씩 손 대는 데이터가 더 많다.
데이터 자체가 굳이 테이블일 필요가 없는 거 같다..
모든 경우를 커버하는 적절한 구조의 스키마를 도저히 생각해내지 못하겠다.
내 실력이 안 되는건지 뭔지 모르겠지만 나는 그냥 포기하기로 했다. 나는 못하겠다!
끝내주는 스키마를 생각해내는 것 자체가 비용인 거 같다.
그냥 데이터를 데이터 그대로 표현하는 게 낫다고 생각한다.
내가 쓰는 데이터는 테이블이 아니라도 표현이 가능하다...
현재는 파일시스템을 그대로 쓰고 파일 시스템에 대한 메타데이터를 yaml이나 json으로 저장하고 있다.
SQL을 안 써도 되는 점이 편하긴 한데....
정말로 SQL은 나쁜가? 밥 아재는 SQL과 관계형 DB에 대한 적대감을 여러번 드러낸 적이 있다.
https://blog.cleancoder.com/uncle-bob/2012/05/15/NODB.html
나는 확신을 내리지 못하겠다. 여전히 쓸모 있는 분야가 많은 거 같지만....
그렇지만 비용 문제 때문에라도 내가 하는 일을 관계형 DB로 처리하지는 못하겠다.
관계형 DB로 식질머신과 관련된 데이터를 처리하는 건 내게는 너무 어려워서 할 수가 없다.
모든 경우에 RDBMS가 어울리지는 않는다.
이것 하나는 확실히 알겠다.
"사소한 스크립트"가 아닌 상용 프로젝트에는 반드시 RDBMS를 써야 한다고 주장하는 사람도 있다.
나는 그런 말은 못하겠다.
지금 내가 하는 일도 혼자 하는 일이지만 식질머신의 핵심 중에 핵심이라는 점에서
상용 프로그램이나 매한가지다.
세상의 모든 정보를 테이블로 표현할 수 있다. 안 될 건 없다.
그러나 그게 효율적일지는 알 수 없다.
컴퓨터에 있는 모든 이미지는 이진수로 저장되어 있지만 망가를 이진수로 보는 정신병자는 없다.
RDBMS도 그저 하나의 추상화일 뿐이다.
은총알은 없다.
맺음말
아직도 답을 찾고 있다. 식질머신을 위한 최고의 데이터 추상화는 무엇인가. 정답은 뭘까....
한달을 소비하고 관계형 데이터베이스가 식질머신에는 어울리지 않다는 것만 깨달았다.
다시 생각해보니... 그냥 스키마를 너무 잘못 짰던 거 같기도 하고..