라벨이 Essay - Developer인 게시물 표시

[ 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, Essay - Developer ] 제 2장 : 개발 방법론 - 왜 개발자는 개발 방법론을 배워야 하는가?

이미지
이번에는 개발 방법론에 이야기 하려고 한다. 이에 해당하는 학문으로서의 이름은 Software Engineering, 한국어로는 소프트웨어 공학이라는 학문일 것 이다. 그 안에 이번에 이야기 하고자하는 개발 방법론이 포함되어 있다. 여기서 이야기하는 것들은 프로젝트 관점에서 이야기를 한다. 프로젝트의 프로세스는 어떻게 할 것인가? 프로젝트의 비용에 대해서는 어떻게 정할 것인가? 또는 구성원은 어느정도로 하는 것이 좋은가 등등에 대한 학문이다. 아마 건축의 공학적 개념을 소프트웨어에도 적용한것이 아닌가 싶다. 물론 건축의 설계는 실질적인데에 비해 소프트웨어의 설계는 굉장히 추상적이기 때문에 동일 시 할 수는 없을 것이다. 이 Software Engineering이라는 학문안에는 여러가지 개념이 있겠지만, 개발자로서 중요한 곳은 개발 방법론이 아마 가장 중요하다고 생각한다. 그렇다면, 왜 소프트웨어 개발자는 이런 개발 방법론을 알아야할까? 이에 대해서는 '컴퓨터 개론'에 비해서는 비교적 명쾌하다고 할 수 있다. 왜냐하면, 실제 프로젝트는 이런 개발 방법론을 기반으로 개발 프로세스를 가지기 때문이다. 1장에서 이야기 했던 것은 어쩌면 개발 방법론 보다 실무에서 떨어져 있을 수도 있다. 하지만 개발 방법론은 다르다. 소프트웨어 개발자들은 프로젝트의 한 구성원으로서 일을 한다. 그리고 프로젝트의 책임자들은 이런 개발 방법론을 기반으로 실제 개발 프로세스(일정)를 작성한다. 따라서 우리는 이런 개발 방법론을 학문적으로는 자세히는 알 필요는 없지만, 어떤 것이 있고, 어떤 장점과 단점을 가지고 있는지 알 필요가 있며, 이에 대한 직관을 가질 필요가 있다. 이를 통해 실제 프로젝트를 진행하며, 어떨때는 이 개발 프로세스가, 어떨때는 다른 프로세스가 더 어울리는지 개발자로서 직감적으로 느끼고 있어야 한다. 왜냐하면 우리가 그 프로젝트에 직접 참여하게

[ 프로젝트 BEP, Essay - Developer ] 제 1장 : 컴퓨터 개론 - 왜 개발자는 컴퓨터 개론을 배워야 하는가?

이미지
드디어 본론으로 넘어갈 차례다. 앞서 우리는 몇 가지 개발자에 대한 논의를 해보았고, 이런 나의 논의가 교육을 받는 자로 하여금 그리고 이 글을 보고 있을 당신에게 도움이 되었기를 바란다. 또한 나의 논지에 동의하지 않더라도, 그에 대한 논의를 스스로 꼭 해보길 바란다. 왜냐하면, 이런 고찰을 해봐야 개발자가 하는일이 무엇이고, 어떻게 나아가야할지가 즉, 개발자로서 큰그림이 그려지기 때문에 이는 당신의 커리어에도 많은 도움이 될 것이다. 어쨋든 본론으로 다시 돌아가서 먼저 왜 개발자가 컴퓨터 개론을 배워야 하는지 논의부터 하고 넘어가야 된다. 이에 대해 또 논의야?라며 질색을 하는 사람이 있을지는 모르겠지만, 이런 논의들 그러니깐 철학적인 생각은 커리어 뿐만아니라 인생에서도 꼭 필요한 것들이다. 현대 교육에서는 이런 철학적 생각들 보다 지식을 머리에 쑤셔넣는 것을 우선시 하기 때문에 이것이 인생에 있어서, 더 나아가 커리어에 있어서 가장 중요함에도 불구하고 외면시 받고 있는 것이 현실이다. 이런 현실에 대해 밀은 고대 그리스(로마)이 교육을 비교하며, 인간에 대한 근본적인 철학적 생각들을 하지않는 것에 매우 유감스럽다는 표현을 한다. 나 또한 이에 동의한다. 어떤 학문을 받아들일때 왜 이 학문을 배워야하는가에 대해 진지한 고찰이 없다면, 그 학문의 '부분적 진리'라는 원석은 얻을 수 없고, '단순한 지식'이라는 껍데기 밖에 얻을 수 없을 것이다. 심지어 그런 '단순한 지식'은 대개 '진리'는 아니며, 학자들이 논의와 실험을 통해 '이럴 가능성이 높겠다'라는 의견이다. (그들을 비난하는 것이 아니다. 단지 '진리'가 아님을 이야기 하고 싶을 뿐이다.) 따라서 우리는 이런 학문조차 의심할 필요가 있다. 다시 말해서, 흔히 말하는 비판적 사고(Critical Thinking)를 통

