유니티 앱 단점 - yuniti aeb danjeom

본문은 위시켓과 번역가 윌리(Willy)가 함께 만든 해외 콘텐츠 기반 번역문입니다. 프로그래밍에 대한 정보를 다루는 ‘Leo Lio’의 블로그 글을 번역했습니다. 지금 이 순간도 많은 사람들이 오픈소스의 장단점에 대해 불꽃 튀는 논쟁을 벌이고 있습니다. 오늘 소개할 기사는 그중 오픈소스의 단점을 바탕으로 강하게 비판한 내용을 담고 있습니다. 해당 내용은 필자 Leo Liou의 주장으로 요즘IT의 의견과는 관계없음을 알려드립니다.

오픈소스 소프트웨어는 많은 단점을 가지고 있습니다. 사람들은 오픈소스의 장점만 이야기하지만 이는 한 단면만을 바라보는 것입니다. 이 중 어떤 것은 사실이 아니며, 어떤 것은 허무맹랑하기까지 합니다. 전부 설명하려면 책 한 권으로도 모자라기 때문에 오픈소스를 사용하는 것이 왜 시간 낭비이며, 그 이유는 무엇인지 간단하게 몇 가지만 짚어보도록 하겠습니다.

유니티 앱 단점 - yuniti aeb danjeom

1. 대부분(99%)의 오픈소스는 상용 소프트웨어에 뒤처진다

이미지 편집 소프트웨어인 김프(Gimp)보다 포토샵(Photoshop)이 더 뛰어납니다. 블렌더(Blender)보다 3Ds 맥스(Max), 모도(Modo), 마야(Maya), 지브러시(Z-brush)가 더 뛰어납니다. LMMS보다 FLStudio이 뛰어납니다. 고도(Godot)엔진 보다 유니티(Unity)가 뛰어납니다. 말하자면 끝이 없습니다. 사실, 오픈소스 소프트웨어는 상용 소프트웨어의 마이너 버전입니다. 명품에 비유하자면 그럴싸하게 흉내 낸 모조품과 같죠. 오픈소스 소프트웨어는 보기에도 항상 어딘가 부족해 보이고 실제로 사용할 때도 마찬가지 느낌을 줍니다. 그렇다면 오픈소스의 대표 격인 리눅스(Linux)[1]는 어떨까요? 네. 리눅스보다 윈도나 Mac OS가 뛰어납니다.

2. 너무나도 낮은 품질 기준

위에서 설명한 것과 같은 맥락입니다. 오픈소스 세계에는 엄격한 제약이나 감독이 존재하지 않습니다. 개발자를 관리할 관리자도, 실력 있는 인재를 뽑을 면접도, 실수를 바로잡아줄 상사도, 여러분을 해고할 사람도 없습니다. 이 때문에 일부 오픈소스 "커뮤니티"에는 최악의 개발자들이 득시글거립니다. 이제 막 걸음마를 뗀 개발자부터 주류가 되지 못한 "숙련된 개발자"까지 원하는 프로젝트에 큰 장벽 없이 참여하고 "기여"할 수 있습니다. 실소를 금치 않을 수 없습니다.

3. 지적재산권은 어디에?

"잠깐만요. 오픈소스에 원하는 대로 다양한 라이선스 모델을 적용할 수 있잖아요?"  하지만 진짜 중요한 것은 누가 이를 강제할 수 있냐는 것입니다. "개발자"의 탈을 쓴 범죄자가 다른 사람의 코드를 훔쳐 살짝 바꾼 후 이를 팔아 돈을 벌었지만 아무 일도 일어나지 않은 것을 수도 없이 많이 봤습니다. 심지어 블렌더는 유료 버전이 따로 존재합니다. 문제는 오픈소스라는 개념 자체가 개발자를 이러한 위험에 노출시킨다는 것입니다. 누구라도 여러분이 고생해서 만든 창작물을 훔쳐 자신의 것인 마냥 행세하고 돈을 벌 수 있습니다.

4. 후진적인 "커뮤니티" 문화

