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

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



웹 애플리케이션이란, 웹 브라우저와 웹 기술을 사용하여,
사용자와 대화하는 대화식으로서 
인터넷을 이용하는 일종의 컴퓨터 프로그램을 말한다.

일반적으로 웹 사이트(Web Site)와 혼동하기 쉬운데,  
엄밀히 말하면 웹 사이트(Web Site)는 
기본적으로 웹 페이지의 모음으로 
지금의 수 많은 웹과 같이 콘텐츠를 제공하는 
사용자와 대화하는 식의 웹이 아니였다.

웹 사이트의 예




가장 대표적인 웹 사이트의 예로서는 
과거의 블로그나 뉴스 페이지를 
예로 드는 것이 알기 쉬울 것이다.

과거의 블로그들이나 뉴스 페이지들은 
페이지들을 모아놓은 정말 순수한 웹 사이트였다. 

즉, 과거의 블로그들과 뉴스 페이지들은
정해진 웹 페이지를 보여주는 웹 페이지의 모음에 불과했다.


17 of the Best Examples of Business Blog Design | IMPACT

물론 지금의 블로그는 경계가 무너지면서 
검색 기능, 댓글 기능 등 
여러가지 애플리케이션이 포함된 웹 사이트가 되어버렸다.

웹 사이트와 웹 애플리케이션의 경계가 무너진 것이다.

그렇기에 지금의 블로그들은 
동적 페이지 기술들과 대화형 방식 등의 
다수의 애플리케이션들이 들어가 있기 때문에 
엄밀히 말하면 웹 사이트라고 말할 수는 없을 것이다.

결국 본래의 웹 사이트라는 것은
지금과 같이 댓글을 달고, 검색을 하며 
좋아요와 싫어요를 누르고 이러한 반응으로서 
바로 페이지의 화면으로 나타나는 
대화식의 웹 애플리케이션이 아니라는 것이다.

따라서, 순수하게 웹 사이트라고 할 수 있는 것은
단순히 HTML으로만 이루어진 링크로 연결 되어 있는
과거의 뉴스 페이지나 블로그들 뿐이다.

웹 애플리케이션의 예


반대로 웹 애플리케이션은 
사용자와 대화하는 식으로 기능을 수행하기 때문에

웹 애플리케이션을 이용하는 사용자의 요구에 따라 
웹에서 다른 이용자에게 메시지를 보내거나 
댓글을 다는 등의 애플리케이션이 동작해야 한다.



가장 대표적인 예로 
댓글을 달 수 있고, 
좋아요와 싫어요와 같은 애플리케이션을 포함하는
사용자와 대화식으로 작동하는
Facebook을 예로 들 수 있을 것이다.

이 기능들이 동작할 수 있는 것은 
내부의 수 많은 크고 작은 애플리케이션들이 있기 때문이다.

반대로 순수한 웹페이지라면
할 수 있는 것이 라고는 정해진 링크를 타고 
다른 페이지로 들어가는 것 말고는 아무 것도 할 수 없다.

링크는 단지 정해진 태그로 표현되는 것이기 때문에 
애플리케이션과는 거리가 매우 멀다고 볼 수 있다.

적어도 애플리케이션이라고 하려면 
입력을 받고 알고리즘을 통해 산출하여 
원하는 출력 값을 얻어내야만 한다. 

지금에서는 흔히 볼 수 있는 

검색 포털 사이트에서 볼 수 있는 위와 같은 기능들은 
웹 페이지 내부에 있는 다수의 애플리케이션이 동작하면서 화면에 출력되는 것 이다. 

따라서 웹 애플리케이션은 웹 사이트보다 
인터페이스, 구현의 측면에서
다양한 첨단 기술이 요구되기 때문에 구현이 어렵다고 할 수 있다.

왜냐하면, 순수한 웹사이트는 
단순히 페이지를 묶기만 하면 되기 때문에 별다른 기술이 필요 없다.

HTML 태그만 알고 있다면 말이다.

결국 웹 애플리케이션 이라는 것은 
순수한 웹 사이트와 단순하게 비교하자면, 

