[ 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 ] 웹 애플리케이션 아키텍처의 유형 (Types of Web Application Architecture)

이 글은 아래의 링크의  

이전 포스팅 「웹 애플리케이션 아키텍처」의 다음 글로 
이러한 「웹 애플리케이션 아키텍처의 유형」에 대해 이야기 해보고,

그 다음으로 개발자들이 흔히들 알고 있는 
Django, Ruby On Rails, Spring이 실제 속해 있는 
「웹 애플리케이션 서버 아키텍처」에 대해 알아보려고 한다.

우선 이번 글은 위에서 언급했다시피 
「웹 애플리케이션 아키텍처의 유형」에 대한 글이다.

웹 애플리케이션 아키텍처는 
웹 애플리케이션 서버 아키텍처(프레임 워크가 포함된)보다 
좀 더 추상적인 아키텍처인데,

웹 애플리케이션 서버 아키텍처는 
클라이언트 단과 서버단을 나누어 아키텍처를 그린다면,

웹 애플리케이션 아키텍처는 이 보다 좀 더 큰 틀로
서버와 페이지 간의 상호 작용을 나타낸다. 

서버 측 HTML 웹 애플리케이션 아키텍처
(Server-Side HTML Web Application Architecture)



서버 측(Server Side) HTML은 
일반적인 웹 응용 애플리케이션 아키텍처이다.

이 아키텍처는 Web 1.0으로 불리우기도 하는데

서버에서 생성 한 HTML 문서를 통해 작동되며
결과는 HTML 페이지로 구성된다.

이 아키텍처는 가장 오래된 아키텍처 중 하나로 
특정 요구에 맞는 서버 언어 및 프레임 워크를 사용할 수 있다.

또한 서버의 특정 HTML 컨텐츠가 기본적으로 
하나의 URL로 전송되므로 연결성이 뛰어나다고 할 수 있지만,

서버와 사용자간에 엄청난 양의 정보가 교환되기 때문에 
성능면에서는 떨어 질 수 있다는 것을 고려해야 한다.

일반적으로 클라이언트는 
전체 페이지 대신에 일부를 다시 로드 할 것이다.

이런 성능에 문제가 있는 한
모바일 환경에서는 사용하지 않는 것이 좋다.

또한 즉각적인 데이터 업데이트를 보내거나, 
실시간으로 변경하는 기능은 없으며

AJAXWebSockets을 적용하는 서버 및 사용자 업데이트만 가능하다.

서버 측은 보안을 제공 하며
컨텐츠가 일정하므로 프론트 엔드(Front - end)단에서 
테스트를 위한 JavaScript 도구가 필요하지 않다.

결과적으로 이런 아키텍처를 사용하게 된다면
가장 쉽게 웹 애플리케이션을 구현할 수 있으나,

서버와 클라이언트 간에 
엄청난 양의 데이터 교환이 필요하므로
비교적 성능면에서는 떨어지며

모바일에서 데스크톱 애플리케이션 혹은
데스크톱 애플리케이션에서 모바일 애플리케이션으로의 변환
즉, 웹/앱 환경을 구축하기 힘들다.

따라서 단일 웹 애플리케이션으로 사용하기에는 
적합한 아키텍처라고 볼 수 없을 것이다.

JS 생성 위젯(AJAX)
(JS generation widgets)



서버 측(Server Side) HTML 애플리케이션 아키텍처에서 진화된 아키텍처로서,

AJAX(Asynchronous JavaScript and XML)는 서버 측 접근 방식이다.

차이점은 표시된 페이지가 위젯(Widgets)으로 구성되어 있다는 것 이다.

JSON 또는 AJAX 쿼리를 사용하여 위젯에 정보를 업로드 할 수 있다.

위젯의 장점은 클라이언트 측에서 
웹 애플리케이션을 사용할 필요가 없기 때문에
HTML 데이터(HTML of chunks)를 업로드 할 때 속도를 높일 수 있다.

또한 모든 위젯이 개별적으로 작동해 
페이지 자체에 영향을 주지 않고,
요청된 페이지 부분에만 영향을 준다는 점이다.

따라서 전송 된 데이터의 양이 적으며 응답 속도도 빠르다.

이 아키텍처는 데이터를 JSON으로 전송이 가능한 등의 성능을 향상 시킬 수 있다.

다만, 이 아키텍처는 서버 측(Server Side) 웹 서비스의 기술과
클라이언트 측(Client Side) JavaScript 프레임 워크를 사용해야만 하며,

[1]Hash-Bang
과 같이 
각 요소를 연결 해주는 기능에는 특정 매커니즘이 필요하다.

즉 이 아키텍처를 사용한다면 
독립적으로 움직이는 위젯으로부터 
부분적으로 응답(Request) 및 반응(Response)을 처리할 수 있게 되어
서버 측(Server Side) HTML 애플리케이션 아키텍처보다 
뛰어난 성능을 기대할 수 있다. 

