Typeorm ManyToMany를 설정할 때 사용하는 JoinTable의 Annotation 사용법을 제대로 숙지하지 않아서 연관관계의 Entity가 Undefined로 조회되는 Bug가 발생했다. 해당 내용은 typeorm 공식 문서에 적혀있는데, JoinTable Annotation을 연관관계 양쪽 중 한 쪽에 둬서 해결이 가능했다.
MySQL은 MVCC 동작을 할 때 버저닝을 해서 Undo 로그에 기록하는 식으로 삭제를 진행하지만 Postgres는 MVCC를 할 때 SoftDelete와 비슷하게 논리적으로 삭제하는 방식으로 Delete 연산을 처리한다.
이에 따라서 DB에서 삭제를 하고 조회를 할 때의 성능차이가 발생하는데 조회 성능
은 실제로 데이터가 사라지는 MySQL
쪽이 좀 더 빠르다. 그러나 삭제 성능
은 Undo 로그를 삭제할 필요없이 Update를 하는 Postgres
쪽이 좀 더 빠르다.
Postgres는 이러한 SoftDelete 목록이 더 이상 진짜로 필요없다라고 판단(MySQL에서 Undo 로그를 삭제하는 시점)될 때, Vacuum이라는 일종의 배치 동작을 통해서 실제로 데이터들을 삭제해주게 된다.
MySQL도 Postgres처럼 REPEATABLE READ에서 Phantom Read가 발생하지 않는데 이는 Next Level Lock 때문이라고 한다.