배경
전자정부 프레임워크를 사용하여 세차장 관리 시스템을 개발하던 중, 각 JSP 파일에 헤더와 푸터를 포함하는 과정에서 JSP의 <%@ page %> 디렉티브 설정으로 인한 충돌 문제가 발생했습니다.
문제 상황
- 헤더와 푸터 분리 및 적용 과정
- 공통 헤더(header.jsp)와 푸터(footer.jsp)를 별도의 파일로 분리한 뒤, 각 JSP 페이지에서
<%@ include file="header.jsp" %> 및 <%@ include file="footer.jsp" %>를 통해 호출했습니다. - 각각의 JSP 파일에 이미 <%@ page %> 디렉티브가 포함되어 있던 상태였습니다.
- 공통 헤더(header.jsp)와 푸터(footer.jsp)를 별도의 파일로 분리한 뒤, 각 JSP 페이지에서
- 발생한 에러
- 기존 JSP 파일과 분리된 헤더/푸터 파일 모두
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
디렉티브를 포함하고 있었습니다. - 이로 인해 JSP 페이지가 실행되지 않으며, "두 개의 contentType이 설정되어 있다"는 충돌 에러가 발생했습니다.
- 기존 JSP 파일과 분리된 헤더/푸터 파일 모두
원인 분석
- JSP 파일마다 <%@ page %> 디렉티브가 중복되어 JSP 컨테이너(Tomcat 등)가 contentType과 pageEncoding 설정을 중복으로 인식했습니다.
- 일부 WAS 환경(Tomcat 등)은 contentType과 pageEncoding 설정의 충돌에 매우 민감하게 반응하며, JSP 디렉티브의 구조를 올바르게 작성하지 않으면 실행 오류를 발생시킬 수 있습니다.
해결 과정
1. 디렉티브 간소화
- 기존 디렉티브
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>를 JSP 표준에서 권장하는 단일 설정으로 변경:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
contentType 속성에서 문자셋(charset=UTF-8)을 포함하도록 설정하여 중복을 방지했습니다.
2. 헤더/푸터와 JSP 통합
- 헤더와 푸터 파일에도 동일한 디렉티브를 사용하고, 모든 JSP 파일에 적용하여 설정 간의 일관성을 유지했습니다:
3. 테스트 및 검증
- JSP 페이지를 로컬 환경과 WAS 환경에서 실행하며 모든 설정이 정상적으로 동작하는지 검증했습니다.
- 공통 헤더와 푸터가 모든 페이지에서 일관성 있게 적용되었음을 확인했습니다.
<%@ include file="/WEB-INF/views/header.jsp" %>
<!-- 본문 내용 -->
<%@ include file="/WEB-INF/views/footer.jsp" %>
결과
- JSP 페이지 설정 중복으로 인한 충돌 문제를 해결하며, 각 JSP 파일에서 공통 헤더와 푸터를 정상적으로 호출할 수 있었습니다.
- 이 과정에서 JSP 디렉티브의 사용 방식과 전자정부 프레임워크의 UI 구조를 더 깊이 이해하게 되었고, JSP 디렉티브 설정 충돌 문제를 해결하는 능력을 강화했습니다.
느낀 점
이번 경험은 단순히 오류를 해결하는 데 그치지 않고, JSP 디렉티브와 WAS 환경의 특성을 더 잘 이해하는 계기가 되었습니다. 이 과정에서 전자정부 프레임워크의 복잡성을 체감했지만, 문제를 단계적으로 해결하며 개발 역량을 한층 더 향상할 수 있었습니다.
'PORTFOLIO > TROUBLESHOOTING' 카테고리의 다른 글
[library- 트러블 슈팅] 패키지 설치의 덫: GPG 인증 문제 해결기 (0) | 2025.01.08 |
---|---|
[CodeChef - 트러블 슈팅] 포인트 전쟁에서 살아남기! Redis로 실시간 속도 전투! (0) | 2025.01.06 |
[CodeChef - 트러블 슈팅] 인덱싱: 데이터 속도 전쟁에서 살아남기! (1) | 2025.01.06 |
[CodeChef - 트러블 슈팅] 실시간 알림의 비밀: RabbitMQ로 댓글 알림 시스템 구축하기 (0) | 2025.01.06 |
[CodeChef - 트러블 슈팅] EC2 독립 선언: 한 서버에 갇힌 서비스들을 해방하다. (0) | 2025.01.06 |