하지만, 위젯이 포함된 페이지를 처음 실행될 때 다소 느릴 수 있고,

JavaScript 관련 개발 도구들을 알고 
Hash Bang 이라는 매커니즘을 알고 있어야 한다.

이에 따라 개발 속도는 더뎌질 것이다.

또한 서버 측(Server Side) HTML 애플리케이션 아키텍처와 동일하게
웹/앱의 전환은 크게 기대할 수 없다.

따라서 단일 웹 애플리케이션으로 사용하기에는 
적합한 아키텍처라고 볼 수 없을 것이다.

서비스 지향 단일 페이지 애플리케이션
(Service-oriented single-page Web Apps)


SPA(Single Page Application)은 서버에서 
새로운 페이지를 로드하지 않고,

기존 페이지 내의 업데이트 된 데이터만 
상호작용 하는 동적 프레임 워크이다.

이러한 아키텍처를 기반으로 둔 애플리케이션은 
필요한 컨텐츠의 세부 정보만 요청 한다.

SPA를 사용하면 새로운 요소가 업데이트되는 동안 
페이지와 계속해서 상호 작용을 하기 때문에 
페이지를 다시 불러오는 것과 같이 
페이지와 사용자간의 빠른 상호 작용이 가능하다.

이 아키텍처를 사용하면 알림이터 스트리밍을 구현 할 수 있다.
일반적으로 서버 쿼리는 JSON, Ehsms, HTML 형식을 사용하여 
다양한 유형의 데이터를 전달 할 수 있다.

즉, 이 아키텍처를 사용한다면
업데이트를 포함한 기타 서버와 
클라이언트간의 상호 작용을 최소화 할 수 있는 것을 포함해

웹 로직이 대게 클라이언트 측에 있기 때문에 
서버 측은 중요한 비지니스 로직만 처리해주면 된다.
이에 따라 확장성 또한 훌륭하고 할 수 있을 것이다.

또한 웹/앱의 전환도 유연하다.

성능 면으로만 보면
위의 2개의 아키텍처에 비해 가장 뛰어나다고 할 수 있지만,

개발 속도가 느리며, 클라이언트 단이 무겁기 때문에
그 만큼 클라이언트 쪽에서 리소스가 쏠리며,
클라이언트에서 실행되어야 하므로 
소스를 포함한 데이터들이 공개되기 때문에 보안이 가장 취약하다.

이에 포함되어 있는 것이 쿠키와 관련된 기술들이다. 

따라서 이를 해결한 보안 아키텍처가 별도로 필요하다.

그렇다면 어떤 아키텍처를 사용해야할까?


그렇다면 어떤 아키텍처를 사용하는 것이 적절할까?

물론 이에 대한 해답을 바라는 사람들에게는 
매우 안타까운 소식이겠지만, 

상황에 따라 다르다.

하지만, 현재(2020년 기준) 대부분의 웹 애플리케이션에서
SPA(Single Page Application) 아키텍처를 사용하고 있기 때문에

대세에 따르는 것도 한 가지 방법일 수도 있다.

하지만, 
꼭 그것이 모든 경우의 솔루션이 될 수 는 없다.

왜냐하면 진정한 솔루션이라는 것은 선택지 중에서 
최고의 효율성을 제시할 수 있어야 되기 때문이다.

하지만 3개 종류의 선택지가 있다고 
꼭 3개 중 하나 만을 선택하라는 법은 없다.

경우에 따라서는 아키텍처의 장점만을 살려서
시스템을 통합하는 것으로도 훌륭한 솔루션이 될 수 있다.

따라서 어떤 것 아키텍처를 사용해야될지에 대한 해답은
엔지니어 혹은 아키텍처들에게 물어보고 듣는 것이 빠를 것이다. 




[1] Hash-Bang : 

SheBang이라고도 불리우는 메커니즘으로
URL에 붙는 #! 같은 것들을 말한다.

여기서 Hash는 #를 뜻하고 Bang은 !를 뜻하는데

Hash(#)가 포함된 URL을 브라우저가 받으면 
Hash 앞에 일부만 페이지 요청으로 처리하고,
Hash 뒷 부분은 페이지를 관련 위치로 이동하기 위해 보관 된다.



참고 :







이력 : 
2020.08.10 내용 대폭 개선 및 Web Framework의 역사 추가

2020.09.17 내용 다듬기 및 Web Framework의 역사 이동



아이콘 출처:

아이콘 제작자 DinosoftLabs from www.flaticon.com
아이콘 제작자 srip from www.flaticon.com
아이콘 제작자 Freepik from www.flaticon.com
아이콘 제작자 Smashicons from www.flaticon.com





이 블로그의 인기 게시물

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

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

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