클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

쿠키와 세션 2 - 세션에 대하여 본문

웹 · 앱 개발/JSP & Servlet

쿠키와 세션 2 - 세션에 대하여

huenuri 2024. 8. 29. 08:41

쿠키 학습을 마쳤으니 세션에 대해서 공부해보기로 하자. 많이는 하지 못해도 매일 꾸준히 공부하는 것만큼 좋은 것은 없다는 걸 요즘 느끼고 있다. 하기 싫어도 그냥 하다보면 된다.

바로 이어서 공부를 시작해본다.


 

 

세션(session)

쿠키는 클라이언트의 컴퓨터에 정보를 저장하여 하드웨어에 저장해 두었던 정보를 가져와 ㅔ이지가 이동되더라도 상태가 유지되도록 한다. 하지만 이 방법은 쿠키가 저장되는 데렉토리만 뒤지면 얼마든지 정보를 알아낼 수 있으므로 여러 사람이 PC를 공유하는 경우에는 개인 정보가 유출될 우려가 있다. 또한 저장할 수 있는 데이터도 1.2MB로 한계가 있다.

 

이러한 단점을 극복하기 위해 나온 상태 유지 방법 중 하나가 세션이다. 세션은 다음과 같은 장점이 있다.

  • JSP(서버)에서만 접근 가능하므로 보안 유지에 강력하다.
  • 저장할 수 있는 데이터에 한계가 없다.

세션은 서버 상에 존재하는 객체로서 브라우저  단위당 한 개씩 존재하게 된다. 세션은 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 하는 객체이다. 이러한 세션이 활용되는 대표적인 예는 로그인 페이지이다.

회원 전용 페이지의 경우 로그인 과정을 통해 해당 페이지를 사용할 수 있는 권한을 설정해야 한다. 이러한 권한 설정을 할 때 세션이 사용된다. 세션에 의해 로그인 인증 처리를 하면 해당 페이지를 사용할 수 있는 권한에 대한 상태가 유지되기 때문에 다른 페이지로 갔다가 돌아오더라도 다시 로그인을 하지 않고 바로 회원 전용 페이지를 사용할 수 있게 된다.

 

이제 웹 브라우저 하나를 띄우는 예제를 진행해보자. 새롭게 띄운 웹 브라우저에는 해당 페이지를 사용할 수 있는 권한이 없음을 알 수 있다. 새롭게 띄운 웹 브라우저에서 다시 로그인을 해야만 해당 사이트를 사용할 수 있는 권한을 부여받을 수 있게 된다.


 

 

 

 

세션 사용하기

JSP는 세션의 상태 관리를 위한 내장 객체 session을 제공한다. 다음은 session에서 자주 사용되는 메소드를 정리한 표이다.

 

 

상태 유지를 위해서는 세션에 값을 저장한 후 이를 가져와서 사용한다. 세션에 값을 저장하는 setAttribute()와 세션에 저장된 값을 얻기 위한 getAttribute()가 사용된다. 다음은 setAttribute()의 기본 형식이다.

session.setAttribute(String name, Object value);

 

setAttribute()로 세션에 값을 지정할 때 원하는 값을 찾아오기 위해서 이름을 지정해 줘야 하는데, 식별하기 위한 이름은 String 형이어야 한다. 세션에 저장하는 값은 Object 형이므로 어떠한 자료 형태로도 저장할 수 있다. 다음은 세션에 "pinksung"이란 문자열 값을 "id"란 이름으로 저장하는 예이다.

session.setAttribute("id", "pinksung");

 


 

 

 

세션에 값 설정하기

 

 

세션에 저장된 값을 얻어오기 위해서는 getAttribute()를 사용한다. 찾은 값이 Object 형이기 때문에 반드시 적절한 형 변환을 해야한다. 다음 예제를 통해 이 사실을 확인해보자.


 

 

 

세션에 저장된 값 얻어오기

 

 

조금 전에 저장한 값인데 세션으로 이렇게 불러올 수 있다.

 

 

 

 

 

세션을 관리하는 예제

 

 

이번에는 세션이 저장된 모든 값을 얻어오도록 하자. getAttributeNames() 메소드로 세션에서 이름을 java.util.Enumeration 형으로 얻어온다. Enumeration 형은 여러 개의 데이터를 집합처럼 관리하는 인터페이스이다.

 

 

session 객체로 getAttibuteNames()를 호출하면 세션에 저장된 항목들의 이름들을 Enumeration 형으로 얻어온다. Enumeration 객체에 저장된 이름들은 while 문을 사용하여 여러 번 반복하여 봅아온다. while의 조건에서 사용된 hasMoreElements()는 현재 뽑아올 데이터가 있는지를 검사하여 있으면 true, 없으면 false 값으로 되돌려 준다.

아이템이 존재하면 while문 안의 문장이 수행되며 여기서는 nextElement() 메소드를 사용하여 항목의 이름을 하나씩 뽑아온다. 이렇게 얻어진 이름을 세션의 getAtttibute() 메소드에 전달해 주어 세션에 저장되어 있는 값을 꺼내온다.


 

 

 

세션에 설정된 모든 값 얻어오기

 

노란줄이 떴는데 타입을 명시해주니 사라졌다.

 

 

 

세션의 값이 없는지 하나도 출력이 되지 않았다.


 

 

 

세션을 사용하는 예시

 

 

이 세션에도 값이 들어있지 않다. 이번에는 값을 넣는 코드를 한번 추가한 후 출력을 진행해볼 것이다.


 

 

 

 

 

세션을 설정하고 값을 얻어올 수 있었다. 책의 예제를 좀 잘 못만든 것 같다. 이런 식으로 먼저 값을 설정한 후에 출력을 해야 의미가 있을테니 말이다.


 

 

학습을 마치고

오늘 새벽 공부는 여기까지 진행해본다. 세션 메소드 관련 내용은 아직 하지 못해서 아쉽지만 일단 여기까지 진행하기로 했다. 이 부분은 점심시간에 와서 해볼 것이다.

이제 세션이 무엇인지 알 것 같고 뭔가 개념이 잡히고 있다.