티스토리 뷰

전 글에서 200 ok와 302 Found의 차이를 알아보았다. 

자세한 내용은 아래 링크로 들어가면 볼 수 있다.

https://resian-programming.tistory.com/57

 

Request handler - 302Found

Spring boot로 작업을 하다 보면 Controller에서 redirect를 이용해 원하는 곳에 요청을 보낼 수가 있다. HTTP에도 이와 비슷한 것이 있는데 바로 302 Found다. 위 사진은 Response의 Header에 200 OK를 보내고..

resian-programming.tistory.com

 

- 회원가입 시 302 Found 적용하기 -

이제 코드를 실제로 구현하기 위해 response302Header라는 Method를 생성하고

200 OK와는 달리 HTTP Code와 Location만 넣었다.

/user/create의 요청일 때만 response302Header Method를 호출하기 때문에 if문으로 분기를 나눴다.

테스트를 위해 실행해본 결과 Location 지정하지 않은 /user/create.html으로 이동하는 것을 확인하고,

html로 들어가 action의 "/user/create.html"을 "/user/create"로 변경하였다.

다시 테스트를 진행한 결과 브라우저와 콘솔에서 /index.html로 이동하는 것을 확인할 수 있었다.

 

- login을 구현하고 302 Found 적용하기 -

login을 하기 위해서는 회원가입 할 때 DataBase에 저장이 되어야 한다.

스승님께서 미리 구현하신 Map 형태의 DataBase에 User 객체를 저장해야 하므로

아래와 같이 회원가입을 할 때 response302Header Method를 호출하기 전에 DataBase에 저장하였다.

위에 코드는 /user/create에 해당하는 요청만 하므로

if문을 이용하여 /user/login에 해당하는 요청을 처리하도록 하였다.

이제 login302Header Method를 생성하였는데, response302Header Method와 다른 점은

parameter가 추가된 점과 location이라는 Method를 통해 302 Found의 Location을 정해주고 있다는 점이다.

location Method를 호출하게 되면 사용자가 보낸 request body의 값을 Map으로 만들고 원하는 key값에 해당하는 값을

isLogin Method로 넘기면 DataBase에 저장된 userId의 키값에 해당하는 user 객체를 가져온 뒤 값이 동일한지 비교한다.

이후 location Method로 돌아온 흐름은 isLogin이 true인지 false인지에 따라 Location을 String 값으로 반환해준다.

login 성공 테스트 진행을 위해 

userId = a / password = 123 / name = a / email = a@a.a로 회원가입을 하고

login을 하였을 때 location으로 지정해둔 /user/list.html로 잘 이동하는 걸 확인하였다.

하지만 이상하게도 login이 실패할 경우 location의 url이 아니라 /user/login으로 이동하였는데 이 부분은 나의 실수였다.

실패했을 경우 /user/login.html이 아닌 /user/login_failed.html로 이동하도록 변경해주고 다시 테스트한 결과

원하는 페이지로 이동한 것을 확인할 수 있었다.

 

- 회고 -

이미 만들어진 Class나 Method 등을 이용하여 구현해오던 나에겐

처음엔 302 Found를 적용하는 것도 힘들었다.

Location을 지정할 때 ":" 차이로 읽히지 않는 때도 있었고, 이런저런 삽질은 있었지만

삽질한 시간에 비해 더 많은 것을 배울 수 있었다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함