[ 프로젝트 BEP, Essay - Developer ] 논의③ : 개발자는 무엇인가?(What is Developer?)

이미지
아마 마지막 논의가 될 것이라 생각된다. 앞서 우리는 개발자에게 학위가 필요한지, 그리고 수학이 필요한지에 대해 조금 논의해봤다. 그럼 마지막으로 개발자(Developer)라는 것이 무엇인지 그리고 어떻게 분류되어지는지, 마지막으로 각각 하는일은 무엇인지에 대해 논의해보자. 개발자란 무엇인가? 사실 한마디로 딱 정의 내리기가 어렵긴하다. 왜냐하면 이 개발자라는 개념 자체가 명쾌하지 않기 때문이다. 따라서 사람들마다 말하는 개발자가 다를 수가 있다. 또한 다른 사람들과의 논의 없이 개발자에 대해 정의내리는 것이 매우 꺼려진다. 그럼에도, 교육을 위해서 하고 넘어가야 하기 때문에 내 스스로 감히 정의 내려보겠다. 사람들이 흔히 말하는 개발자는 다소 다를 수 있지만, 비교적 명쾌하다고는 할 수 있다. 왜냐하면, 개발자가 ' 프로그래밍을 하는 사람' 이라는 직업이라는 것은 비교적 명쾌하기 때문이다. 하지만 정확히 어떤 일을 하는지에 대해서는 위와 같이 명쾌하지 않기 때문에 사람마다 이야기가 다를 수 있지만, 개발자가  '프로그래밍을 하는 사람' 임에는 틀림없다. 하지만 정확히 개발자가 무엇을 하는지에 대해 논의하려면 좀 더 큰 틀에서 봐야할 필요가 있다. 왜냐하면 개발자로서 직업을 가질 수 있는 이유는 큰 틀의 사회에서 필요로 하기 때문이다. 그래서 큰 틀의 사회가 개발자들에게 어떤 것을 요구하는지 알 필요가 있다. 큰 틀에서 보면 개발자는 '사회에서 해결하지 못한 문제를 IT기술을 통해 해결해주는 사람' 이다. 여기서 몇가지 단어를 추출해 줄여본다면 '사회의 문제를 해결해주는 사람' 이다. 따라서 개발자는 크게 보면, 위와 같이 ' 사회의 문제를 해결해주는 사람 '이다. 이런 개발자들이 두각을 나타내기 전의 근대의 사람들은 기록을 남길 때, 남들과 의사소통을 할 때 모두 '종이'라는 매체를

[ 프로젝트 BEP, Essay - Developer ] 논의② : 개발자에게 수학은 필요한가?(Developer need math?)

