[ Architecture, Technology ,Web ] SSO(Single Sign On) 그리고 SAML에 대해

이미지
이번 프로젝트 내부에서 어쩌다보니  유저 인증 관련 업무를 담당하게 되었고, 해야하는 업무는 내부에 사용했던 적이 없던  새로운 개발 플랫폼에서  SSO의 프로토콜 중  SAML을 이용해 앱의 인증을 구현해야만 했다. SSO를 생각해본적 조차 없는 상황에 이를 새로운 개발 플랫폼에 도입해야 했기 때문에 많은 시행착오를 겪었으나 구현에 성공하였으며 덕분에 SSO에 대한 전반적인 지식을 쌓을 수 있었다. 이번에는 그러한 과정에서 나온 지식들과 경험을  공유하고자 한다. SSO에 대한 정의 먼저 사전적 정의 부터 살펴보자. 다만, 기술적인 용어다보니 자주 사용하는 옥스포드 사전에 정의를 찾을 수 없기 때문에  검색으로 찾을 수 있는 정의를 몇 가지 살펴보고 교차 검증을 해보자. 첫 번째 정의를 살펴보자. Single sign-on (SSO) is an identification method that enables users to log in to multiple applications and websites with one set of credentials.  SSO는 웹사이트에서 한 번의 인증(one set of credentials)으로 복수의 어플리케이션에 로그인 할 수 있는 인증(identification) 방법(method) 이다. 두 번째는 위키피디아의 정의이다. Single sign-on (SSO) is an authentication scheme that allows a user to log in with a single ID to any of several related, yet independent, software systems. SSO는 독립적이지만 연관되어있는 몇몇 소프트웨어에 대해 하나의 ID로 로그인을 할 수 있도록 하는 인증 구조(scheme) 세부 설명에 조금 차이가 있어 보이지만 전체적인 틀은 매우 비슷해 보인다.  몇 가지 포인트가 되는 단어를 추출해 이를 연결해보자면 아래와 같은 의미를 산출 할 수 있다. 독립적이지만 연관되어 있

[ 생각 ] 각 나라 사람들은 어떻게 할까?(이전에 이야기 했던 각 나라의 정의에 기반해)


나는 보통 공부할 때, 카페에서 공부한다.

맛있는 커피를 마실 수 있으며,
여름에는 시원하고 겨울에는 따뜻하다.

결정적으로 나에게 집은 쉬는 공간이지
무언가를 하는 공간은 아니기 때문이다.

그러기 때문에 나는 어느 나라건 카페에서 공부를 한다.


어느날, 나는 항상 가던 스타벅스에 갔다.

그 날은 공휴일이여서, 사람들로 가득해
어떤 자리도 가득 차 있었다.

어떻게 할까를 생각하려는 찰나에
가게 점원이 나와서 기다리실 꺼냐고 물어봤다.

스타벅스는 보통 1인석도 많기 때문에 기다린다고 했다.

그리고 15분즈음 기다렸을까?
빈자리가 있다며, 안내를 받았다.

하지만, 그 자리는 1인석이 아닌 2인석이였다.
그것도 좋은 소파가 있는 2인석이였다.

나는 보통 2인석은 잘 앉지 않는다.
내가 조금 불편하더라도, 2인석은 2명이 앉아야
그 자리에 더욱 가치가 있다고 생각하기 때문이다.

하지만, 선택의 여지가 없었다.

그렇게 나는 소파가 있는 2인석에 앉았다.
뭔가 내키지는 않았지만,
훌륭한 소파였다.

그렇게 항상 먹던 초콜렛 스콘과 커피를
주문하고 앉아서 공부를 시작했다.

훌륭한 소파였기 때문에 평소보다
좀 더 집중이 되었던것 같다.

그리고 내 옆자리에는 누군가(한명) 앉아 있었다.

어느 순간 슬쩍 보니
사람은 없고,
자리에는 케이크를 다 먹었는지, 케이크를 감싸는 종이 포크,
그리고 남아 있는지 모를 종이로된 커피 컵이 있다.

그리고 결정적으로 짐을 놓는 거치대에 가방같은 짐이 다 사라져있었다.

단순히 이 상황에서는 여기에 있던 사람이 잠시 화장실을 간건지,
잠깐 용무가 있는지 모르는 그런 자리다.

(대충 이런 느낌의 소파였다)

그리고 그 자리는 최대 5명이 앉을 수 있는 자리며,
앞에 사람이 있는지 없는지를 몰라
앉을까 말까 고민하는 사람들
(유모차를 끌고 있는 것을 보니 가족이였을 것이다)이 있었다.

이런 상황을 보고 이런 생각이 들었다.

각 나라의 사람들이라면 어떻게 할까?
라는 궁금증이 떠올랐다.

나는 예전에 각 나라의 정의에 대해 이야기 한적이 있는다.

따라서 오늘은 그 정의에 의거하여 각 나라 사람들을 예측해보기로 했다.

먼저 일본이라면 어떨까?

내가 경험했던 보통의 일본인들이라면,
이 자리에 앉지 않을 것이다.

그들에게 정의는 "남을 생각하는 어떤 것"이다.

따라서 그 들에게는 사람이 있을 지 판단 할 수 없고,
사람이 있을 어떤 흔적이, 사람이 없다는 가능성을 높여줌에도 앉지 않는다.

왜냐하면 조금이라도 사람이 있을 가능성
즉, 리스크가 있기 때문이다.

