티스토리 뷰

특정 홈페이지에 들어가서 login을 하면 logout을 하기 전까지 계속 login이 된 상태 였거나,

브라우저를 다시 켰을 때 자동 로그인이 되는 것도 경험해봤을 것이다.

 

이런 기능을 할 수 있게 도와주는 것이 바로 Session과 Cookie다.

Token이나 다른 것도 있지만 이번에 다룰 것은 Cookie 값을 할당하는 것이니

간략하게 내가 이해하고 있는 것을 기반으로 그림을 그려보았다.

자세한 내용은 다음에 다루기로 하고 이번에 기억해야 할 점은

'Session은 server에서 관리하고 Cookie는 클라이언트가 가지고 있는다' 는 점이다.

 

 - 어떻게 Cookie를 생성할 수 있을까? -

Login이 실패하면 Cookie의 값은 false, 성공하면 true가 될테니 setCookie Method를 생성해

전에 구현했던 isLogin Method를 이용하여 Login 여부를 확인하였다. 

Login 성공 여부에 따라 Key 값을 Set-Cookie로 하고 각 해당하는 Value에 맞게 String 값을 반환하는데

끝에 \r\n을 붙인 이유는 혹여나 추가되는 로직이 있을때를 대비한 것이고,

null체크는 login을 하지 않고 처음으로 서버에 접근할 경우 Cookie가 생성된 상태가 아니기 때문에 그에 맞게 처리하였다.

마지막으로 DataOutPutStream에 넣어주면 Header의 Cookie값이 할당 된다.

login302Header에 정해둔 Cookie를 넘기기 위해서 cookie라는 변수를 만들고 bufferedReader.readLine Method로 가져온

변수 read의 값 안에 logined가 있다면 cookie에 저장하도록 하였다.

이렇게 cookie 값도 login302Header로 넘겨주고 테스트를 해본 결과

POST로 처리를 안한 것 처럼 url에 Cookie가 같이 출력되었다.

왜 이런지 코드를 보며 고민하다가 Location 끝에 \r\n이 없어서 함께 출력된 것을 알고 바로 수정하였더니

정상적으로 잘 작동되는 것을 확인할 수 있었다.

 

 - Cookie 값 비교하기 -

이제 Cookie를 생성했으니 Cookie의 값을 비교하여 /user/list.html에 login한 사용자만 접근할 수 있도록 구현해야 한다.

 

/user/list url이 요청으로 들어왔을 때 사용할 list302Header Method를 생성했다.

login302Header와 다른 점은 Location의 차이와 cookie를 생성해주는 부분이 있는지에 대한 여부이다.

Header에 들어오는 isLogined Cookie 값을 통해 login의 상태를 확인할 것이기에,

Cookie가 null이 아니고 Cookie의 값 안에 "true & false"의 값에 해당하는 Location을 반환해주는 Method를 구현했다.

그 후 Request Handler Class로 돌아와 아래와 같이 /user/list에 해당하는 Header를 호출하는 값을 지정 후 테스트를 진행한 결과

제대로 돌아가지 않아 고민에 빠졌다.

url은 정상적으로 들어왔지만, 문제는 같은 요청이 3번이 날아간 것을 확인되었고,

동기와 대화한 뒤 고민해본 결과 if문을 빠져나간 뒤 200Header가 호출되는 부분인 것 같았다.

하지만 그것은 문제가 아니었으니... 진짜 문제는 dataLength의 여부였다.

클라이언트에서 보내는 data가 없는 상황에서 dataLength의 값이 있을 때 302Header를 돌아가게 해놓은 것이다.

 

이 부분을 수정하고 다시 돌려본 결과 문제없이 잘 돌아가는 것을 확인 할 수 있었다.

 

- 회고 -

종종 사소한 실수를 할 때가 있다.

예를 들어 조금 전처럼 필요 없는 조건문으로 인해 원하는 결과가 안 나오고 그로 인해 시간을 잡아먹는 경우가 대표적인 예이다.

이런 걸 보고 시야가 좁다고 해야 하는 걸까?

항상 조심하려 하지만 실수를 안 하기엔 참 어려운 것 같다.

그래서 Test 작성이 더욱 중요한 것이 아닌가 싶다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함