본문 바로가기

TIL

[231227] SQLD: 데이터 모델링, 정규화, 데이터베이스 성능

* 수강 강의명: SQLD 자격증 대비반 - 3~6주차 

 [요약] 

1. 데이터 모델링의 4요소

1)  엔터티 (Entity)

 - 개념: 엔터티는 '개체(독립체)'라고 표현하며, 관련 있는 속성들이 모여 의미 있는 하나의 정보 단위를 이룬 것을 의미. 쉽게 말해 업무에서 쓰이는 데이터들을 분류한 그룹

 

- 엔터티와 인스턴스: 엔터티는 속성과 인스턴스의 집합

 - 엔터티의 6가지 특징

업무에서 필요로 하는 정보: 특정 업무에 필요한 정보여야 함

식별 가능 여부: 업무적으로 의미를 갖는 인스턴스가 식별자에 의해 한 개씩만 존재해야 함 
인스턴스의 집합: 기본적으로 2개 인스턴스로 구성되어 있어야 함(1개만 있으면 엔터티는 집합이 아님)
업무 프로세스에 의해 활용되어야 함
속성을 포함해야 함: 엔터티를 설명하는 속성이 있어야 함. 주식별자만 존재하고 일반 속성이 없으면 엔터티가 아님
관계의 존재: 다른 엔터티와의 연관성이 있어야 함 

 

 - 엔터티의 분류 

유/무형에 따라 발생 시점에 따라
구분 설명 예시 설명 예시
유형 엔터티 물리적인 형태가 존재하며 안정적이고 지속적 상품, 강사 기본/키 엔터티
(Basic Entity)
고유한 주식별자를 갖는 독립적인 엔터티 고객, 상품
개념 엔터티 관리해야 할 개념적인 정보로 구분됨 코스닥 종목 중심 엔터티
(Main Entity
기본 엔터티로부터 발생하며, 다른 엔터티와 관계를 통해 많은 행위 엔터티를 생성함 주문, 취소
사건 엔터티 특정한 이벤트로 종속되거나 발생됨 이벤트응모, 주문 행위 엔터티
(Activie Entity)
두 개 이상의 기본 엔터티로부터 발생하며 내용이 자주 바뀌고 양이 많음 주문내역

- 엔터티의 이름짓기 방식  

① 가능하면 업무에서 사용하는 용어 사용
② (웬만하면) 축약어(shortcut) 미사용

③ 단수 명사 사용 및 띄어쓰기 미사용

④ 모든 엔터티에서 유일한 이름 부여 (중복X) 
⑤ 엔터티 생성 의미대로 이름을 부여

 

2) 속성 (Attribute)

 - 개념: 속성은 인스턴스가 가진 어떠한 성질(성격). 업무에서 필요로 하는 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위

 

- 엔터티/인스턴스/속성/속성값의 관계
한 개의 엔터티는 두 개 이상의 인스턴스의 집합
한 개의 엔터티는 두 개 이상의 속성으로 구성
한 개의 속성은 한 개의 속성값을 가짐

 

- 속성 표기법

 

 

 - 속성의 5가지 특징

업무에서 필요로 하는 정보: 해당 업무에서 관리하고자 하는 정보여야 함

독립성:  의미상 더 이상 분리되지 않는 그 자체로 독립성 지님(가장 작은 단위) 
ㆍ인스턴트의 구성요소가 되며, 엔터티를 설명함
ㆍ정규화 이론에 기반을 두고 주식별자에 함수적 종속성*을 가짐
ㆍ하나의 속성은 한 개의 값만 가짐: 여러 개의 값이 있는 다중 값의 형태는 별도의 엔터티로 분류하여 관리

* 함수적 종속성 (Functional Dependency) : X → Y (X: 결정자, Y: 종속자) 
X의 값을 알면 Y의 값을 바로 알 수 있고 X 값에 의해 Y 값이 달라질 때, 이를 Y는 X에 함수적 종속이라고 함

 

- 속성의 분류 

