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

[ 프로젝트 BEP ] 들어가면서


요새 일하면서 뭔가 신입으로 들어오고자 하는 사람
혹은 이쪽에 관심을 가지는 사람들이 많아지기 시작했다.

내가 그렇게 느낄수 밖에 없는 것이
과거보다 신입 입사자가 눈에 띌정도로
많이 들어오기 때문이기도 하고,

인터넷 커뮤니티에서 개발자에 대한 인식이
몇 년 사이에 긍정적으로 변했기 때문이다.

아마 구글의 바둑을 두는 머신러닝을 세계에 선보이면서,
4차 산업 혁명이 빠르게 진행되고 시점이기 때문이라고
나는 생각하고 있다.

개발자 입장에서는 당연히 환영할 일이다.
투자를 받는 다는 것은 내가 할 일이 많아지고,

나의 가치는 원래의 가치보다
더욱 높게 평가 받을테니 말이다.

하지만,보통 IT업계는 모르는 사람이 보면
마치 천재들이 하는것 처럼 보이기 때문에,

즉, 너무 어려워보이기 때문에
자발적으로 이쪽에 오고자 하는 사람은 흔치 않다.

믈론 어려운것은 사실이지만,
프로그래밍 언어는
실제 언어와 똑같다고 생각해본다면 당연한 것이다.

왜냐하면 프로그래밍 언어는
사실 컴퓨터와 대화식으로 작성하기 때문이다.

따라서 IT업계에 들어오는 사람은
전공이기 때문에,
급료가 높아서 등등의 이유로
사람들이 진입해 쓴 맛을 맛보고 퇴사하는 사람들도 많다.

이런 사람들도 많이 있기에
과거 부터 그 중에 좋은 신입을 채용하기 위해,
많은 회사에서 고민을 해왔다.

하지만, 지금은 이런 문제가 아니라
전체적으로 IT쪽으로 취업하려는 사람의 수가 늘었다.

위에서 잠깐 언급했다시피,
아마 내 생각에는 4차산업 혁명이 언론에 많이 언급되면서,
'IT쪽이 유망하다! '라는 생각에서 오는 것일지
아닐지는 잘 모르겠다.

어쨋든, 정말 자발적으로 온 친구들은 문제가 안된다.

왜냐하면,
자발적으로 온 친구들은 대개 코딩을 좋아하는 친구들이기 때문에

그런 친구들은 몇 가지만 알려주면 스스로 하는 경향이 있고,
알려줄 것은 몇 개 없다.

오히려 자주 터치하는 것은 좋지 않을 수 있다.

하지만 문제는 자발적으로 오지 않은 친구들,

그러니깐 단순히 취업이 잘되고,
미래에 유망한 직업이며 그에 따라 가치가 높아,
돈을 많이 벌 수 있는 직업이기 때문에 온 친구들에게는
IT업계는 지옥일 수 밖에 없다.

특히 흔히 IT업계의 등용문인
소프트웨어 개발자라면 더더욱 그렇다.

그리고 IT업계는 꾸준히 공부하지 않은 자에게는
관대한 편이 아니다.

시대가 빠르게 변화하기 시작하면서,
IT업계도 이에 발빠르게 맞출 수 있어야
세계 시장에서 살아남을 수 있기 때문이다.

한국에 대략 2010년에 스마트폰인 아이폰이 상륙했고,
그 이후에 앱이라는
거대한 파도가 한국 IT업계에 쓰나미처럼 휩쓸었다.

빠르다면 빠르다고 할 수 있지만,
조금 늦게 왔다고도 볼 수 있다.

왜냐하면,
한국 통신사들 입장에서는 당연히
2G폰을 최대한 장기간 사용하는 것이 좋기 때문이다.

스마트폰이 들어오면,
그에 맞춰서 3G라는 새로운 망을 설치해야하기 때문에
그들 입장에서는 최대한 스마트폰의 상륙을 막으려고 했을 것이다.

하지만,
그들 조차 세계의 패러다임의 변화라는
거대한 파도는 거스를수는 없다.

결국 KT의 아이폰 상륙을 시작해
세계의 패러다임에 한국도 맞춰가기 시작했다.

