웹 어플리케이션 구축 간 JSP 또는 HTML과 같은 리소스의 내용을 현재 페이지 원하는 곳에 포함 시킬 수 있는 기능
Include는 구조가 복잡하고 여러명의 개발자가 동시에 개발하는 환경이나 중복되는 소스를 작성해야하는 경우에 소스의 중복
을 방지하고 공통된 틀
안에서 개발이 이루어 질 수 있도록 도와준다. 예를 들어 웹 어플리케이션을 개발하는데 디자인을 부트스트랩을 사용한다면, CSS 링크 및 JS 코드가 중복되고 페이지별로 반복될 것이다. 이런 상황에서 하나의 문서에 작성하여 Include를 사용하여 보다 간편하게 사용할 수 있는 것이다.
위 그림은 Include를 사용하지 않았을 때 부트스트랩 및 jQuery 등에 대한 반복되는 소스를 작성한 것이다. 만약 작성해야하는 페이지가 n개
라면 위의 코드를 n번만큼
의 복사, 붙여넣기로 계속 작업을 해야하며, 혹시라도 수정이 필요한 경우 페이지의 수만큼 수정을 해야하니 유지보수성
이 안좋을 수 밖에 없다. 이러한 부분을 해소하기 위해 Include를 사용하는 것이다. 다음은 Include를 사용한 것이다.
이전 그림과는 확연히 차이가 나는 상태이다. 이렇듯 Include를 사용하면 수정 사항이 발생할 경우 해당 파일의 소스
만 수정을 하면되기에 유지보수성
이 뛰어나다. 다음 그림은 Include된 파일의 소스를 보여준다.
반복되는 소스를 작성하여 저장을 해주면된다. 이렇게 작성된 Include 파일은 아래의 두가지 방식으로 호출이 가능하다.
//지시어 방식 = 정적인 방식
<%@ include file="/폴더명/파일명.jsp"%>
//해당소스를 포함시킨 후 컴파일 실행
먼저 지시어 방식
은 서버측
에서 실행하는 Include라고 생각하면된다. 즉 소스가 실행되기 전
에 기능이 실행된다. 또한 동적으로 페이지 할당이 불가능
하기 때문에 이 점을 고려하여야한다.
//액션 방식 = 동적인 방식
<jsp:include page="/폴더명/파일명.jsp">
//해당소스를 마주치면 해당 시점에 파일을 실행
반면 액션 방식
은 클라이언트 측
에서 실행되는 Include이다. 즉, 출력 결과만(html)
Iclude하는 것이다. 액션 방식은 동적으로 페이지 할당이 가능
하다.
Include가 단순하게 구조만 변경하는 것은 아니다. 하나의 완성된 페이지를 Include하고 싶은 경우도 있을 것이다. 그런 경우에는 Include한 페이지 내에 Parameter
를 전송하여 재사용이 가능하다. 아래 예시를 보자
//완성된 페이지 Include 액션방식으로 Include
<jsp:include page="페이지 주소"> //시작
<jsp:param name="변수명" value="값" />
...
<jsp:param name="변수명" value="값" />
</jsp:include> //끝
위와 같은 방법으로 Parameter를 전송하여도되고, 해당 페이지에서 직접 파라미터를 받아서 처리하는 방법을 사용하여도 된다.
Include 사용 시 몇가지 주의 사항이 있다. 먼저 Include하려는 페이지와 호출하려는 페이지에 중복된 소스가 있다면 해당 소스는 동일
하게 작성되어야한다. 아래 사진을 보자.
위 그림에서 보이는 것과 같이 "text/html;charset=UTF-8"
이 Include 대상 페이지 내에서는 "text/html; charset=UTF-8"
처럼 띄어쓰기가 되어있다면 오류가 발생한다.
다음은 Include 대상 파일을 작성할 경우 참고해야하는 사항들이다.
차이가 있다면 지시어 방식에 비해 액션 방식이 더 독립적이지만 성능 차이에서는 지시어 방식이 정적이기 때문에 더욱 빠르게 동작한다.
이번 글에서는 소스의 작성의 간편성을 제공하고 유지보수를 원할하게 할 수 있는 기능인 Include에 대해서 알아보았다.
정적인 방식을 사용하면 성능은 좋아지는 반면 동일한 이름의 변수 사용 들에 의한 심각한 오류가 발생할 수 있고, 동적인 방식을 사용하면 독립적이지만 성능이 상대적으로 안좋아진다. 이러한 부분은 개발자가 때에 따라서 알맞은 방식을 선택하여 적용해야하는 부분이기에 각자의 선택에 따라 적용하면 될 것이다.
https://12bme.tistory.com/135
https://needneo.tistory.com/201