brunch

You can make anything
by writing

C.S.Lewis

공인인증서, 공동인증서만 어려운게 아닙니다.

개발자도 어려운 '인증'의 세계 feat. SSO & API

여러분은 은행 웹사이트를 이용하면서 공인인증서, 공동인증서, 금융인증서 등 각종 “인증서” 때문에 고통 받으신 적 있으신가요? 



인증의 영역은 개발에도 있습니다. SSO 로그인, 혹은 API 사용에 있어서 빼놓을 수 없는 중요한 부분입니다. 다만, 비개발자 입장에서는 (심지어 개발자에게도) 꽤나 어렵죠.


오늘은 순수하게 비전공자 기획자 입장에서 “인증(Authentication)과 인가(Authorization)”에 대해 훑어보려고 합니다. API와도 이어지니, 아직 API의 심화편을 안보고 오신 분들은 먼저 1편과 2편을 보고 오시는 것을 추천드립니다.


제가 인증과 인가에 대해 처음 접했을 때, ‘아무리 비전공자라도 이렇게 이해가 되지 않는 개념은 처음이다’라는 생각이 들 정도로 헷갈리고 어려웠습니다. 지나고 나서 보니, “인증과 인가가 왜 필요한지, 특히 어떤 상황에서 누구가 무엇을 하기 위해서 필요한건지?”에 대해서 먼저 구체적으로 이해 하지 않고, 추상적인 개념부터 보니 더욱 헷갈렸다고 생각합니다. 서비스 기획자 입장에서 인증과 인가는 주로 로그인(+SSO / 일명 소셜 로그인)과 API에서 마주하게 되는 개념입니다. (이외에도 인증, 인가가 필요한 영역이 많겠지만 오늘은 이 두 가지 위주로 말씀드리겠습니다.) 긴 서두를 뒤로하고, 인증과 인가가 왜 필요한지, 도대체 무엇인지 설명 드리겠습니다.




인증과 인가, 어디에서 쓰이고 왜 필요한 것인가요?


어떤 서비스들은 허용된 사람에게만 서비스 데이터에 접근할 수 있도록 별도로 제어하곤 합니다.

예를 들어, 여러분이 어떤 네이버 카페에서 글을 열람하려고 하면 네이버 로그인창이 뜨게 됩니다. 네이버는 당신에게 ‘너 누구야?’라고 묻는 것과 같습니다. 이것이 바로 “인증”입니다. 즉, 인증은 사용자가 누구인지 확인하는 과정입니다. ID/Password, 생체 인증 등의 방법으로 사용자를 확인할 수 있는 것이죠.


그러나 여러분이 네이버 로그인에 성공해도 여전히 카페 글에 접근할 수 없을 수도 있습니다. 왜냐고요? 아직 해당 카페의 회원이 아니거나, 회원이더라도 일정 등급이 되지 않았기 때문입니다. 다시 말해, 해당 카페 글에 대한 ‘접근 권한’이 없기 때문입니다. 카페 회원이 되어 드디어 접근 가능해지는 순간, 여러분은 카페 글에 접근할 수 있도록 ‘인가’된 것입니다. 인가란, 인증된 사용자가(=로그인한 사용자가) 특정 리소스/서비스에 접근할 수 있는 ‘권한’을 부여받는 과정입니다.


이 설명도 어렵다면, 인증은 ‘로그인’, 인가는 ‘접근 권한’과 세트라고 생각해주시면 됩니다.


인증과 인가, API에서는 어떤 맥락으로 필요한 것이죠?


지난 글에서 말씀드렸듯, API는 서버 간 데이터 통신을 위해 사용됩니다. 이 말은 다른 서버에 있는 정보를 API를 통해 가져오거나, 수정하거나, 삭제할 수 있다는 의미입니다. 다른 서버에 있는 정보에 아무나 접근하는건 당연히 안되겠죠? 그래서 API를 호출 전에 먼저 인증과 인가를 받아야 API를 호출할 수 있습니다.  즉, 대상을 확인하고, 허용된 범위 내의 정보만 접근할 수 있는 권한을 먼저 줘야 API를 호출해서 정보를 가져갈 수 있다는 말입니다. (위에서 설명드린 네이버 카페에 글을 보려고 하는 과정이랑 비슷합니다.)


이 과정을 서버끼리 대화한다고 생각하고 예시를 보여드리겠습니다. (실제로 이 순서대로 꼭 되는건 아니지만, 이해를 위해 쉽게 풀어썼습니다)

1~4의 과정 없이 5를 할 수는 없습니다.   


1. API로 정보를 요청하려는 서버  : “나 000야, 암호는 열려라 참깨!”  → 인증


2. 정보를 가지고 있는 서버 : “OK 확인 완료. 넌 신원이 확인되었다.” → 인증 통과


3. API로 정보를 요청하려는 서버 : “나 아까 신원 확인된 000인데, 서울 날씨 정보 좀 가져가도 될까?” → 인가


4. 정보를 가지고 있는 서버 : “OK. 대신 서울 정보만 가져가. 다른 도시는 안된다” → 인가 완료


5. API로 정보를 요청하려는 서버 : “나 인증, 인가 완료됐어. 서울의 오늘 날씨 정보를 줘. “ → API 호출


6. 정보를 가지고 있는 서버 : “오늘 서울 날씨는 10도. 화창함” → API 호출에 대한 응답 반환




오늘은 개발자들도 어렵다는 ‘인증’과 ‘인가’에 대해 살펴보았습니다. 처음 제가 이 개념을 이해하기 어려웠을 때를 떠올리며 인증과 인가의 사용 맥락을 중심으로 굉장히 짧게 압축적으로 설명을 드렸습니다. 추상적인 개념에서 허덕이고 있는 서비스 기획자에게 부디 조금이나마 도움이 되길 바라며 글 마칩니다.

이전 07화 지금은 클라우드 시대! 그래서, SaaS가 뭔데?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari