완료일
September 2, 2023
태그
BE개발
작성자
게임판의 비즈니스적 특성
- 게임판은
10*18
의 꽤 큰 배열이다. - 하나하나 컬럼으로 저장하기엔 무리가 있다
- 한 게임당 180개의 사과들을 별도 테이블로 저장하기도 무리가 있다. (사과들의 순서 보장이 확실하지 않다)
- 한 게임판은 여러 명이 동시에 접근하지 않는다. 단일 유저가 플레이한다.
- 서버에 실시간으로 전송하지 않는다.
이런 이유로 게임판의 일부에 대한 동시 접근이 발생하지 않는다.
- 예를 들어,
(0, 0)
사과와(5, 7)
사과에 서로 다른 트랜잭션으로 동시에 접근하지 않는다.
즉, 사과에 대해 동시성이 요구되지 않는다.
게임판을 직렬화해 저장
AttributeConverter
,@Converter(autoApply = true)
사용
따라서 게임판을 직렬화해 저장하기로 결정했다. 통째로 저장하고, 수정해도 괜찮다고 생각하기 때문이다.
또 의미 전달이나, 유지보수 측면에서 JSON으로 직렬화해 저장하는 편이 임의로 |
, ,
, ;
같은 구분자를 사용하는 것보다는 낫다고 판단했다.
그래서 AttributeConverter
객체를 만들어 JSON으로의 직렬화, 역직렬화를 캡슐화했다.
이때 @Converter(autoApply = true)
를 사용했다. 이걸 사용하면 엔티티에 컨버터를 명시해 줄 필요 없이 자동 적용된다.
따라서 도메인 객체가 프레임워크나 라이브러리에 직접 의존하지 않은 채, 최대한 유연한 상태로 유지할 수 있다.