서비스의 데이터배이스 구조 생각해보기

2024년 6월 27일 목요일

Today I Learned

날짜

2024년 6월 27일 목요일

내용

네이버 검색광고 데이터와 DB

매일 아침 스프레드시트에 데이터를 집어넣는 근로자들을 해방시켜주는 스프린트를 준비중이다. 우선 기본적인 데이터베이스 틀을 잡고 있는데, 네이버 검색 광고가 어떤 구조로 되있는건지 모르겠다! 전문가인 태웅님께 하루 한번 과외를 받은 덕에 드디어 큰 틀을 알게 됐다.

우선 최상위 테이블을 User로 설정했다. 이 서비스의 핵심은 데이터를 구글 스프레드시트에 집어넣는 것이니 구글드라이브와 연동이 필요하다. GoogleDriveAccount 테이블이 그 정보를 저장한다. 현재 회원가입과 로그인은 구글을 통해서만 이루어지도록 해놨기 떄문에 구글 로그인을 위한 테이블을 따로 만들었다. 원래 유저 테이블에 집어넣는 경우도 있지만, 앞으로 지원하는 소셜 로그인이 늘어날떄 마다 최상단 테이블을 마이그레이션 하는 불상사를 겪지 않기 위해 별도의 테이블을 만들었다. 네이버, 틱톡, 메타가 추가될 때마다 테이블을 추가할 예정.

각 계정에는 캠페인이라는 단위가 있다. 내가 보기엔 가장 기본적인(최하위 아님) 단위로 보인다. 그런데 유저의 입장에선 데이터를 브랜드 단위로 관리하고 싶어한다. 브랜드와 캠페인은 1대1 관계가 아니다. 여러 캠페인이 1개의 브랜드에 속해있을 수 있다. 브랜드가 네이버 검색광고 쪽에선 없는 개념이라는게 문제다. 어떤 캠페인이 같은 브랜드인지는 서버에서 이름 등으로 판단해야 한다는 의미다.

데이터를 받아오기 위해선 NaverAccount 라는 계정 테이블에선 캠페인에도 접근가능해야하고, 클라이언트에게 보내줄 브랜드 데이터도 접근 가능해야 한다. 그런데 개념상으론 브랜드가 캠페인의 상위 단위다. 하지만 데이터는 캠페인이 먼저생긴다. 네이버 API로 캠페인을 받아와 분류해서 브랜드 데이터를 생성해야한다. 계정 - 브랜드 - 캠페인 의 순서로 계층이 있는 데이터 구조를 만들기가 곤란하다는 의미다.. 따라서 각각을 계정 바로 밑에 있는 테이블로 설정했다. 브랜드와 캠페인의 연결은 NaverCompaignBrandMapping 이라는 중간테이블을 이용해서 만들어주었다. 이러면 서로 접근 가능하되, 계층도 둘 수 있다.

계정은 다른 계정에 대한 권한을 받을 수 있는데 그 접근가능한 계정들을 NaverAccountCustomerLink 라는 이름으로 두려고 한다. 그런데, 여기에도 접근해서 데이터를 받아와야 한다. 즉 데이터를 받아오는 주체 단위가 된다는 의미인데, 그게 두 테이블에 나뉘어져 있는게 영 보기 안좋다. 다른 방법을 고민해봐야 함.