-
[TIL] 웹 어플리케이션의 인증TIL(Today I Learned) 2022. 12. 19. 22:44
*20221219의 회고
오늘은 웹 어플리케이션에서 인증을 어떻게 처리하는지에 대한 개념적인 부분을 공부하였다. 그 부분에 대해서 회고하려 한다.
- 인증과 인가 ?
- 인증(Authentication) : 해당 유저가 실제 유저인지 인증하는 개념 (ex) 지문인식, 로그인 등)
- 인가(Authorization) : 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념 (ex) 관리자 페이지 - 관리자 권한)
- 웹 애플리케이션의 인증
- 일반적으로 웹 애플리케이션은 서버-클라이언트 구조로 되어있음 -> 두 개는 아주 멀리 떨어져 있음
- HTTP 프로토콜을 사용하여 통신하는데, 그 통신은 비연결성(Contectionless) 무상태(Stateless)로 이루어 진다.
- 비연결성(Contectionless)
- 서버와 클라이언트가 연결되어 있지 않다. -> 리소스 절약, 서버의 비용이 기하급수적으로 늘어나는 것을 방지
- 서버는 실제로 하나의 요청에 하나의 응답을 내버리고 연결을 끊어버린다.
- 무상태(Stateless)
- 서버가 클라이언트의 상태를 저장하지 않는다.
- 기존의 상태를 저장하는 것 또한 서버의 비용과 부담을 증가시키는 것
- 기존의 상태가 없다고 가정하는 프로토콜을 이용해 구현되어 있음
- 실제로 서버는 클라이언트가 직전에, 혹은 그 전에 어떠한 요청을 보냈는지 관심도 없고 전혀 알지 못함
그렇다면, 예를 들어 쇼핑몰에서 옷을 사야하는데 서버와 클라이언트가 연결되어 있지도 않고, 서버가 클라이언트의 상태를 저장하지도 않는다면, 페이지를 이동할 때 마다 로그인을 해야할까...?! => 쿠키와 세션을 이용해 문제 해결!
- 쿠키 - 세션 방식
- 서버가 특정 유저가 로그인 되었다는 상태를 저장하는 방식
- 인증과 관련된 아주 약간의 정보만 서버가 가지고 있게 되고, 유저의 이전 상태의 전부는 아니더라도 인증과 관련된 최소한의 정보는 저장해서 로그인을 유지시킴
- 쿠키
- 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일 -> 브라우저가 쿠키를 관리
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조함
- 세션
- 쿠키를 기반하고 있으나, 쿠키와 달리 세션은 서버측에서 관리함
- 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지 -> 동시 접속자가 많은 웹사이트인 경우 서버에 과부하를 주므로 성능 저하의 요인이 됨
- 쿠키와 세션의 차이
- 사용자의 정보가 저장되는 위치 : 쿠키 -> 브라우저(서버의 자원 전혀 사용 X) , 세션 -> 서버
- 요청 속도는 쿠키가 세션보다 더 빠름 (세션은 서버의 처리가 필요하기 때문)
- 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request 에서 스니핑 당할 우려가 있어서 보안에 취약
- 세션은 쿠키를 이용해서 sessionid만 저장하고 그것으로 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋음
- 쿠키도 만료시간이 있지만 파일로 저장되기 대문에 브라우저를 종료해도 계속해서 정보가 남을 수 있다.
- 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관 없이 삭제된다.
과거부터 웹 브라우저를 이용하다 보면, 쿠키나 세션이라는 단어는 많이 들었던 것 같은데, 이번 기회에 이렇게 정리하게 되어서 감회가 새로웠다. 그리고 웹 개발 공부를 하다보니, 어떤 웹사이트에 들어갈 때 마다 UI는 어떻게 구성되어 있는지, 이러한 기능같은 부분은 어떻게 구현했지? 하면서 호기심을 좀 담아서 웹페이지를 이용하는 것 같다...ㅋㅋㅋ 웃기다 나자신~!~!ㅎㅎ 아무튼 오늘도 어제보다 더 많은 지식을 갖게 되었다. 속도는 느리지만 꾸준히! 오늘도 고생했고 내일도 화이팅 하자!!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 20221221의 회고... (2) 2022.12.21 [TIL] JWT에 대하여... (2) 2022.12.20 [TIL] 스프링 입문 강의 복습하기... (0) 2022.12.16 [TIL] JPA 어노테이션 (0) 2022.12.15 [TIL] Spring과 Lombok의 Annotation (0) 2022.12.14 - 인증과 인가 ?