우선 제가 만들려는 블로그는 어떤식으로 API를 작성할건지 알아보겠습니다.
이번엔 각 테이블 컬럼에 적용될 데이터 타입을 알아봅시다.
int(n)
tinyint(n)
bigint(n)
char
은 고정된 크기를 그대로 저장하기 때문에 제 프로젝트의 데이터 타입 후보로는 탈락
입니다.
varchar(n)
가변 길이의 문자열 데이터 형식입니다. 문자열 크기를 바이트 단위로 정의하고 최대 65536 Byte까지 저장할 수 있습니다. 입력받은 문자의 크기를 기준으로 데이터를 저장합니다.
text(n)
char, varchar와는 다른 대용량 문자열 저장할 수 있는 데이터 형식입니다. 최대 길이만 다른 종류는 4가지가 있습니다.
TINYTEXT``TEXT``MEDIUMTEXT``LONGTEXT
주로 텍스트는 큰 문자열을 저장하는데 사용합니다.
Binary Large Object
의 약자로 바이너리 형식으로 데이터를 저장합니다. 최대 길이만 다른 종류는 4가지가 있습니다.
TINYBLOB``BLOB``MEDIUMBLOB``LONGBLOB
주로 비정형 데이터 즉, 이미지, 오디오, 비디오 파일, 디지털 서명등을 저장합니다.
우선 사용자 테이블의 메인키로 후보군은 몇가지가 있습니다. 사용자아이디
,사용자이메일
입니다. 사용자 이메일의 경우 서드파티로부터 정보를 가져오기에 고유하다 할 수 있습니다.
두번째로, 사용자 번호(u_id)가 있습니다. AUTO_INCREMENT
혹은 UUID
로 유니크한 값을 가질 수 있습니다.
아니면 Access_token
을 후보키로 지정할 수 있습니다. UUID나 토큰같은 긴 문자열은 디스크에 기록 성능에 지장을 줄 수 있으므로 효율상 AUTO_INCREAMENT
가 더 적합해보입니다.
최종적인 메인키는 u_id, 복합키로 활용될만한 요소는 access_token
필드를 추가하거나, 이메일이 되겠습니다.
u_id : 자동 증분 숫자를 활용할 계횝입니다. 숫자형 타입중 int는 범위가 총 10자리입니다. 그 이상을 넣어도 의미가 없기에 int(10)
으로 넓은 범위를 지정했습니다.
u_name: 유저명이 저장되는 공간입니다. 길이가 대체적으로 짧고 불필요한 용량이 필요하지 않기에 유연한 varchar
이 적합해 보입니다.
u_mail: 메일명이 저장되는 공간입니다. 마찬가지로 varchar
로 적용해줍니다.
u_img_url: 사용자 프로필 이미지입니다. 파일을 저장하여 관리하는 것보다 url이나 경로(path)를 찾는 것이 더 효율적일것 같습니다. 문자열 형식의 데이터로 각 이미지명이나 경로에 따라 길이가 다르기때문에 varchar
로 주겠습니다.
u_provider: 사용자가 소셜로그인시 어떤 유형으로 로그인 했는지 보여줍니다. 3가지 방법을 구상해봤습니다.
ENUM
타입 사용하여 형태만 저장하기tinyint
를 사용하여 정수에 따른 구분u_role: 사용자 유형을 관리자인지 유저인지 파악합니다. 현재는 두가지만 필요하므로 tinyint
가 적당할 것 같습니다.
최종 형태는 다음과 같습니다.