SchBoard 2 개발일지 - XIII

Sch·2022년 10월 20일

SchBoard 2

목록 보기
13/16

오늘 한 개발은 다음과 같다

  • make save function
  • update buttons in index.html
  • tabs packing
  • abstracted components packing
  • pack camera info
  • load implementation
  • remove unused console.log
  • reduce amount of package file
  • file loader added

전체적으로 저장과 불러오기 기능을 처음부터 다시 개발했다. 기존에 개발하던 저장/불러오기 기능은 너무 복잡하게 구현되었고 필요없는 메모리 사용이 많았다. 하지만 지금 개발한 것은 메모리 사용이 적고 구현이 간단하나, 실행 시에 시간이 오래 걸린다는 단점이 있다. 하지만 별로 개의치는 않는다.

일단 코드를 작성한 지가 오래 되었으므로 추상화 컴포넌트 저장 시에 어떤 일이 일어나는지 분석했다. 가장 중요한 것은 추상화 컴포넌트를 정말로 저장하는 부분으로, 컴포넌트를 추상화해서 그것을 저장하면 프로젝트 저장 시에 함께 정보를 저장해야 하기 때문에 분석이 필요했다.

추상화 컴포넌트를 저장하고 불러오는 과정에서 중요한 것은 컴포넌트의 구조와 컴포넌트 소켓들의 상태이다. 왜냐하면 추상화 컴포넌트를 다시 불러오는 과정에서 컴포넌트 자체와 컴포넌트 소켓 상태를 사용하여, 컴포넌트자체로는 구조를, 컴포넌트 자체와 소켓 상태로는 청사진을 만들어 작업 모드를 WM_CLONE으로 변경하는 방식으로 추상화 컴포넌트 불러오기를 진행하기 때문이다.

컴포넌트 자체는 저장하는 것이 불가능하기 때문에 모든 추상화 컴포넌트를 추상화 ID 순으로 선형화하고, 추상화 컴포넌트 하위 구조 목록은 비웠다.(이따가 얘기하겠지만, 저장되는 파일의 크기를 감소하게 하기 위함이다.) 또한 그와 동시에 컴포넌트 내의 시그널 정보를 함께 저장하여 R-S Latch와 같은 정보 기반 컴포넌트를 만들 때에도 펄스가 발생하지 않을 수 있도록 하였다.

가장 중요한 것은 컴포넌트 자체를 어떻게 추상화 컴포넌트 목록에서 가져오느냐 하는 것인데, 이것은 이미 HTML에 저장해놓은 버튼을 가상으로 눌러, 프로그램이 WM_CLONE 작업 모드로 들어갔을 때에 메모리에 발생하는 변경사항에서 정보를 취하고, 프로세싱이 모두 종료되었을 때에 다시 작업 모드를 직전의 작업모드로 돌려놓는 방식을 사용했다.

이 방식으로 하니 저장은 생각보다 간단했다. 저장되어있는 추상화 컴포넌트를 구조로 사용하여 컴포넌트를 조립하게 했고, 함께 저장한 시그널을 사용하도록 했다. 기존에 만들어져있는 struct() 함수의 기능을 충분히 활용하면 그렇게 어렵지 않게 이 기능을 구현할 수 있었다.

저장 파일

전작인 SchBoard 1의 가장 큰 단점 중 하나는 저장되는 파일의 길이가 기하급수적으로 커진다는 것이다. 컴퓨터를 만드는 데에 필요한 기본적인 구조들을 저장하기 위해서 약 1MB의 파일을 만들어야 하고, 파일의 크기가 기하급수적으로 늘어나기 때문에 컴퓨터를 실제로 만든다면 파일의 크기가 1GB를 넘어가는 것은 순식간일 것이다.

하지만 이번에는 구조와 추상화 컴포넌트 청사진(integrated_blueprint)이라는 컨셉을 도입하여 삭제할 수 있는 중복은 삭제하려고 노력했다. 그 노력의 일환으로, 추상화 컴포넌트를 저장할 때에는 무조건 컴포넌트 추상화 ID 순으로 저장하게 했으며, 추상화 컴포넌트의 하위 컴포넌트에 대한 정보를 저장하지 않도록 했다. 추상화 ID 순으로 컴포넌트를 저장하면 그 컴포넌트의 하위 추상화 컴포넌트는 무조건 추상화 ID가 낮은 컴포넌트 목록 속에 있을 것이기 때문에 굳이 그 컴포넌트의 선형화 속에 하위 컴포넌트에 대한 정보를 포함하지 않아도 되는 것이다.

또한 사용하는 true, false라는 단어들을 모두 0과 1로 대체하여 파일의 크기를 줄였다.

이를 통해서 원래는 XOR 게이트 하나에 9KB씩 필요할 파일을 2KB 정도로 표현할 수 있도록 했고, 파일 크기만 줄은 것이 아니라, 그 컴포넌트들을 사용해서 다른 추상화 컴포넌트를 제작할 때 파일의 크기가 지수적에서 선형적으로 늘어나게 디자인하였다.

하지만 그만큼 신경써야 하는 것도 늘어났다. 만약 추상화 컴포넌트 목록에 있지 않은 컴포넌트를 탭의 컴포넌트 목록에 만들어야 하면, 그 컴포넌트는 추상화 컴포넌트의 청사진으로 저장할 것이 아니라 컴포넌트 구조 자체로 저장해야 한다. 이미 그 기능을 의도하긴 했을 것이나, 확실하지 않으므로 이것을 확인해보아야 한다. 물론, 이외의 문제로 지목될 만한 것은 아직까지 발견되지 않았다.

다음 개발일

다음 개발일에는 오늘 만든 기능들에 문제는 없는지 구조적 점검을 진행하고, 한가지 구현되지 않은 기능인 컴포넌트 방향 패킹을 진행해야 하겠다.

profile
https://me.shtelo.org/

0개의 댓글