개발자는 창의력이 필요할까?
필요하고 중요하다고 생각합니다
창의력은 길이 없는 상황에 처해졌을때 어떻게 길을 만들어낼지에 있어서 중요하다고 생각합니다
길이 없는 상황은 비단 소프트웨어 개발자들에게만 해당되는 이야기가 아니라 삶을 사는 모든 사람들에게 해당되는 이야기 아닐까 합니다
살면서 문제를 겪는 상황은 누구나 겪으니까요
다른 말로 문제 해결 능력이라고 말할수도 있지요
사례를 이야기해보자면 다음과 같습니다
가령 사이트의 특성상 실시간적으로 화면상의 내용이 수시로 바뀜에 따라 계속 화면을 갱신해 줌에 있어서 성능적 비효율이 존재하는 상황에서 이 문제를 어떻게 해결할지 고민해야 하는 상황이 있다고 할때..
이런 고민에서는 아무래도 창의적인 생각이 필요하지 않을까 합니다.
"계속 DOM에 접근을 해서 갱신을 해주는데서 비효율이 발생하니 따로 메모리상에 DOM과 같은 구조의 데이터를 준비해서 값의 변경시 이 메모리상의 데이터를 바꿔주고 이 모습에서 변경된 부분만 DOM에 반영해줘서 DOM접근을 최소화하는 아이디어는 어떨까?" 라는 창의적인 아이디어가 있었던것이죠.
나도 최근 나름 창의력을 발휘한 경우를 이야기를 해보자면 다음과 같습니다.
이번에 개발중인 게임에서는 맵이라는 개념이 필요했는데 맵데이터를 어떻게 만드는게 좋을지를 고민해야했어요
여기서 맵이란 자료구조의 Map이 아닌 게임에서의 지도를 의미합니다
맵에디터를 따로 만들기에는 손이 많이 가서 떠올린 아이디어가 나름 창의적이였습니다.
그림판을 열고 돋보기로 최대 확대해서, 픽셀이 네모로 보일정도로 확대해서 그냥 픽셀을 찍어서 png로 저장해서 png를 게임에 포함시키면 게임에서 구동중에 맵데이터로 변환하는 방식입니다
픽셀 하나당 게임상의 오브젝트이며 색상에 따라 오브젝트의 속성을 결정하는 방식으로 문제를 해결했습니다
이렇게 했을때 얻은 장점은 맵데이터의 제작수고를 덜고, 덤으로 맵데이터의 용량도 작게 만들수 있었죠
이것을 하는 과정에서도 중간중간 또 창의력이 필요했던 상황들이 있었는데요
처음의 아이디어는 png를 기반으로해서 맵데이터에 해당하는 json을 생성해서 json을 게임에 포함시키는 방법이였습니다.
그래서 png를 맵데이터로 변환하는 툴이 필요했고 이것을 커맨드라인인터페이스로 툴을 사용하는것이 편리하겠다고 생각했습니다.
그런데 png를 맵데이터로 변환하는것은 이미 WebAPI를 이용해서 만들어둔 상황이고 이것은 웹브라우저에서만 작동하죠..
근데 이것을 실행하는 환경이 커맨드라인인터페이스가 되면 웹브라우저환경이 아니기 때문에 WebAPI를 사용하는 코드가 작동될수 없습니다.
이 상황에서 길을 찾아야지요.
어떻게 커맨드라인인터페이스에서 WebAPI를 사용할수 있을까?
떠올린 방법은 퍼펫티어를 헤드리스로 구동해서 크로미움에서 해당 코드를 구동시키면 WebAPI사용이 가능하고 그렇게 처리된 결과를 얻어내면 되는것이였죠.
그렇게 해서 해결했습니다.
그런데 두번째 문제가 발생했습니다
변환된 맵데이터가 너무 큰것입니다
결과적으로 게임의 용량이 커졌죠
1000바이트였던 png를 맵으로 변환시키니 1MB가 되는 상황이였습니다
또 생각을 해야죠.. 아이디어를 만들어야해요 창의적으로..
그래서 떠올린 아이디어..
png를 변환시켜서 게임에 넣는게 아니라 그냥 png자체를 게임에 넣고 게임 구동중에 맵데이터로 변환하게끔하자는 생각이였습니다
png데이터 자체가 꽤 작고 단순하기 때문에 맵데이터로 변환하는것 자체는 게임이 WebAPI를 사용활 수 있는 환경이였고 큰 성능이 필요한 부분이 아니여서 별 문제 없는 상황이였습니다
세상에는 많은 솔루션들이 있죠.
개발자들입장에서는 그 솔루션은 보통 라이브러리나 프레임웍형태로 접하게 되고 이것들의 시작은 나름의 불편함과 고충의 해결을 위함이였지 않을까 합니다
그렇게 해서 대단한 라이브러리들이 탄생했고 현대의 개발자들은 누군가의 창의력의 산물의 도움을 받으며 이들도 또한 창의력을 발휘하고 있는것이죠
개발자 뿐 아니라 모든 사람에게는 창의력이 필요합니다