게으른 개발자의 끄적거림

<%@ include %> <jsp:include> 차이 완벽 정리

끄적잉 2024. 7. 9. 22:09
728x90

 

`include`와 `jsp:include`는 JSP(JavaServer Pages)에서 다른 파일을 포함하는 데 사용되는 두 가지 주요 방법입니다. 이 둘은 기본적인 사용 목적은 동일하지만, 동작 방식과 결과가 다릅니다. 각 방법에 대해 자세히 설명하고, 차이점도 명확히 알아보겠습니다.

 


## `include` 디렉티브

`include` 디렉티브는 JSP 페이지에서 다른 파일의 내용을 포함하는 정적인 방법입니다. 이는 페이지가 컴파일될 때 포함 파일의 내용이 그대로 삽입되는 방식으로 작동합니다.

### 구문

```jsp
<%@ include file="path_to_file" %>
```

### 작동 방식

`include` 디렉티브는 JSP 페이지가 컴파일될 때 작동합니다. 컴파일러는 디렉티브가 있는 위치에 포함할 파일의 내용을 그대로 복사하여 JSP 파일에 삽입합니다. 이 방식은 JSP 페이지가 하나의 파일로 합쳐진 후에 컴파일되고 서블릿으로 변환됩니다. 따라서 포함되는 파일의 내용이 정적이고 변하지 않는 경우 적합합니다.

### 장점

1. **성능**: 컴파일 시 포함 파일의 내용이 삽입되므로 런타임 오버헤드가 없습니다. 즉, 실행 시 추가적인 처리가 필요하지 않기 때문에 성능이 좋습니다.
2. **단순함**: 파일 내용을 단순히 삽입하는 방식으로 작동하므로 이해하고 사용하기 쉽습니다.
3. **전처리**: 포함된 파일은 JSP 페이지가 컴파일될 때 삽입되므로, JSP 페이지의 모든 전처리 작업에 포함됩니다.

### 단점

1. **동적 콘텐츠**: 포함된 파일이 정적이기 때문에, 동적으로 변경되는 콘텐츠를 포함하는 데 적합하지 않습니다.
2. **유지 관리**: 포함된 파일의 내용이 변경되면, 이를 포함하는 모든 JSP 페이지를 다시 컴파일해야 합니다.

 

 

 

 


## `jsp:include` 액션 태그

`jsp:include` 액션 태그는 JSP 페이지에서 다른 파일을 포함하는 동적인 방법입니다. 이는 페이지가 요청될 때 포함 파일의 내용을 포함하는 방식으로 작동합니다.

### 구문

```jsp
<jsp:include page="path_to_file" flush="true" />
```

### 작동 방식

`jsp:include` 액션 태그는 JSP 페이지가 요청될 때 작동합니다. JSP 페이지의 실행 중에 지정된 파일을 포함시키며, 이 파일은 별도의 JSP 페이지로 처리되고 결과가 원래 JSP 페이지에 삽입됩니다. 이 방식은 동적 콘텐츠를 포함하는 데 적합합니다.

### 장점

1. **동적 콘텐츠**: 포함된 파일이 JSP 페이지 요청 시 처리되므로, 동적으로 변경되는 콘텐츠를 포함하는 데 적합합니다.
2. **모듈화**: 다양한 JSP 파일을 모듈화하고 재사용할 수 있어 유지보수와 관리가 용이합니다.
3. **실시간 업데이트**: 포함된 파일이 변경되더라도, 이를 포함하는 JSP 페이지를 다시 컴파일할 필요가 없습니다.

### 단점

1. **성능**: 각 요청 시 포함된 파일이 처리되므로, 런타임 오버헤드가 발생할 수 있습니다.
2. **복잡성**: 동적으로 파일을 포함하므로, 이해하고 디버깅하는 데 다소 복잡할 수 있습니다.

## `include` 디렉티브와 `jsp:include` 액션 태그의 차이점

### 시점

- **`include` 디렉티브**: 컴파일 시에 파일이 포함됩니다. JSP 파일이 서블릿으로 변환되는 시점에 포함 파일의 내용이 삽입됩니다.
- **`jsp:include` 액션 태그**: 런타임 시에 파일이 포함됩니다. JSP 페이지가 요청될 때, 포함 파일이 처리되고 그 결과가 원래 JSP 페이지에 포함됩니다.

### 포함 방식

- **`include` 디렉티브**: 포함 파일의 내용이 원본 JSP 파일에 물리적으로 복사됩니다.
- **`jsp:include` 액션 태그**: 포함 파일은 별도의 JSP 페이지로 처리되며, 그 출력 결과가 원래 JSP 페이지에 삽입됩니다.

### 성능

- **`include` 디렉티브**: 컴파일 시에 포함 파일이 처리되므로, 런타임 오버헤드가 없습니다. 따라서 성능이 더 우수할 수 있습니다.
- **`jsp:include` 액션 태그**: 요청 시에 포함 파일이 처리되므로, 런타임 오버헤드가 발생할 수 있습니다.

### 동적 콘텐츠 처리

- **`include` 디렉티브**: 정적 콘텐츠 포함에 적합합니다. 포함 파일의 내용이 변경되면 전체 JSP 페이지를 다시 컴파일해야 합니다.
- **`jsp:include` 액션 태그**: 동적 콘텐츠 포함에 적합합니다. 포함 파일의 내용이 변경되더라도, 이를 포함하는 JSP 페이지를 다시 컴파일할 필요가 없습니다.

### 유지보수와 모듈화

- **`include` 디렉티브**: 정적인 파일 포함에 적합하며, 여러 페이지에서 동일한 파일을 포함할 때는 유지보수에 불편함이 있을 수 있습니다.
- **`jsp:include` 액션 태그**: 동적인 파일 포함에 적합하며, 모듈화를 통해 코드 재사용과 유지보수가 용이합니다.

## 예제

### `include` 디렉티브 예제

**main.jsp**:
```jsp
<%@ include file="header.jsp" %>
<body>
    <h1>Welcome to my website!</h1>
    <%@ include file="footer.jsp" %>
</body>
```

**header.jsp**:
```jsp
<header>
    <h2>This is the header</h2>
</header>
```

**footer.jsp**:
```jsp
<footer>
    <p>This is the footer</p>
</footer>
```

이 경우, `main.jsp`는 컴파일 시에 `header.jsp`와 `footer.jsp`의 내용을 포함합니다.

### `jsp:include` 액션 태그 예제

**main.jsp**:
```jsp
<jsp:include page="header.jsp" flush="true" />
<body>
    <h1>Welcome to my website!</h1>
    <jsp:include page="footer.jsp" flush="true" />
</body>
```

**header.jsp**:
```jsp
<header>
    <h2>This is the header</h2>
</header>
```

**footer.jsp**:
```jsp
<footer>
    <p>This is the footer</p>
</footer>
```

이 경우, `main.jsp`는 요청 시에 `header.jsp`와 `footer.jsp`를 포함합니다. `header.jsp`와 `footer.jsp`는 별도의 JSP 페이지로 처리되고 그 결과가 `main.jsp`에 삽입됩니다.

## 결론

`include` 디렉티브와 `jsp:include` 액션 태그는 각각의 장단점이 있으며, 상황에 맞게 선택적으로 사용해야 합니다. 정적인 콘텐츠를 포함하고자 할 때는 `include` 디렉티브가 적합하며, 동적인 콘텐츠를 포함하고자 할 때는 `jsp:include` 액션 태그가 적합합니다. 웹 애플리케이션의 성능과 유지보수 측면을 고려하여 올바른 방법을 선택하는 것이 중요합니다.

728x90