스타트업에 이직 후 업무 중 거의 대부분의 테이블에 외래키 설정이 안되어 있는 것을 알게 되었다.
대학교에서나 기존 직장에서는 왠만하면 외래키 설정이 되어 있었기 때문에 의아한 부분이였다.
다행히 직속 팀장님이 과거 데이터베이스 코어단을 직접 만드시던 디비 전문가셨기 때문에 바로 질문을 드렸고 답변을 해주셨다.
외래키란?
관계형 데이터베이스 관리 시스템(RDBMS)은 테이블 간의 관계를 정의하기 위해 외래키(foreign key)를 사용한다. 외래키는 한 테이블의 열이 다른 테이블의 기본 키(Primary Key)와 연결됨으로써 데이터 무결성을 보장하고, 테이블 간의 관계를 명확하게 정의하는 역할을 한다. 이는 데이터 중복을 방지하고 정합성을 유지하는데 중요한 요소로 작용한다.
과거에는 컴퓨팅 자원이 제한적이었기 때문에, 중복 데이터를 최소화하고 데이터를 효율적으로 관리하기 위해 외래키 설정이 필수적이였다. 또 외래키를 사용하면 ON DELETE CASCADE나 ON UPDATE CASCADE와 같은 기능을 활용해 참조 무결성을 유지하면서도 연관된 데이터가 자동으로 갱신되거나 삭제되는 편리함을 제공한다.
하지만 최근에는 외래키가 필수 요소로 간주되지 않는 경우가 많아졌다.
필수 요소로 간주되지 않는 이유
- 컴퓨팅 자원의 풍부함 : 첫번째 이유로 들 수 있다. 메모리, 저장소, 처리 성능이 과거에 비해 폭발적으로 향상되면서 데이터 중복을 줄이는 것이 절대적으로 중요한 문제가 아니게 되었다. 따라서 외래키 없이도 데이터베이스 설계가 가능하며, 특히 대규모 트래픽을 처리해야 하는 애플리케이션에서 성능을 최적화하기 위해 일부러 외래키를 사용하지 않는 경우도 있다.
- 개발의 유연성 : 외래키는 데이터베이스 레벨에서 무결성을 보장해주지만, 이를 유지보수하거나 관리하는데 복잡성이 추가될 수 있다. 외래키가 있는 경우 데이터베이스를 수정하거나 데이터를 삭제할 때 제약이 생길 수 있으며, 이런 상황에서 개발자들은 외래키를 사용하지 않고 애플리케이션 레벨에서 관계를 관리하는 방식을 선택할 수 있다.
- 성능 이슈 : 일부 환경에서는 외래키가 성능 저하의 원인이 될 수 있다. 데이터베이스가 외래키 제약을 처리하는데 추가적인 작업이 필요하기 때문에, 대규모 트랜잭션이 발생하는 시스템에서는 외래키 없이 설계하여 성능을 극대화하려는 시도가 이루어질 수 있다. 또한 외래키가 없어도 조인을 통해서 필요한 데이터를 효율적으로 가져올 수 있으며, 성능 차이가 크지 않을 수 있다.
결론적으로, 외래키를 설정할지 여부는 프로젝트의 특성에 따라 달라진다. 데이터의 무결성을 중시하고 CASCADE 등의 기능을 사용한 최적화를 원한다면 외래키를 사용하는 것이 좋지만, 반대로 개발 편의성과 성능 최적화가 중요한 경우에는 외래키를 생략할 수도 있다.
공부하면서 정리한 내용입니다. 모든 지적 감사히 받겠습니다:)
'CS > DataBase' 카테고리의 다른 글
[SQL] SQL 실행 순서에 대해서 (0) | 2025.02.18 |
---|---|
[Redis] redis,docker로 멀티서버에서 pub/sub 실습해보기 (0) | 2025.02.09 |
[DataBase] 관계형 데이터 베이스 (2) | 2024.08.06 |
[MySQL] UPDATE 쿼리 시 에러코드 1175 처리 (0) | 2024.06.19 |
[MySQL] AWS RDS MySQL Too many connections 에러 (0) | 2023.10.05 |