[ 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) 세부 설명에 조금 차이가 있어 보이지만 전체적인 틀은 매우 비슷해 보인다.  몇 가지 포인트가 되는 단어를 추출해 이를 연결해보자면 아래와 같은 의미를 산출 할 수 있다. 독립적이지만 연관되어 있

[ 생각 ] 결국 우리들이 사용할 수 있는 리소스는 한계가 있을 수 밖에 없다.


결국 우리들이 사용할 수 있는 리소스는
한계가 있을 수 밖에 없다.



라는 이야기를 내가 한다면,
사람들은 내가 어떤 이야기를 하고 있을 것이라 
생각할까?

대부분의 사람들은 아마
엔트로피 세계관에서 이야기하는

석유,전기와 같은 
에너지 자원이 한계를 가질 수 밖에 없기 때문에
에너지 소모를 줄여야 한다라는
이야기를 하고 있으리라 생각하고 있을것이라 생각 된다.

하지만 전혀 아니다.

내가 말하는 리소스는
어떤 일을 수행할때, 
그리고 어떤 선택지를 골라야만 할때, 
우리들이 사용할 수 있는 리소스를 말하는 것이다.

여기서 말하는 리소스를

좀더 알기 쉽게 바꾸어 본다면
'능력'이라 이야기할 수 있을 것이다.

우리는 어떤 일을 수행할 때 
어떠한 능력이 있다면 
다소 쉽게 일을 수행할 수 있을 것이다.

또한 어떤 선택지를 골라야할 때
우리가 가지고 있는 능력에 따라 고른다면
다소 쉽게 풀릴 것이다.

예를 들어
소프트웨어 개발자로서 어떠한 일을 수행할 때,

많은 언어들,
하드웨어에 대한 이해,
설계에 대한 이해 등의

이러한 능력이 많다면 
우리는 다양한 프로젝트를 
어려움 없이 완수할 수 있을 것이다.

또한 어떤 선택을 해야만 할 때  

예를 들어 
이직이나 전직을 해야만 한다면 

다를 수 있는 언어,
경력 등의

이러한 능력이 많다면
우리가 전직과 이직을 할 때
많은 선택지를 얻을 수 있을 것이다.

하지만
우리는 이런 능력들을
다시 말해서 리소스들을 모두 가지리란 불가능하며,

특정 리소스는 
많은 시간을 쏟아 붇더라도 얻을 수 없을 수도 있다.

왜냐하면
우리는 시간이라는 
큰 틀 안에서 살아가고 있기 때문이다. 

우리의 주어진 시간은 한계가 있으며,
우리가 얻을 수 있는 능력,
리소스라는 것도 한계가 있을 수 밖에 없다.

따라서 이런 시간이라는 
큰틀의 개념에 살고 있는 현대 인류는 
이러한 명제에서 
그 누구도 벗어 날 수 없을 것이다.

그렇기 때문에 
우리는 그러한 리소스를 
가급적 많이 가지기를 원하지만

시간의 한계가 존재하는 이상,

정확히는 
우리의 신체가 소모품인 이상
매우 안타깝게도 그럴 수는 없다.

어쩌면 그렇기에 이런 면 에서는 
우리 모두 평등하다고 
이야기 할 수 있을 것이다.

그렇다면 어떻게 해야 할까?

물론 최선을 다해 
이러한 리소스들을 쌓아가는 것은 
당연한 이야기 이다.

하지만 
우리가 시간을 쏟아 붇는다고 해도
모든 사람들이 원하는 리소스를 얻을 수는 없다.

예를 들어
어른들 모두가 얻어야한다고 이야기하는 
리소스인 '영어'에 대해 이야기 해보자.

적어도 한국에서는 많은 사람들이
이러한 영어라는 리소스를 얻기를 원한다.

그런 리소스를 
어디에 사용할 것인지에 대해 
정말로 많은 의문이 가지만

어쨋든 영어를 원하며,
그러한 리소스를 얻기 위해 

어릴 때 부터 시간을 쏟아 부으면서
수 많은 교육을 받는다