"오픈소스 커뮤니티"라는 단어부터 이미 난센스입니다. 자칭 10x 개발자[2]가 다른 사람의 코드를 무차별로 공격하는 것을 자주 봤습니다. 지식을 공유하며 실력이 부족한 개발자를 이끌어 주는 것이 커뮤니티의 역할이며, 자신이 작성한 코드가 조롱당하는 것을 좋아하는 개발자는 아무도 없습니다. 미국의 인터넷 최대 커뮤니티인 레딧(reddit)에는 나쁜 코드를 공개적으로 비난하는 서브레딧도 존재합니다. "커뮤니티" 홍보를 위해서 하는 일이지만 결국 자기 얼굴에 침 뱉기와 같습니다.

5. 프로그래머도 먹고살아야 한다

적어도 "훌륭한" 프로그래머는 좋은 대접을 받아야 합니다. 컴퓨터 앞에 앉아서 하루 종일 코딩하는 대가가 그저 커뮤니티에서 잘했다는 칭찬을 받거나 깃허브(Github)[3]에서 많은 별점을 얻는 것에서 그친다면 무슨 의미가 있을까요? 하루하루 먹고살기 위해 코딩하는 프로그래머도 있습니다. 이러한 개발자 중 일부는 프로그래밍이 적성이지만 그렇지 않은 사람도 있습니다. 다른 모든 직업(배우, 음악가, 의사, 변호사 등)과 마찬가지로 프로그래머는 자신이 일하는 대가로 합당한 보상을 받을 자격이 있습니다. 하지만 깃허브에 존재하는 대부분의 프로젝트가 형편없다는 사실을 안다면 모두에게 해당하는 것은 아닙니다.

6. 부족한 기술 지원

설마 제대로 된 기술 지원을 기대하지는 않으셨겠죠? 3년 전 멋진 오픈소스 소프트웨어를 처음 개발했던 학부 졸업생 A씨는 이제 자금이 쪼들려 더 이상 프로젝트를 이어 나가기 힘든 상황입니다. 열정 하나로 코딩을 시작했지만 아무 대가 없이 공개한 프로젝트는 이제 한계에 다다랐습니다. 하루하루 무엇을 먹을지가 걱정이며 월세를 감당하기도 벅찹니다. 당연히 이성 친구와 데이트할 돈도 없겠죠. 이것이 여러분이 선택한 오픈소스의 개발자가 처한 현실일 수도 있습니다. A씨는 이제 오픈소스 개발을 포기하고 제대로 된 직장을 구하려고 합니다.

7. 취약한 보안

이는 아주 심각한 문제입니다. 오픈소스 소프트웨어는 보안에 취약하고 신뢰할 수 없다고 알려져 있습니다. 어차피 공짜로 쓰는 것인데 많은 것을 기대할 수 있을까요? 하지만 이로 인해 여러분의 회사에 피해가 간다면 누구에게 책임을 물을 수 있을까요?

8. 코드 공개 요구

오픈소스를 숭배하는 개발자의 대다수는 모든 소프트웨어, 특히 소규모 팀이나 개인 개발자가 작성한 소프트웨어는 모두 공개해야 한다고 믿습니다. 다른 사람의 코드를 보고 싶다는 욕구는 결코 채워질 수 없습니다. 그렇다면 여러분에게 코드를 보여달라는 사람들에게 무엇이라고 말해야 할까요? 프로젝트를 오픈소스로 공개할 수 없는 이유를 논리적으로 설명하기보다 이러한 요구를 그냥 무시하는 편이 낫습니다.

9. 대규모 레거시 시스템에서의 한계

대규모 레거시 시스템[4]에 탑재된 소프트웨어를 관리하려면 오랜 기간 같은 프로젝트에서 꾸준히 일해온 개발팀이 필요합니다. 코드베이스[5]의 역사를 이해하고 방대한 코드에서 필요한 부분을 빠르게 찾아낼 수 있는 역량이 필수이기 때문입니다. 오픈소스 프로젝트는 재능 있는 개발자를 장기간 묶어둘 만한 당근(임금, 기업 문화, 계층)이 없습니다. 이 때문에 프로젝트가 중단되는 일이 다반사입니다.

앞서 말씀드린 것과 같이, 할 말이 너무 많아 책을 써야 할지도 모르겠습니다. 하지만 결론만 말씀드리자면, 오픈소스는 태생적으로 한계가 있으며 제한적인 목적의 프로젝트나 학습을 위한 소규모 프로젝트에 적합합니다. 새로운 언어를 연습하거나 본인을 홍보하려는 목적의 프로젝트가 아니라면 다시 한번 생각해보세요.


