라벨이 프로젝트 BEP인 게시물 표시

[ 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 ] 제 1장 : 컴퓨터 개론 - 결론

이미지
이렇게 해서 내가 이야기 하고 싶었던 컴퓨터 아키텍처에 대한 이야기를 여기까지 해서 끝내도록 하겠다. 이에 따라 우리는 이야기 하기 앞서서 폰 노이만에 대한 찬사를 했고, 폰 노이만 구조에 대해 알아보며 이를 현실의 디바이스들과 매칭시켜, 확장 및 최근에 컴퓨터 아키텍처를 살펴보고 마지막으로 소프트웨어 개발자로서 왜 병목 현상을 주목해야하는 이야기 까지 내가 하고 싶은 이야기는 한 것 같다. 이것으로 비전공자 주니어로서 컴퓨터 개론에서 컴퓨터 아키텍처에 대한 기본은 가졌다고 생각된다. 물론 마음만 같았으면, 졸업장 같은 증명서를 주고 싶지만, 나는 그렇게 사회적 지위가 높은 사람이 아니다. 따라서 나의 컴퓨터 아키텍처에 대한 '부분적 진리' 를 씹고 뜻어보며 음미한 다음 좀 더 확장시키길 바란다. 물론 어떤 사람들은 '최근에 들어서 하드웨어가  비약적으로 발전함에 따라  메모리 관리는 필요 없다.' 라고 주장할지는 모르겠다. 난 그 의견에 대해 동의하기도 하고, 동의하지 않기도 하다. 왜냐하면 단순하게  메모리 관리는 필요 없다 고 생각하기에는 조금 거부감이 들기 때문이다. IT의 분야는 생각보다 엄청 넓다. 현재의 하드웨어 기반이 충분해 메모리 관리가 필요 없는 분야가 있는 반면, 현재의 하드웨어 기반이 충분치 못해 메모리 관리가 필요한 분야도 있다. 따라서 우리가 스스로 Software Developer 라고 자칭하고 다니는 이상, 그리고 그 위를 목표로 잡고 있는 나는 이런 메모리 관리의 방법은 잘 모를지 언정, 메모리 관리의 필요성 정도는 개발자로서 반드시 알 필요가 있다고 생각한다. 또한 가까운 과거에도 그랬듯이 IT분야에서 계속 일하고 싶다면, 유연한 사고를 가져야 한다. 왜냐하면, 프로그래밍과 같은 코딩은 대게 어린 사람들이 빠르게 잘하기 때문이다. 물론 나이가 들어서 빠르게 잘하는 사람도 있다. 하지만 그런 사람들

[ 프로젝트 BEP ] 제 1장 : 컴퓨터 개론 - 폰 노이만 병목 현상(Von Neumann bottleneck)과 메모리 누수(Memory Leak) 현상에 대해

이미지
폰 노이만 병목 현상(Von Neumann Bottlenect) 우리는 살다보면  병목 현상(Bottleneck) 이라는 말은 한번쯤 들어봤을 것이다. 폰 노이만 구조에도 이런 병목 현상이 발생한다. 폰 노이만 구조 병목 현상 위에서 언급한 분류를 다시 한번 언급하겠다. 제어 장치, 산술장치  → CPU(중앙처리장치) 메모리  → RAM, Cache 등 그외의 디바이스(저장 장치 등)  → HDD, SSD , USB Drive ,CD Drive 등   폰 노이만 구조에서는  메모리 와  그외의 디바이스 를 메모리 라는 이름으로 하나로 묶었던 것을 기억할 것이다. 하지만 현재 컴퓨터 아키텍처는 이를 분리하였는데, 이는 CPU의 처리속도는 빠른것에 비해, 메모리에서 CPU까지 전달 속도가 느림에 따라 메모리(저장 장치등을 말함)에서 CPU까지 아직 데이터가 도달하지 않았는데, CPU는 이미 그 전에 전달 받은 처리를 끝내 대기하는 상태 즉,  병목 현상 이 나타남에 따라 자주 쓰는 데이터들을  메모리(Ram, Cache 등) 에 올려놓는 것 으로 이 구조를 개선한 것이 현재의 컴퓨터 구조이다. 하지만, 이것은 개선한 것에 불과하며, 여전히  병목 현상 은 나타난다. 이렇게 분리함에 따라 SSD나 HDD와 같은 저장장치를 비휘발성 메모리, RAM과 Cache를 휘발성 메모리라고 학문으로서 분류되어 있지만 사실 크게 중요하지는 않다. 중요한 사실은 CPU처리 속도가 너무 빠른 것에 비해, 다른 장치들에서 CPU까지의 전달 속도가 매우 느리다는 것 만 기억하면 된다. 특히, 소프트웨어로서 이야기 되어지는 것은 SSD나 HDD와 같은 즉,  저장 장치의 전달 속도가 비교적 매우 느리다는 것 을 기억하기 바란다. RAM이 컴퓨터 시스템에서 필요한 이유 RAM 이라고 불리우는 메모리가 필요한 이유가 여기서 드러난다. 새로운 처리가 필요할 때마다  HDD나 SSD와 같은 저장 장치에서  다시