여기서 빠르게 이런 파도에 타지 못한 개발자들은
쓰나미에 휩쓸려 어디론가 사라져 버렸다.

이것이 현실이다.

흔히 인터넷에서 말하는 개발자의 최종 트리가
치킨집 사장이라고 우스겟소리로 하지만,
단순히 웃을 수만 있는 이야기는 아니다.

왜냐하면 누군가에게는
이런 우스겟소리가 현실로 다가오기 때문이다.

물론 꼭 그렇다고 할 수는 없겠지만,
개발자의 평균 직업 수명을 보면 납득될 것이라 생각한다.

그들이 개발자로서 더 이상 일할 수 없게 된 이유는 무엇일까?

애초에 그들의 목표는 정말로 치킨집 사장이였을까?

정말로 치킨집 사장이였으면 정말 다행이다.
그는 꿈을 이루었고, 행복했을 것이기 때문이다.

하지만, 자의던 타의던 간에
그렇게 된 사람들은 행복했을까?

나는 그들이 개발자로 더 이상 일할 수 없게 된 이유는
자신의 가치를 증명할 수 없기 때문이라고 생각하고 있다.

따라서 나를 포함한 개발자들은 회사에게 언제든
개발자로서 자신의 가치를 증명할 수 있어야 한다.

자신의 가치를 증명하지 못한다면,
일은 계속 할 수는 있겠지만,
개발자로서 받는 대접은 참혹할 것이다.

물론 그렇다고 해서 신입부터 이런 가치를 증명하라고
IT업계에서 요구하지 않는다.

위에서 언급했던 이유로 사람이 항상 부족하기 때문이다.

물론 신입부터 가치를 증명하라고 하는 
회사는 있을 수 있지만,
나는 그런 회사가 과연 좋은 IT회사인지,
아니 IT회사를 떠나서 좋은 회사이고,
좋은 솔루션을 사회에 제시하고 있는지 의문이 든다.

왜냐하면
아무리 대학생 때 뛰어난다고 해도,
실제 업무 프로세스와는 전혀 다르기 때문에 
뛰어난 학생과 그리 뛰어나지 못한 학생간의
퍼포먼스는 그렇게 차이 나지 않는다.

그렇기에 퍼포먼스 보다 
더욱 더 중요한 것은 
얼마나 빨리 회사 문화에 적응할 수 있는지
그리고 얼마나 빨리 기존 맴버들과 협업할 수 있는 
수준까지 되느냐 이다.

퍼포먼스는 그 다음에 이야기이다.

또한 IT업계는 기본 협업이기 때문에
지속적으로 일했던 기존 동료들과 비교해
커뮤니케이션 능력도 현저히 떨어질 것이다.

그런 상황에서 무엇을 기대한다는 말인가?

신입 맴버에게 당장 기대할 수 있는 것은
당장 뛰어난 퍼포먼스를 바라는 것이 아닌
기존 맴버들을 환기시키는 것 말고는 딱히 없다.

이에 더해 그 사람에 대한 미래의 가능성을 보고
회사 입장에서 투자하는 것이다. 

물론 프로젝트 진행에 조금이 나마 
도움이 될지는 모르겠으나, 
눈에 띄는 정도의 퍼포먼스는 보여주기 힘들다.

이런 상황에서
대학에서 컴퓨터 관련 학과를 나온 사람들은
그나마 잘 적응하는 편이지만,

아예 관련도 없으며,
대학을 나오지 않은 사람들은
적응하기가  쉽지 않아 금세 퇴사 하는 사람이
심심치 않게 보인다.

따라서 그런 친구들도 많이 보이기 때문에
그 친구들에게 학사 레벨의 지식을 알려주기 위해서
이 프로젝트를 시작하기로 했다.

이 프로젝트의 정식 명칭은
Bachelor's degree Education for junior Programmer,
약자로 BEP이다.

내가 이 프로젝트를 진행하는 목적은 다음과 같다.

  1. 개발자로서 필요한,
    학사적 지식이 없는 막 입사한 회사의 주니어들을
    교육하기 위한 초기안 작성

  2. 나의 학사적 지식을 정리 및 문서화

  3. 초기안을 한국어로 작성해,
    혹시 도움이 될 한국의 후배 및 동료들을 위해
    개인 블로그에 공개