이미지
오늘은 그 두 번째 논의로 「개발자에게 수학은 필요한가?」 에 대한 논의다. 이 논의는 사실 개발자가 아니더라도 알고 있는 사실인듯 하다. 왜냐하면, 내가 이전에 어떤 한 커뮤니티에 글을 몇개 쓴적이 있는데, 개발자가 아닌 사람들도 개발자에게 수학이 필요하다는 사실은 알고 있음을 확인했었다. 그리고 IT회사가 아니더라도, 잘 모르는 사람이더라도, 개발자에게 '수학' 이 필요하다는 것은 부정하지 않는 사실인듯 하다. 나 또한 필요하다고 생각하는 입장이다. 따라서 오늘은 필요하다는 입장으로 이야기를 하도록 하겠다. 분명 개발자에게 수학이 필요하다는 것은 대부분의 사람이 그렇게 느끼고 있지만, 여기서 '수학' 이라는 것이 ' 어떤 수학' 인지를 확실히 대답하는 사람은 매우 드물다. 따라서 ' 수학이 필요해 '라고 말하는 사람은 많지만, ' 어떤 수학이 필요해 '라고 정확하게 말해주는 사람은 거의 없다고 봐도 무방하다. 그렇기에 개발자에게 필요한 '수학' 이 도대체 ' 어떤 수학' 인지를 먼저 명확히 정의하고, 분류하여 정확히 개발자에게 필요한 '수학' 이라는 것을 명쾌하지 못할지라도 추출할 필요가 있다. 개발자에게 필요한 수학에 대한 정의 먼저 사람들이 가장 먼저 접하게되는 ' 수학 '에 대해 이야기 해보자. 우선 다른 사람들에게 '수학이 뭔지 알아?'라고 물어보면, 대부분의 사람들은 , 덧셈, 뺄셈, 나눗셈 과 같은 즉, 사칙 연산, 미분, 적분, 로그 등과 같은, 어떤 수를 표현하기 위한 규칙 그리고 수식과 그 답에 도달하기 위한 것들을 ' 수학 '이라 말할 것이다. 왜냐하면, 현대 교육시스템에 의해 배워진 수학은 그런 ' 수학 '밖에 없기 때문이다. 하지만 개발자에게 필요한 ' 수학 &

[ 프로젝트 BEP, Essay - Developer ] 논의① : 개발자에게 학위 또는 학벌은 필요한가?(Developer need a degree or academic background?)

이미지
이전 글에서도 언급했듯이, 몇 가지 논의를 하고 넘어갈 예정이다. 일단 첫 번째로 「개발자에게 학사 학위는 필요한가?」에 대한 논의, 물론 석사, 박사는 논외로 하겠다. 석,박사는 개발자보다는 연구직이 어울린다. 그리고 두 번째로 「개발자에게 수학은 필요한가?」에 대한 논의, 그리고 세 번째로 「개발자란 무엇인가?」에 대한 논의만 하고 넘어가려고 생각하고 있다. 물론 이후에 논의가 추가될지는 모르겠다. 이번 글은 이에 대한 첫번째 논의로 「개발자에게 학사 학위는 필요한가?」 에 대한 논의부터 시작하자. 사실 이번 주제는 내가 예전부터 고민하던 문제이기도 하다. 그 주제는 「현대인(2010년쯤 시점)에게 학사 학위는 필요한가?」에 대한, 정확히는 「살아가는데 대학의 학사 학위는 의미가 있는가? 혹은 필요한가?」 에 대한 고민이였다. 그리고 '여러가지 의미에서 의미가 있다 혹은 필요하다' 고 결론을 내렸다. 물론, 절대적으로 필요하다는 의미가 아니다. 좀 더 자신의 삶을 가치있게 하기 위해서, 여러적인 이유에서 필요하다는 결론을 내렸다. (경제적인 이유가 아니다) 따라서 나는 내가 아이를 가진다면, 나는 가급적 내 노후자금을 포기 해서라도 대학에 보낼 생각이다. 이야기가 좀 다른대로 갔는데, 어쨋든 다시 원래 이야기로 돌아오면, 동일하게 「개발자에게 학사 학위는 필요한가?」 에 대한 결론으로 비슷하게 '있으면 좋다' 라고 결론을 내렸다. 그에 대한 이야기는 앞서 천천히 이야기 하도록 하자. 일단 나는 대학생 때, 학기당 최대 학점이 조금 비어있다면, 몇 개씩 경제학 강의를 들었는데 거기서 나온 이야기 부터 시작해보자. 소득 불평등의 원인은 「교육」 내가 들었던 경제학 강의 중 가장 인상 깊었고, 배우고, 공부하면서 재미있었던 강의들은 「소득 분배론」 이라는 강의와  「근대 경제사」 강의였다. 여기서 이야기 하려는 것은 「소득 분배론」