데이터 설계 가지고 놀기
Description: 데이터 설계를 경험을 통해 직간접적으로 배운 중요성과 방법을 소개하고 일반화합니다. 이를 통해 문제를 해결할 때 어떻게 설계하는 것이 좋은 설계일까에 대한 정보를 젝오합니다.
현재 노트: KR-410.10 b 데이터 설계 가지고 놀기
상위 분류: KR-410.10 개발자로서 한 번쯤 생각해볼 고민들
데이터 설계 가지고 놀기
프로그래밍에서 구현을 하다보면 자주 언급되는 공통 역량이 있다.
이름 짓기
데이터 설계
이 글에서는 데이터 설계
에 관련된 이야기를 다루며 내 경험 위주로 얻은 것을 적은 후, 일반화하는 것이 목적이다.
여기서 말하는 데이터 설계
란 단순히 배열, 해쉬맵 같은 자료구조를 선택하는 것이 아니라, 특정 문제를 해결하기 위해 데이터를 어떻게 구성하고 처리할지에 대한 구체적인 설계 과정을 의미합니다."
예를들어 우리가 순환근무자를 위한 근무표 생성 프로그램을 만든다고했을때, 실제 테이블 표 , 순환근무자의 정보등의 데이터를 처리할 때 어떤 구조, 어떤 키값을 가질까와 같은 의미이다.
구체적으로 실제 테이블 표에 대해
- 2차원 배열로 선언후 각 원소를 1주차로 할 것인가?
- 1차원 배열 형태로 1일부터 말일까지 할 것인가?
- 2차원 배열인데 각 원소를 매월로 할 것인가?
- 객체를 사용할 것인가?
데이터 설계
정하기가 중요한 이유
내가 개인적으로 느낀것은 데이터 설계
를 잘 선정하면 얻는 장점
- 모듈화 하기 쉽다. 입출력이 명확해져서 모듈을 만들때의 입, 출력을 쉽게 이해할 수 있다.
- 성능이 높아진다. 문자열대신 숫자라던가, 배열 대신 해쉬등과 같은 구조에따라 성능이 높아질 수 있다.
- 버그를 줄이기 쉽다. 어떤 구조인가에 따라 사용하는 메소드들이 달라질텐데, 이 메소드가 명확해져서 판단하기 쉽다.
- 유지보수가 편리해진다. 너무 복잡한
데이터 설계
를 한 경우 그 용도,의미,한계등을 파악하기가 쉽지 않습니다. 그래서 적절한 기능을 위한 적절한데이터 설계
는 추후 유지 보수에 도움이 됩니다.
이 외에도 여러 장점이 있지만, 대표적으로 위와 같은 장점들이 있다.
복잡한 편의점의 시스템을 구현하는 경험에서 느낀부분이었습니다.
편의점의 경우 생각보다 복잡한 시스템으로 재고를 처리하게 되는데
- 프로모션이라는재고가 있는 경우
- 있긴 있는데 2+1와 같은 행사가 가능한 경우
- 추가 구매시 서비스가 가능한경우
- 있긴 있는데 2+1와 같은 행사가 가능한 경우
- 프로모션 재고 없는경우
와 같은 복잡한 분기 처리가 필요하게 됩니다. 이 때 데이터 설계를 통해 이런 판단에 있어서 처음에는 고정된 데이터인Array<object>
과 같은 형식으로 각 재고데이터는 적절한 프로퍼티가 필요하니 객체이되, 이 객체들을 종합적으로 관리할 필요가있는 전체시스템은 iterable한 배열을 선언하였습니다.
하지만 이런 구조에서 특정 상황의 경우 분기처리시 어려운점이 있어서 spread를 활용하여{...stock , newKey: newValue}
와 같은 필요한 경우 특정 형태의 데이터를 구현하였습니다. 이 덕분에 해당 구조에서만 사용가능한 데이터라 기능이 끝나면 처리가 되면서 기존의 데이터를 건들일 필요가 없어졌습니다. 대표적으로idx
값을 추가한다거나
일반화하기
이런 경험을 통해 데이터 설계
하기에 있어서 필요한 경우 해당 기능 수행시에만 필요한 데이터를 설정하는 것도 문제를 해결하는 한 방법이구나 라고 배웠습니다