1월, 2020의 게시물 표시

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

[ Django, Python ] 이쯤에서 분석해 보는 Django 튜토리얼 예제 (①~④) ① : MVC패턴과 MVT패턴, Model View Template 그리고 URL 매핑

이미지
개요 1~4 정리라고 해봤자  결국 1~3 은 4 를 하기 위한 정말 튜토리얼이기 때문에 4 번만 정리하도록 하겠다 . 여기서 말하는 정리는 내용을 정리하겠다는 것이 아닌 내용 정리를 포함한 Model, View, Template의 코드  그리고  그 코드의 파일과 실제 브라우저 화면을 연결시켜 이미지화 시킬 것 이다 . 우선 Model, View, Template의 코드를 살펴보기 전에  MVT(Model View Template) 의 개념 부터 다시 한번 살펴보자 . 또한 튜토리얼에서 작성한 코드들은  아래의 링크에서 확인하길 바란다. https://github.com/Eluwing/python-django-Toy-Project/tree/master/start_django MVT(Model View Template)와 MVC(Model View Controller) 이전에 설명했었지만 다시 한번 언급하고 넘어가자 . 먼저 MCV(Model Controller View) 는  유저 인터페이스 (UI) 와  [1] 관심사 분리 (Separation of Concerns, SoC) 를  지원하는  독립된 어플리케이션 로직 으로 유명하며   현재 많이 사용되어지고 있다 . Controller 는 애플리케이션에 대한 모든 요청을 수신한 후 모델 (Model) 과 함께 작업하여  View 에 필요한 데이터를 준비 한다 . 그 후에 View 는 Controller 가 준비한 데이터를 사용하여  최종 응답 (Response) 을 생성해  사용자에게 보여준다 . MCV 에서 모델 (Model) 은 애플리케이션의 데이터 관리한다 . View 의 요청 (Request) 에 응답 (Response) 하고  Controller 의 명령에 응답하여 데이터를 갱신  한다 . View 는 Controller 의 명령에 의해 결정되는  특정 형식의 데이터 표시 를 통해 사용자에게  웹페이지의

[ Django, Python ] 튜토리얼 예제로 살펴보는 Django 분석 ④ : 제너릭 뷰(Generic View)

이미지
・ 제너릭 뷰 사용하기 : 간결한 코드가 더 좋다 이전에 프로그래밍 했던 detail() 이라는 View 와 results() 라는 View 는 매우 짧으며 위에서 언급 했듯이 중복 된다 . 이러한 View 는 URL 에서 전달 된 매개 변수에 따라 데이터베이스에서 데이터를 가져오는 것과  템플릿을 로드하고 렌더링 된 템플릿을 리턴하는  기본 웹 개발의 일반적인 경우를 나타낸다 . Django 는 이런 매우 일반적인 경우를 위해 “ 제너릭 뷰 (Generic View)” 시스템이라는 숏컷 (Shut Cuts) 을 제공한다 . 이 제너릭 뷰 (Generic View) 는 일반적인 패턴을 추상화하여 앱을 작성하기 위해 Python 코드를 작성하지 않아도 된다 . 이전에 프로그래밍 했던 polls  앱을  제너릭 뷰 시스템을 활용해서 코드를 바꿔보자 . 변환을 위해서는 몇 가지 단계를 수행해야 한다 . ①     URLconf 를 변환 ②     불필요한 오래된 View 중 일부를 삭제 ③     Django 의 제너릭 뷰를 기반으로 새로운 뷰를 도입 그리고 공식 도큐먼트에서는 왜 처음부터 제너릭 뷰에 대해 설명하지 않았느냐라는  질문을 할 수 있는 독자들을 위해  아래와 왜 코드 셔플인가 ? 이름의 코멘트를 달아놨다 . 일반적으로 Django 앱을 프로그래밍 할 때 , (when writing a Django app) 제너릭 뷰가 문제에 적합한지 여부를 평가할 것이다 . (generic views are a good fit for your problem) 코드를 중간에서 다시 리팩토링하지 않고 처음부터 사용하게 될 것이다 . (you’ll use them from the beginning, rather than refactoring your code halfway through.) 그러나 이 튜토리얼은 의도적 으로