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

[ Machine Learning by Andrew Ng ] Define of Machine Learning(머신 러닝의 정의)

Define of Machine Learning(머신 러닝의 정의)


① 사무엘(Arther Samuel,1959)의 정의



사무엘은 기계학습(Machine Learnig)이란 

컴퓨터가 명시적(explicit) 프로그램이 없이도
스스로 학습할 있는 능력을 연구하는 학문 분야

라고
정의 했다.

사무엘은 1950년대에 체스 게임을 직접 수행하는 프로그램을 만들면서 유명해졌다.

하지만 사무엘은 체스 게임을 하지 못했지만, 프로그램이 게임을 만번 반복하게
상황에 따라 수의 좋고 나쁨을 판단 하라 있게 되었다

결국 프로그램은 사무엘 보다 체스 게임을 잘하게 되었다.

② 톰 미첼(Tom Mitchell, 최근)의 정의



카네기 멜론(Carnegie Mellon)대학교 교수인 미첼은 
기계학습을 '학습 과제(Well-posed learning problem)'중심으로 정의하고 있다.

프로그램이 일정 수준의 작업 성능(P, performance) 가지고
작업(T,task) 수행한다 가정 했을때,

경험(E, experience) 증가함에 따라 작업(T, task) 수행하는 
성능(P, performance) 향상될 있다

라며 설명했다.

이때 프로그램이 경험(E)로 부터 학습(learn) 했다고 표현한다.

미첼의 정의를 체스 게임에 대입해보자.



체스에서 경험(E, experience) '같은 게임을 수만 반복하는 과정,
작업(T, task) 체스 게임을 수행하는 행위,
작업 성능(P, performance) 프로그램이 다음 판을 새로운 상대로 했을  

판을 이길 확률(probability)이라고 있다.

③ 학습 알고리즘

학습
알고리즘도 여러가지가 있다.

스탠포드 강의에서 주로 배울 학습 알고리즘은 지도 학습(Supervised Learning) 
자율 학습이다.

지도 학습은 작업을 수행 있는 방법을 컴퓨터에게 가르치는 것이 핵심이라면,
비지도학습(Unspervised Learning) 경우, 컴퓨터가 스스로 학습하도록 유도한다.

Supervised Learning(지도 학습)



예를 들어 설명해보자.

어떤 학생이 오리건 포틀랜드 시의 데이터를 수집했는데
위의 그림과 같이 도식화 했다고 가정해보자.

가로 축에는 서로 다른 주택의 크기가 제곱피트 단위로,
세로 축에는 서로 다른 주택의 가격이 달러 단위로 표시되게 하였다.

이런 데이터가 주어졌을 , 어떤 친구가 750제곱피트짜리 집을 소유하고 있고,
집을 판매하려 했을때 얼마에 있을지 알고 싶어 한다고 하자.

이럴 경우 학습 알고리즘이 어떻게 도와줄 있을까?

학습 알고리즘에서 가지 해볼 만한 방법이 있다.
위의 그림과 같이 데이터를 통과하는 직선을 하나 그려서 데이터에 맞추는 방법과

위의 그림과 같이 2차함수(곡선 그래프)를 그리는 방법이 있다.
그래프를 보자면 20 달러 가까이 받을 수 있을 것 이다.

판단 해야 할것들 하나가 직선이 아니라 
이차 함수(곡선)으로 지에 대한 판단이다.

일차 함수(직선) 이차 함수(곡선)이던 간에 집이 좋아지거나 하지는 않는다.
이 예제는 좋은 학습 알고리즘의 예시이다.

지도 학습 이라는 용어는 우리가 알고리즘에게 데이터 집합을 주는데
데이터에 '정답' 포함되어 있는 이다.

다시 말해 집에 대한 데이터 집합을 제공했는데
집마다 정확한 가격도 알려 것이다
집이 매매된 실제 가격을 말이다.

이제 알고리즘의 역할은 '정답' 많이 만들어 내는 이다.
친구가 판매하려는 집에 대한 것도 포함해서 말이다.

용어를 한가지 정의하자면 이건 회귀 문제(regression problem)이라고 한다.

회귀 문제라고 함은 가격과 같은 연속된 값을 가진 결과를 예측하려 한다는 것이다.
보통 집값은 실수로, 스칼라 값으로 연속된 값을 가진 숫자로 생각하고
회귀라는 용어는 우리가 이런 연속적인 특징을 가진 값을 예측하려고 한다는 것을 뜻한다.

다른 예를 들어보자.
의료기록을 보고 유방암이 악성인지 양성인지 예측하고 싶다고 가정해보자.