하지만,
그렇게 시간을 쏟아 부어서
영어라는 리소스를 얻었을 수 있었을까?

그렇지 않다.

우리는 외국인들과 유창하게 대화할 수 있고
활용할 수 있는 영어라는 리소스를 원했지만

결국 얻은 것은 
현대인이 자랑하는 지식 쑤셔넣기에 의해 완성된
반쪽 짜리도 안되는 어떠한 리소스를 얻었을 뿐이다.

그리고 그러한 산 증인이 바로 나이며,
나의 세대이다.

그러한 반쪽 짜리 리소스가
나의 삶에 큰 영향을 미쳤냐고 한다면
그런 것도 아니다.

따라서 아무리 시간을 쏟아 붇는다고 해도
우리는 원하는 리소스를 얻기란 쉽지 않다.

그러한 과정에서 
방향이 잘못되었을 수도 있고 
방향은 옳지만 방법이 잘못되었을 수도,

방법과 방향이 옳았지만 
깨달음과 같은 직감을 
도저히 얻을 수 없을 수도 있다.

물론 이러한 사실은 어떤 사람들에게는 
매우 불편한 사실일 것이다.

노력으로 모든 것을 이룰수 있다고 
생각하는 사람들에게는 말이다.

이러한 사실로 인해
우리는 시간을 아무리 쏟아 붇는다고 해도

우리가 원하는 리소스를 
가질 수 있다고 확신할 수는 없다.

이러한 상황에서 계속해서 
시간을 쏟아 붇는다는 것은 
효율적이지는 못할 것이다.

따라서 
매우 불편한 사실일지는 모르겠지만

우리가 원하는 리소스 조차 
우리가 그것을 컨트롤하여
마음대로 얻기란 쉽지 않다.

그렇다면
우리가 할 수 있는 것은 무엇일까? 

어떤 일을 해야만 하며,
어떤 선택을 해야만 한다면

우리가 할 수 있는 것은 
우리가 가지고 있는 '리소스들'을 
최대한 활용하는 것 뿐이다.

물론 그런 리소스들을 
모두 가질 수 있는 상황은 분명 존재하지만 

자신을 포함한 세계 모든 사람들이 
시간이라는 개념속에 살고 있는 현대 인류인 이상

그러한 리소스들을 모두 가지고 있는 상황은 
인생에서 손에 꼽을 만큼 적다.

그렇기 때문에 
그런 상황들을 배제한다면

대부분의 경우는
가지고 있는 리소스들을 
최대한 활용할 수 밖에 없다.

내가 과거에 외국에서 일해야할지,
한국에서 일을 해야할지 선택해야만 하는 시점에 대해
이야기 해본다면
좀 더 알기 쉬울 것이라 생각 된다.

내가 대학을 졸업해야할 시점에

나는 외국에서 일해야 할지,
한국에서 일해야 할지를 선택해야만 하는 시점에 

내가 가지고 있는 
객관적인 리소스는 그리 많지 않았다.

유치원생 수준의 외국어 능력과 외국어 자격증,
지잡대 컴퓨터 공학부 4년 졸업장,
실무 경험없는 주니어 수준의 코딩 능력

단 이 3가지 이다.

흔히 한국에서 사람들이 멸시하고 
하찮게 이야기하는 지잡대를 나왔고,

4년을 정상적으로 대학에서 공부한다면 얻을 수 있는
실무 경험 없는 주니어 수준의 코딩 능력,

그리고 누구나 시간만 조금 들이면 
얻을 수있는 유아 수준의 외국어 능력과 자격증

그 당시에는 
누가 봐도 한국으로 한정한다면 
평균 이하의 리소스였다.

그렇기에 나는 내가 가지고 있는 
리소스를 최대한 활용하는 방법을 찾아내야만 했다.

그리고 내가 내린 결론은 
외국에서 일하는 것을 선택했다.

왜냐하면 나는 한국에서 해야만 한다는 
자격증 류에 대해서 깊은 의심을 가지고 있었기 때문에
자격증을 취득하기 위해 시간을 할애하지 않았기 때문이다.

