SQLD 시험 접수하고 돌아왔습니다! 그동안 MySQL공부를 좀 했는데 이게 SQLD에 도움이 되면 좋겠어요~
1. 모델링이란?
이케아에서 조립가구를 샀을 때도 설명서를 보고 구성품이 뭐가 있나~ 어떤 부품과 연결되나~
건물을 세울 때도 설계도를 보고 자재를 들여오고 각 부품끼리 맞춰서 뚝딱 지어내잖아요?
그거랑 같은 거예요!
그 설명서의 그림처럼, 건물의 설계도처럼 모델을 만드는 게 바로 모델링이에요.
다만 데이터 모델링은 조립가구나 건물처럼 현실에 있는 것이 아니기 때문에
현실세계에 있는 것을 어떠한 표기법과 같은 규칙을 가지고 추상화, 단순화, 명확화해서 모델로 만들어야 해요!
1) 추상화
: 현실세계의 것을 다같이 약속한 형식에 맞추어서 표현하는 걸 추상화라고 해요. 다른 말로는 모형화한다고 하죠!
2) 단순화
: 현실세계의 것을 있는 그대로 다 표현하게 되면 모델링은 굉장히 복잡해질 거예요. 그렇게 되면 우리가 함께 약속한 표기법이 의미가 없겠죠? 그래서 누구나 쉽게 이해할 수 있도록 단순화해서 표현한답니다.
3) 명확화
: 모델링을 보는데 그린 사람 외에는 어떤 의도인지 알 수 없다면 의사소통에 문제가 발생하고 말 거예요. 그래서 누구나 보고 단번에 알 수 있도록 애매모호함을 제거하고 정확하게 기술해야 한답니다.
2. 모델링의 3가지 관점
바로 위에서 모델링은 다같이 약속한 형식에 맞게 표현한 거라고 했는데 그 약속도 크게 3가지로 볼 수 있어요
* 모델링=데이터관점+프로세스관점+상관관점
1) 데이터 관점(What, Data)
: 업무가 어떤 데이터와 관련이 있는지, 데이터 사이의 관계는 어떤지에 대해 모델링하는 것!
2) 프로세스 관점(How, Process)
: 그럼 실제로 우리가 하고 있는 업무는 무엇인지, 또 무엇을 해야 하는지에 대해 모델링하는 것!
3) 데이터와 프로세스의 상관관점
: 업무에서 처리하는 일이 있을 거에요. 그 일에도 다양한 방법들이 존재하겠죠? 일하는 방법에 따라서 데이터는 어떻게 영향을 받고 있는지를 모델링하는 것!
#한 번 정리하고 가볼까요?
데이터 모델링은 정보시스템을 구축하기 위해서 특정 업무에 어떤 데이터가 존재하고 또 해당 업무에서 필요로 하는 정보는 무엇인지를 분석하는 거예요.
그리고 업무에 대한 이해를 바탕으로 데이터에 존재하는 Business Rule에 대해 True/False를 판별할 수 있는 사실을! 데이터에 접근하는 방법, 사람, 전산화와는 독립적인 관점에서 명확하게 표현하는 추상기법이라고 정리할 수 있겠네요.
*그럼 데이터 모델링이 중요한 이유는 뭘까요?
1) 방금 정리한 것처럼 모델링을 하게 되면 업무를 구성하는 기초를 마련할 수 있게 돼요! 이걸 심지어 명확하고 정확하게 분석할 수 있게 해주죠~
2) 그렇게 분석한 모델을 가지고 우리는 실제로 데이터베이스를 생성할 수 있어요. 그 데이터베이스는 개발 및 데이터관리에 사용할 수 있게 되겠죠!
=> 결국 데이터 모델링은 개발만을 위해서가 아니라, 업무 자체를 분석하는 데에서도 중요하다는 걸 알 수 있었어요.
+ 데이터 모델이 제공하는 기능
1) 가시화 : 데이터 모델로 결국 우리는 시스템을 다루게 될 거예요. 그 시스템의 현 상태나 원하는 모습을 눈에 보이도록 해줘요.
2) 명세화 : 시스템의 구조가 어떻게 되는지, 어떻게 굴러가는지를 명세화해줘요.
3) 구조화 : 시스템을 구축할 때 어떤 식으로 구축할지를 명확하고 세밀하게 볼 수 있도록 구조화된 틀을 제공해요.
4) 문서화 : 시스템을 구축하는 과정에서 여러가지 결정들이 따를 수 밖에 없을 거예요. 그것들을 문서화할 수 있게 해줘요.
5) 다양한 관점 제공 : 세부 사항보다는 다양한 영역에 집중할 수 있도록 다양한 관점을 제공해요.
6) 표현방법 제공 : 특정 목표에 따라 구체화되는 것들이 다를 거예요. 그런 구체화되는 것의 상세한 표현방법들을 제공해요.
3. 중요성/유의성
1) 파급효과
말 그대로예요! 쉽게 말하자면, 첫 단계를 잘못 건드리면 그 파급이 전체 시스템 구축까지도 간다는 말이죠.
모델링을 제대로 하지 않으면 이후에 시스템 구축이 되고 테스트를 수행했을 때, 잘못된 것을 발견해서 데이터 모델을 변경해야 할 수도 있어요. 변경하기 위해서는 데이터 구조를 변경해야 하고 그에 따른 많은 영향 분석이 발생하게 되죠.
이렇게 고작 하나의 데이터 구조를 변경할 뿐인데, 고작이 아니게 될 수 있다는 말이에요.
이건 곧 전체 시스템 구축에 큰 위험요소가 될 수 밖에 없죠.
이전에 '프로젝트 관리'를 수강할 때, 위험관리파트에서 배웠던 건데, 위험요소는 발견하고 회피하거나 직시하거나 책임을 전가하는 등의 방법으로 예방할 수 있거든요. 그것처럼 예상되는 위험이 있는데 그냥 두고 갈 순 없겠죠? 미리 위험을 회피해 위험에 사용되는 비용을 절감하기 위해서라도 첫 단추인 데이터 설계에 힘을 쏟아야 해요.
그래서 중요한 거랍니다~
2) 복잡한 정보 요구사항의 간결한 표현
이거 위에서도 계속 강조한 거예요! 데이터 모델링은 이 사항을 이렇게 표기하자~하고 약속한 거기 때문에 그에 맞게 정확하게 표현할 수 있어요! 이건 아주 큰 장점이에요. 요구사항 등에 대해 누구보다 정확하게 전달할 수 있다는 거라 의사소통에 아주 큰 기여를 하니까요!
데이터 모델은 그런 점에서 아주 중요해요. 구축하고 싶은 시스템의 정보 요구사항과 한계를 아주 명확하고 또 간결하게 표현할 수 있는 좋은 도구니까요.
그렇게 되면 기능적인 요구사항도 명확하게 표현하고 이해할 수 있게 되고, 개발자들도 설계자의 의도를 정확하게 알 수 있어서 데이터 정합성을 유지할 수 있게 돼요.
3) 데이터 품질
데이터는 오랜기간 해당 기업에 축적되어온 아주 중요한 자산이죠. 이게 있어야 과거/현재/미래의 기업을 파악할 수 있기도 하고 발전을 도모할 수도 있어요. 이는 경영에서 가장 중요한 기업 가치를 향상시키는 데에도 기여할 수 밖에 없기 때문에 그런 데이터의 품질을 고려하는 건 정말 중요한 일이에요.
그런 중요한 데이터가 만약 품질이 떨어지는 데이터라면...? 그냥 수정하면 되지라고 생각할 수 있겠지만 그렇게 단순한 일이 아니에요.
데이터 구조가 설계되고 초기에 데이터를 조금씩 쌓을 때는 인지하기 힘든 문제이기 때문에 시간이 지나 이미 많은 데이터들이 축적되었기 때문이에요.
그제서야 발견하게 되는 중요한 이유 중 하나는 데이터 구조예요. 중복이나 비유연성, 비일관성 등의 문제를 달고 나타나거든요. 이건 구조의 문제에서 나온 품질의 문제이기 때문에 해결하기 불가능한 경우가 대부분이에요.
*중복: 데이터 모델은 같은 데이터를 사용하는 사람, 시간, 장소를 파악하는 데 도움을 줘요. 다양한 지식을 활용하기 때문에 여러 장소에 같은 정보를 잘못 저장하게 되면 문제가 발생해요.
*비유연성: 계속해서 강조되는 것처럼 데이터 설계가 잘못됐다면, 유지/보수하는 시간과 비용이 많이 들어 어려움을 겪을 수 밖에 없어요. 데이터/프로세스의 작은 변화가 데이터베이스에 변화를 일으키지 않도록 데이터의 정의를 데이터 사용 프로세스와 분리해야 해요.
*비일관성: 데이터 중복이 없어도 비일관성 문제는 발생할 수 있어요! 현 상태에 대해 업데이트 하지 않고 연결된 다른 상태만 업데이트 한다거나 하는 경우에 일어날 수 있는 문제예요. 개발자가 다른 데이터와 모순된다는 고려를 하지 않고 일부의 데이터만 수정하게 된다면 충분히 발생할 수 있는 문제죠. 그렇다고 이걸 개발자 탓을 할 수는 없겠죠. 그들은 요구사항에 맞게 구축했을 뿐인걸요~ 그래서 데이터 모델링을 할 때, 이 데이터와 저 데이터는 서로 연관이 있어요~하고 명확하게 정의해야 한답니다.
'SQL' 카테고리의 다른 글
SQLD 3 (0) | 2023.08.31 |
---|---|
SQLD 2 (0) | 2023.08.27 |
SQL_05 하룻데엔새싹 범 무서운 줄 모른다.(1편) (3) | 2023.06.04 |
SQL_04 (0) | 2023.05.20 |
SQL_03 (0) | 2023.05.17 |