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

[ Essay - Technology ] 왜 현재 IT 패러다임은 클라우드 컴퓨팅인가? : 클라우드 컴퓨팅에 대한 정의


지난해는 클라우드 컴퓨팅의 해였다고 해도 과언이 아니다.

왜냐하면 클라우드 컴퓨팅에 대한 기술적 발전과
클라우드 컴퓨팅에 대한 사람들의 인식

그리고 결정적으로 기업들이 
자사만의 IDC를 유지하는데 어려움을 느끼면서
클라우드 컴퓨팅에 대한 수요가 급상승 했기 때문이다.

이를 증명하듯이 
MS가 다시 한번 세계 굴지의 IT기업으로 돌아왔고
클라우드 컴퓨팅 관련 회사들의 주가는 치솟았다.

따라서 클라우드 컴퓨팅에 대한 수요가 상승하면서
더 많은 서버 증설이 필요하게 됨에 따라

단기간이라고 해도 삼성 전자, SK하이닉스를 비롯한
반도체 제조업들의 매출도 급 상승하였다. 

그렇다면 이러한 질문이 머리속에 떠오른다면
당연한 것이다.

왜 사람들은 클라우드 컴퓨팅에 대해 이야기 했는가?

이 세상에 이유 없는 행위는 없다.

많은 사람들이 클라우드 컴퓨팅에 대한 이야기를 했다면
그리고 실제로 많은 사람들이 클라우드 컴퓨팅를 사용하고 있다면,

더 나아가 세계 시장에서 관련 기업들이 
높은 가치를 평가를 받고 있다면

이는 이유가 있을 것임에는 틀림 없다.

어떤 사람들은 
어떤 이유인지 고찰해보지도 않고
그런 행위를 하는 사람들을 멍청하다고 
생각할지는 모르겠지만

대개 실상은 전혀 그렇지 않다.

많은 사람들이 
그러한 행위를 하는데에는 다 이유가 있다.

그렇다면 
왜 클라우드 컴퓨팅이 패러다임이 되었는지에 대해 
고찰을 해봐야 한다.

진정한 개발자라면
그리고 진정한 엔지니어라면
그렇지 않더라도 진정한 엔지니어가 되고 싶다면,

사회의 문제를 IT 기술로 해결해주는 해결사라면
이에 대해 직감을 가지고 있어야 한다.

그러기 위해서는 우선 클라우드 컴퓨팅이 
무엇 인지에 대해 직감을 가질 필요가 있을 것이다.

그리고 작년에 왜 그렇게 
전 세계적으로 클라우드 컴퓨팅에 대한 이야기로 
가득찼었는지

좀 더 나아가 
현재 왜 IT 패러다임이 클라우드 컴퓨팅인지에
대한 논의도 할 수 있을 것이다.

클라우드 컴퓨팅이란 무엇인가?


지식 쑤셔넣기에 열중하고 있는
똑똑한 현대인들에게는

정의에 대해 정확히 알지 못해도 
클라우드 컴퓨팅이라는 이름으로 
대충은 이해를 가지고 있을 것이다.

클라우드 컴퓨팅은 
IT기술들을 제공 업체에 의해
빌려쓰는 것, 
임대하는 것 등으로 정의 내릴 수 있다.

여기서 말한 IT기술들이란
API가 될 수도 있고,
서버가 될 수도 있으며,
소프트웨어가 될 수도 있고
심지어 저장 공간까지도 포함된다.

따라서 여러 사람이
클라우드 컴퓨팅에 대해 이야기 한다면
자신이 이야기한 클라우드 컴퓨팅의 정의가 
서로 다를 수 도 있다.

그렇기에 이를 분류해 놓고 
이야기 하는 것이 옳을 것이다.

① 클라우드 스토리지(Cloud Storage) 및
클라우드 서버(Cloud Server)
→ Infrastructure as a Service, IaaS


아마 일반 사람들이 
클라우드 컴퓨팅에 대해 이야기를 한다면 

이 클라우드 스토리지에 대해 
이야기를 하고 있을 가능성이 크다.

클라우드 스토리지는 
컴퓨터의 HDD와 SSD에 데이터를 저장하는 것이 아닌

인터넷을 통해 저장 또는 불러오게 된다.

좀 더 정확히는 제공해주는 회사 소유의
복수의 서버에 분산 되어 저장되어지고 
불러오게 된다. 

대표적인 스토리지 서비스는 
아래와 같다.


아마 일반적으로 익숙한 클라우드 스토리지 서비스는 
구글 드라이브와 MS사의 OneDrive일 것이다.

그리고 회사 입장에서 익숙한 것은 


클라우드 서버(Cloud Server)일 것이다.

왜냐하면 이미 많은 기업들이 
무거운 회사 고유의 서버(Internet Data Center, IDC)를 버리고
클라우드 서버로 전환 및 전환을 고려하고 있기 때문이다.

