이상 현상 (Anomaly)

한눈에 보기

이상 현상은 테이블 설계가 잘못되어 삽입, 갱신, 삭제 과정에서 데이터 불일치나 손실이 생기는 현상이다. 삽입, 갱신, 삭제 이상의 세 종류와 원인인 함수 종속, 해결책인 정규화까지 예시와 함께 정리한다.

최종 업데이트 2026.09.17

이상 현상(Anomaly)은 데이터베이스 테이블을 잘못 설계했을 때 데이터를 삽입, 갱신, 삭제하는 과정에서 의도하지 않은 데이터 불일치나 손실이 발생하는 현상이다. 하나의 테이블에 서로 다른 성격의 정보가 함께 저장되어 중복이 생기는 것이 근본 원인이며, 정규화(Normalization)를 통해 테이블을 적절히 분리하면 예방할 수 있다.

이상 현상이 생기는 이유

관계형 데이터베이스에서 하나의 테이블은 하나의 주제만 담는 것이 이상적이다. 그런데 설계 단계에서 여러 개념을 한 테이블에 뭉뚱그려 넣으면 같은 정보가 여러 행에 반복해서 저장된다. 예를 들어 수강 신청 정보를 관리하는 테이블에 학생 정보, 과목 정보, 담당 교수 정보를 모두 넣으면, 한 과목을 수강하는 학생이 100명일 때 그 과목의 이름과 교수 이름이 100번 중복된다.

이런 중복은 단순히 저장 공간을 낭비하는 문제로 끝나지 않는다. 중복된 값 중 일부만 수정되거나, 어떤 행이 삭제되면서 함께 사라져서는 안 되는 정보까지 사라지는 식으로 데이터의 무결성(Integrity)을 깨뜨린다. 이론적으로는 키가 아닌 속성이 기본키 전체가 아닌 일부에 종속되거나, 다른 일반 속성에 종속되는 잘못된 함수 종속(Functional Dependency) 관계가 존재할 때 이상 현상이 나타난다.

이상 현상의 세 가지 종류

삽입 이상(Insertion Anomaly)

새로운 데이터를 넣고 싶은데, 관련 없는 다른 데이터가 없으면 삽입할 수 없는 문제다. 위의 수강 테이블에서 아직 수강 신청한 학생이 없는 새 과목을 등록하려면 학생 정보 자리에 널(NULL)을 넣거나 존재하지 않는 가짜 학생을 만들어야 한다. 과목이라는 정보 자체는 완전한데도 테이블 구조 때문에 온전히 저장할 수 없는 것이다.

갱신 이상(Update Anomaly)

중복 저장된 값 중 일부만 수정되어 데이터가 서로 어긋나는 문제다. 담당 교수가 바뀌어서 100개 행 중 99개만 수정하고 1개를 놓치면, 같은 과목의 교수가 두 명으로 조회되는 모순이 생긴다. 어느 값이 맞는지 데이터만 보고는 판단할 수 없게 된다.

삭제 이상(Deletion Anomaly)

행 하나를 지웠을 뿐인데 함께 저장되어 있던 다른 정보까지 사라지는 문제다. 어떤 과목의 유일한 수강생이 수강을 취소해서 그 행을 삭제하면, 과목 이름과 교수 정보까지 데이터베이스에서 완전히 사라진다. 의도한 것은 수강 이력 삭제 하나였지만 결과적으로 과목 정보의 손실이 함께 일어난다.

예시로 보는 이상 현상

학번, 학생 이름, 과목 코드, 과목명, 성적을 한 테이블에 담았다고 가정한다.

학번학생명과목코드과목명성적
1001김하늘CS101자료구조A
1001김하늘CS202운영체제B
1002박서준CS101자료구조A

이 구조에서는 수강생이 없는 새 과목을 넣을 수 없고(삽입 이상), 자료구조라는 과목명을 바꾸려면 여러 행을 빠짐없이 수정해야 하며(갱신 이상), 박서준 학생의 수강 기록을 지우면 그 학생의 존재 자체가 사라질 수 있다(삭제 이상). 기본키인 (학번, 과목코드) 중 일부에만 종속되는 학생명, 과목명 같은 속성이 문제의 원인이다.

해결 방법과 정규화의 관계

해결책은 함수 종속 관계를 기준으로 테이블을 분리하는 정규화다. 위 예시는 학생 테이블(학번, 학생명), 과목 테이블(과목코드, 과목명), 수강 테이블(학번, 과목코드, 성적)로 나누면 된다. 이렇게 하면 각 정보가 한 곳에만 저장되므로 수강생이 없어도 과목을 등록할 수 있고, 과목명 수정은 한 행만 바꾸면 되며, 수강 기록을 지워도 학생과 과목 정보는 남는다.

다만 정규화를 많이 할수록 조회 시 조인(Join)이 늘어나 성능이 떨어질 수 있다. 그래서 실무에서는 이상 현상의 위험을 감수하더라도 조회 성능을 위해 의도적으로 중복을 허용하는 반정규화(Denormalization)를 선택하기도 한다. 이 경우 애플리케이션 로직이나 트리거로 중복 데이터의 일관성을 직접 관리해야 한다는 비용이 따른다.

면접에서 이렇게 물어본다

  • 이상 현상의 세 가지 종류를 예시와 함께 설명해 보라.
  • 이상 현상이 발생하는 근본 원인을 함수 종속 관점에서 설명할 수 있는가.
  • 이상 현상을 해결하기 위한 방법은 무엇이고, 그 방법의 부작용은 무엇인가.
  • 반정규화를 하면 이상 현상 위험이 다시 생기는데, 실무에서는 이를 어떻게 관리하는가.
  • 삭제 이상과 단순한 데이터 삭제 실수의 차이는 무엇인가.
데이터베이스 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기