특징에 따른 분류 엔터티 구성 방식에 따른 분류
구분 설명 구분 설명
기본 속성
(Basic Attribute)
업무로부터 추출된 모든 속성.
속성 중에 가장 많음
PK(Primary Key) 속성 엔터티를 식별할 수 있는 속성
설계 속성
(Designed Attribute)
데이터 모델링, 업무 규칙화 등을 위해 새로 만들거나 변형하여 정의하는 속성 FK(Foreign Key) 속성 다른 엔터티와의 관계에 포함된 속성
파생 속성
(Derived Attribute)
다른 속성에 영향을 받아 발생하는 속성. 보통 계산된 형태의 값 일반 속성 PK, FK에 포함되지 않는 속성

 - 도메인
└ 각 속성이 가질 수 있는 값의 범위를 의미 (범주)

엔터티 내에서 속성에 대한 데이터 타입과 크기, 제약 사항 등을 지정


- 속성의  이름짓기 방식  

① 가능하면 업무에서 사용하는 용어 사용
② (웬만하면) 축약어(shortcut) 미사용

③ 서술형보다는 명사형을 사용

④ 수식어 없이 명확하게 의미를 파악하도록 작성 
⑤ 전체 데이터 모델에서 유일한 이름으로 작성

 

3) 관계 (Relationship)

- 개념: 엔터티와 인스턴스 사이가 논리적으로 혹은 존재의 형태 행위로 서로에게 연관성이 부여된 상태

 

- 관계 페어링(Relationship Paring)

: 엔터티 안에 인스턴스가 개별적으로 연결되어 있는데, 이 관계를 '페어링'이라고 부름

 

- 관계의 분류 

└ 종류 (목적에 따라)

① 존재에 의한 관계: 소속/포함의 형태 (ex. 부서-사원)
② 행위에 의한 관계: 행동/행위의 결과 (ex. 고객-주문)

 

└ 통합 모델링 언어(UML, Unified Modeling Language)

 

UML는 소프트웨어 공학에서 사용되는 표준화된 범용 모델링 언어로 여러 종류의 UML 다이어그램을 통해 시각화된 형태의 모델링 된 결과를 살펴볼 수 있음 

 

[!] UML 클래스 다이어그램과 ERD(Entity Relationship Diagram) 의 차이점은?

UML 클래스 다이어그램은 클래스 간 연관관계(Association)과 의존관계(Dependency)를 명확히 표현함. 반면 ERD는 존재적 관계와 행위에 의한 관계를 구분하지 않음. 

 

- 관계의 표기법

관계명 (Membership)

: 엔터티가 관계에 참여하는 형태를 지칭하며, 각 관계명에 따라 두 개의 관계명을 가짐. (ex. 포함한다, 소속된다)

 

관계 표기법 

└ 개수및 식별/비식별 

 

└  관계선택사양(Optionality)

① 필수 관계(Mandatory Membership): 상대 엔터티에 대해 조건을 만족하는 엔터티가 반드시 존재할 경우 표시

② 참여 관계(Optional Membership): 상대 엔터티에 대해 조건을 만족하는 엔터티가 존재할 수도, 아닐 수도 있는 경우 표시

  

관계차수 (Degree / Cardinality) ★

└  두 개의 엔터티 간의 관계에서 참여자의 수를 표현하는 것

①  1:1 (ONE TO ONE) 관계 표시
: A Entity에 존재하는 데이터 1개와 관계되는 B Entity에 존재하는 데이터의 개수도 1개인 경우를 1:1 관계라고 함

: ex. 웹서비스 유저와 프로필 관계: 각 1개 데이터만 매칭

 

②  1:M (ONE TO MANY), 1:N 관계 표시
: A Entity에 존재하는 데이터 1개와 관계되는 B Entity에 존재하는 데이터의 개수가 여러 개인  경우(한 방향만 해당)

: ex. 웹서비스에 댓글과 게시글: 하나의 게시글에 댓글은 있거나 없어도 되지만 반드시 게시글에 있어야 함 

 관계를 1:N 관계라고 합니다.

③.M:M(MANY TO MANY), M:N 관계 표시  
 : A Entity에 존재하는 데이터 1개와 관계되는 B Entity에 존재하는 데이터의 개수가 여러 개고, 반대의 경우도 동일한 경우

: ex. 웹서비스 좋아요 기능에서 유저와 게시글: 하나의 게시글에 여러 유저가 좋아요, 유저는 여러 게시글에 좋아요 가능 

 

