본문 바로가기
Develop/Spring

[Spring] Spring 에서 Session 이용하기

by 코딩의성지 2019. 9. 17.

하루에 글 하나씩은 쓰자고 마음먹었는데, 퇴근하고 뒹굴 뒹굴하다 보니 벌써 새벽 2시가 다 되어 간다ㅠ 그래도 1일 1 글이라는 목표를 지키기위해 써야지 ... ( 내일 출근하는게 두렵다 )

 

포털 사이트를 이용하다 보면, 어떤 페이지를 가던지 로그아웃을 하기 전까지 로그인 상태가 유지 되어 있다.

 

가장 많이 접하는 네이버를 보자.

 

<네이버 메인 화면>

이렇게 메인 화면에서도 ......

<네이버 만화>

내가 좋아하는 네이버 만화 화면에서도 ........

 

<네이버 뉴스>

세상 얘기 궁금할 때보는 네이버 뉴스에서도 ......

 

이렇게 어느 페이지를 가든 내 로그인 정보가 보이는 걸 볼 수 있다.

 

보통 웹에서는 이것을 Session 이나 Cookie 를 통해 관리한다. 이거 무슨 말인지 모르는 사람들을 위해서 딱 간단하게 한 마디만 하고 간다. 

 

Session 이랑 Cookie 둘 다 정보를 가지고 있는데 정보를 가지고 있는 곳이 다르다.  Session은 서버에 정보가 저장되어있고 Cookie 는 클라이언트에 정보가 저장되어 있다. 성능을 위해서 두 개를 적절하게 나눠쓴다고 하는데, 이런 부분은 조금 더 공부해보는 걸 추천한다.

 

아무튼.... 오늘 나는 Session을 중점적으로 다루어볼 예정이다. 졸리다. 언제 다쓰냐.. 

 

Session에 대해 알기 쉽도록 그림을 그려봤다.

<Session 원리>

간단하게 설명을 해보자면,

 

① 서버에 연결하고 서비스를 요청한다. 편하게 로그인 서비스라고 생각하자.

② 로그인 기능을 수행하는 메서드가 있으면 메서드 바디에서 setAttribute() 메서드를 호출한다.

③ 그러고 나면 해당 속성값이 Session 안에다가 저장이 된다. 

④ 그 후 결과를 응답해준다. 이러면 로그인이 완료된거다.

⑤ 로그인 하고 난 뒤에 유저 수정 화면에 들어간다고 생각해보자. 유저 수정 서비스를 호출한다.

⑥ 수정 기능을 수행하는 메서드가 있으면 메서드 바디에서 getAttribute() 메서드를 호출한다.

⑦ 그러고 나면 해당 속성 값이 반환된다.

⑧ 이 값을 클라이언트에게 응답해주면 유저의 정보가 화면에 보여진다.

 

어떤 페이지에서든 로그 아웃을 하기 전까지 이런 방식으로 정보를 유지한다고 보면 된다. 

 

 좀 더 자세하게 코드를 통해 보자.

 

1
2
3
4
5
6
7
8
9
    @RequestMapping(value = "/userLogin", method = RequestMethod.POST)
    public String login(User user, HttpServletRequest request) {
        
        User user = service.userSearch(user);
        HttpSession session = request.getSession();
        session.setAttribute("user", user);
        
        return "userLogin";
    }
cs

위의 코드는 로그인을 위한 메서드인데, 해당 코드가 잘 이해가 안된다면 Spring Framework에 대한 기초적인 부분을 공부할 필요가 있다. (시간이 된다면 추후에 기초적인 부분까지 올릴게용) 위와 같은 방법으로 세션에 값을 저장해주면된다.

 

자 그럼, 세션에 값을 저장했으니 써봐야지~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    @RequestMapping(value = "/userModify", method = RequestMethod.POST)
    public ModelAndView userModify(User user, HttpServletRequest request) {
        
        HttpSession session = request.getSession();
        User befUser = (User) session.getAttribute("user");        
        User aftUser = service.userModify(user);
        
        ModelAndView mav = new ModelAndView();
        mav.addObject("befUser", befUser);
        mav.addObject("aftUser", aftUser);
        
        session.setAttribute("user", aftUser);
        
        mav.setViewName("userModify");
        
        return mav;
    }
cs

위의 코드는 "user" 라는 키값을 통해서 저장된 유저 정보를 찾고, 입력된 유저 객체로 값을 변경 한 뒤에 전 후의 유저 정보를 비교해주는 화면을 출력하는 코드이다. 뭐 이런식으로 사용하면 된다. 나중에 프로젝트할 때 응용해서 써보길 바란다.

 

아 그리고, 또 많이 쓰이는 걸 하나 빼먹을 뻔했다. 로그아웃 하거나 탈퇴할때는 저장된 세션을 삭제해버려야하지 않겠는가? 이때 쓰는게 invalidate() 메서드다. 코드를 한번 보자.

1
2
3
4
5
6
7
8
9
    @RequestMapping(value = "/userRemove", method = RequestMethod.POST)
    public String userRemove(@ModelAttribute("user") User user, HttpServletRequest request) {
        
        service.userRemove(user);
        HttpSession session = request.getSession();
        session.invalidate();
        
        return "userRemove";
    }
 

위와 같이 하면 세션을 날려버릴 수 있다.

이렇게 글로 읽어보면 어렵지 않은걸 볼 수 있다. 하지만 코딩 안해보면 절대로 익숙해질 수 없다. 한번 프로젝트 만들어서 실습해보길 바란다. 그럼 오늘도 즐겁게 코딩하자~~

반응형

댓글