[TIL] Day 39 : 인스타 feed, story's decorations는 어떻게 DB에 저장하나

Q·2024년 6월 11일

TIL

목록 보기
40/59

문제 의식

인스타 피드(feed)나 스토리(story)를 꾸밀 때 많은 것들로 꾸밀 수 있다.
그러면 그게 개수가 많아질 수도 있고, 종류도 스티커, 링크, 텍스트 등등 많은데 어떤 식으로 DB에 저장해야 할까?

틀린 방법

  • 종류 하나하나마다 테이블을 따로 만든다?

이건 말이 안된다. 하나의 피드를 볼 때 여러 테이블을 검색해야 하는 불편함 + 리소스 낭비 + 데이터 정합성 깨질 우려

  • string으로 기록한다?
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"
            }
        }
	]
}

0개의 댓글