만약 어떤 사람이 유방에 종양을 발견 했을 악성 종양은 해롭고 위험한 경우이고,
양성 종양은 무해한 경우이다.

수집한 데이터 집합을 보자.

위의 그림은 유방암이 양성인지 음성인지의 대한 도식화 결과물이다.

데이터 집합에서 가로 축에는 종양의 크기를, 세로 축에는 1또는 0으로 도식화 하였다.
해당 예시의 종양이 악성이면 1, 악성이 아니면 0이다.

따라서 크기에 따라 악성의 경우 악성이 아닌경우가 도식화 되어있다.

이제 어떤 친구가 비극적이게도 유방에 종양이 있는데
종양의 크기를 분홍색 화살표로 표시하였다. 

기계 학습으로 답하고 싶은 질문은 종양이 악성일 가능성이 얼마나 될지에 대한 것이다.

여기서 용어를 하나 소개하자면, 이것은 분류 문제(classification problem) 예시이. 
분류라는 용어는 0 또는 1, 악성 또는 양성과 같은 불연속적인 값을 예측하려 하는 것이다.

어떤 분류 문제는 결과가 보다 많을 수도 있다.

예를 들면 유방암의 가지 종류가 있을 있을 이다.

그렇게 경우 1,2,3이라는 불연속적인 값을 예측하려 하는 이다.

예를 들어, 0 양성 종양이고 1 첫번째 종류의 , 2 두번째 종류의
3은 세번째 암을 의미할 것이다.

하지만 이것 또한 분류 문제 있는대 왜냐하면 결과값들이 이산적이기 때문이다.
1 종류의 암이다, 2 종류의 암이다, 또는 3 종류의 암이다 이렇게 말이다.

이런 분류문제에서 데이터를 도식화할 있는 다른 방법이 있다.
종양의 크기라는 속성을 가지고 악성인지 양성인지를 예측한다고 하면 
데이터를 아래의 그림과 같이 그릴 있다.

음성인지 양성인지를 서로 다른 기호로 표시 것이다.

가위표를 사용하는 대신 양성 종양은 동그라미로,
악성 종양은 계속 가위표로 그리겠다.

예시에선 하나의 특성(feature) 또는 속성(attribute) 사용하기로 한다.
, 종양의 크기로 종양이 악성인지 양성인지 예측하고자 한다.
  
또 다른 기계 학습 문제에서는 이상의 특징, 한 개 이상의 속성이 주어지기도 한다. 

다음 예시를 살펴보자.

종양의 크기만 아는게 아니라 환자의 나이와 종양의 크기를 안다고 가정해보자.
경우 데이터 집합이 아래와 같이 보일 이다.

어떤 집단의 환자들이 이런 나이와 이런 종양의 크기를 가지며 이렇게 보일 것이고,
다른 집단의 환자들은 다르게 보일 것이다.

가위표가 보여주듯이 환자들의 종양은 악성이였던 것이다.

이제 어떤 친구가 비극적이게도 종양이 있는데
그의 종양의 크기와 나이가 그래프의 분홍색 점이라 해보자.

그러면 이런 데이터 집합이 주어졌을 학습 알고리즘으로 해볼 있는
데이터에 검은색 직선과 같이 악성 종양을 양성 종양과 분리해보는 것이다.

, 학습 알고리즘이 이런 직선을 하나 그어서 종류의 종양을 분리해내는 이다.

이러면 희망적으로 친구의 종양에 대해서 분홍색 동그라미 있을 것이다.

희망적이게도 학습 알고리즘은 친구의 종양이 양성인 쪽에 있기 때문에 
악성보다는 양성일 가능성이 높다고 있다.

예시에서는 특성이 두 가지 있었다
환자의 나이와 종양의 크기 두가지이다.

다른 기계 학습 문제에서는 많은 특성이 있는 경우도 많다.

유방의 종양의 두께, 종양 세포의 크기의 일관성, 종양 세포의 모양의 일관성등등

다섯 정도 다루는게 아닌 무한한 수의 특성을 다룰 필요가 있다.
그래야 학습 알고리즘이 수많은 속성 또는 특성이나 신호를 통해 예측 있는 것이다.

무한한 개수의 특성은 어떻게 다뤄야 할까?

이렇게 무한대의 특성을 컴퓨터의 메모리에 저장하면 컴퓨터의 에모리 용량을 써버리게 이다.

