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

[ 생각 ] 종이책과 전자책에 대해서

이미지
요즘 개발자로서의 공부보다 책을 읽기 때문일까 계속 다양한 생각이 떠오르는 것 같다. 나는 모든 지식을 책으로 부터 배우던 세대 그리고 현재, 지식을 유튜브와 같은 이미지로 배우던 세대 그 사이 어딘가에 있는 세대다. 그래서 나는 어린시절 책이라는 텍스트가 가득한 매체를 통해 지식을 습득했고, 내가 대학생 시절에는 책이라는 텍스트와 인터넷(전자책 포함)의 텍스트를, 그리고 지금에 와서는 책이라는 텍스트와 인터넷(전자책 포함)의 텍스트 그리고 유튜브라는 이미지 매체를 이용해 지식을 습득하고 있다. 갑자기 그런 생각이 떠올랐다. 지금 유튜브라는 매체에 익숙한 세대들은 이미지로서 지식을 받아들이는 경우가 많다는 것은 이제 누구도 의문을 품지 않는 사실이다. 왜 그럴까? 단순히 텍스트로 지식을 습득하는 것이 비효율적이기 때문일까? 정말로 단순히 비효율적이라면, 어느 부분이 비효율적이며, 혹시 텍스트로 지식을 받아들인다면 유튜브라는 이미지 매체 받아드리는 것보다 어떤 면에서는 좋은 점이 있지 않을까? 만약 압도적으로 유튜브로 받아들이는 지식이 더 효율적이라면 텍스트로 지식을 습득하는 방법은 버려야 할까? 라는 생각이다. 사실 전자책이 지금의 종이책들을 모두 대신할 것이라는 예측은 과거 부터 있었다. 그리고 그 시점이 올즈음에 그리고 조금 지났을 시절 모두 의아해했다. 전자책이 종이책을 대체하긴 했다. 하지만 전부는 아니고 일부였다. 이것은 어떤걸 암시하고 있을까? 결국 대다수의 사람들은 종이책만의 무언가가 있다고 생각하기 때문에 전부 대체되지 않은 것이다. 그리고 이 것은 시장에 결과로서 드러났다. 그래서 그 종이책만의 무언가가 어떤 것인지에 대해 텍스트와 이미지 매체 둘다 익숙한 세대에 있는 내가 감히 분석을 해보려고 한다. 사실 분석을 한다는 사실이 조금 부끄럽다. 나 혼자 그렇게 떠들어대며 혼자 마침표를 찍어버릴정도의 대단한 사람은 아니다. 그럼에도 불구

[ 생각 ] 그림을 그리는 것과 프로그래밍은 같다.

이미지
요즘 유튜브를 자주보는데, 우연히 밥로스의 영상이 편집된 영상을 봤다. 한국에서 밥로스는 그림을 그리는 것으로 유명하기 보다는 참 쉽죠?(That easy)라는 인터넷 밈으로 유명하다. 일반 사람이 보기에는 굉장히 어려워보이는 그림을 그려놓고 참 쉽죠?라고 말하는 것이 이 밈의 포인트적인 부분이다. 실제 밥로스는 여러분이 생각한것 만큼 그림은 어렵지 않다라는 것을 알려주기 위해 그런 말을 한 것 같지만 말이다. 어쨋든 직접 말을 번역해보면서, 느낀것이 있다. 밥로스의 말을 곰곰히 생각해보고 그의 사고를 나름 분석해보면서 "그림을 그리는 것은 프로그래밍을 하는 것과 같다"라는 재미있는 결론을 내게됐다. 밥로스의 영상 중 그가 이런 말을 한 장면이 있다. 그 대사의 텍스트는 아래와 같다. 「I get so mant cards and letters from people all over the country saying 저는 세계의 많은 사람들로 부터 이런 카드와 편지를 많이 받습니다. "Bob! what should I do if I'm in the middle of the painting, and decided I don't like it or [1]god forbid [2]it goes sour? " "밥! 만약 내가 그림을 그리고 있는 중에 마음에 들지 않거나 망치면 어떻게 해야하죠?" Well, [3]I don't like to start off with something you haven't already done 글쎄요, 나는 여러분들이 아직 시작도 하지 않은 것에 대해 언급하는 것을 좋아하지 않아요.  so,let me show you what you can do at home if you're not happy with the painting,and  if it's not going j

[ 생각 ] 휴식에 대해서