관계 정의 시 체크 사항

 └ 두 엔터티 사이에는 관심 있는 연관 규칙이 존재하는지 여부

 └  두 개의 엔터티 사이에 정보의 조합이 발생하는지 여부

 └  업무 기술서, 장표에 관계 연결에 대한 규칙이 있는지 여부

 └  업무 기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 있는지 여부

 

관계 읽기 

 └ 기준(Source) 엔터티는 한 개(One) 혹은 각(Each)으로 읽음
 └ 대상(Target) 엔터티의 관계 참여도 개수(하나, 하나 이상)로 읽음 
 └ 관계 선택 사양에 따라 관계 이름을 읽음  

(연습) 

 

 

4) 식별자 (Identifier)

- 개념: 엔터티의 인스턴스를 구분 가능하게 만들어주는 대표 속성. 하나의 엔터티엔 반드시 하나의 유일한 식별자가 존재

- 특징: 유일성, 최소성(유일성을 만족하는 최소의 수), 불변성, 존재성(NULL 허용X)

- 분류

대표성 여부 스스로 생성 여부 단일속성 여부 대체 여부
주 식별자 보조 식별자 내부 식별자 외부 식별자 단일 식별자 복합 식별자 본질 식별자 인조 식별자
- 인스턴트 구분 가능
- 다른 엔터티와 참조관계 연결 가능
- 인스턴트 구분 가능
- 다른 엔터티와 참조관계 연결 불가 
- 엔터티 내부정의 - 다른 엔터티에서 받아오는 식별자 - 하나의 속성으로 구성 - 둘 이상의 속성으로 구성 - 업무에 의해 생성 - 인위적으로 생성

* 어커런스(Occurence)란?
인스턴스(Instance)와 같은 의미. 데이터베이스에 구체적이고 실제적인 정보를 담고 있는 실제 데이터

 

- 표기법 

 

 - 도출 기준 

업무에서 자주 사용하는 속성으로 설정

ㆍ명칭, 내역 등 특정 고유명사는 주식별자로 사용하지 않음 

주식별자에 너무 많은 속성이 포함되지 않도록 함

 

- 식별자 관계와 비식별자 관계

결정요인: 외부 식별자(Foreign Identifier) - 자기 엔터티에 필요한 속성이 아니라 다른 엔터티와 관계를 통해 생성되는 속성

└ 식별자 관계: 자식 엔터티가 부모 엔터티의 주식별자를 본인의 주식별자로 사용하는 경우 (빈 값이 없어야 함)

└ 비식별자 관계: 자식 엔터티가 부모 엔터티의 주식별자를 일반 속성으로만 사용하는 경우 

 * 식별자 관계로만 설정할 경우 데이터 모델 복잡성이 증가되어 오류 발생 가능성이 커짐

분류 식별자 관계 비식별자 관
목적 강한 연결관계의 표현 한 연결관계의 표현
자식 주식별자 영향 자식 엔터티의 주식별자의 구성에 포함 자식 엔터티의 일반 속성에 포함
표기법 실선(IE) / 버티컬바(Barker) 점선(IE)
고려사항 - 반드시 부모 엔터티에 종속
- 자식 주식별자 구성에 부모 엔터티의 주식별자 속성이 필요한 경우에 사용
- 상속 받은 주식별자 속성을 타 엔터티에 이전 필요
- 약한 종속 관계
- 자식 주식별자 구성을 독립적으로 구성할 경우 사용
- 자식 주식별자 구성에 부모 주식별자 부분 필요
- 상속 받은 주식별자 속성을 다른 엔터티에 차단 필요 - 부모 쪽의 관계 참여가 선택 관계

 

 프로세스
 
 
 
 
2. 정규화
1) 성능 데이터 모델링
- 개념: 데이터베이스 성능 향상을 목적으로 데이터 모델링 때부터 정규화, 반정규화, 테이블 통합, 데이터 분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
 
- 수행 시점: 데이터 베이스가 만들어지기 전, 분석 및 설계 단계. 
 
- 고려사항
① 정규화를 정확하게 수행 : 데이터 분산으로 성능이 향상되고 중복데이터 적재를 막을 수 있음
② 데이터베이스 용량 산정 수행: 어떤 테이블(엔터티)에 데이터 집중되는지 파악 가능
③ 데이터베이스에서 발생되는 트랜잭션의 유형 파악: CRUD 매트릭스 혹은 시퀀스 다이어그램 검토
④ 데이터베이스 용량과 트랜잭션 유형에 따라 반정규화 수행
⑤ 이력 모델, PK / FK,  슈퍼 타입 / 서브 타입의 조정: 성능 우수 순으로 칼럼 순서 조정
⑥ 성능 관점에서 데이터 모델 검증
 
