📌 초급 개발자를 위한 EL(Expression Language, ${}
) 개념 정리
✅ EL(Expression Language, 표현 언어)이란?
✔ JSP(Java Server Pages)에서 데이터를 간편하게 출력할 수 있도록 도와주는 기능입니다.
✔ 기존의 <%= request.getAttribute("name") %>
같은 복잡한 코드를 ${name}
으로 간단하게 쓸 수 있게 해줍니다.
✔ 주로 request
, session
, application
스코프에 저장된 데이터를 출력할 때 사용됩니다.
✅ 1. EL(Expression Language) 왜 필요한가?
🔹 기존 방식 (EL 없이 JSP에서 데이터 출력)
<% String name = (String) request.getAttribute("name"); %>
<p>이름: <%= name %></p>
✔ request.getAttribute()
를 직접 호출해야 하므로 코드가 길고 복잡함.
✔ 타입 캐스팅((String) request.getAttribute("name")
)을 직접 해야 함.
🔹 EL을 사용한 방식 (더 간결한 코드)
<p>이름: ${name}</p>
✔ request.getAttribute("name")
을 자동으로 찾아 출력함.
✔ 타입 캐스팅이 필요 없음.
✔ 코드가 짧고 가독성이 좋아짐.
✅ 2. EL을 사용하는 방법
🔹 EL로 데이터 출력하기
EL은 주로 JSP에서 request.setAttribute()
로 저장된 데이터를 출력할 때 사용됩니다.
🔹 서블릿에서 데이터 저장
request.setAttribute("name", "홍길동");
RequestDispatcher dispatcher = request.getRequestDispatcher("profile.jsp");
dispatcher.forward(request, response);
🔹 JSP에서 EL을 사용하여 데이터 출력
<p>이름: ${name}</p> <!-- "홍길동" 출력 -->
✔ EL이 자동으로 request.getAttribute("name")
을 찾아 출력합니다.
✅ 3. EL에서 사용 가능한 데이터 스코프
EL 표현식 | 설명 |
---|---|
${param.name} |
request.getParameter("name") (쿼리 스트링 or 폼 데이터 가져오기) |
${requestScope.name} |
request.getAttribute("name") (요청 스코프 데이터 가져오기) |
${sessionScope.user} |
session.getAttribute("user") (세션 데이터 가져오기) |
${applicationScope.count} |
application.getAttribute("count") (애플리케이션 데이터 가져오기) |
🔹 예제: EL로 스코프별 데이터 가져오기
<p>쿼리스트링 값: ${param.username}</p>
<p>요청 스코프 값: ${requestScope.name}</p>
<p>세션 스코프 값: ${sessionScope.user}</p>
<p>애플리케이션 스코프 값: ${applicationScope.count}</p>
✅ 4. EL의 연산 기능
EL은 단순히 데이터를 출력하는 것뿐만 아니라, 연산도 가능합니다.
🔹 수학 연산
<p>10 + 20 = ${10 + 20}</p> <!-- 30 출력 -->
<p>100 - 50 = ${100 - 50}</p> <!-- 50 출력 -->
🔹 문자열 연산
<p>이름: ${"홍" + "길동"}</p> <!-- 홍길동 출력 -->
🔹 논리 연산
<p>1 == 1 ? ${1 == 1}</p> <!-- true 출력 -->
<p>10 > 20 ? ${10 > 20}</p> <!-- false 출력 -->
✅ 5. EL에서 객체의 속성 출력하기
✔ EL은 객체의 getter 메서드를 자동으로 호출합니다.
✔ user.getName()
을 호출하는 대신 ${user.name}
으로 간단하게 사용할 수 있습니다.
🔹 서블릿에서 객체 저장
User user = new User("홍길동", 25);
request.setAttribute("user", user);
🔹 User 클래스
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
}
🔹 JSP에서 EL을 사용하여 객체의 속성 출력
<p>이름: ${user.name}</p> <!-- 홍길동 출력 -->
<p>나이: ${user.age}</p> <!-- 25 출력 -->
✔ EL은 user.getName()
을 자동으로 찾아서 ${user.name}
으로 출력합니다.
✅ 6. Spring과 Spring Boot에서 EL 사용 가능 여부
✅ Spring에서 JSP를 사용할 경우 EL(${}
)을 그대로 사용할 수 있습니다.
❌ Spring Boot에서는 Thymeleaf를 사용하며 ${}
대신 th:text="${}"
와 같은 문법을 사용합니다.
🔹 Spring Boot + Thymeleaf 예제 (EL과 비슷한 표현)
<p th:text="${user.name}"></p> <!-- Thymeleaf 방식 -->
✔ JSP의 ${user.name}
과 비슷하지만, Thymeleaf에서는 th:text="${user.name}"
을 사용합니다.
✅ 7. 결론
✅ EL(Expression Language, ${}
)은 JSP에서 데이터를 출력할 때 사용되는 간단한 표현 언어입니다.
✅ 서블릿에서 request.setAttribute()
로 저장된 데이터를 쉽게 출력할 수 있습니다.
✅ 객체의 getter
를 자동으로 찾아서 사용할 수 있습니다. (${user.name}
→ user.getName()
호출)
✅ Spring의 JSP에서는 그대로 사용되지만, Spring Boot에서는 Thymeleaf가 기본 템플릿 엔진으로 사용됩니다.
🚀 이제 EL을 이해했으니, JSP에서 데이터를 출력하는 게 훨씬 쉬워질 거야! 😊
📌 EL(Expression Language, ${}
)는 Spring과 Spring Boot에서도 사용될까?
✅ 네, 하지만 Spring과 Spring Boot에서는 JSP의 EL 대신 다른 템플릿 엔진(Thymeleaf, FreeMarker 등)이 주로 사용됩니다!
✔ JSP 기반의 Spring 프로젝트에서는 EL(${}
)을 그대로 사용할 수 있습니다.
✔ Spring Boot에서는 JSP를 잘 사용하지 않고, 대신 Thymeleaf 같은 템플릿 엔진을 선호합니다.
✔ Thymeleaf에서는 ${}
와 유사한 표현식을 사용하지만, 문법이 조금 다릅니다.
✅ 1. Spring(Spring MVC)에서 EL(${}
) 사용 가능 여부
✔ Spring MVC에서 JSP를 사용할 경우 EL(${}
)을 그대로 사용할 수 있습니다.
✔ JSP에서 데이터를 출력할 때 EL을 사용하여 request
, session
, model
데이터를 참조할 수 있습니다.
🔹 Spring + JSP에서 EL(${}
) 사용 예제
1️⃣ 컨트롤러 (Spring MVC
)
@Controller
@RequestMapping("/member")
public class MemberController {
@GetMapping("/profile")
public String showProfile(Model model) {
model.addAttribute("username", "홍길동");
return "member/profile"; // profile.jsp로 이동
}
}
✔ model.addAttribute("username", "홍길동");
으로 데이터를 JSP에 전달
2️⃣ JSP (profile.jsp
)
<p>사용자 이름: ${username}</p> <!-- "홍길동" 출력 -->
✔ Spring MVC에서 JSP를 사용할 경우 EL(${}
)을 그대로 사용 가능!
✅ 2. Spring Boot에서 EL(${}
) 사용 가능 여부
❌ Spring Boot에서는 JSP를 기본적으로 사용하지 않으므로, EL(${}
)을 잘 사용하지 않습니다.
✅ 대신, Thymeleaf 같은 템플릿 엔진을 사용하며, ${}
대신 th:text
와 같은 표현식을 사용합니다.
🔹 Spring Boot + Thymeleaf에서 데이터 출력 예제
1️⃣ 컨트롤러 (Spring Boot
)
@Controller
@RequestMapping("/member")
public class MemberController {
@GetMapping("/profile")
public String showProfile(Model model) {
model.addAttribute("username", "홍길동");
return "member/profile"; // profile.html로 이동
}
}
✔ Spring Boot에서는 JSP 대신 Thymeleaf를 사용하며, model.addAttribute()
를 통해 데이터를 전달합니다.
2️⃣ Thymeleaf 템플릿 (profile.html
)
<p>사용자 이름: <span th:text="${username}"></span></p>
✔ Thymeleaf에서는 EL(${}
) 대신 th:text="${}"
를 사용합니다.
✅ 3. Spring, Spring Boot에서 EL(${}
) 사용 가능 여부 비교
환경 | JSP 사용 여부 | EL(${} ) 사용 여부 |
주로 사용하는 템플릿 엔진 |
---|---|---|---|
Spring (Spring MVC) | 가능 | 가능 (${} 그대로 사용) |
JSP, Thymeleaf 가능 |
Spring Boot | 거의 사용 안 함 | 거의 사용 안 함 | Thymeleaf, FreeMarker |
✅ 4. 결론
✔ Spring MVC에서는 JSP를 사용할 경우 EL(${}
)을 그대로 사용할 수 있습니다.
✔ Spring Boot에서는 JSP 대신 Thymeleaf를 사용하며, ${}
대신 th:text="${}"
같은 표현식을 사용합니다.
✔ Spring Boot에서 JSP를 사용하려면 별도 설정이 필요하며, 일반적으로 권장되지 않습니다.
📌 ?
의 의미 (JSP, EL, Java에서 사용되는 경우 정리)
✅ ?
는 사용하는 환경에 따라 의미가 다릅니다.
1️⃣ EL(Expression Language, ${}
)에서 ?
2️⃣ JSP에서 ?
3️⃣ Java에서 ?
✅ 1. EL(Expression Language)에서 ?
✔ EL에서는 ?
를 직접 사용하지 않지만, 삼항 연산자 (조건 ? 값1 : 값2
)를 지원합니다.
✔ 조건이 참이면 값1
, 거짓이면 값2
를 반환합니다.
🔹 EL 삼항 연산자 예제
<p>10이 5보다 큰가? ${10 > 5 ? "참" : "거짓"}</p>
🔹 출력 결과
10이 5보다 큰가? 참
✔ 10 > 5
가 true
이므로 "참"
이 출력됩니다.
✅ 2. JSP에서 ?
✔ JSP에서 ?
는 주로 URL에서 쿼리 스트링(Query String) 값을 전달할 때 사용됩니다.
✔ ?key=value
형식으로 데이터를 전송할 수 있습니다.
🔹 예제: 하이퍼링크에 ?
를 사용하여 데이터 전달
<a href="profile.jsp?username=hong">프로필 보기</a>
✔ profile.jsp?username=hong
으로 이동하며, username=hong
이라는 데이터를 함께 보냄.
🔹 JSP에서 쿼리 스트링 값 읽기
<%
String username = request.getParameter("username");
%>
<p>이름: <%= username %></p>
✔ ?username=hong
이 포함된 URL로 요청하면 "이름: hong"
이 출력됨.
✅ 3. Java에서 ?
Java에서는 ?
가 여러 가지 의미로 사용될 수 있음.
🔹 (1) 삼항 연산자 (Ternary Operator)
String result = (10 > 5) ? "참" : "거짓";
System.out.println(result);
✔ 10 > 5
가 true
이므로 "참"
이 출력됨.
🔹 (2) 제네릭(Generic)에서 와일드카드 ?
✔ 제네릭에서 ?
는 "어떤 타입이든 가능"하다는 의미.
public void printList(List<?> list) { // 어떤 타입이든 받을 수 있음
for (Object obj : list) {
System.out.println(obj);
}
}
✔ List<String>
, List<Integer>
등 다양한 타입을 받을 수 있음.
✅ 최종 정리
사용 환경 | ? 의 의미 |
예제 |
---|---|---|
EL (Expression Language) | 삼항 연산자 | ${10 > 5 ? "참" : "거짓"} |
JSP | URL 쿼리 스트링 시작 | <a href="profile.jsp?username=hong"> |
Java (일반 연산자) | 삼항 연산자 | String result = (10 > 5) ? "참" : "거짓"; |
Java (제네릭) | 와일드카드 (타입 제한 없음) | List<?> list |
🚀 이제 ?
의 의미를 완벽하게 이해했을 거야! 😊
📌 JSP에서 ?
의 의미 및 데이터 전달 스코프
✅ 1. JSP에서 ?
의 의미
✔ JSP에서 ?
는 URL에서 "쿼리 스트링(Query String)"을 시작하는 기호입니다.
✔ 쿼리 스트링(Query String)은 URL을 통해 데이터를 전달하는 방법 중 하나입니다.
✔ 일반적으로 GET
요청에서 데이터를 전달할 때 사용됩니다.
🔹 예제: ?
를 사용한 데이터 전달
<a href="profile.jsp?username=hong">프로필 보기</a>
✔ ?username=hong
→ username=hong
데이터를 profile.jsp
에 전달.
✔ 브라우저 주소창에 http://localhost:8080/profile.jsp?username=hong
으로 요청이 발생함.
✅ 2. 어느 스코프에 전달될까? (request.getParameter()
사용)
쿼리 스트링으로 전달된 데이터는 "요청 파라미터(Request Parameter)"로 처리됩니다.
✅ 즉, request
객체를 통해 접근할 수 있으며, "요청(Request) 스코프"에 저장됩니다.
🔹 JSP에서 request.getParameter()
를 사용하여 데이터 읽기
<%
String username = request.getParameter("username"); // 요청 스코프에서 데이터 가져옴
%>
<p>사용자 이름: <%= username %></p>
✔ 결과: ?username=hong
이 포함된 URL로 요청하면 "사용자 이름: hong"
이 출력됨.
✔ 쿼리 스트링 값은 request
스코프에 저장되며, request.getParameter("username")
으로 가져올 수 있음.
✅ 3. 스코프 정리 (request
, session
, application
)
스코프 | 데이터 저장 위치 | 유지 기간 | 예제 |
---|---|---|---|
Request (요청 스코프) | 현재 요청 내에서만 유지 | 페이지 이동 시 사라짐 | request.getParameter("username") |
Session (세션 스코프) | 특정 사용자에 대해 유지 | 브라우저 종료 또는 세션 만료 시 삭제 | session.setAttribute("user", user); |
Application (애플리케이션 스코프) | 서버가 실행되는 동안 유지 | 서버가 종료될 때까지 유지됨 | application.setAttribute("siteName", "MyWebsite"); |
✅ 쿼리 스트링으로 전달된 값은 request
스코프에 저장되며, request.getParameter("key")
로 가져올 수 있음.
✅ 4. 결론
✔ JSP에서 ?
는 URL의 쿼리 스트링(Query String)을 시작하는 기호.
✔ 쿼리 스트링으로 전달된 데이터는 request
스코프에 저장됨.
✔ request.getParameter("key")
를 사용하여 데이터를 가져올 수 있음.
🚀 이제 JSP에서 ?
의 역할과 데이터 전달 스코프를 완벽히 이해했을 거야! 😊
📌 JSTL(JavaServer Pages Standard Tag Library) 개념 정리
✅ JSTL(JavaServer Pages Standard Tag Library)이란?
✔ JSP(Java Server Pages)에서 자주 사용되는 기능을 편리하게 사용할 수 있도록 제공하는 태그 라이브러리입니다.
✔ EL(Expression Language, ${}
)과 함께 사용되며, JSP 내에서 Java 코드 (<% %>
)를 최소화하는 것이 목적입니다.
✔ 조건문, 반복문, 데이터 출력, 포맷팅, SQL 실행 등을 쉽게 할 수 있음.
✅ 1. JSTL을 사용해야 하는 이유
기존의 JSP 코드에서는 Java 코드가 직접 포함되어 복잡해지는 경우가 많습니다.
🔹 JSTL 없이(기존 JSP 방식)
<%
for(int i = 0; i < 5; i++) {
%>
<p>현재 숫자: <%= i %></p>
<%
}
%>
✔ <% %>
와 <%= %>
가 많아져서 가독성이 떨어짐.
🔹 JSTL을 사용하면 더 간결해짐
<c:forEach var="i" begin="0" end="4">
<p>현재 숫자: ${i}</p>
</c:forEach>
✔ JSP 코드가 더 깔끔하고 유지보수가 쉬워짐.
✔ <% %>
대신 태그 기반(c:forEach
)으로 사용 가능.
✅ 2. JSTL의 주요 기능 및 태그
JSTL은 기능별로 여러 개의 태그 라이브러리(코어, 포맷, SQL, XML, 함수)를 제공합니다.
라이브러리 | 설명 | 태그 예제 |
---|---|---|
Core (코어) | 변수 설정, 조건문, 반복문 등 기본적인 기능 | <c:if> , <c:forEach> , <c:set> |
Format (포맷팅) | 숫자, 날짜, 국제화 포맷 적용 | <fmt:formatNumber> , <fmt:formatDate> |
SQL (데이터베이스 연동) | JSP에서 SQL 쿼리 실행 (하지만 실무에서는 MyBatis, JPA 사용) | <sql:query> , <sql:update> |
XML (XML 처리) | XML 데이터 파싱 및 출력 | <x:parse> , <x:out> |
Functions (함수) | 문자열 처리 관련 기능 제공 | ${fn:length(list)} |
✅ 3. JSTL 사용법
🔹 1️⃣ JSTL 라이브러리 선언하기 (taglib
지시어 추가)
JSTL을 사용하려면 JSP 상단에 라이브러리를 선언해야 합니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
✔ prefix="c"
를 설정하면 c:forEach
, c:if
등의 태그를 사용할 수 있습니다.
🔹 2️⃣ 주요 JSTL 태그 예제
(1) c:set
- 변수 선언
<c:set var="name" value="홍길동" />
<p>이름: ${name}</p> <!-- 홍길동 출력 -->
✔ EL(${}
)을 사용하여 변수 값을 출력할 수 있음.
(2) c:if
- 조건문
<c:if test="${10 > 5}">
<p>10은 5보다 큽니다.</p>
</c:if>
✔ test
속성의 조건이 true
이면 태그 내부의 코드를 실행함.
(3) c:choose
, c:when
, c:otherwise
- 다중 조건문 (if-else)
<c:set var="age" value="20" />
<c:choose>
<c:when test="${age >= 18}">
<p>성인입니다.</p>
</c:when>
<c:otherwise>
<p>미성년자입니다.</p>
</c:otherwise>
</c:choose>
✔ c:choose
는 if-else if-else
구조와 동일한 역할을 함.
(4) c:forEach
- 반복문
<c:forEach var="num" begin="1" end="5">
<p>숫자: ${num}</p>
</c:forEach>
✔ 1부터 5까지 반복하면서 num
변수를 출력.
(5) c:forEach
- 리스트(배열) 반복
<c:set var="fruits" value="Apple, Banana, Cherry" />
<c:forEach var="fruit" items="${fruits.split(', ')}">
<p>과일: ${fruit}</p>
</c:forEach>
✔ 리스트(배열)를 c:forEach
로 반복 처리 가능.
✅ 4. JSTL을 사용하기 위한 필수 설정
JSTL을 사용하려면 JSTL 라이브러리를 추가해야 합니다.
🔹 Maven 프로젝트에서 JSTL 추가 (pom.xml
)
Spring 또는 JSP 프로젝트에서 JSTL을 사용하려면 아래와 같이 pom.xml
에 추가해야 합니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
✔ Maven 프로젝트가 아니라면 jstl-1.2.jar
을 직접 다운로드해서 lib
폴더에 추가해야 합니다.
✅ 5. JSTL vs EL(${}
) 차이
구분 | JSTL (<c:forEach> , <c:if> ) |
EL (${} ) |
---|---|---|
기능 | 조건문, 반복문, 변수 설정 등 | 데이터를 출력하는 표현식 |
사용 목적 | JSP에서 Java 코드를 줄이고 태그 기반으로 로직 처리 | request , session 데이터를 간단하게 출력 |
예제 | <c:if test="${num > 5}"> |
${user.name} |
✔ EL은 데이터를 출력할 때 주로 사용되고, JSTL은 반복문과 조건문을 처리할 때 사용됩니다.
✅ 6. Spring과 Spring Boot에서 JSTL 사용 가능?
✅ Spring에서 JSP를 사용할 경우 JSTL을 그대로 사용할 수 있습니다.
❌ Spring Boot에서는 JSP를 기본적으로 사용하지 않으며, 대신 Thymeleaf를 사용합니다.
🔹 Spring Boot + Thymeleaf에서 반복문 (JSTL 대체 방식
)
<ul>
<li th:each="fruit : ${fruits}" th:text="${fruit}"></li>
</ul>
✔ Spring Boot에서는 c:forEach
대신 th:each
를 사용하여 리스트를 출력합니다.
✅ 7. 결론
✅ JSTL(JavaServer Pages Standard Tag Library)은 JSP에서 반복문, 조건문 등을 쉽게 사용할 수 있도록 도와주는 태그 라이브러리입니다.
✅ Java 코드를 최소화하고, <% %>
대신 <c:forEach>
, <c:if>
등의 태그를 사용하여 가독성을 높입니다.
✅ Spring의 JSP에서는 JSTL을 사용할 수 있지만, Spring Boot에서는 JSP 대신 Thymeleaf를 권장합니다.
🚀 이제 JSTL을 이해했으니, JSP에서 더 효율적으로 코드를 작성할 수 있을 거야! 😊
'웹 개발 > 웹 개발 기초' 카테고리의 다른 글
Spring Boot와 Hibernate의 네이밍 전략 (0) | 2025.04.17 |
---|---|
Spring Boot + React + MySQL 네이밍 정리표 (0) | 2025.04.11 |
서블릿 매핑 방식 (0) | 2025.02.07 |
MVC 개념 및 모델1 vs 모델2 (0) | 2025.02.07 |
HTTP전달방식(GET방식과 POST방식) (0) | 2025.02.07 |