우리가 나중에 논의할 서포트 벡터 머신(Support Vector Machine)이라는 알고리즘에서
어떤 깔끔한 수학적 방법을 사용하면 컴퓨터가 무한한 개수의 특성을 다룰 있게 된다.


UnSupervised Learning(비지도 학습)


지도 학습에서는 어떤게 양성인지 악성인지
어떤게 스펨메일인지 스펨메일이 아닌지 소위 말하는 정답이 주어져 있었다.

비지도 학습(Unsupervised Learning)에서는 조금 다르다.
어떤 레이블도 갖고 있지 않거나, 모두 같은 레이블을 가지고 있거나, 아예 레이블
자체가 없을 수도 있다.

그래서 우리는 이 데이터 집합으로 무엇을 할지, 데이터가 무엇인지 알 수 없다.

대신에 단지 우리에게 여기 데이터가 있는데, 여기서 어떤 구조를 찾을 수 있습니까?”
라고 물을 뿐이다.

비지도 학습의 알고리즘은 이 데이터를 두 가지 다른 클러스터(cluster)로 되어 있다고
볼 수 있다.

위의 그림은 두 가지의 다른 클러스터로 구분지은 것이다.
이 것을 클러스터링 알고리즘이라 부른다.


이 클러스터링 알고리즘은 현재 많은 곳에서 사용되고 있는데,
그 중 하나가 구글 뉴스이다.


구글 뉴스가 하는 일은 웹에서 매일 수만, 수천가지의 새로운 기사들을 조사하는 것 이다
그리고 그 기사들을 연관성이 있는 것끼리 묶는다.

예를 들어 위의 그림은 BP Oil에 관한 한 그룹의 뉴스를 클릭한 것이다.

비지도 학습 알고리즘은 이 이외에도 사용된다
유전학적 자료의 이해에 대한 것이다. 


위의 그림은 DNA미세배열의 한 예시이다.

서로 다른 사람들의 그룹이 있고
각 사람에 대해 특정 유전자를 가지고 있는지 
또는 그렇지 않은지를 측정하는 것 이다

, 특정 유전자가 얼마나 발현되었는지를 측정한다
위의 그림은 빨강, 초록, 회색 등이 어떤 개인의 특정 유전자를 얼마나 가졌느냐를 보여준다

이렇게 된다면 클러스터링 알고리즘을 이용해 사람들을 서로 다른 분류 
또는 타입으로 묶을 수 있게 된다

이것이 비지도 학습이라 할 수 있다.

알고리즘에게 데이터 집합의 예시에 대해 정답을 주고 있지 않기 때문에 비지도 학습이라 할 수 있다.

위의 그림은 클러스터링의 응용 예이다.

첫번째는 데이터 센터 즉, 거대한 컴퓨터 클러스터를 보고 
어떤 기기들끼리 주로 데이터 교환이 일어나는지 알아내려고 할 때 
클러스터링을 사용할 수 있다

그렇게 된다면 데이터 센터를 더 효율적이게 만들 수 있다.

두번째는 소셜네트워크 분석이다
어떤 사람이 어떤 친구에게 이메일을 가장 많이 보내는지 

또는 페이스북 친구나 구글 플러스 서클에 대한 정보가 주어질 때 
자동적으로 어떤 게 적절한 친구 그룹인지
그리고 서로서로 다 아는 사람들의 그룹인지를 찾을 수 있을까 하는 것이다.

세번째는 시장 세분화이다
많은 회사는 고객 정보의 거대한 데이터 베이스를 가지고 있다

이 고객에 대한 데이터 집합을 보고 자동적으로 세분화된 시장으르 찾아내고,
자동적으로 고객들을 세분화된 시장 안으로 묶어 넣어서 자동적으로 
그리고 더욱 효율적으로 세분 시장에서 판매와 영업을 동시에 할 수 있게 된다

이 것도 비지도 학습이다
왜냐하면 우리가 고객의 정보는 가지고 있지만
우리가 미리 세분화된 시장이 뭔지 알지 못하고
데이터 집합에 있는 고객에 대해 누가 1번 세분 시장에 있는지
누가 2번 세분 시장에 있는지 등을 미리 알고 있지 않기 때문이다.

다만 우리는 알고리즘이 스스로 오직 데이터만으로 알아내게 하는 것이다.

마지막으로 천문학 데이터 분석에 사용된다
또한 이런 클러스터링 알고리즘은 은하계의 생성에 관해 흥미롭고 유용한 이론을 가져다 준다.

이 블로그의 인기 게시물

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

[ Web ] 웹 애플리케이션? 웹 사이트?(Web Application? Web Site?)

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