나의 회사 또한 회사를 이사하면서
IDC를 없에고 클라우드 서버로 전환하였다.

많은 회사들이 클라우드 서버로 
전환하는 이유는 간단하다.

직접 데이터 센터(IDC)를 가지고 운영하는 것보다
클라우드 서버를 이용하는 것이 금전적, 인적 등의 
여러가지 비용을 고려했을 때 
훨씬 더 비용이 저렴하기 때문이다.

클라우드 서버를 사용하면
서버를 설치 공간 및 구축 비용이 필요 없으며,

더 이상 보안을 더 이상 신경쓰지 않아도 되며
이로 인한 인력 또한 필요 없게 된다.
(물론 인프라 엔지니어들에게는 
피눈물을 흘릴만한 소식이겠지만)

기본적으로 보안에 대한 책임은 
제공하는 회사가 진다.

여기에 여러가지 이점이 있겠지만
단순히 이 2가지만 놓고 보더라도 
클라우드 서버로 이전하는 것이 
훨씬 유용할 것이다.

따라서 엔터프라이즈급 큰 회사건
스타트업의 작은 회사이건 간에
클라우드 서버를 이용하는것이 대개 더 좋을 것이다.

보통 클라우드 스토리지의 경우는 달 마다 결제,
클라우드 서버의 경우는 사용하는 만큼 결제를 하게 된다.

② 가상 서버(클라우드 상)에서의
소프트웨어 구동
→ Software as a Service, SaaS


우리는 HDD와 SSD와 같은 저장 장치에 두고
단순히 저장만 하지는 않는다. 

소프트 웨어를 구동하기 위해 저장하기도 한다.

클라우드 스토리지에 
이 소프트 웨어를 저장시켜 원격에서 구동도 가능하다.

현재 과거에는 
실제 컴퓨터 저장장치에 설치하고 사용했던 
소프트웨어들이 현재에 들어서는 이러한
클라우드 컴퓨팅 서비스에 의해 제공되어 지고 있다.

MS사의 Office 365

가장 대표적으로 최근에 볼 수 있는 
MS사의 Officee 365이다.

월 만원 정도로 MS사에서 제공하는 소프트웨어를 
클라우드 컴퓨팅으로 사용 가능하다.

역시 끼어 팔기의 대가 답게 
모든 서비스를 다 넣어버렸다.

MathWorks사의 공학용 소프트웨어
MatLab

공학용 소프트웨어로 유명한 MatLab도 
이미 클라우드 컴퓨팅을 통해 사용할 수 있다.

③ IT 솔루션 플랫폼
→ Platform as a Service, PaaS


심지어 어떤 클라우드 컴퓨팅 업체는 
IT 솔루션 플랫폼도 제공해주기까지 한다.

이런 대표적인 회사로 
아마존 웹 서비스(Amazon Web Service, AWS)를 제공하는 
아마존일 것이다.

AWS에서 제공하는 솔루션들은 아래와 같다.


AWS에서 제공하는 솔루션들

또한 
자신들의 솔루션을 통해 
시스템을 구축한 회사들을 명시하고 있는데

엔터프라이즈급 기업들을 시작해


스타트업 


공공 부분 까지

멀지 않은 미래에는 
AWS가 닿지 않는 시스템을 보기 힘들지 않을까 싶다.

이를 증명하듯이
개발자를 구직 할때 
AWS를 다룰 줄 아는 개발자를 
명시하는 회사가 최근 꽤 많이 보이기 시작한다.

따라서 현재 클라우드 컴퓨팅은 
IT업계에서의 여러 패러다임 중 하나가 될 수 밖에 없을 것이다.

그래서 클라우드 컴퓨팅은 무엇인가?


정리해보자면 클라우드 컴퓨팅에 대한 정의는
그 사람이 어떤 입장에 있느냐에 따라
그리고 목적에 따라 다를 수 있다.

어떤 사람이 일반적인 사람이라면
클라우드 컴퓨팅에 대해 클라우드 스토리지(IaaS)나
클라우드 서버에서 소프트웨어를 구동(SaaS)
하는 것을 말하고 있을 가능성이 높다. 

또한
어떤 사람이 회사를 차리고 싶거나
결정권자라면 
시스템을 구축 또는 고려하기 위해 클라우드 서버(Iaas) 및
IT 솔루션 플랫폼(PaaS)을 이야기 하고 있을 가능성이 높으며,

마지막으로
개발자라면
IT 솔루션 플랫폼(PaaS)를 말하고 있을 확률이 높을 것이다.

물론 훌륭한 
엔지니어라면 
이 모든 것을 통틀어서 말하고 있을 것이다.

여기까지 해서 
클라우드 컴퓨팅에 대한 정의에 대해 이야기 해보았다. 




참고 :




2020.09.08 내용 다듬기 및 수정 





이 블로그의 인기 게시물

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

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

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