• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

chat 감정표현 및 읽음 질문

22.03.04 19:02 작성 조회수 190

0

채팅 좋아요,싫어요등을 추가로 구현해보고싶어서 설계중인데,

 

export class Chat extends CommonEntity {
@Column()
content: string;

@Column('simple-array')
readedMembersId: number[];

@Column('simple-array', { nullable: true })
thumbsUpMembersId: number[];

@Column('simple-array', { nullable: true })
thumbsDownMembersId: number[];

@DeleteDateColumn({ nullable: true })
deletedAt: Date | null;

@ManyToOne(() => Room, (room) => room.Chats)
Room: Room;

@ManyToOne(() => User, (user) => user.Chats)
User: User;
}

읽음처리는 readMembersId 테이블에에 읽은 맴버 Id들을 푸시해주고,

감정표현은 tumbup / down Members Id를 각 테이블에 푸시해주는 식으로 구현해봤는데,

다대다 테이블을 따로 안만들고 이렇게써도 되는지,

실무에선 보통 읽음, 감정표현같은 기능은 어떻게 처리하는지 조언 받고싶습니다.

답변 1

답변을 작성해보세요.

1

db를 뭘 쓰시길래 저렇게 배열 타입이 돌아가나요? 아니면 중간에 한번 transform을 하시나요? 원칙적으로는 다대다로 만들긴해야하는데 저렇게 인라인화해서 판단하는게 더 나을 것 같습니다. 다만 카운트를 제외한 인서트, 업데이트, 딜리트 등에서는 살짝 손해볼 수 있습니다.

노른자님의 프로필

노른자

질문자

2022.03.04

mysql씁니다. db기능은 아니고 typeorm에서 그냥 쉽표로 구분해서 string으로 만들어버립니다.

그래서 Note you MUST NOT have any comma in values you write. 라고 쉼표들어간 string은 쓰지말랍니다.

mysql이 json 타입도 지원해서 json 배열이 가능하고, 내부 쿼리도 됩니다. 그거 쓰시는 게 좋습니다. (mysql 8 이상)

노른자님의 프로필

노른자

질문자

2022.03.04

typeorm의 simple-json 도 사용해봤는데 json형태로 객체가 저장이 됩니다만, (조회,입력도 됨)

워크밴치에서 확인해보니 컬럼의 DataType으로는 Text라고 되어있습니다.

 

이게 원래 그런건지 아니면 워크밴치에서 DataType이 json으로 되어야 하는건지 정확히 모르겠습니다.

워크벤치에서 json 타입이 있습니다. 다만 이게 typeorm에서 인식을 해줄지는 잘 모르겠네요. 안 되더라도 simple-json이 알아서 text <-> json 변환을 해줘서 괜찮아보이긴 합니다.

노른자님의 프로필

노른자

질문자

2022.03.04

근데 만약 json을 수정(푸시,변경,등)할 일이 생기거나할때,

typeorm에서는 그냥 문자열로 만들어서 통째로 갈아끼워버리는 식으로 진행될것같고,

mysql에서 지원하는 json 타입을 사용한다면 부분적으로 교체나 푸시를 진행할것같아서 아무래도 성능적으로 이득을 볼것같은데, 만약 그렇다면 로우쿼리로 날려서라도 성능이득을 볼려고합니다.

자세히 읽어보니 typeorm 공식문서에서도 "만약 db가 json을 지원하지 않는다면 simple-json이 아주 유용하다"라고하는것보니 json있으면 json 쓰는게 나을것같은데, mysql에서는 아마 성능적으로 더 잘 처리하지 않을까 싶습니다.

근데 typeorm 에서 mysql json타입 컬럼 사용방법은 나오지않네요

https://orkhan.gitbook.io/typeorm/docs/entities#spatial-columns

 

 

 

orkhan은 공식문서는 아니고요. typeorm보니까 json 타입 지원한다고 하네요.