- 정규화를 통한 성능 향상 전략
: 정규화(Normalization)는 데이터의 일관성 및 유연성을 유지하고 데이터의 중복을 방지하기 위해 데이터를 분해하는 과정 (테이블을 쪼개는 것).
: 데이터 중복성 제거로 성능 향상에 도움을 주나 처리 방식에 따라 정규화로 성능이 오히려 저하되기도 함. 

 

- 정규화의 이점

ㆍ데이터의 유연성: 종속성이 강한 데이터를 분리하여 독립된 개념으로 정의하기 때문에 높은 응집도*와 낮은 결합도* 원칙에 충실

ㆍ데이터의 재활용성: 데이터 개념 세분화의 결과로 개념에 대한 재활용 가능성 증가

데이터의 중복 최소화: 식별자가 아닌 속성이 한 번만 포함되기 때문에 데이터 중복 최소화

   * 응집도: 요소들이 서로 관련되어 있는 정도 (높을수록 품질이 좋음)
   * 결합도: 요소들 간의 상호 의존하는 정도 (높으면 시스템 구현 및 유지보수가 어려움)

- 기본 용어

용어 설명
정규화(Normalization) DBMS 테이블 삽입, 삭제, 수정 과정에서
이상(Anomaly) 현상의 발생을 최소화하기 위해 작은 단위로 테이블을 나눠가는 과정
정규형 (NF: Normal Form) 정규화된 결과물
함수적 종속성
(FD: Functional Dependency)
칼럼 값(A)을 알 경우 다른 칼럼 값(B)도 알 수 있다면
칼럼 B는 칼럼 A에 함수 종속성을 갖는다고 표현
결정자(Determinant) 함수적 종속성에서 특정 속성을 결정짓는 요소 (ex. 학번은 학생 이름을 결정)
종속자(Dependent) 함수적 종속성에서 결정자에 종속되는 값 (ex. 학생 이름은 학번에 종속)
다치 종속
(MVD: MultiValued Dependency)
결정자 칼럼 A에 의해 칼럼 B의 값을 다수 알 수 있을 때, 
칼럼 B는 칼럼 A에 다치종속되었다고 표현

 

2) 정규화 이론 - 정규화 유형과 함수적 종속성 

(1) 제1정규화(1NF)

- 하나의 속성에는 하나의 속성 값만 넣는 것 (연락처 속성에는 핸드폰 번호 or 이메일 하나만 넣기)  

- 한 속성에 여러 개의 속성이 포함되어 있거나 같은 유형의 속성이 여러 개로 나눠져있는 경우 해당 속성을 분리

(2) 제2정규화(2NF)

- 제1정규화를 만족시키고, PK(주식별자)가 아닌 모든 칼럼은 PK 전체에 종속되는 것

- PK 중 전체가 아닌, 일부의 속성에만 종속되는 칼럼이 있다면 분리 필요

 └ 반복된 데이터 일부를 갱신할 때 전체가 동일하게 갱신되지 않아  데이터 불일치가 되는 '갱신 이상(Modification Anomaly)' 문제 발생 가능성 때문! 

> 각 주 식별자에 종속되는 칼럼만 분리

 

(3) 제3정규화(3NF)

- 제2정규화를 만족시키고 일반 속성 간에도 함수 종속 관계가 존재하지 않아야 함

- 일반 속성들 간의 종속 관계가 존재한다면 분리해야 함

 

3) 반정규화  

- 개념: 성능 향상을 목적으로 정규화를 수행하지 않은(즉 중복을 허용한) 모델을 지칭하는 말로, 역정규화라고도 함   

 

- 반정규화가 필요한 상황은? 보통 '조회' 성능 향상을 위해 활용  

① 데이

터를 조회할 때 디스크 I/O량이 많아 성능이 저하되는 경우

② 테이블 간 경로가 멀어 조인으로 인한 성능 저하가 예상되는 경우

③ 칼럼을 계산하여 읽을 때 성능이 저하될 것이라고 예상하는 경우

 