따라서 내가 가진 리소스로는 
한국에서 경쟁력을 가지고 있다고 생각하기는 힘들었고,

나의 성격이 한국과 맞지 않다는 사실을 
스스로 느끼고 있었다.

그리고 군대에서 나왔다는 사실이
외국 사람들에게 있어서는 어느 정도 나름 이점도 있었다.

결국 그런 리소스를 활용해
어떻게든 외국 회사에 들어가게 되었다.

그리고 일을 해야만 하는 상황이 왔다.

하지만 그 당시 조차
내가 가지고 있는 리소스는 
외국에서 일함에 있어서 적합하다고 할 수는 없다.

왜냐하면 IT 개발일에 있어서
커뮤니케이션은 절대적으로 필요하기 때문이다.

하지만 일은 해야만 했기에
유아 수준의 외국어 능력을 최대한 활용해
커뮤니케이션을 계속해서 해나갔고,
몇 개월이 지나자 

완벽하지는 않더라도 
일은 할 수 있는 수준까지는 할 수 있게 되었다.

일상 생활과 일을 외국어로 했기 때문이라고 생각한다.

아마 똑같은 수준의 외국어 능력을 
한국에서 얻으려 했다면, 몇 년이 걸렸을지도 모른다.

그 후에도 일상 생활과 일이 
내 마음대로 풀리지는 않았지만

그 때마다 
내가 가지고 있는 리소스들을 
최대한 활용해 나가면서 해결해 나갔고
어떻게든 적응할 수 있었다.

이쯤에서 어떤 사람들은 
자신이 과거에 그러한 능력을 익혔다면
좀 더 수월했을 것이라 생각할지는 모르겠다.

그러나 그러한 이야기는
미래를 알 수 있다는 전제하에서만 가능한 말이다.

당장 내일 일도 예측할 수 없는데
미래를 예측한다는 것은 있을 수 없다.

또한 보통 그러한 생각을 가지고 살아가는 사람들은
배움을 원하지 않는 사람들이 대개 하는 말이다.

물론 미래의 일을 알 수 없기 때문에
가능한 모든 것들을 하는 것이 좋다는 말에는 일리가 있으나
이는 전혀 현실적이지 못한 솔루션이다.

가능한 모든 것들을 유용성이 있을 정도로 
배우기라는 시간 상 대게 불가능하기 때문이다.

따라서 가능한 모든 것들을 하기 보다는
내가 가지고 있는 리소스를 최대한 활용함을 우선으로 하고
그 다음에 조금씩 리소스를 늘려야 한다.

그렇기 때문에 가능한 모든것을 하기보다는
배움이라는 것을 항상 염두에 두고,
예측할 수 없는 상황을 임기응변으로 대응해야 한다.

'과거는 미래를 비추는 거울이다'라는 격언이 있지 않은가?

그들은 과거에도 배움을 원하지 않았기 때문에
현재인 미래에도 배움을 원하지 않았을 뿐이다.

정말로 타임머신이 있어서 
그들이 과거로 돌아간다고 하더라도
현재에 배움을 원하지 않는 자신이 
갑자기 배움을 원할리가 없다.

그들은 단지 자신의 상황에 대해 인정하지 못하고
변명을 하고 있을 뿐이다.

나는 IT업계에 일하고 있기 때문에
그러한 변명을 하며 
사라지는 사람들을 많이 봤다.

그들은 대게 과거에 
그 기술을 배우지 않았던 것에 한탄을 했다.

하지만 무언가 이상하지 않은가?
미래에 어떤 기술이 나오고 패러다임이 될지를 모르는데 
배우지 않았던 것에 한탄을 하는 것 일까?

과거에 배운 것 만으로는 더 이상 
다른 사람들에게 유용성을 제공해줄 수 없다.

따라서 어떤 일을 함에 있어서
그리고 어떤 선택을 함에 있어서

대개 우리가 가지고 있는 
리소스가 부족할 수 밖에 없기 때문에

