-
클라이언트 식별이란 무엇인가?CS지식/네트워크 2021. 6. 11. 22:23
웹 서버는 수 많은 클라이언트들과 동시에 통신해야하는 경우가 발생할 수 있다.
이러한 경우에 웹 서버는 클라이언트의 요청을 모두 처리해야할 뿐만 아니라 어떤 클라이언트와 통신하는지 알아야 한다.
왜 클라이언트를 식별해야하고 식별하면 무엇이 좋을까?
클라이언트를 알고 있다면 각각의 클라이언트에게 맞춤 서비스를 제공할 수 있고 클라이언트가 매번 입력해야하는 정보(주소나 결제에 자주쓰는 수단 정보 등)을 데이터베이스에 저장하여 저장된 클라이언트 정보를 사용할 수 있다.
하지만, HTTP를 사용하여 통신을 하게 되면 HTTP는 stateless(연결에 대한 정보가 없고 매 요청은 독립적으로 처리)이기 때문에 통신하고 있는 상대방이 누구인지 알 수 없다.
그러면 어떻게 HTTP 통신에서 클라언트를 식별할 수 있을까?
오늘 알아볼 방법은 총 4가지이다. 먼저, HTTP 헤더를 이용한 방법을 알아보자.
1) 사용자 식별 관련 정보를 전달하는 HTTP 헤더들
사용자에 대한 정보를 전달하는 HTTP 요청헤더는 여러 가지가 존재한다.
먼저, From 헤더가 있다.
From 헤더는 사용자의 이메일 주소를 포함하는 것으로 각 사용자별로 서로 다른 이메일 주소를 가지므로 이 정보를 통해 사용자를 식별할 수 있다.
다음으로 User-Agent 헤더가 있다.
User-Agent헤더는 사용자가 사용 중인 브라우저의 이름, 버전을 포함하는 것이다. 이 헤더 정보를 통해 특정 브라우저에서 제대로 동작하도록 콘텐츠를 최적화하는 데 유용하지만 직접적으로 사용자를 식별할 수는 없다.
마지막으로 Referer 헤더로 사용자가 현재 페이지로 유입하게 한 웹페이지의 url을 가리킨다.
즉, 우리가 네이버 홈 페이지를 보면서 보고 싶은 뉴스를 클릭해서 페이지에 들어갔다면 Refer 헤더에는 네이버 url을 담고있는 것이다.
이 정보로 사용자를 식별할 수는 없지만 사용자가 이전에 어떤 페이지를 방문했는지를 알려주어 사용자의 취향을 파악할 수 있다.
2) 클라이언트 IP주소 추적을 통해 사용자 식별
클라이언트의 IP주소는 보통 HTTP 헤더에 존재하지 않지만 서버가 TCP 커넥션의 IP 주소를 통해 클라이언트 IP주소를 알아낼 수 있다.
하지만 클라이언트 IP주소를 통해 사용자를 식별하는 데에는 단점이 존재한다.
첫번째로 클라이언트 IP주소는 서비스를 사용하는 사용자를 가리키는 것이 아닌 사용자가 사용하는 컴퓨터를 가리킨다.
만약, 동일한 IP주소 환경에서 여러 사용자가 요청을 보냈다면 사용자를 식별할 수 없다.
두번째로 대부분의 인터넷 서비스 제공자는 사용자가 로그인을 하면 동적으로 IP주소를 할당한다.
즉, 로그인한 시간에 따라 사용자는 다른 IP주소를 받으므로 서버는 사용자를 IP주소로 식별할 수 없다.
마지막으로 클라이언트와 서버 통신 간에 프락시와 게이트웨이를 사용하는 경우에는 원 서버와 새로운 TCP커넥션을 맺는다. 이렇게 되면 서버는 클라이언트의 IP주소가 아닌 프락시나 게이트웨이의 IP주소를 얻게 되므로 사용자를 식별할 수 없다.
초기에는 사용자 식별에 클라이언트의 IP주소를 많이 사용했지만 위와 같은 단점과 한계점이 존재해 거의 사용하지 않는다.
3) 사용자 로그인 인증을 통한 사용자 식별
우리가 흔히 접할 수 있는 방식으로 사용자에게 로그인을 요구하여 사용자를 식별하는 것이다.
한번 로그인하면 브라우저는 사이트로 보내는 모든 요청에 로그인 정보를 함께 보내어 서버는 로그인 정보를 확인할 수 있고 이를 통해 사용자를 식별할 수 있다.
하지만 우리가 로그인 방식을 경험해보면 알듯이 각 사이트마다 아이디, 비밀번호를 외우고 있어야하고 내가 항상 사용하던 아이디가 어떤 사이트에서는 이미 사용 중인 아이디일 수도 있어 또 다른 아이디를 만들어서 기억해야한다.
그리고 비밀번호를 만드는 제한사항도 사이트마다 다른 것을 겪은 경험이 있을 것이다.
어떻게 보면 사용자에게 불편함을 줄 수 있는 방법이기도 하다.
4) 쿠키
쿠키는 사용자를 식별하고 세션을 유지하는 방식 중 가장 보편적으류 사용하는 방식이다.
쿠키에 대한 내용은 따로 정리할 필요성을 느껴 다음 포스팅 글을 통해 알아보고자 한다.
https://straw961030.tistory.com/104?category=925289
'CS지식 > 네트워크' 카테고리의 다른 글
HTTP 인증이란 무엇인가 (0) 2021.06.17 쿠키(Cookie)란 무엇인가? (0) 2021.06.14 게이트웨이(Gateway)란 무엇인가? (0) 2021.06.08 캐시(Cache)란 무엇인가? (0) 2021.06.05 프락시(Proxy)란 무엇인가? (0) 2021.06.02