JSP(JavaServer Pages)는 서버 측에서 동적으로 HTML, XML 등의 문서를 생성할 수 있는 Java 기반의 웹 기술입니다. JSP는 웹 애플리케이션을 개발할 때 주로 프런트엔드와 백엔드 간의 연결을 담당하며, HTML 코드 내에 Java 코드를 포함할 수 있는 특징을 가지고 있습니다. JSP는 서블릿(Servlet) 기술의 확장된 형태로, 서블릿보다 HTML을 더 직관적으로 작성할 수 있어 웹 페이지 개발에 많이 사용됩니다.
JSP의 주요 특징
- 동적 콘텐츠 생성:
- JSP는 정적인 HTML 코드에 Java 코드를 포함하여 서버에서 동적으로 콘텐츠를 생성할 수 있습니다.
- 예를 들어, 데이터베이스에서 데이터를 불러와 웹 페이지에 표시하거나, 사용자 입력에 따라 다른 페이지를 생성할 수 있습니다.
- 서버 측 처리:
- JSP 페이지는 서버에서 실행되며, 브라우저에는 JSP가 렌더링한 HTML 파일만 전달됩니다. 즉, 클라이언트는 Java 코드를 볼 수 없습니다.
- JSP 페이지는 Java 서블릿으로 변환되어 실행되며, 웹 서버에서 자바 바이트코드로 컴파일되어 처리됩니다.
- JSP 태그:
- JSP는 Java 코드를 페이지에 포함하기 위해 다양한 태그를 제공합니다. 기본적으로 스크립트 태그를 사용하며, 이 외에도 여러 가지 표준 태그와 커스텀 태그를 사용할 수 있습니다.
JSP 코드 구조
JSP 파일은 기본적으로 HTML 문서의 구조를 따르며, 여기에 Java 코드를 삽입할 수 있습니다. 대표적인 JSP 태그에는 스크립트릿(Scriptlet), 표현식(Expression), 선언(Declaration) 등이 있습니다.
1. 스크립트릿 (Scriptlet)
<% ... %>
: JSP 페이지에서 Java 코드를 작성하는 가장 기본적인 방식입니다.- 예시:
<html> <body> <% String name = "John"; out.println("Hello, " + name); %> </body> </html>
- 스크립트릿 내에서 선언한 코드는 실행되어 결과가 페이지에 출력됩니다.
2. 표현식 (Expression)
<%= ... %>
: Java 표현식의 결과값을 출력할 때 사용합니다.- 예시:
<html> <body> Welcome, <%= name %> </body> </html>
- 이 태그는 Java 표현식의 결과값을 HTML로 출력하는 역할을 합니다.
3. 선언 (Declaration)
<%! ... %>
: JSP에서 메서드나 변수를 선언할 때 사용합니다.- 예시:
<html> <body> <%! public String greetUser(String name) { return "Hello, " + name; } %> <%= greetUser("John") %> </body> </html>
JSP 라이프사이클
JSP는 웹 서버에서 특정한 라이프사이클을 따릅니다. JSP 페이지는 요청을 받을 때마다 서블릿으로 변환되어 실행됩니다. JSP의 라이프사이클은 다음과 같습니다:
- JSP 페이지 요청: 클라이언트가 JSP 페이지를 요청합니다.
- 컴파일: JSP 페이지가 처음 요청될 때 서블릿으로 컴파일됩니다.
- 인스턴스화: JSP 서블릿 객체가 인스턴스화됩니다.
- 서비스 요청 처리: JSP 페이지가 처리되어 결과를 HTML로 변환한 후 클라이언트에 반환합니다.
- 파괴: JSP 서블릿 객체가 필요 없을 경우 메모리에서 제거됩니다.
JSP의 장점
- 서블릿에 비해 직관적:
- JSP는 서블릿처럼 Java 코드를 사용하지만, HTML 문서 내에 Java 코드를 쉽게 삽입할 수 있어 서블릿보다 직관적입니다.
- 동적 웹 페이지 생성:
- JSP는 서버 측에서 HTML을 동적으로 생성하여 사용자 맞춤형 페이지를 제공할 수 있습니다.
- 재사용성:
- JSP 태그 라이브러리를 통해 여러 JSP 페이지에서 공통으로 사용할 수 있는 모듈화된 코드를 작성할 수 있습니다.
- Java의 강력한 기능 사용:
- JSP는 Java 기반이므로, Java의 강력한 라이브러리와 API를 사용할 수 있어 복잡한 비즈니스 로직을 처리할 수 있습니다.
JSP의 단점
- 유지보수 문제:
- 많은 Java 코드가 JSP 파일에 포함되면 유지보수가 어려워질 수 있습니다. 그래서 MVC 패턴에서 JSP는 주로 뷰(View) 역할로 사용되며, 비즈니스 로직은 서블릿이나 다른 클래스에서 처리하는 것이 일반적입니다.
- 컴파일 오버헤드:
- JSP는 처음 요청될 때 서블릿으로 변환되고 컴파일되므로, 첫 번째 요청 시 시간이 걸릴 수 있습니다.
- 복잡한 구조:
- Java 코드가 HTML 코드와 뒤섞이면 가독성이 떨어질 수 있어, 이를 방지하기 위해 JSP 태그 라이브러리나 JSTL(JavaServer Pages Standard Tag Library) 같은 기술을 활용해야 합니다.
JSP의 대안 기술
- Thymeleaf: 최근에는 JSP 대신에 Thymeleaf와 같은 템플릿 엔진이 많이 사용됩니다. Thymeleaf는 HTML 파일을 유지하면서 서버 측에서 동적 데이터를 바인딩할 수 있어, JSP보다 더 직관적이고 깔끔한 코드 작성이 가능합니다.
- FreeMarker: 또 다른 템플릿 엔진으로, 서버에서 HTML을 생성할 때 많이 사용됩니다.
결론
JSP는 Java 기반의 웹 애플리케이션에서 동적으로 콘텐츠를 생성하는 데 유용한 기술입니다. 서블릿을 기반으로 하여 좀 더 쉽게 웹 페이지를 개발할 수 있게 해 주지만, 복잡한 애플리케이션에서는 비즈니스 로직과 뷰 로직의 분리를 위해 MVC 패턴을 적용하는 것이 권장됩니다.
프로젝트 생성하기
maven repository 사이트에서 JSTL
사용자 수가 많은 2번째 JSTL을 선택
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
application.properties 애플리케이션이 돌아가기 위한 설정을 해주는 곳
# App name
spring.application.name=exJSP
# Server port
server.port=8080
# Context path
server.servlet.context-path=/exJSP
# Restart WAS
spring.devtools.livereload.enabled=true
# Spring Datasource
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/db7
spring.datasource.username=db7
spring.datasource.password=1234
# JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
# JSP
spring.mvc.veiw.prefix=/WEB-INF/views
spring.mvc.view.suffix=.jsp
# File upload setting for Servlet
spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=C:\\upload
spring.servlet.multipart.max-request-size=30MB
spring.servlet.multipart.max-file-size=10MB
# File upload setting for Application
com.example.upload.path=c:\\upload
#log level ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF
#logging.level.org.springframework.security.web=trace
#logging.level.com.example=debug
# OAuth2 include
# spring.profiles.include=oauth
server.error.whitelabel.enabled=false
server.error.path=/error
OAuth2 를 사용하기 위해서 구글클라우드 플랫폼 에서 URL를 추가해줌
웹 애플리케이션의 클라이언트 ID
JSP는 템플릿 관련으로 View에 관련되어있음
views 폴더안에 index.jsp 파일을 생성해준다
jsp를 사용하기 위해서는
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
를 선언 해주어야 함
<%@ page contentType="text/html; charset=UTF-8" language="java"%>
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>JSP index<h1>
</body>
</html>
src/main/java/com/example/exJSP/ExJspApplication.java 에서 JPA 를 설정해줌
@SpringBootApplication
@EnableJpaAuditing //BasicEntity를 사용하기 위함.
@EnableJpaRepositories(basePackages = "com.example.exJSP.repository")
public class ExJspApplication {
public static void main(String[] args) {
SpringApplication.run(ExJspApplication.class, args);
}
}