만약 사람이 있다면 자신들이 앉게 됨으로써
그 사람에게 민폐를 끼치는 것이며,
더더욱 자신들이 그 자리를 빼앗기게 되는 그 상황이
"남을 생각하지 않는 어떤 것"이라는 정의에 위반되기 때문에
양심에 가책을 느낀다.

정확히는 사람이 많은 공간에서 다른 사람으로 부터
그런 인식을 받기 싫기 때문이고,
이런 인식을 받을 수 있는 리스크를 굉장히 싫어한다.

따라서 그들은 자리에 앉지 않고,
다른 자리를 찾거나 다른 카페를 찾을 것이다.

미국(서양인)이라면 어떨까?

내가 경험했던 보통의 미국인(서양인)이라면
자리에 앉을 것이다.

그들에게 정의는 "개인의 자유"이다.

따라서 그들 눈에는 사람이 없다는 그 흔적을 통해
사람이 없다고 판단해, 자리에 앉을 것이다.

왜냐하면 케이크를 다먹은 흔적, 거치대에 없는 짐을 보니
사람이 없을 확률이 높다.

따라서 거기에 앉는다는 행위가 미국(서양)인들에게
"개인의 자유"라는 정의를 위반하지 않기 때문이다.

만약 사람이 사용하고 있던 자리였고,
실제 사용하고 있던 사람이 왔다면
다 먹은 흔적들을 보고 사람이 없는 줄 알았다며
미안하다고 할 것이다.

그리고 개개인들이 이 자리를 어떻게 할 것인지 말을 하고 협상할 것이다.

개인적으로는 제일 좋아하는 정의이다.

한국이라면 어떨까?

내가 경험했던 한국인 그리고
한국에 오랫동안 살았던 내가 봤을때는 자리에 앉을 것이다.

왜냐하면 케이크를 다 먹은 흔적, 거치대에 없는 짐을 보니
사람이 없을 확률이 높다.

따라서 거기에 앉는다는 행위가 한국인들에게 "공정함"이라는
정의를 위반하지 않기 때문이다.

만약 사람이 사용하고 있던 자리였고,
실제 사용하고 있던 사람이 왔다면
다 먹은 흔적들을 보고 사람이 없는 줄 알았다고 미안하다고 할 것이다.

하지만 이 자리를 어떻게 할지에 대한 것은
"공정함"에 따라 결정된다.

이 공정함은 사람에 따라 공정함과 불공정함의
이분법적인 사고가 적용된다.

사람의 흔적을 보고 앉았기 때문이고,
사람이 앉을 공간이 많기 때문에 1인 보다는
다수가 그 자리를 차지하는것이 "공정함"라는 의견

그 사람은 사람의 흔적을 어쨋든 남겨놨고,
사람이 앉을 공간이 많던 적던 먼저와서 자리를 차지 했기 때문에
먼저 앉는 것이 "공정함"이라는 의견 등등

또한 여기에는 사람에 따라 "공정함"에는
어떤 도덕적 판단이 들어갈 여지가 있다.

한국의 "공정함"이라는 정의에 따라
그리고 다수의 의견에 따라 누가 앉아야 할지 결정날 것이다.

여기 까지해서 내가 하고 싶은 이야기를 해봤다.

물론 나는 미국(서양)인들의 정의 가장 마음에 든다.

왜냐하면 동양 국가는
옳바른 의견이던, 옳바르지 않은 의견이던

개인의 의견보다는 집단 또는 공동체의 의견이 중요시되고,
개인의 의견은 묵살되기 때문이다.

그게 마음에 들지 않아서 나는 외국에서 일한다.

물론 외국에서 일하는게 그게 큰 이유는 아니다.

결정적으로 다양한 문화(언어,행동,예절,예술 등등)를 배우고 싶은 것이고,
그 다양한 문화에서 좋은 것이 있다면 받아 들이고 싶다.

그리고 그것을 받아들임으로써 내가 되고 싶은
엔지니어에 다가갈 수 있기 때문이다.

이것이 내가 외국에서 일하는 이유 중에 가장 큰 이유다.

개인의 의견이 묵살되는 한국에서 살지 않고,
일하지 않는 이 이유는 작은 이유 중 하나이다.

나는 한국이 살기 좋은 나라라고 생각한다.
다만 나와 맞지 않을 뿐 이다.

나는 어떤 사회, 어떤 나라의 정의가 옳고,
그르다라는 판단은 하지 않는다.

단순히 내가 마음에 드는 정의가 있을 뿐,
다른 사람에게 그 정의가 옳다고,
무조건 따라야 한다는 주장은 하고 싶지 않다.

그리고 결정적으로 나는 다른 사람 또한
나와 같은 개인이기 때문에
내가 나의 정의를 믿듯이,
그들 또한 그들의 정의를 믿을 권리가 있다.

내가 침해해서는 안된다.
나는 누군가를 가르칠 정도로 대단한 사람은 아니다.

따라서 나는 내 생각을 억지로 심어줄 생각은 추호도 없다.

그렇게 생각한다면 나와 같은 개인으로서 동의는 못 할지라도 존중할 뿐이다.

그리고 그 정의가 옳바른 정의라면,
각 개개인은 어느 한순간에 만날 것이고,

만나게 된다면 우리는 우리가 사는 전세계를
좀 더 발전 시킬 수 있으리라 믿는다.
                                                           2020.02.24
                                                    역근처 스타벅스에서

이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )