● 데이터 정합성이란?
- 데이터베이스의 데이터가 정확하고 일관성이 있으며 신뢰할 수 있음을 보장하는 원칙
[사건]
최근에 웹에서 보여주는 유저 아이템 데이터와 인게임에서 보여주는 유저의 아이템 데이터가 맞지 않다는 문의가 들어왔다.
"어디가 이상한거지?" 하고 확인해보니
해당 아이템을 최초에 생성할때 해당 아이템에 대한 설명을 넣어주는데, 해당 아이템이 강화될때 설명 내용이 변경되지 않아 발생하는것이었다.
ex) 테이블 구조
◈ tbl_item
itemID | itemSkill |
1001 | hp 50 recovery |
◈ tbl_itemDescription
itemID | description |
1001 | hp 60 recovery |
사실 인게임서버는 decsrption값이 달라도 상관이없다.
클라이언트한테 값을 보내줄때는 itemID만 보내주고 클라이언트는 해당 아이템에 대한 설명을 유저한테 해줄때는
기획테이블을 참조하니까!!
그리고 최초에 개발된 웹은 해당 아이템의 아이디로 해당 아이템의 설명을 보여주고 있어서 웹과 인게임이 서로 상이해도 상관없었는데, 웹 백엔드를 개편하면서 그런 로직이 다빠져서 웹과 인게임이 달랐던것.......
울어도 별수없다. 최초에 설계가 그렇게 된 것을
이런 케이스 발생을 막으려면
1. 애초에 tbl_item에 itemSkill 컬럼을 넣지 않는다.
-> 왜냐 인게임에서 사용하지 않는 값이기 때문
2. 웹 서버에서는 해당 아이템을 표시하기 위해 tbl_item이 아니라 tbl_itemDescription을 사용한다.
-> 명확한 표시를 위해 역할을 분명하게 나눈다.
3. 웹 서버는 해당 데이터를 표시하기 위해 db에 itemDescription을 조회하지 말고, 관련 기획데이터를 메모리에 들고 있는다.
-> 사실 tbl_itemDescription 데이터는 한번 생성되면 거의 변화하지 않는 데이터기 때문에 메모리에 들고 있다가 해당 아이템에 맞춰 보여주는쪽이 훨씬 속도 측면에서 빠르다..
ㅠ.ㅠ
어렵다 어려워
'일상 > 일상' 카테고리의 다른 글
[여행] 함안 낙화놀이 (05/15 - 05/16) (0) | 2024.06.22 |
---|---|
SQLD 시험 후기 - 합격 (0) | 2024.06.22 |
2023/11/07 운동 정리 (0) | 2023.11.08 |
샐러드를 만들다 (0) | 2023.03.06 |
[등산 일기] 아차산 둘레길 - 용마산 정상 (0) | 2022.10.23 |
댓글