- 절차 

반정규화 대상 조사 다른 방법 유도 검토 반정규화 적용

 

- 기법 

 테이블 반정규화

└ 테이블 병합: 1:1 관계 테이블 / 1:M 관계 테이블 / 슈퍼&서브 타입 테이블 병합 - 조인 연산 제거 

테이블 분할: 수직 분할(구조변화 O ex. 업데이트가 잦은 칼럼 분리)  / 수평 분할(구조변화 X ex. 년/월/일 테이블 분할)

                        * 정규화 법칙이 아닌 것으로 분할하면 반정규화

테이블 추가: 중복 테이블(서버나 업무가 다른 경우) / 통계 테이블(계산식 적) / 이력 테이블(마스터 테이블 존재) / 부분 테이블 추가(자주 조회하는 칼럼만 별도 추출)

 

② 칼럼 반정규화  

- 중복 칼럼 추가 / 파생 칼럼 추가 / 이력 테이블 칼럼 추가 / PK에 의한 칼럼 추가 / 응용 시스템의 오작동을 위한 칼럼 추가

* 복합키(Composite Key): 기본키로 사용할 수 있는 칼럼이 없을 때 2개 이상의 키를 합쳐 하나의 기본키로 활용하는 것

 

③ 관계 반정규화 

- 중복 관계 추가: 조인 경로를 줄여서 성능 향상. A > B > C 형태의 조인을 A > C로 줄이는 것.

 

 

3. 데이터베이스의 구조와 성능

1) 대량 데이터에 따른 성능

: 데이터 모델 설계가 아무리 잘 되어 있어도 대량 처리 시 성능 저하가 발생 > 분할을 통해 해결 가능 

 (cf) 데이터베이스 입출력(I/O) 시 테이블 내 모든 행은 블록 단위로 디스크에 저장
        > 칼럼이 많아지면 하나의 행이 여러 블록에 걸쳐서 저장되며 성능이 저하됨 

 

- 대용량 데이터로 인한 대표적인 성능 저하 현상 

 └ 하나의 행 조회 시 2개 이상 블록을 불러와 성능 저하에 영향을 주는 사례 

① 로우 체이닝 (Row Chaining)

 : 행 데이터가 너무 길어서 2개 이상 블록에 저장된 형태 

② 로우 마이그레이션 (Row Migration)

 : 데이터 블록 수정 발생 시 기존 블록에 수정 사항을 저장하지 못하고 다른 블록의 빈 공간에 저장되는 방식 

(cf) 데이터베이스 파티셔닝(Partitioning)

 하나의 DBMS에 많은 테이블이 저장되면서 성능과 용량에 이슈가 발생해, 테이블을 작은 단위로 쪼개 관리하는 ;파티셔닝 기법이 발생. 큰 테이블을 다수의 엔터티로 물리적 분할을 하나, 접근 시 분할된 테이블로 인식하지 못하는 특징이 있음

 

- 성능 향상을 위한 테이블 분할 방법 

① 수평 분할: 행 단위로 요소를 분할하여 디스크의 입/출력 비용을 감소시키는 방법

 └ 한 테이블에 많은 수의 칼럼이 있는 경우 사용 

 └ 테이블 수평 분할을 통해 모든 칼럼을 조회하지 않고, 필요한 칼럼만 조회하여 디스크 입/출력 감소 

 

② 수직 분할: 칼럼 단위로 요소를 분할하여 디스크의 입/출력 비용을 감소시키는 방법

ㆍ범위 분할(RANGE PARTITION): 특정 기간을 중심으로 분할하는 범위 파티서닝 

ㆍ목록 분할(LIST PARTITION): 테이블 내 리스트를 활용하여 분할하는 파티셔닝(지역, 성별 등)

해시 분할(HASH PARTITION): 약속된 규칙에 따라 해싱 알고리즘(함수)를 적용해 테이블 분리 

  └ 장점: 부하 감소, 특정 파티션에 데이터가 집중될 수 있는 범위 분할 단점 보완, 데이터 대랑 처리 시 경합 감소 

  └ 단점: 데이터 관리가 어려움 (보관주기에 따른 삭제 기능, 데이터 저장 경로 파악 등)

ㆍ합성 분할(COMPOSITE PARTITIONING) : 상기 3개 분할 방식을 섞는 것(ex. 범위 분할 후 해시 분할 적용)

 

