본문 바로가기

프로젝트

[서점 프로젝트] 줄거리 설명 컬럼의 자료형 고민

도서 정보를 관리하는 테이블을 만들다가 고민이 생겼습니다.

책의 줄거리를 설명하는 컬럼은 그 수가 1000자가 넘어가기도 합니다.
찾아보니까 표현할 수 있는 방법이 VARCHAR뿐만 아니라 TEXT도 있었습니다.

"왜 VARCHAR로도 표현이 가능한데 TEXT가 있을까?"


최대 열 사이즈

공식 문서에서는 MySQL 테이블은 65535 바이트까지 행 크기를 제한한다고 나와있습니다.

큰 크기의 varchar 자료형을 남발하다보면 이 제한에 금방 도달하게 됩니다.

그렇다면 text 타입으로 선언하면 어떨까요?
text 타입을 여러 번 선언해도 에러가 발생하지 않습니다.
이 객체는 Large Object라는 별도의 영역에 저장되고 행에는 주소값만 포함되기 때문입니다.

 

메모리 버퍼

MySQL 엔진은 메모리 포인터를 이용해서 데이터를 주고 받습니다.
메모리의 크기는 우리가 선언했을 때 최대 크기로 설정됩니다.

크기가 작은 varchar는 미리 버퍼에 할당받아둘 수 있지만,
LOB 데이터는 낭비가 심해지기 때문에 메모리 공간에 할당할 수 없습니다.

메모리 공간은 여러 개의 커넥션에서 공유해서 사용할 수 있는 구조인데,
text는 쓸 때마다 메모리를 할당하는 일이 생깁니다.


결국 줄거리 컬럼은 text 타입을 사용하기로 했습니다.
줄거리는 최대 길이를 크게 설정해야 하고 제목과 같은 컬럼에 비해서 자주 요청하지 않을 것이기 때문입니다.

이번 내용은 여기까지입니다.
오늘도 봐주셔서 감사합니다!
틀린 내용이 있다면 댓글로 지적 부탁드립니다.