🐞 JSTL C태그 forEach Dead Code 발생 🐞

Multiple annotations found at this line: - isValid() == false - Line breakpoint:orderhistory.jsp [line: 314]
🔎원인분석
Dead Code는 프로그램 실행 시 절대 실행되지 않는 죽은 코드를 의미한다 따라서 사진의 forEach가 죽은코드인 이유를 찾아보자면
- JSTL 사용을 위한 태그 라이브러리 선언이 없음
- JSTL 라이브러리가 프로젝트에 없는 경우
- <c:forEach> 문법이 틀렸거나 완성되지 않았을때
발생한다 여기서 오류문구를 해석해보자면 isValid() == false는 위의 세가지 이유에 해당하는 코드로 판단했기때문에 알림을 띄운것이다
🛠️해결방법
따라서 오류를 해결하기 위해 차례대로 확인해보았다
1.JSTL 사용을 위한 태그 라이브러리 선언
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
페이지 상단에 잘 선언 되어있는것을 확인했다
2.JSTL 라이브러리가 프로젝트에 없는 경우

WEB-INF 안에 잘 추가된것을 확인했다
3. <c:forEach> 문법이 틀렸거나 완성되지 않았을때
여기가 문제였다
<!-- 주문내역이 있을경우 반복해서 보여주기 -->
<c:forEach>
<tr class="text-center">
<th scope="row" class="text-start py-4">2025.11.11</th>
<td class="py-4">배송완료</td>
<td class="py-4">오너먼트</td>
<td class="py-4 text-center">10000</td>
</tr>
</c:forEach>
<c:forEach>문에 필요한 필수 속성을 지정해주지 않았고 문법이 틀려서 난 오류였다
또한 하드코딩 된 부분을 JSTL 문으로 바꿔주지 않았기 때문에 작동하지 않았다
<!-- 주문 내역 있을 때 -->
<!-- 반복할 필수 속성 지정-->
<c:forEach var="order" items="${orderList}">
<tr class="text-center">
<!--주문날자 출력-->
<th scope="row" class="text-start py-4">${order.orderDate}</th>
<!--주문 현재상태-->
<td class="py-4">${order.orderStatus}</td>
<!--주문내역에서 보여줄 대표상품 이름-->
<td class="py-4">${order.orderSignatureItemName}</td>
<!--주문 총 가격 -->
<td class="py-4 text-center">${order.orderTotalAmount}</td>
</tr>
</c:forEach>
따라서 반복할 필수 속성을 지정해주고 코드를 수정하였다
🐞ORA-00932: inconsistent datatypes: expected NUMBER got DATE🐞
주문내역 페이지를 테스트 해기 위해 샘플 데이터를 넣다가 발생한 오류이다
에러내용을 해석해 보자면 NUMBER 가 들어가야하는 컬럼에 문자로 데이터를 넣었기 때문에 발생했다
🔎원인분석
현재 INSERT를 하기위해 넣은 값이다
-- 주문상세 생성
INSERT INTO ORDERS_ITEM (
ORDERS_ITEM_PK, -- PK
ORDERS_PK, -- 주문내역 PK
ITEM_PK, -- 상품 PK
ORDERS_ITEM_QUANTITY, -- 수량
ORDERS_ITEM_PRICE -- 주문 시점 총 가격
) VALUES (
ORDERS_ITEM_SEQ.NEXTVAL,
2, --:ordersPk,
1, --:itemPk,
'DELIVERD', -- :quantity,
30000 --:itemPrice * :quantity
여기 수량 자리에 내가 문자를 넣어서 생긴 오류다 수량은 숫자로만 값이 들어가야하는데 문자를 넣어서 오류가생긴것이었다
현재 주문의 상태는 주문 테이블에 필요한것이지 주문상세테이블에 필요한것이 아니다
🛠️해결방법
현재 INSERT문에서 문자를 삭제하고 올바른 수량의 값을 입력하면 에러는 해결된다
INSERT INTO ORDERS_ITEM (
ORDERS_ITEM_PK,
ORDERS_PK,
ITEM_PK,
ORDERS_ITEM_QUANTITY,
ORDERS_ITEM_PRICE
) VALUES (
ORDERS_ITEM_SEQ.NEXTVAL,
2, -- 존재하는 ORDERS_PK
1, -- 존재하는 ITEM_PK
1, -- 수량
30000 -- 가격
);
🐞ORA-00947: not enough values🐞
INSERT 실행시 컬럼개수와 입력한 값이 틀릴때 나는 오류다
🔎원인분석
현재 INSERT 문을 보면 컬럼은 4개인데 값은 3개를 넣고있다
INSERT INTO ORDERS (
ORDERS_PK, -- 주문pk
ACCOUNT_PK, --회원pk
ORDERS_DATE, --주문날자
ADDRESS_PK --주소pk
) VALUES (
ORDERS_SEQ.NEXTVAL,
1,
1
);
따라서 현재 넣은 값에 주문날자에 해당하는 값이 빠져있었기때문에 발생했다
🛠️해결방법
현재 주문 테이블을 보면 주문날자 컬럼이 DEFAULT SYSDAET로 설정되어있다
ORDERS_DATE DATE DEFAULT SYSDATE,
따라서 INSERT 실행시 주문날자 컬럼을 제거해도 날자가 기본으로 들어가게 되어있다 그래서 기존 INSERT 문에서 삭제해주고 다시 실행시키면 에러없이 잘 진행된다
INSERT INTO ORDERS (
ORDERS_PK,
ACCOUNT_PK,
ADDRESS_PK
) VALUES (
ORDERS_SEQ.NEXTVAL,
1,
1
);
🐞ORA-02291: integrity constraint (KEVIN.FK_ACCOUNT_ADDRESS) violated - parent key not found🐞
해당에러는 외래키가 가리키는 부모(PK)가 존재하지 않는다는 에러로 지금 INSERT/UPDATE 하는 행에서 넣은 값이
FK 제약조건이 걸린 부모 테이블에 없다 는 뜻이다
🔎 원인분석
지금 에러문구를 보면 FK의 이름이 ACCOUNT_ADDRES인데 이것은 주소테이블이 회원PK를 참조할때 걸리는
외래키제약임을 알수있다 즉 주소테이블에 회원pk가 회원테이블에 없다는 말이된다
주문내역은 회원 -> 주소 -> 주문의 흐름으로 진행되어야 하기때문에 부모키인 회원과 주소가 모두 존재해야 주문내역을 만들수 있다
🛠️해결방법
회원테이블에 INSERT를 실행해서 회원정보를 만들어준다
회원가입
INSERT INTO ACCOUNT (
ACCOUNT_PK,ACCOUNT_ID,ACCOUNT_PASSWORD,ACCOUNT_NAME,ACCOUNT_EMAIL,
ACCOUNT_PHONE
)
VALUES(
ACCOUNT_SEQ.NEXTVAL,'user01','1234','홍길동','user01@TEST.COM','01012345678'
);
여기서 만들어진 회원PK를 가지고 주소테이블에 INSERT를 해준다
-- 배송지 등록
-- 필요한거 사용자 pk,주소PK,배송지이름,우편번호,기본주소지여부,기본주소,상세주소
INSERT INTO ADDRESS (
ADDRESS_PK, ACCOUNT_PK, ADDRESS_NAME, ADDRESS_POSTAL_CODE,
ADDRESS_IS_DEFAULT, ADDRESS_LINE1, ADDRESS_LINE2
) VALUES (
ADDRESS_SEQ.NEXTVAL, 8000, '집', '12345', '1', '서울시 강남구', '4층'
);
그 다음에 주문테이블에서 주문내역을 만들면 해결된다
INSERT INTO ORDERS (
ORDERS_PK, -- 주문 pk
ACCOUNT_PK, -- 회원 pk
ORDERS_DATE, -- 주문날자
ADDRESS_PK -- 주소pk
) VALUES (
ORDERS_SEQ.NEXTVAL,
8000,
SYSDATE,
1002
);
'🐢🐢꼬부기 LV.2 | 실습•에러 > 🛡️껍질에 숨기(에러해결)' 카테고리의 다른 글
| NoSuchBeanDefinitionException (0) | 2026.01.14 |
|---|---|
| 팀프로젝트 카카오 로그인 API 연동 에러 정리 (0) | 2025.12.31 |
| SweetAlert2 모달창 구현 에러해결2 (0) | 2025.12.17 |
| ORA-00923 : FROM 키워드가 필요한 위치에 없습니다 (0) | 2025.12.13 |
| ORA-02291 : 부모키를 찾을수 없습니다 에러해결 (0) | 2025.12.12 |