2 minute read

인증은 사용자나 장치의 신원을 확인하고 자신의 주장을 증명하는 과정이고, 인가는 인증된 개체에 대해 허가된 작업과 자원에 대한 접근 권한을 부여하는 과정입니다.

예를 들어서, 사용자가 파일 서버에 접근하기 위해 인증이 된 경우, 인가는 사용자가 읽기, 쓰기 또는 실행 권한을 가지는지 여부를 결정합니다. 

이를 통해 시스템은 인증된 개체에 대한 자원 접근을 제어하고 보안을 유지할 수 있습니다.

세션은 서버 측에서 클라이언트와 연결하기 위해 사용되는 것으로, 클라이언트와 서버 간의 상태 유지를 위해 사용합니다. 사용자가 웹 브라우저를 통해 서버에 접속한 시점부터 웹 브라우저를 종료해 연결을 끝내는 시점까지, 같은 사용자 혹은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술입니다. 사용자가 웹사이트에 접속하면, 서버가 사용자에 대한 정보를 가지고 있는 세션을 생성하고, 세션 ID를 클라이언트에게 전송한다. 이후 같은 사용자가 요청을 보낼 때마다, 클라이언트는 세션 ID를 서버에 전송하며, 서버는 세션 ID를 통해 사용자를 인식합니다.

세션은 서버에 저장하기 때문에 사용자가 점차 늘어난다면 해당 유저의 정보를 찾고 데이터 매칭에 오랜 시간이 걸리면서 서버에 부하가 가해지게 됩니다.

쿠키는 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일입니다. HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있습니다. 서버는 쿠키를 통해 사용자 정보를 인식하고 사용자에 맞는 서비스를 제공할 수 있고, 대표적인 예시가 아이디와 비밀번호를 브라우저에서 자동 입력해 주는 것 입니다.

이는 편리하지만, 만일 개인 소유가 아닌 컴퓨터에서 사용할 경우 사용자의 개인정보가 유출될 것이고 http로 개인정보를 주고받으면 쿠키가 유출되거나 조작될 수 있는 보안상 문제를 일으킬 수 있습니다.

토큰으로는 대표적인 예시로 json web token, 즉 JWT가 존재하며 이 토큰은 클라이언트와 서버 간 정보를 안전하게 전송하기 위해 사용됩니다. 

토큰은 토큰의 유형과 암호화 방식 등의 정보를 포함하는 헤더(Header), 클라이언트와 서버 간 주고받을 정보를 담는 페이로드(payload), Header와 Payload를 암호화하여 생성된 서명 값인 서명(signature) 이 세 파트를 . 으로 구분하는 구조입니다. 

사용자가 로그인하면, 서버는 해당 사용자의 정보를 바탕으로 JWT를 생성하고,  클라이언트는 JWT를 받아서, 이후 요청 시에는 JWT를 헤더에 포함하여 요청을 보냅니다. 서버는 토큰의 유효성을 검증한 후, 해당 요청에 대한 처리를 진행합니다.

토큰은 클라이언트 측에서 저장되므로 Cross-Domain 문제를 해결할 수 있고, 더 안전한 인증 방식을 구현할 수 있습니다. 하지만 JWT 크기가 커질수록 네트워크 부하가 증가하고, 알고리즘에 따라 보안성이 달라질 수 있습니다.

우선 Virtual Machine은 말 그대로, 가상으로 만들수 있는 컴퓨터 내부의 환경이 다른 컴퓨터입니다. 캡슐화된 VM은 도커 혹은 컨테이너와 같은 결과를 가지고, 한 컴퓨터에 여러개의 VM 을 설정할 수 있습니다. 이를 동료와 공유해 동일한 환경에서 작업하는지도 확인 가능합니다. 하지만 VM은 게스트 운영체제 전체를 가상화하여 사용하며, 이것이 하나 이상의 완전한 운영체제인 만큼, 그만큼 수가 많아지면 호스트 머신에 부하를 줄 수 있으며 배포 또한 무겁고 느리다는 단점이 있습니다.

도커는  컨테이너의 빌드 및 관리를 돕는 도구이고, 이 도커 컨테이너는 VM을 설정하는 것과는 달리 OS와 빌드 도구 등을 요구하지 않습니다. 물론  내부에 작은 운영체제 레이어가 존재할 수 있으나, 최소한의 운영체제만 존재하며 VM에 비해 훨씬 가볍기에 여러개의 컨테이너를 사용하더라도 호스트 머신에 훨씬 부하가 적습니다. 배포 또한 가볍고 빠르게 할 수 있습니다.

Leave a comment