ct-study / designing-data-intensive-applications

2 stars 0 forks source link

[4주차] 외래키 포기 이슈와 트랜잭션과 일관성 #28

Open hagyutae opened 10 months ago

hagyutae commented 10 months ago

성능 상의 약점 이유로 혹은 스키마 변경으로 인한 운영상의 어려움을 이유로 외래키 제약을 걸지 않는 서비스들이 많은데, 이와 관련된 생각 공유.

우리 서비스는 어떤 점에서 참조 무결성을 깨가면서 외래키를 포기해야했나? 현재도 샵마스터에서 샵 레코드 지우면 구천을 떠도는 데이터들이 다른 db로의 복제를 방해함. 외래키가 걸려있다면 트랜잭션 내에서 일관성을 보장하기 때문에 이런 문제가 발생하는 것을 막을 수 있지 않을까?

wbluke commented 10 months ago

말씀하신 것처럼 저도 "성능 상 문제, 초기 개발 시 유연한 스키마 변경 대응" 때문에 외래키를 안쓰는데, 썼을 때의 장점과 안썼을 때의 장점을 놓고 경중을 비교하면 늘 후자가 좋아보여서 선택하는 것 같네요. 외래키를 안걸어도 애플리케이션만 잘 작성하면 참조 무결성은 보장된 데이터가 만들어질거고, 들어주신 예시처럼 삭제만 잘 처리하면 되지 않을까 하는데요. 심지어 보통 soft delete도 많이 사용하니까.. 더 그럴 케이스가 없는 것 같고요. 그에 반해 외래키를 걸면서 얻는 이점이 더 적어보여서 성능 감소를 감수하면서 굳이 가져가고 싶은 생각이 안드는 것 같아요 ㅎㅎ

SuyeonChoi commented 10 months ago