[1] 가장 널리 사용되는 커뮤니티 기반으로 개발된 오픈소스 컴퓨터 운영체제(OS).

[2] 남들보다 10배의 생산성을 지닌 뛰어난 개발자.

[3] 분산 버전 관리 툴인 깃(Git)을 사용하여 프로젝트를 관리하고 공유하는 웹 기반 서비스. 수 많은 개발자들이 수 많은 오픈소스 프로젝트에 자발적으로 기여하고 있다.

[4] 과거에 개발되어 현재까지 사용 중인 낡은 시스템. 안정성이 가장 중요시되는 핵심 시스템은 쉽게 변화를 주기 힘들기 때문에 신기술의 도입이 늦고 레거시 코드가 오랜 기간 사용된다.

[5] 특정 소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스 코드의 전체 집합.

대학교 2학년때.

유니티엔진이 무료화된 시점부터 2년동안 유니티 신봉자로 지내다가

언리얼엔진을 접하고 1년동안 언리얼엔진을 접하면서 적는 개인적인 취향이야기.

유니티.

장점.

- C# 코딩하기 정말 직관적이고 편하다. (이것 때문에 유니티쓴다고하면 인정.)

- 교육자료, 튜토리얼, 커뮤니티의 구글링자료가 정말 많다.(특히 한글로된거)

- 쉐이더와 그에 관련된 매터리얼을 관리하기 편하다.

- 에반젤리스트분들이 개발자들과 소통하려는 모습이 많이보인다.

- 엔진이 가벼워서 태블릿pc로도 돌아가진다.

- 자유롭다. 빈종이 갖다주고 하고싶은거 다~해 하는 느낌

- 에셋스토어에 마켓플레이스보다 자료가  배는 많다. 근데 퀄리티 낮은것도 많다.

- 개발자를 지원해주는 행사나 이벤트 많이한다. 

- 당연할지 모르지만 엔진폴더에 리소스파일이 변환이 안되고 meta파일로 관리되서 외부에 넣고뺄떄 편하다.

단점.

- 프로그래밍 제대로 몰라도 라이브러리로 스크립트 짜서 컴포넌트로 붙이면 어떻게든 돌아가는 식이다보니

  코드몽키면서 프로그래머인줄알고 착각하기 쉽다. 

- 교육자료가 많고 쉬운만큼 진입장벽이 낮은 탓에 커뮤니티에는 정말 어린학생들도 많고 이상한사람도 많아서

  잘못된 지식을 알려주는사람도 있고 질문에 답해주면 기분나쁜일이 생길때가 있다.

- 필요한 플러그인이 많을수록 엔진폴더가 드러워지고 관리하기 힘들어진다.

- 가벼운만큼 언리얼에 비해 제공되는 라이브러리 기능이 좀 적다. 그래서 왠만한 기능은 직접 구현해야되서 귀찮다.

- 개인적으로 UI가 보기 불편하고 눈에 안보여서 있는데도 몰라서 못쓰는기능이 좀 많다. 

- 레벨 돌아다닐때 카메라 속도 조절 못하는거. 3DMAX같은 다차워 뷰포트방식이 없다는것이 불편. 

- 엔진소스 공개안되있어서 라이브러리가 뭘 매개변수로하는지. 안에 어떤 메소드가

  내장되어있는지 바로바로 못뜯어 본다. 때문에 공식 홈페이지가서 도큐먼트 볼수밖에 없다.

언리얼.

장점.

- 유니티처럼 빈오브젝트 만들어놓고 내가 임의로 정하는것이 아니라 

 언리얼 자체에서 게임모드,컨트롤러,레벨, 액터 이런 단계로 나뉘어져 관리하도록 설계되어있으니 

 프로젝트 관리하는것이 통일되어 있어 편하다.

-언리얼 c++ 코딩스탠다드가 있어서 개발자들사이에 코드간 충돌이 일어날 가능성이적다.

- UI가 직관적이고 각종 에디터와 아이콘만봐도 대충 어떤기능인지 어떤일이 일어날지 예상이가는 기능이 많다.