2) 데이터베이스의 구조와 성능

(1) 슈퍼타입 / 서브타입 모델

 - 데이터 모델링에서 자주 쓰이는 기법으로 데이터 특징에 따라 슈퍼타입은 공통 속성, 서브타입은 개별 속성을 포함

 

구분 슈퍼타입
(Single / All in One)
서브타입
(Plus / Super + Sub)
개별타입
(OneToOne + 1:1)
설명 - 하나의 테이블로 변환
- 테이블을 싱글 테이블로 구성
- 각 서브타입 테이블에 공통된 수퍼타입을 보유 - 슈퍼타입과 서브타입을
각각 개별 테이블을 만드는 것
- 슈퍼/서브 테이블 모두 생성
특징 하나의 테이블 각각의 서브타입 테이블 슈퍼 서브 각각의 테이블
확장성 나쁨 보통 좋음
조인 성능 우수함 나쁨 나쁨
I/O 성능 나쁨 좋음 좋음
관리 용이성 좋음 좋지 않음 좋지 않음

 

(2) 인덱스 특성을 고려한 PK / FK 데이터베이스 성능 향상  

- PK 순서와 성능 사이의 관계 

: 테이블에 발생되는 트랜잭션 조회 패턴에 따라 복합 PK 칼럼 순서가 성능에 영향을 줄 수 있음

: 자주 쓰는 조합을 앞 순서에 배치하거나 필터링(where) 조건을 뽑는게 복잡한 칼럼을 뒤로 배치

(ex.) 연도+학기 조합이 자주 출력될 경우, 칼럼 순서 변경으로 성능 개선 가능 

  

- FK와 테이블 인덱스 구성 사이의 관계

 : 외래키(FK)에 대한 인덱스를 미리 생성해두면 조인 과정에서 성능 저하를 막을 수 있음

 

3) 분산 데이터베이스와 성능

(1) 분산 데이터베이스

 - 개념: 분산되어 있는 데이터베이스 시스템을 하나의 가상 시스템으로 사용할 수 있도록 한 것. 물리적으로는 분산돼 있지만 논리적으로는 하나의 데이터베이스로 존재  

 

 - 분산 데이터베이스가 되기 위해 필요한 6가지 투명성(Transparency)

: 분할 투명성 / 위치 투명성 / 지역 사상 투명성 / 중복 투명성 / 장애 투명성 / 병행 투명성 

 

- 적용 방법

: 업무 구성에 따른 아키텍처가 어떤 형태로 구성되어 있는지 등을 충분하게 고려하여 적용해야 함 

: 개발 및 처리 비용이 증가하고, 응답 속도 또한 원하는 수준으로 개선되지 않을 수 있기 때문 

 

- 장단점 

└ 장점: 용량 확장, 신뢰성&가용성, 효용성&융통성, 응담속도 및 통신비용 개선 등  

단점: 개발 및 처리 비용 증가, 오류 잠재성 증가, 불규칙한 응답 속도, 통제 어려움 등 

 

(2) 분산 데이터베이스의 활용 방향성 및 적용 기법

- 활용 방향성: 위치 중심 > 업무 필요에 의한 분산 설계를 많이 사용중 

- 적용 기법  

 ① 테이블 위치(Location) 분산 : 위치(지역)에 따른 분산 

 ② 테이블 분할(Fragmentation) 분산: 수평/수직 분할로 쪼개서 분산 

 ③ 테이블 복제(Replication) 분산: 전체 테이블은 두고, 부분만 복사(부분복제)하거나 전체 복사(광역복제)해서 분산

 ④ 테이블 요약(Summarization) 분산

  └ 분석 요약(Rollup Summarization): 동일한 테이블 구조 및 내용을 가진 테이블을 이용해 통합 데이터 산출

  └ 통합요약(Consolidation Summarization): 분산된 다른 내용의 데이터를 이용해 통합 데이터 산출 

 

 

[SQL 코드카타 77~83] 

1) 어떤 문제가 있었나

2) 내가 시도해본 건 무엇인가

3) 어떻게 해결했나

4) 무엇을 새롭게 알았나

- SQL에서 length(칼럼명) 함수를 통해 문자열의 글자수(음절 기준)를 구할 수 있음