새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

1 분 소요

개인 프로젝트에 인증과 인가를 구현하기 전에 인증과 인가가 무엇이며 왜 필요하고, 어떤 방식을 통해 인증과 인가 적용할 수 있는지 공부한 것을 정리해보려고 합니다.

인증과 인가

인증과 인가는 컴퓨터가 생기기 전부터 있었던 개념입니다.

인증

인증(Authentication)은 사용자의 식별 정보를 확인하여 그 정보가 유효한지 판단하는 절차이다.

사용자가 누구인지 식별하는 과정을 말합니다.

신분증이나 부여받은 번호, 아이디와 패스워드를 통해서 사용자가 누구인지 식별하는 과정이 필요하며 식별을 하기 위해서는 고유 값이 있어야합니다.

인증이 성공되면 반복되는 인증 과정을 없애기 위해 인증되었다는 마크가 필요합니다.

HTTP는 상태를 저장하지 않기 때문에 클라이언트나 서버에서 인증 마크를 관리해야합니다.

인가

인가(Authorization)는 인증된 사용자가 요청한 리소스에 접근할 권한이 있는지 확인하는 과정이다.

인증 정보를 토대로 확인하기 때문에 역할(ROLE)에 대한 정보를 클라이언트에서 관리할 것인지 서버에서 관리할 것인지 생각해야합니다.

인가가 필요 없다면 인증도 필요없을까?

모든 사용자에게 동일한 정보를 제공한다면 인증이 필요할까 생각을 했습니다.

인가는 필요없을 수 있지만, 인증은 필요합니다.

인증이 왜 필요할까

인증은 사용자를 식별할 수 있게 합니다.

시스템(소프트웨어)는 식별 정보를 기반으로 접근 제어나 로그, 사용자 편의 기능 제공할 수 있습니다.

IP, Port, ID 등으로 사용자를 식별하게 되고 시스템은 의사결정을 할 수 있습니다.

사용자의 요청을 분기 처리하거나 사용자의 응답을 효율적으로 사용하거나 식별자가 있으면 여러모로 결정할 수 있는 게 많아지게 됩니다.

식별이 가능하다는 것은

책임, 추적, 제어 , 최적화가 가능하다는 의미입니다.

조금 더 확장해보면 로드 밸런싱을 하는 과정에서 L4, L7은 포트번호와 HTTP를 기반으로 분기를 처리할 수 있습니다.

사용자의 식별정보를 상세하게 구분해야한다면 식별 정보에 많은 정보가 있어야하고 그만큼 소프트웨어에서 처리하는 로직이 많아집니다.

사용자의 식별정보가 간단하다면 그만큼 구현도 간단해지며 속도도 차이가 발생하게 됩니다.

서버와 서버 관계에서는 인증&인가가 필요할까

서버 A가 서버 B에 요청을 보낼 때, 정말 A가 보낸 요청인지 서버 B는 판단할 수 있어야합니다.

단지, 사용자 로그인 처럼 보이지 않을 뿐, 누가 보냈는지 서버 B는 확인이 필요합니다.

댓글남기기