[ 프로젝트 BEP ] 제 1장 : 컴퓨터 개론 - 컴퓨터 아키텍처에 대해

이미지
이번 글에서는 컴퓨터 아키텍처에 대해 이야기 할 것이다. 현재에 와서는 여러가지의 컴퓨터 아키텍처가 언급될 수 있으나, 소프트웨어 개발자로서, 그 중 비전공자 주니어에게 알아야 하는 것은 폰 노이만 구조 만 알면 된다고 생각한다. 왜냐하면, 지금 존재하고 있는 컴퓨터 기기들은 모두 이런 폰 노이만 구조에 크게 벗어나지 않았다고 봐도 무방하기 때문이다. 따라서 일단 폰 노이만 구조에 대해 대략적으로 이해하기만 한다면, 다른 컴퓨터 아키텍처에 대한 것은 필요할때 마다 공부하면 된다. 이는 사실 Programmer라던가 Developer등의 다음 레벨의 개발자들에게도 마찬가지라 나는 생각하고 있다. 따라서 이번 글에서 이야기하고자 하는 것은 폰 노이만 구조 단 하나의 컴퓨터 아키텍처만 설명할 것이다. 그럼 이에 대한 이야기를 시작해보자. 폰 노이만에 대해 소프트웨어던 하드웨어던, 우리가 개발자로서 일을 할수 있는 것은 사실 이런 폰 노이만 구조와 같은 이론을 제시한 사람들이 있기 때문이다. 따라서 우리는 개발자로서 초기 컴퓨터 구조를 제시해준 폰 노이만과 그의 동료들에게 머가리를 천번 박아도 모자를 지도 모르겠다. 어쨋든 폰 노이만은 천재로서 세상에 알려져 있다. 그의 업적을 보면, 그 누구도 이에 동의하지 않는 사람은 없을 것이다. 폰 노이만은 아래와 같이 생겼다. 폰 노이만 하지만 이런 의문이 든다. 폰 노이만이 분명 천재이고, 그가 위대한 업적을 남긴것에 깊이 공감하며, 그 업적에 대해서는 찬사를 보내는 바이지만, 소프트웨어 개발자로서 그를 자세히 알 필요가 있을까? 나는 없다고 생각하기 때문에 딱히 언급하지는 않겠다. 하지만, 컴퓨터를 제외하고도 수학 등의 업적을 남긴 사람이기 때문에 어떻게 생긴 사람인지는 알아야 되며, 폰 노이만은 충분히 그럴 자격이 있는 사람이다. 혹시 알고 싶은 사람을 위해서 아래 위키백과의 링크를 남긴다. ( https://en

[ 프로젝트 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년쯤 시점)에게 학사 학위는 필요한가?」에 대한, 정확히는 「살아가는데 대학의 학사 학위는 의미가 있는가? 혹은 필요한가?」 에 대한 고민이였다. 그리고 '여러가지 의미에서 의미가 있다 혹은 필요하다' 고 결론을 내렸다. 물론, 절대적으로 필요하다는 의미가 아니다. 좀 더 자신의 삶을 가치있게 하기 위해서, 여러적인 이유에서 필요하다는 결론을 내렸다. (경제적인 이유가 아니다) 따라서 나는 내가 아이를 가진다면, 나는 가급적 내 노후자금을 포기 해서라도 대학에 보낼 생각이다. 이야기가 좀 다른대로 갔는데, 어쨋든 다시 원래 이야기로 돌아오면, 동일하게 「개발자에게 학사 학위는 필요한가?」 에 대한 결론으로 비슷하게 '있으면 좋다' 라고 결론을 내렸다. 그에 대한 이야기는 앞서 천천히 이야기 하도록 하자. 일단 나는 대학생 때, 학기당 최대 학점이 조금 비어있다면, 몇 개씩 경제학 강의를 들었는데 거기서 나온 이야기 부터 시작해보자. 소득 불평등의 원인은 「교육」 내가 들었던 경제학 강의 중 가장 인상 깊었고, 배우고, 공부하면서 재미있었던 강의들은 「소득 분배론」 이라는 강의와  「근대 경제사」 강의였다. 여기서 이야기 하려는 것은 「소득 분배론」