이미지
예전에 문득 길을 가다 이런 생각이 떠올랐던 적이 있다. 왜 나는 분명 토,일에 휴식을 취했음에도 불구하고 왜 월요일만 되면 피곤한 것일까? 라는 생각이다. 하지만 그 당시에는 내가 취하는 휴식 방법이 잘못됐으리라 생각도 하지 못했다. 그리고 최근에 들어서 어떤 경험을 하고 나서 진정한 휴식이 어떤 것 인지 깨달았다. 일반적으로 사람들이 휴식 시간에 무엇을 할까 라는 생각을 자주한다. 그리고 휴식이라는 이름으로 어떤 영화를 보거나 게임을 하거나 등등의 문화 활동을 하거나 친구, 연인, 가족과 함께 놀러간다. 이것이 일반적으로 받아드려지는 휴식이라는 개념이다. 하지만 이런 휴식을 충분히 취했음에도 불구하고, 다음날 월요일에는 무척이나 피곤하다. 왜 그럴까? 최근에 들어서 그 원인을 잠을 충분히 취하지 못하거나, 잠의 질이 떨어지기 때문이라고 말한다. 물론 나도 그 의견에 동의한다. 하지만, 그건 요인 중 하나 이지 결정적인 요인이 아니라고 생각한다. 내가 생각하는 결정적인 요인은 "휴식 방법"에 있다고 생각한다. 물론 이 휴식 방법은 사람마다 다를 수 있다. 내 예로 들어보면, 나의 휴식 방법은 아무것도 안 하는 것이다. 정말 많이 움직이지 않는다. 내가 움직일 때는 화장실 갈 때, 밥을 먹을때 일뿐 아무 생각도 못하게 편안히 볼 수 있는 것들을 본다. 그 때는 정말 아무것도 안한다. 단지 볼 뿐이다. 책에 대해 생각하지 않고, 사람에 대해 생각하지 않고, 나의 일에 대해 생각하지 않고, 내일에 대해 생각하지 않는다. 미래에 대해 생각하지 않고, 지금에 관해 생각하지 않는다. 모든 사고를 차단하고, 차단 하기 위해 , 단지 눈앞에 있는 작은 화면에 펼쳐지는 미디어에만 집중한다. 그렇게 하루 종일 보내고, 적당히 밥을 먹고(건강에 대해서도 생각하지 않는다) 잔 다음날 월요일에 일어나 일을 시작하면 최상의 컨디션으로 일 할

[ 생각 ]현재 전 세계 교육 시스템이 가지는 한계

이미지
전 세계 교육의 한계는 뭘까? 교육의 대한 문제는 한국 뿐만 아니라 전 세계에 해당하는 문제다. 사실 나도 이런 교육 시스템 속에서 살아왔다. 나의 부모님은 나와 형에게 반드시 너희는 대학을 졸업해야하며 대학만 졸업하면 괜찮아 질 것이다라며, 대학에 입학 하기 위한 "시험 공부"를 해야 한다고 항상 말했다. 그리고 난 그것이 "공부"인 줄 알았다. 어쨋든 잡소리는 여기까지 하고 본론으로 넘어가보자. 현재 교육은 시험 문제를 통해 사람을 평가 한다. 이런 시험 문제의 점수에 따라 학생들은 등급이 매겨진다. A등급, B등급, C등급, D등급 , E등급, F등급으로 말이다. 심지어 자기가 나온 대학교에 따라 사람들에 의해 등급이 매겨지기도 한다. 과거의 이런 점수들로 의해 들어갈 수 있는 상위권, 중위권, 하위권 대학 이렇게 말이다. 나는 이런 교육 방식에 대해 부정하는 것이 아니다. 다수의 사람에게 많은 지식을 머리에 넣기에는 아주 좋은 방식이라고 생각 한다. 그리고 세계의 수 많은 사람들이 이런 교육 시스템에서 훌륭하게 자랐다. 그리고 여기에 적응하지 못해 도중에 실패자들도 생겨났다. 그 실패자들은 빌 게이츠 스티브 잡스 마크 주커버그  이런 사람들이다. 아이러니 하게도 이런 교육 시스템을 훌륭히 완수하지 못한 패배자들이 세계의 패러다임을 바꾸고 있다. 왜 그럴까? 왜 많은 사람들이 젊을 시절 훌륭하게 자랐다고 훌륭하다고 판단의 근거가 되는 훌륭한 학점, 훌륭한 학위, 훌륭한 대학을 나온 사람들은 왜 세계의 패러다임을 바꿀 수 없을까? 나는 그 이유를 대학에서도 학점으로, 대학으로, 학위로 사람의 훌륭한점을 판단하는 것, 그리고 이런 기반으로 사회에 훌륭한 사람이 될 것이라는 인식 결정적으로 시험 문제로 이런 것을 단순히 5지선다의 객관식 문제로 대부분 판단하거나, 단순히 정답 맞추기에 초점이 맞춰져