물론 여기서 작성한 것들을 기반으로
회사의 신입들을 교육할 생각이다.

사실 이 블로그에 올리는 모든 글들은 
내가 공부하며 문서화 한 파일들을 
그대로 붙여넣기 한것에 불과하다.

따라서 문서화 작업 후 복사해 그대로 올리는데,
이번에는 역으로 블로그에 먼저 올리고, 
이를 문서화 하려고 한다.

아마 내가 이야기할 내용은 
학사에서 배울 수 있는 레벨쯤 될 것이다.

들어가기 앞서서 궁금할 수 있는 
몇 가지 논의를 하고 나서
학사 레벨의 지식을 이야기 하겠다.

아마 컴퓨터 개론, 알고리즘, 개발 방법론 등을 하게 될거 같은데,
개발자로서 알면 좋지 않을까?
하는 지식들만 하고 넘어갈 생각이다.

순서는 큰 틀의 컴퓨터 개론을 시작으로 조금씩 작은 틀로
나아갈 생각이다.
아마 최종적으로 개발자들의 도구인 프로그래밍 언어에 대해
이야기하고 끝을 내지 않을까 생각된다.

사실 개발자로서 필요한 학사 레벨의 지식은
그렇게 많지는 않다.

하지만 걱정되는 것은
이 프로젝트의 목적을 밝혔음에도 불구하고
오해를 하는 사람들이 있을 것 같은 부분도 있고,
내가 느꼇던 직감을 정확히 전달할 수 있을지 조금 걱정된다.

내가 이 프로젝트로서 비전공자 주니어 친구들에게
어떤 학사적 지식에서 얻을 수 있는 직감을 전해주는 것이 목표이다.

여기서 설명하는 지식들은 그 직감의 +α의 요소일 뿐이지
그것을 전하는 것이 주된 목적이 아니다.

따라서 나는 이런 직감들을 전하는데에 노력할 것이며,
그에 따라 지식의 정확성은 다소 떨어질 수 있음을 먼저 밝힌다.

또한 이런 지식에 나의 경험적인 내용도
들어갈 수도 있기 때문에
가급적 교차 검증을 하는 것이 좋을지도 모르겠다.

교차 검증을 할 수 없는 상황이라면,
이 지식이 틀릴 수 있다는 여지를 마음속에 남겨두기를 바란다.

어쩌면 이 부분에 대해서는
다른 지식들도 그렇게 해야할지도 모른다.

왜냐하면,
과거 고대 부터 '진리'라고 여겨졌던 것들이
사실은 '진리'가 아니였음은
이미 역사적으로 여러번 증명되었기 때문이다.

인류의 역사도 새로운 화석이 발견되고,
증거들이 발견되면서 계속해서 '진리'라는 것들이
변화하고 있는 시점에서

과연 지금 당연하게 받아들이고 있는
'진리' 라고 여겨지는 것들도
과연 당당하게 '진리'라 말할 수 있을까?

나는 항상 이런 생각을 가지고 살아가고 있다.

흔히 말하는 비판적 사고(Critical Thinking)이 이런것이라고
나는 생각하고 있다.

물론 이런 '비판'과 '비난'은 엄멀히 구분되어야 하는것이 옳다.

어떤 사람들은 이런 나의 주장을 보고
의심병을 가지고 있을지 모른다는 생각을 할지는 모르겠다.

정확히 말하면 나는 의심을 하는 것이기 보다는
어떤 사실이건 의견이건 틀릴 수 있다는 여지를
마음속에 남겨두는 것이다.

이것도 의심이라고 한다면,
딱히 할 말은 없다.

어쨋든,
내가 이런 프로젝트 하는 이유에 대해 이야기 하였다.

이번 프로젝트에 관련된 글들은 
블로그에서 작성되고, 수정되고 개선될 것이다.

-------------------------------------------------------------------------------------------------

2020.03.14 프로젝트 BEP 시작
2020.03.17 내용 개행 및 수정・추가
2020.03.21 내용 개행 및 수정・추가
2021.05.20 내용 다듬기 및 수정

이 블로그의 인기 게시물

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

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

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