조금 바꿔 말하면 
그러한 환경이 주어지지 않기 때문에

현재 자신이 가지고 있는 리소스들을 파악하여
최대한 활용하는 수 밖에 없다. 

물론 이러한 리소스들을 가급적 늘리는 것이 좋다.

하지만,
우리 눈앞에 있는 과업을 
우선적으로 해야 하기 때문에 
부족한 리소스를 최대한 활용하는 수 밖에 없다.

때로는 최대한 활용하면서
그와 유사한 리소스를 얻을 수 있기도 하다.

어쩌면 어떤 사람이 정말로 
타임머신을 타고와서

미래에는 이러한 리소스를 가져야만 
살아남을 수 있다며
침을 튀어가며 이야기 하고 있을지는 모르겠다.

하지만 나는 그러한 리소스 보다,
그가 타고온 타임 머신에 더욱 흥미가 가기 때문에 
정말 그런 사람이 있다면 꼭 연락을 주었으면 좋겠다.

물론 타임 머신을 보여줄 수 있다면 말이다.

・결론


나의 논지에 대해 동의한다면
다시 원점으로 돌아와 

나는 다시 이렇게 이야기하고 싶다.

"결국 우리들이 사용할 수 있는 리소스는 
한계가 있을 수 밖에 없기에

자신이 가지고 있는 리소스를 
최대한 활용하는것이 가장 옳다"고 말이다.

위에서 계속 언급했다시피

자신이 어떤 일을 수행할 때,
어떤 선택을 해야만 할 때,

항상 최고의 환경이 주어지지 않는다.
최고의 환경이 주어지는 것은 인생에서 손에 꼽는다.

그렇다면 여기서 두 가지 선택을 할 수 있을 것이다.

자신의 리소스를 최대한 활용할 방법을 찾던지

아니면 최고의 환경을 주어진 것 처럼 보이는 남과 비교해그렇지 않은 자신의 운명을 한탄할 것인지 말이다

자신의 리소스를 최대한 활용할 방법을 
손으로 더듬더듬 찾아가면서 앞으로 나간다면,
다소 힘들겠지만 옳은 길로 나아갈 수는 있을 것이며,
옛것에 새것을 더한다는 의미의 진보를 할 수 있을 것이다.

최고의 환경이 주어지지 않는것에 불평을 한다면
자신의 마음은 조금 편하지겠지만
옛것에 새것을 더한다는 의미의 진보는 이룰 수 없을 것이다.

하지만,
모든 사람들이 진보를 원하는 것이 아니다.

진보하지 않고,
더 이상 나아가기를 원치않고

좀 더 편하게 살고 싶어하는 사람들이 
나의 주변에도 
그리고 세계에도 
그러한 사람들이 많이 존재한다.

그렇기에 나는 그들의 선택을 존중하고 이해하며,
그런 선택을 하는 사람들에 대해 나쁜 감정은 없다.

한때 나도 그러한 사람들중 하나였으니깐 말이다.

문제는 
자신의 리소스를 
최대한 활용하는 방법을 찾기보다는

최고의 환경이 주어지지 않는것에 불평을 하면서
진보를 원하는 사람들이 있기 때문이다.

결국 그들은 세속주의자들이 될 수밖에 없다.

왜냐하면 그것이 가장 편한 방법이기 때문이다.

그들은
관습의 경계 사이에서 빨대를 꼽으며 
자신이 원하는 것을 얻으려 할 것이다.

과거에는 명예와 권위 였지만,
자본주의로 넘어오면서 자본으로 바뀌었다.

따라서 그들은 사회에 온갖 엔트로피를 쌓아가면서
자본을 얻으려고 할 것이기 때문이다.

그렇기 때문에
자신이 가진 리소스를 최대한 활용하며 나아가는 것이
이러한 세속주의자들을 늘리지 않는 길이기도 하다.

자신의 인생에 있어서도 
그리고 사회를 옳바르게 나아가는데 있어서 
큰 도움이 될것이 믿어 의심치 않는다.

이 블로그의 인기 게시물

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

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

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