문제 의식
인스타 피드(feed)나 스토리(story)를 꾸밀 때 많은 것들로 꾸밀 수 있다.
그러면 그게 개수가 많아질 수도 있고, 종류도 스티커, 링크, 텍스트 등등 많은데 어떤 식으로 DB에 저장해야 할까?
틀린 방법
이건 말이 안된다. 하나의 피드를 볼 때 여러 테이블을 검색해야 하는 불편함 + 리소스 낭비 + 데이터 정합성 깨질 우려
text='피드 텍스트'&sticker='피드 스티커1'&sticker='피드 스티커2'& ...
이런 식으로 기록한다면 가능은 하겠지만, string을 읽고 데코레이션으로 변환하여 렌더링하는 과정이 오래 걸린다. 왜냐하면 string 전체를 쭉 읽어야 하기 때문이다.
또한, 스티커를 엄청 많이 붙여서 varchar의 허용길이보다 더 길어질 수도 있다.
옳은 방법
JSON 형태로 저장한다.
예시:
{
"stickers": [
{
"type": "emoji",
"name": "smile_face",
"position": {
"x": 123,
"y" 456
},
"size": {
"width": 50,
"height": 50
}
},
{
"type": "image",
"url": "이미지 경로",
"position": {
"x": 789,
"y": 1011
},
"size": {
"width": 100,
"height": 200
}
}
],
"texts": [
{
"type": "text",
"content": "텍스트 내용\n줄바꾼 내용",
"position": {
"x": 1234,
"y": 5678
},
"font": {
"name": "Malgun Gothic",
"size": 20,
"color": "#ffffff"
}
}
]
}