내부의 프로그래밍 언어로 작성되어진 
특수한 애플리케이션(혹은 프로그램)이 있느냐 없느냐로 구분해 볼 수 있다.
 

현재의 웹 애플리케이션과 웹 사이트


현재에 들어서는 위에서도 언급했듯이 
웹 사이트로 분류되어진 것들도 
필요에 의해 검색이나 댓글 기능 등의 
애플리케이션들이 포함되면서 대화식으로 변하고 있기 때문에
사실상 웹 애플리케이션과의 경계가 무너졌다고 볼 수 있다.

따라서 신뢰있는 기관, 혹은 단체에 의해 
대부분의 개발자들이 납득할 만한 정의가 제시되고 정립되지 않는다면
현재의 웹 애플리케이션과 웹 사이트를 구분하려고 하는 것은
의미가 퇴색된다고 볼 수 있다.

과거 초기의 웹 애플리케이션은
클라이언트-서버 컴퓨팅 환경에서의
각 응용 소프트웨어 마다 UI를 가지고 있었으며
사용자 PC마다 따로 설치했어야 했다.

왜냐하면, 현재는 HTTP이라는 통일된 프로토콜을 사용하지만
과거에는 대개 회사마다 독자적인 통신 프로토콜을 사용했었기 때문이다.

과거건 지금이건 
독자적인 규격을 가지는 것은 회사 입장에서 매우 큰 이득이다.

소니의 블루레이나 
애플의 라이트닝 커넥터를 생각한다면 이해하기 편할 것이다.

하지만, 적어도 Web에서는 
이 독자적인 규격을 가지는 것은 
위에서 서술했듯이 매우 큰 비용을 초래했다.

왜냐하면 서버 환경이 바뀌면 
그에 따라 클라이언트 측 PC의 
응용프로그램들도 업그레이드 해야 했으며
이에 따른 기술 지원 비용이 증가함에 따라 
생산성은 떨어지게 되었기 때문이다.




이러한 과거의 웹 애플리케이션과는 대조적으로 
현재의 웹 애플리케이션(Web Application)
HTTP라는 표준 프로토콜의 정립으로 인해 
웹 애플리케이션을 제공하는 기업의 유지 비용이 줄어들었다.

또한 비교적 최근에 들어서 이를 뛰어넘어
정적일 수 밖에 없는 웹 문서를 
정적인 페이지 뿐만 아니라 동적으로 만들어 낼 수 있게 되었다.
 
동적 기능을 수행하는 자바 스크립트(JavaScript)라는 
표준 언어가 클라이언트 동작을 담당한다.

과거에는 웹 페이지는 
단순히 정적 문서로서 웹 브라우저로 배포되지만,

현재에는 웹 문서가 연속적으로 전달되고 
웹의 정보를 담은 웹 폼(Form)을 통해 정보를 
주고 받을 수 있기 때문에 
사용자에게 데이터를 입력하게 할 수 있음은 물론이고

Ajax, axis, fetch와 같은 비동기 통신 기법의 정립으로 인해
과거 웹 애플리케이션의 한계를 개선할 수 있게 되었다.

따라서 현재 웹 애플리케이션을 만들 때 중요한 점은 
사용자의 운영 체제의 종류나 버전에 상관없이
작동되도록 표준 브라우저 기능을 사용 가능해야 하게 한다는 점이다.

, 어느 운영체제건 간에 
어떤 웹 브라우저 간에 구동이 가능해야 한다는 것이다.

하지만, HTML, CSS, DOM과 같은 다양한 기술을 이용한 
불완전한 구현,
특히 브라우저 마다 다른 DOM의 경우 
웹 애플리케이션의 개발에 많은 문제를 야기 할 수 있다.

따라서 가장 이상적인 것이지만 
현실적으로는 불가능에 가깝다고 할 수 있다.

현실에서는 다양한 브라우저에 대응하기 위해서는
크로스 브라우징을 해야만 한다.




이 블로그의 인기 게시물

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

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