-외부 플러그인을 관리하는 폴더가 엔진폴더의 내부에 따로들어가있어서 관리하기 편하다.

 근데 프로젝트 공유할때는 다른 컴퓨터에 그 플러그인을 전달해줘야되서 불편한점이 있다.

- 유니티는 구글링하며 직접 만들어야되지만 언리얼은 찾아보면 대부분 라이브러리에 내장되있다.  

- 유니티는 스크립트+컴포넌트 붙이며 조립해가며 만들지만 언리얼은 완성품+완성품 -> 빌드 하는방식이라

  제대로된 프로그래밍 지식이 없으면 디버깅이 안된다. 어찌보면 단점이지만 난 이걸로 삽질한 덕분에 OOP구조를

  제대로 복습했다.

- 에디터 한글화 매우 잘되있다. 에디터에서 튜토리얼이나 문서로 이동하는것도 잘 설계되어있다.

- 다양한 에디터창에서 작업이 가능해서 프로그래밍 이외의 작업하기 정말 편하다.

- 신기술에관해서 유니티보다 좀더 앞선다.

- 보통 나는 프로그래밍 할때 블루프린트와 유사하게 머릿속에 그리면서 하기때문에

  프로토타입 로직설계할때와 디버깅할때는 블루프린트가 정말 편하고 좋다. 

- 진입장벽이 좀 있는덕분에 배우는 고통을 감내하는사람들(?)로 걸러져서 

  커뮤니티를보면 유니티보다 예의바르고 수준높은글이 많다.

  예를들면 가성비좋은 pc방에 소리지르는 초글링이 많아서 싫다면 

  비싸고 고급진 pc방엔 조용한 아저씨들이 많은느낌. 

-블루프린트 자료가 많아서 로직 카피한 후 내껄로 만들기 수월하다.

-마켓플레이스의 에셋 심사기준이 까다롭다. 일정 퀄리티이상이 아니면 통과시켜주지 않는것같다. 그래서 고급지다.

-매 달 고급진 무료에셋을 뿌린다.

단점.

-  업데이트 내용만 공식 블로그에 올리고 유니티만큼 마케팅을 안해서 업데이트가 눈에 안띈다.

- c++ 쓰는건 괜찮은데 핫리로드를 안쓰고 그냥 재빌드하는게 안전하지만 귀찮고,

  비주얼 스튜디오 인텔리센스가 매우 X같다. 이게 제일 짜증난다. 

  매우신경쓰이는  빨간줄이 떠도 빌드가 된다. 그래서 오류창이아니라 출력창보고 버그잡아야한다.

  에러가떠서 해당 부분을 더블클릭해도 유니티처럼 바로 그 코드에 가지 못하는것도 있다.

- 한글 절대 쓰지마.

-  c++을 c#같이 쓰게하려고 흑마법을 사용한게 좀 있는데. 제공되는기능이 편한만큼 공부할것도 많다.

- 유니티하다가 언리얼 프로그래밍 하면 유니티로 도망가고싶을때가 있다.

- 머티리얼인스턴스 관리하는거 불편하고 귀찮다.

- 엔진소스가 공개되어있어서 비주얼 스튜디오에서 그냥 정의로 이동하면 내부코드 다보여서 그거 보면서 

  어떤기능이 있는지 바로바로 확인이 가능하다.

- 자료찾아보면 죄다 블루프린트자료가 대부분이고 cpp자료랑 섞여있어서  구글링으로 문제해결할때 곤란하다.

- 빌드,컴파일시간, 렌더링시간 유니티에비해 엄~~~~청길다. cpu한테 미안하다.

-엔진폴더에 리소스파일을 넣으면 .uasset 확장자로 변환이 되는데. 이거 꺼내쓰고싶을때

 에디터에서 다시 추출안해주면 못 써서 불편하다. 

----------------------------------------------------------------------------------------------------------------------------------

요약.

언리얼은 엔진 편의성이 넘사벽으로 좋지만 프로그래밍이 x같고

유니티는 프로그래밍이 편해서 좋지만

가벼운대신 편의성이 별로. 너무 자유로워서 프로젝트 관리하기 힘들다.

나는 프로그래밍 x같은건 감내할수있어서 언리얼이 편하다.