# JSTL 보충자료

`sessionScope`는 Java의 JSP(Jakarta Server Pages)에서 JSTL(JSP Standard Tag Library)을 사용할 때, 특정 범위(scope)에 저장된 데이터에 접근하기 위한 객체 중 하나입니다. 여기서는 `sessionScope`를 통해 현재 사용자 세션에 저장된 데이터를 가져옵니다.

#### Scope란?

JSP에는 **데이터를 저장할 수 있는 4가지 범위**가 있습니다. 각 범위는 데이터를 저장하는 영역과 유효 범위를 정의합니다:

1. **pageScope**
   * 현재 JSP 페이지에서만 사용 가능한 데이터.
   * 같은 페이지 내에서도 다른 include된 JSP 파일에서는 접근할 수 없음.
2. **requestScope**
   * 현재 요청(request) 내에서 유효.
   * 같은 요청을 처리하는 다른 JSP 파일, 서블릿에서도 접근 가능.
3. **sessionScope**
   * 사용자의 세션 동안 유지.
   * 사용자가 웹 애플리케이션을 방문하고 나가는 동안(브라우저를 닫거나 세션이 만료될 때까지) 데이터가 유지됩니다.
4. **applicationScope**
   * 애플리케이션이 실행되는 동안 유효.
   * 같은 웹 애플리케이션 내 모든 사용자와 요청이 공유할 수 있음.

#### `sessionScope`의 특징

* **세션 단위 데이터 저장**: `sessionScope`는 세션에 저장된 데이터를 가져오거나 설정하는 데 사용됩니다.
  * 사용자는 브라우저를 열고 애플리케이션에 접속하면 세션이 생성됩니다.
  * 세션 데이터는 기본적으로 사용자별로 분리되어 있으며, 세션 타임아웃(기본값: 30분) 후 삭제됩니다.
* **저장 방식**: `session.setAttribute("key", value)` 메서드로 세션에 데이터를 저장하면, JSP에서는 `sessionScope.key`로 접근할 수 있습니다.
* **예시**:

  ```java
  // 서블릿에서 세션에 데이터 저장
  HttpSession session = request.getSession();
  session.setAttribute("username", "JohnDoe");
  ```

  ```jsp
  // JSP에서 세션 데이터 출력
  <p>Welcome, <c:out value="${sessionScope.username}" /></p>
  ```

  여기서 `sessionScope.username`은 서블릿에서 설정한 `"JohnDoe"` 값을 참조합니다.

#### 왜 사용하나요?

1. **사용자 정보 저장**:
   * 로그인한 사용자 정보를 저장해 여러 JSP 페이지에서 재사용.
2. **페이지 간 데이터 유지**:
   * 한 페이지에서 설정한 데이터를 다른 페이지에서도 사용할 수 있도록 유지.
3. **데이터 보호**:
   * 세션은 사용자별로 구분되므로 다른 사용자의 세션 데이터와 섞이지 않습니다.

#### 동작 원리

1. 클라이언트가 서버에 요청을 보낼 때, 서버는 세션을 식별하기 위해 클라이언트 쿠키(`JSESSIONID`)를 확인합니다.
2. 세션이 없으면 새로운 세션을 생성하고, 데이터를 저장합니다.
3. 클라이언트는 브라우저를 통해 세션 ID를 유지하며 서버에 데이터 요청 시 동일 세션으로 데이터를 공유합니다.

#### 주의 사항

1. **세션 크기 관리**:
   * 세션에 너무 많은 데이터를 저장하면 메모리를 많이 사용하므로 주의해야 합니다.
2. **세션 타임아웃**:
   * 세션은 일정 시간이 지나면 만료되므로 중요한 데이터를 저장할 때는 별도의 백업이 필요합니다.
3. **보안**:
   * 민감한 데이터(예: 비밀번호)는 세션에 저장하지 않는 것이 좋습니다. 대신 암호화된 토큰을 사용하는 것이 안전합니다.

`sessionScope`는 특히 로그인한 사용자 정보를 페이지 간에 유지할 때 유용하게 쓰이는 중요한 범위입니다.