[ Django, Python ] Python에서 Kawrgs와 Args라는 인수(Argument) 또는 매개변수(parameter)에 대해

이미지
・ Kawrgs 와 Args 라는 인수에 대해 : Args 와 Kawrgs 란 ? Python 이라는 언어를 다루다보면 kawrgs 와 args 라는 인수 (argument) 나 매개 변수 (parameter) 를 자주 볼 수 있다 . 나는 보통 라이브러리의 매개 변수 로서 많이 사용하는 것을 많이 봤다 . 이번 Django 를 다룰때도 역시 이 kawrgs 와 args 라는 인수 또는 매개변수가 자주보였다 . 그래서 이번에는 이 두 가지 인수 (argument) 혹은 매개 변수 (parameter) 의 의미에 대해 확실히 알고 넘어가 보기로 하자 . 우선 두 가지에 대해 알아보기 위해 , 먼저 알아야 하는 개념이 있다 . 키워드 인수 (Keyword Argument) 라는 개념 이다 . ・ Kawrgs 와 Args 라는 인수에 대해 : 키워드 인수 (Keyword Argument) 일반적으로 함수를 호출할 때 , 변수 혹은 함수의 정의되어있는 매개 변수 data type 에 맞는 data 를 인수 로 넣어주었다 . 만약 integer 형 의 값과 String 형 값를 받아 두 개를 이어서 리턴 해주는 sum_int_string 이라는 함수 가 있다고 가정해보자 . 그렇다면 아래와 같은 Python 코드가 될 것이다 . 그리고 위의 함수를 호출하는 코드는 아래와 같다 . 그리고 컴파일 해보면 아래의 사진과 같이 1Hello 라는 텍스트가 콘솔에 표시된다 . 하지만 아래와 같이 두 개의 인수를 바꿔서 호출하면 당연히 에러가 날 것이다 . 실제 아래와 같은 컴파일 에러 가 난다 . 하지만 , Python 에서는 키워드 인수 (Keyword Argument) 라는 것을 지원 해 준다 . 키워드 인수 (Keyword Argument) 란 정의한 함수의 매개변수의 이름으로 매개변수 이름에 인수를

[ Django, Python ] 이쯤에서 분석해 보는 Django 튜토리얼 예제 (①~④) ⑤ : Django MVT 아키텍쳐에서 App시점 청사진 그리기

이미지
・ Django MVT 아키텍쳐에서 App 시점 청사진 그리기  : App 시점 청사진 마지막으로 각 App 의 시점 에서 MVT 패턴 아키텍쳐 의 청사진을 그려본다 면 위와 같은 청사진 을 그릴 수 가 있다 . 위의 그림에서 디폴트 (default) App 은 제외 했으며 예제에서 다뤘던 앱이 polls 라는 App 밖에 없어 , 좀 더 이해를 편하게 하기 위해 임의의 xxx 라는 App 을 만들었다 . 단순히 하나의 App 만 있으면 이해 가 힘들 수 도 있다 고 생각해 임의의 xxx 라는 이름의 App 을 만들어 붙여넣었다 . 아마 이 그림을 이해할 수 있다면 , 사실상 Django 는 끝이 났다고 볼 수 있다고 감히 말 할 수 있다 . 왜냐하면 이 이상은  어떤 라이브러리를 써서,  어떤 비즈니스 로직을 만들 것인지에 대한 각 개발자들의 몫 이다 . 여기에 완전히 다른 한 개의 App 을 프로그래밍해서 넣건 다른 누군가의 App 을 가져와서 넣건  이 문제는 각 프로젝트의 목표에 맞게 개발자 들이 선택 하면 된다 . 그리고 만든 App 은 디폴트 App 의 urls.py 에 연결 시켜주기만 하면 끝이다 . 다음은 개발자의 몫이 아닌 디자인의 영역이다 . 추가로 분석은 딱히 하지 않겠다. 이미 이전 글에서 대략적으로 분석을 해 놨기 때문에 그 쪽을 보기 바란다.