JSP 세션 ID와 Localhost, 127.0.0.1
트위터 API를 이용해서 서드파티 어플리케이션을 개발 할 때, 주의해야 할 점이 있습니다. 바로 127.0.0.1 과 localhost 를 구별해야 한다는 것이죠.
트위터 어플리케이션을 개발 할 경우 실수 할 수 있는 부분이 있습니다.
이런식의 흐름일 경우 세션이 공유되지 않아 중요한 정보를 사용 할 수 없습니다. 이클립스를 이용해서 JSP를 개발 할 경우 톰캣 서버의 호스트 이름이 기본적으로 localhost로 되어 있습니다. localhost라는 도메인을 가지고 서버에 페이지가 생성되는 것이지요.
localhost라는 도메인을 가지고 있는 페이지에서 세션에 데이터를 저장하고 OAuth 로그인 페이지로 넘어갑니다. dev.twitter.com에서 어플리케이션의 리디렉션 URL을 지정할 수 있습니다. OAuth 로그인이 완료되면, 리디렉션 URL로 oauthToken과 함께 넘겨주게 되는데, 그 리디렉션 URL에는 localhost를 지정 할 수 없습니다.
그래서 아무 생각없이 127.0.0.1을 입력하게 됩니다. ( hosts 파일에 보시면 localhost 와 127.0.0.1은 이름만 다를뿐 localhost가 127.0.0.1 이죠. )
하지만 이렇게 할 경우 정상 동작하지 않습니다. 그 이유는 localhost와 127.0.0.1 이 세션 ID를 공유하지 않기 때문입니다.
과연 실제로도 그런지 테스트를 해보고 싶으신 분들은 localhost 페이지에서 Request.getSessionID() 를 해보시고, 리디렉션 URL( 127.0.0.1 )에서 Request.getSessionID()을 해보시기 바랍니다. 세션 ID가 다르게 뜨는 걸 볼 수 있습니다.
따라서 이클립스의 JSP 프로젝트 생성시, 서버의 호스트 이름을 127.0.0.1 로 하시기 바랍니다.
즉,
이런식으로 해 주셔야 세션이 공유되고, 트위터의 서드파티 어플리케이션 개발을 순조롭게 하실 수 있습니다.
물론 직접 웹 서버에 올려서 개발을 하실 경우엔 상관없습니다...