API 작성 중에 한 컬럼에 데이터를 여러개 넣어야 하는 상황이 생겼다.
그래서 나는 배열 형태로 데이터를 저장하기로 했다!
mysql을 사용중인데 JSON 형식을 저장할 수 있도록 지원을 하고 있지만,
배열 형태의 String값을 저장하는게 더 좋을 것 같다고 생각했다.
중요 키워드가 두 개 있다.
let data = JSON.stringify(arr); // 배열 문자열
let data2 = JSON.parse(data); // 배열 자료형
data는 문자열 값을 가질 것이고, data2는 배열 자료형 값을 가질 것이다.
(JS의 배열도 객체의 일종이기 때문에 JSON 클래스 사용 가능하다!)
DB에 저장할 때는 배열의 형태를 띈 문자열을 저장한다.
(ex. '["a", "b"]')
DB에서 꺼내서 값을 추가하거나 삭제할 때는
JSON.parse를 사용해서 배열 자료형으로 변환한 후,
push나 pop등의 배열 메소드를 통해 데이터를 추가하거나 삭제해준다.
나의 경우는 배열 안에 데이터를 최대 5개 까지만 넣는 것으로 지정했다.
배열안의 데이터와 동일한 데이터를 DB에서 뽑아오는 로직을 구현하였는데,
배열안의 데이터가 몇 개인지 알지 못하는 경우에 어떤 방식으로 해야할 지 감이 안잡혔다.
그래서 5개 까지만 받도록 하고,
아래처럼 prisma에서 찾는 방식을 사용했다.
OR: [
{ technology: { contains: techData[0] } },
{ technology: { contains: techData[1] } },
{ technology: { contains: techData[2] } },
{ technology: { contains: techData[3] } },
{ technology: { contains: techData[4] } },
],
contains로 techData안에 문자열이 포함되어있는 데이터를 찾는 것이다.
OR을 사용해서 인덱스별로 모두 비교해주었다.
이렇게 배열 형태의 데이터를 DB에 저장하고 사용하는 방식을 알아보았다.