• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

모델 작성 중 질문 드립니다!

20.04.25 19:22 작성 조회수 185

0

안녕하세요 강의 듣고 토이프로젝트 진행중인 학생입니다!

사용자가 아이템을 보유하고 있고, 장착버튼을 누르면 사용자의 캐릭터가 해당 아이템을 장착하는 기능을 만들고자 합니다. (아바타 개념)

<Item 테이블 (하나의 모델만 사용)>

아이템 구매 시 해당 테이블에 데이터 값이 추가됩니다.

처음 설계했을 때엔 Item 모델을 만들고 사용자가 다수의 아이템을 갖는 1:N관계로 설정한 후에

아이템 column에 equipped를 넣어 true/false로 장착 여부를 판별하여

사용자의 캐릭터가 장착하고 있는 모자는 아이템 데이터들중에 UserId가 사용자의 아이디이고, itemType이 'hat'이고 equipped가 true인 아이템을 골라내어 보여주고,  옷은 itemType이 'clothes'이고 equipped가 true인 아이템을 찾아 보여주는 식으로 진행을 하고 있었습니다.

이렇게 되니 사용자의 아바타를 보여줄 때에 각 itemType별로 filter를 돌려 equipped 여부에 따라 값을 리턴하는 방식으로 코드를 짜게 되었는데, 너무 많은 데이터 사이에서 걸러내어 서버에 무리가 가게 되는 것은 아닌지 걱정되어 질문글 드립니다.

후에 다른 user의 아바타 또한 볼 수 있도록 만들고자 하는데, 그럴 때마다 item 테이블에서 해당 유저의 아이템들을 조회하여 타입별 equipped 여부를 파악하여 가져온다고 생각하니까 더더욱 서버에 무리가 가지 않을까 고민이 되었습니다 ㅠㅠ 

제가 여태 하던 방식대로 item 모델에 equipped 여부를 넣어 해당 값을 가지고 있는 데이터를 가져오는 방식으로 진행하는게 나을지,

아니면 item 모델은 아이템을 구매하여 추가하고, 가지고 있는 아이템 목록을 불러오는 기능만 수행하도록 하고

따로 각 부위별로 어떤 아이템을 장착하고 있는지 데이터를 기록하는 equipment 모델을 만들어주어 아이템 장착, 장착해제는 해당 모델에서 이루어지도록 하는게 맞는지.. 어떤 방식이 서버에 덜 무리가 갈지가 궁금합니다!

<Item 테이블 (equipment 모델과 같이 사용 시)>

<Equipment 테이블>

equipment 모델을 만들 경우 따지고보면 item모델에 있는 아이템 중에서 선택한 아이템의 id값을 따로 기록해두는 셈이 되는데... 이런 식으로 아이템을 다루는 모델을 중복하여 두개를 사용해도 되는 것인지 잘 모르겠습니다.ㅠㅠ 기존 방법대로 하나의 테이블에서 equipped 컬럼을 넣어주어 해당 값으로 장착여부를 판별하는 것이 나을까요?

ㅠㅠ상황을 자세히 설명을 드리느라 내용이 복잡해졌는데.. 궁금한 포인트는 새로운 모델을 추가하여 데이터를 수정하고 불러들이는 것을 간소화하는 것 /  모델을 추가하지 않고 하나의 모델 내에서 진행을 하는 것 둘중 어느것이 바람직한 방법인지 여쭤보고 싶습니다!

조언 주시면 감사하겠습니다!

답변 3

·

답변을 작성해보세요.

1

네네 이용자가 늘어갈수록 캐싱 전략을 고려해보시는 게 좋습니다.

1

사실 게임을 만들때는 단순히 DB 말고 중간에 캐시서버를 두고 클라이언트에도 일부 정보를 분배합니다. 말 그대로 DB에 무리가 많이 가기 때문입니다.

단순한 원리로는 User 테이블, Item 테이블을 두고 User가 어떤 Item을 갖고있는지 다대다 관계가 있는 Equipment 테이블을 가운데 두는 게 이론 상 맞는 것 같습니다. Equipment 테이블에는 equipped와 어느 부위에 장착했는지에 대한 컬럼이 추가적으로 있을 수 있고요. 이론 상으로는 다대다 관계인데 실제로는 성능 문제로 인하여 다른 방식으로 구현하기도 합니다.

0

앗 그렇군요 ㅠㅠ! 이용자가 많지 않은 간단한 프로젝트의 경우에는 말씀해주신 방향대로 진행하여도 괜찮겠지요..?

답변 해주셔서 감사합니다!