JAVA - SPRING

[Java] 세션과 쿠키 | 클라이언트와 서버 | WAS Servlet이란?

엘라 ELLA 2022. 12. 25. 13:00
728x90
반응형

세션

  • 연결 지속성을 제공하기 위해 서버에 저장되는 정보
  • 통신 장치/컴퓨터와 사용자 간의 대화나 송수신 연결상태
  • HTTP 기반으로 동작하는 클라이언트가 서버에 정보를 요청할 때 생성되는 "상태정보"
  • 예로는 웹사이트 로그인 유지 (한번 사용자가 로그인 하면 종료 시까지 로그인상태가 유지되는것)

 

쿠키

  • 세션과 다르게 클라이언트에 저장되는 정보
  • 너무 많은 정보를 세션에 다 저장 할 수 없기 때문에 사용자의 클라이언트(컴퓨터 등) 메모리에 저장하는것
  • 예로는 사용자 개인의 페이지방문목록, 저장된 개인의 암호 등

 

클라이언트와 서버

클라이언트는 사용자들이 서버에 요청을 보내는 기기(컴퓨터, 모바일 기기 등)를 의미한다.

서버는 인터넷에 다양한 정보와 요청을 네트워크를 통해 제공해준다.


 

 

WAS(Web Application Server)란?

 - 웹어플리케이션 서버

 

게시판 페이지에서 사용자가 게시글목록을 요구하는 페이지(동적기능)를 요청했다.(GET Request)

(http://board.com/list)

 

이때, 사용자의 목록은 서버에서 곧바로 코드를 통해서 건네줄수 없다. 목록이 계속해서 변동하기 때문이다. 미리 목록을 만들어둔다면 그 목록을 만든 시점 다음으로 등록된 게시글은 목록에 없기 때문이다. 

 

그렇기 때문에 요청이 들어오면 목록을 얻어내기 위한 코드(Servlet)와 DB사이에서 추가로 동작하는것이 WAS이다.

 

WAS는 가져온 목록을 다시 코드로 돌려줘 해당 코드가 응답을 보내는것이다.(Response) 

 

 

WAS에는 Tomcat과 같은 종류가 있다.

 

Servlet이란?

서버에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스

 

위의 예시에서 동적 기능을 구현하기 위해 짜여진 자바코드가 Servlet에 해당한다.

 


 

WAS 에서 Session을 구분하는 방식

 

WAS안에는 학교 각 반의 사물함처럼 클라이언트마다의 세션이 존재한다.

 

게시판 작성하는 웹페이지가 있다고 가정하자. 게시판에 글을 쓰기 위해서 새로운사용자가 회원가입을 해서 로그인을 하게 된다면 로그인 하는순간 WAS는 해당 사용자에 맞는 Session을 찾는다.

 

이 때, 새로운 회원에게는 Session이 없으므로 Servlet이 동작하여 해당 회원만의 Session을 추가해 반환한다. (정확히는 SID(Session ID) 추가 => 여기서 추가된 SID를 1이라고 가정)

 

추후에 같은 사용자가 다시 로그인 하게 된다면 SID가 1인 Session에 값을 넣어준다.

 

 


 

세션 관련된 HttpServletRequest.getSession() 메소드

- 세션(Session)을 바인딩하여 반환하는 메소드

- 클라이언트가 가지고 있는 SID와 동일한 세션 객체를 찾아서 주솟값을 반환.

- 만일 세션이 존재하지 않으면 새로운 HttpSession 객체를 생성하여 반환합니다.(위에서 예시로 든 새로 가입한 회원의 경우)

 

 

간단한 동작

@RequestMapping ("/test")
public void test(HttpServletRequest request , Model model){
    String valueName = request.getParameter("value");
    model.addAttribute("value" , valueName);
}

 

HttpServletRequest를 사용해 Controller로 정보를 보내게 된다면, HttpServletRequest객체 안에 보내준 모든 정보들이 들어가게 된다.

 

해당 정보를 꺼내서 쓰고 싶을 땐, getParameter()를 사용해주면 된다.

String valueName = request.getParameter("value");

위의 코드는 HttpServletRequest의 "value"값을 valueName라는 이름으로  꺼내온것이다.

 

그리고 model객체를 추가해주었으므로 그 모델에 addAttribute를 통해서 값을 추가해주면 화면단에서 해당 값을 땡겨 쓸 수 있게된다. mustache를 기준으로 {{value}}를 작성하게 되면 여기에 자동으로 valueName의 값이 할당된다.

 

 

 


 

 

게시글이 도움이 되었다면

[로그인]이 필요 없는 ❤ 눌러주세요:)

반응형