개주 훈련일지/🔥 히노카미 코구라(오류 수정)

오류내역) SQLIntegrityConstraintViolationException

lshfood2 2025. 11. 10. 10:31

[에러 발생 상황]

회원 탈퇴 진행 시 해당 회원은 실제로 DELETE가 아닌

유저 등급에서 DELETE 등급으로 변경되어야 하는데

변경되지 않고 오류가 발생하였음.

회원탈퇴 선택 시 update 오류 발생

 

오류가 발생한 원인은 DDL에 있었다.

테이블 생성 시 설정한 속성으로

유저 등급 = USER_ROLE을 설정하고

해당 등급에 'ADMIN', 'MEMBER', 'WITHDRAW' 

3가지로 상황으로 정의해 두었다.

 

그래서 회원 탈퇴 시 유저 등급이 WITHDRAW로 변경되도록

세터를 사용하여 코딩을 진행하였는데, 알고 보니 오탈자로 인해

테이블 속성이 'WITHDRAWN'으로 선언되어 있어

올바르지 않은 입력으로 취급되어 발생한 오류였다.

 

▼ 기존 코드 (오류 발생)

--컨트롤러에서 보내는 WITHDRAW를 인식할 수 없음
--컬럼에 오탈자로 인한 문제
CREATE TABLE TBL_USER ( 
    USER_ID INT PRIMARY KEY, 
    -- PK (회원 고유번호)
    EMAIL VARCHAR(50) UNIQUE NOT NULL,
    -- 이메일 (로그인 ID, 중복 불가) (행의 값이 고유함을 보장하는 UNIQUE 사용)
    PASSWORD VARCHAR(20) NOT NULL, 
    -- 비밀번호
    USER_NAME VARCHAR(20) NOT NULL, 
    -- 이름 
    ADDRESS VARCHAR(200) NOT NULL, 
    -- 배송지
    USER_ROLE VARCHAR(20) DEFAULT 'MEMBER' CHECK (USER_ROLE IN ('ADMIN', 'MEMBER', 'WITHDRAWN'))
    -- 사용자 구분 (비회원 / 회원/ 관리자) CHECK (IN())으로 3가지 상태만 허용      
);

UPDATE TBL_USER SET USER_ROLE = 'WITHDRAWN' WHERE USER_ID = 1002; 
-- 회원 탈퇴 (WITHDRAW: 탈퇴 상태 표시값)

 

// SQL과 연동되는 컨트롤러 코드- WITHDRAW 전달
// 로그인 하려는 ID가 탈퇴한 계정일 경우
if (userDTO.getUserRole().equals("WITHDRAW")) {
	view.nopePasswordResult();
	continue;
}
view.showLoginResult(userDTO != null);
userInfo = userDTO;

 

아래와 같이 오탈자를 수정하여 테이블 드롭 후

재생성하여 테스트를 진행하였고

정상적으로 작동되는 것을 확인하였다.

 

오류 해결 부분

--오탈자 N 제거하여 컬럼명 수정
--테이블 드랍 및 재생성하여 진행
USER_ROLE VARCHAR(20) DEFAULT 'MEMBER' CHECK (USER_ROLE IN ('ADMIN', 'MEMBER', 'WITHDRAW'))
    -- 사용자 구분 (비회원 / 회원/ 관리자) CHECK (IN())으로 3가지 상태만 허용      
);

UPDATE TBL_USER SET USER_ROLE = 'WITHDRAW' WHERE USER_ID = 1002; 
-- 회원 탈퇴 (WITHDRAW: 탈퇴 상태 표시값)