광고 매크로 없는 청정한 블로그를 위해 노력중입니다. 근데 나만 노력하는 것 같음… ㅡㅡ
반응형

Schema라고 쓰고 스키마라고 읽는데, '계획', '도식', 또는 '구조'라고 한다. 근데 여기 카테고리가 뭐예요? 그죠 코딩 관련이야... 우리가 뭐 인지공학에서 뭐라고 쓰는지 찾다가 들어오는거 아니잖어요? 다들 SQL 하다가 오셨잖아요? 혹시 전자인 분들은 뒤로가기를 눌러주시고... 

 

데이터베이스에서 스키마는 자료의 구조, 자료의 표현 방법, 자료 간의 관계를 형식 언어로 정의한 구조를 의미한다. 이렇게 얘기하면 뭔 소린지 확 와닿지 않는 분도 계시겠지만… 일단 나부터. 근데 우리 테이블 만들 때 보면 얘는 PK고 VARCHAR(n)고 뭐 이런거 정하죠? 그리고 뭐 체크해서 값 받고 그런거 있잖음. 그게 스키마다. 이 테이블에서는 이 칼럼이 PK고 문자형(VARCHAR)이다, 숫자형(NUMBER)이다 이런 거 말이다.


사용자 관점에 따른 분류

혹시 웹소설 읽는 분? 나는 취미로 글을 쓰지만 웹소설을 읽지는 않는다. 예전에 도서관에서 트리니티 블러드는 빌려다가 읽었었는데 아… 작가님이 중간에 작고하셨어…… 그 트리니티 블러드는 다른것보다도 등장인물 그림을 보면 와 저거 코스프레 준비하는데 진짜 빡시것다 싶더라… 옷 디테일이 어유… 저기요 우리 스키마 얘기 하고 있는데요! 그래요, 스키마 얘기로 돌아가봅시다.

 

스키마는 사용자 관점에 따라 외부 스키마, 개념 스키마, 내부 스키마 3가지로 분리한다. 그리고 스키마간에 독립성 관련해서도 외워야 한다. 아 걍 외우지마 이해해. 이해하면 안 외워도 되잖아. 그게 쉽냐 

 

외부 스키마

소설을 읽을 때는 책으로 읽기도 하고, 요즘은 이북(전자책)도 있고, 웹소설 플랫폼도 여러가지가 있다. 사실 플랫폼에서 소설을 어떤 식으로 보여주는지는 모르겠지만, 뭐 글자 크기라던가 내용이라던가 자간, 행간, 하다못해 스크롤 할 때 어떻게 보여줄지 이런 것들이 플바플이라 이거죠.

 

저희 스키마 얘기 하고 있는데 왜 갑자기 소설 얘기가 나와요? 응용 프로그램이나 사용자 관점에서 데이터를 표현한 것이 외부 스키마인데, 이걸 소설로 비유하자면 사용자에게 보여주기 위해 행간, 자간, UI 디자인, 그리고 소설 제목과 내용의 배치를 정하는 뭐 그런거다.

 

여러분 대학원생도 학사정보 있는거 아십니까? 학사정보가 학부 따로 대학원 따로 있고 학번도 학부 따로 대학원 따로 있습니다. 그러면 학사정보에 학부생이 로그인했을때랑 대학원생이 로그인했을 때 공통으로 보여주는 정보도 있지만 학부 따로 대학원 따로 보여주는 데이터도 있을 거 아뉴. 이럴 때 학부생은 이걸, 대학원생은 이걸 보여주자는 게 외부 스키마라고 이해하시면 된다.

 

개념 스키마

외부 스키마에서 표현된 모든 데이터를 통합하여 설계한 데이터의 논리적 구조이다. 그러니까 전체 학사정보에 기록되는 DB 말이다. 막말로 나도 학부 학번 대학원 학번 따로 있지만 공통된 정보가 있을거고, 학번이나 대학원 칼럼에 제약사항도 있을 거 아님.

 

소설에 등장하는 주요 등장인물 중에는 설정이 있다. 뭐 얘는 주인공이랑 라이벌이고, 얘는 나중에 타락하고, 얘는 주인공의 스승이고, 얘는 부모님의 원수고, 얘는 오른손에 흑염룡이 잠들어있고 뭐 그런 것 말이다. 이것도 어떻게 보면 소설에 등장하는 등장인물들이 어떤 사람인지를 정하는거라 개념 스키마에 해당한다. 등장인물들도 주요 등장인물이라고 모든 회차에 다 등장하는 거 아니고 리타이어해서 안나오거나 할 수 있다.

 

내부 스키마

내부 스키마는 개념 스키마를 물리적으로 저장하는 구조. 데이터가 실제로 저장되는 방식과 최적화된 데이터베이스 구조를 포함한다. 그러니까 학사정보가 실제로 저장되는 물리적인 저장장치(하드디스크 뭐 이런)를 말하는거다. 뭐 하드디스크에도 섹터가 있으니까 알아서 섹터에 짱박아두겠지...

 

예전에 인공지능쪽 일을 할 때 백엔드 하시는 분이 'SMILES 중에 제일 긴 게 몇 글자인지'를 물어본 적 있었다. 그때는 이걸 왜 묻는겨? 걍 text 하면 안되나? 했는데, 이게 생각해보니까 VARCHAR로 해도 데이터베이스에 저장되는 SMILES만큼 메모리를 차지하는거야… 그리고 SMILES 중에 제일 긴 게 몇 글자인지를 알아야 거기에 맞게 DB 스키마를 짤 거 아뉴.

 

뭐 다른 작가분들도 짜실 지는 모르겠는데, 나는 글을 쓰기 전에 플롯을 짠다. 이게 뭐냐면 사건이 어떻게 전개되고, 거기서 어떤 식으로 등장인물이 등장하는지, 이 사건이 터져서 어떻게 되는지 뭐 이런 걸 정리하는거다. 원래 노션으로 하다가 Craft로 갈아탔는데(노션이 모바일에서 쓰기 진짜 그지같음), 소설 플롯에서는 등장인물을 사건에 따라 배치하고 내부 스키마에서는 데이터베이스가 저장장치 안에 배치(=저장)된다 생각하시면 된다. 참고로 이 비유 제미나이가 개찰떡이라고 칭찬해줌.

 

스키마와 독립성

두개니까 외우십셔.

 

1. 논리적 독립성: 외부 스키마와 개념 스키마간의 독립성. 개념스키마가 변경되어도 외부 스키마에는 영향을 주지 않는다. 근데 소설은 등장인물 설정 바뀌면 전개 망하지 않나… 뭐 개연성 잘 짜면 되긴 하겠지만.

2. 물리적 독립성: 내부 스키마가 변경되어도 개념 스키마는 영향을 받지 않는다. 원래 이 사건에 등장할 예정이었던 등장인물이 좀 뒤에 등장한다고 설정이 바뀌지는 않는다. 뭐 똥 싸다가 늦었나보지... 아니 애초에 플롯이라는 게 글로 옮기다보면 좀 바뀌고 그럼.

 

반응형

'Coding > 코딩잡담' 카테고리의 다른 글

안티그래비티를 써보았다.  (0) 2025.12.19
CONNECT BY와 계층형 질의  (0) 2025.11.14
Select문에도 순서가 있다  (0) 2025.11.13
식별자  (0) 2025.11.13
롤업, 큐브, 그리고 그루핑 셋  (0) 2025.11.13