Dev Log/Dynamic Graph Monitor

0. 동적 그래프 모니터를 만들어보자

Dev. 아리안 2024. 6. 28. 15:40

 

 

동적 그래프 모니터가 무엇인가?

사실 이미 있는 말인지 아닌지도 모르지만 필자가 시작한 프로젝트에 붙인 이름이다.

그래서 저게 뭔지는 이따 설명하겠다.


1. 개발 동기와 처한 상황

나는 프로젝트든 개인 창작물이든 어떠한 것을 창조해낼 때, 이게 무엇인가보다 "왜 이걸 만들게 됐느냐"가 중요하다 생각한다. 그것이 단순한 test, project1 따위가 아닌 하나의 완성된 작품을 만들고자 할 땐, 그러한 동기는 더욱 명확해져야한다.

 

그렇기에 내가 현재 처한 상황을 설명해보자면,

현재 대학교 3학년 여름방학 중이고, 다음학기인 2학기에 내가 속해있는 개발 동아리에서 알고리즘 스터디(이하 알고스)를 열어 다른 동아리원들을 상대로 알고리즘 강의를 할 생각이다.

 

사실, 작년 2학기에 이미 해봤고, 자료도 이미 다 만들어놨다.

그럼 이렇게 생각할 수 있다.

"아니 이미 자료도 다 있으면 그냥 그거 갖다 쓰면 되는거 아니야?"

맞는 말이지만, 약간의 애로사항이 있다.

 

과거 알고스에선 내가 좋아하는 그래프를 위주로 가르쳤는데, 그럴때마다 노드가 엣지를 타고 어떻게 데이터가 이동하는지를 픽.셀.그.림.움.짤.로 그려서 보여줬다...

매주 자료를 만들 때마다 너무 힘들었다...

 

백트레킹을 표현한 광기의 81프레임과 데이크스트라...

노드 개수가 하나만 늘어나도 그려야할 프레임이 미친듯이 늘어나다보니 많은 데이터로 이해하기 쉽게 보여주는 것이 불가능했다.

 

그 렇 기 에

 

입력 조건에 따라 알아서 노드, 간선을 생성하고 그래프가 어떻게 변화하는지 애니메이션으로 직관적으로 보여줄 수 있는 프로그램을 개발해야갰다 생각했고, 그렇게 탄생한 프로젝트가 바로 이 Dynamic Graph Monitor(동적 그래프 모니터)이다.

 

사실 이미 있는지 없는지 찾아볼 생각도 안했지만, 사실 "내가 나 필요한거 만들라고 있는 직업이 개발자 아니겠냐?"란 마인드로 직접 만들기로 했다.


2. 개발 환경

본격적으로 개발을 시작하기 전, 어떤 툴을 사용하는지 또한 중요하다.

내게 필요한 조건들을 생각해보자

 

1. 노드, 엣지, 자료구조 등 여러 객체를 직접 정의할 수 있어야 한다.

2. 화면을 띄워 동적으로 움직일 수 있어야 한다.

3. 컴퓨터 사양을 많이 먹지 않고, 실행이 쉬워야 한다.

 

어...? 유니티다.

코딩되고, 화면에 띄워서 쉽게 조작 가능하고, 가볍다.

 

유니티 결정 땅땅땅


3. 목표 설계와 아이디어 구상

구체적인 아이디어(요구 명세사항)는 개발 목표를 뚜렷하게 해주고 개발을 쉽게 해준다.

 

이 프로젝트의 최종 목표는 제처두고 지금 당장의 1차 목표는 알고스에서 써먹을 수 있을 정도로만 만들 생각이다.

 

유저 시나리오 느낌으로 설명하자면

1. 오늘 스택에 대해 가르친다면, Main에서 Stack을 입력한다.

2. 내가 미리 작성한 대로 움직이는 Stack의 작동방식이 애니메이팅된다.

 

그렇기에 현재로선 태생적으로 내가 직접 자료구조를 설계하고 정해진대로밖에 움직이지 않지만(전혀 Dynamic하지 않은데요??), 미래엔 이 프로젝트를 더 확장시켜 내가 알고리즘 문제를 풀 때 동적으로 그래프, 자료구조, 메모리의 변화가 보이도록 만들 생각이다. 일종의 비주얼 컴파일러라 생각하면 편할 것이다. 얘는 좀 Dynamic 하죠?


4. 개발 일정

일단은 다음학기가 시작하기 전 알고스를 위한 자료는 다 만들 생각이다. 가르칠 내용을 이 글에 적진 않겠지만, 아마 자료구조 객체와, 그래프 객체를 일반화하여 완벽하게 구현하는 것이 가장 중요한 핵심이 될 것이고, 일반화만 제대로 한다면 무슨 알고리즘을 가르치든 금방금방 개발할 수 있을 것이다. (개발만 끝나면 그래프 디자인을 하는 걸테니..)

 

학기 시작이 9월 2일이니 오늘(06-28) 기준으로 두달정도 남았다.

약간의 문제라면, 학교에서 진행하는 부트캠프에 참여하고 있어서 방학 내내 학교에서 프로젝트를 진행해야한다는 점이다...

그렇기에 해당 프로젝트에 온신경을 집중하진 못하겠지만, 그래도 나름대로 스케쥴을 잡아놔야 책임감을 갖고 개발할 것이 뻔하기에 일정을 정하려 한다.

 

사실 이미 정했다!

 

~ 06/30: 자료구조(스택, 큐, 우선순위 큐)등 자료의 이동을 구현

~ 06/31: 자료구조 디자인

~ 07/07: 그래프의 노드를 탐색하는 과정 구현

~ 08/31: 다양한 그래프 알고리즘들의 실행과정 디자인

 

기간만 보면 설렁설렁하다만 부트캠프도 있고, 가르칠 알고리즘도 많다보니, 구현이 끝나더라도 디자인하는데에 시간이 오래 걸릴 것이다.


5. 마무리하며

사실 최종 목표가 언젠간 구현될진 모르겠다만, 일단 1차 목표를 향해 열심히 개발해보려 한다.