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

[ 전지적 개발자 시점, Essay - intution ] 코딩 교육은 필요한가?



아마 몇 년 전에 코딩 교육에 대한 이야기가 
한국에서 나왔던 것으로 기억 한다.

외국에 일하고 있는 내 귀에 들릴 정도면 
꽤나 시끌벅적 한 것으로 생각 된다.

지금은 실제로 하고 있는지 어떤지는 잘 모르겠지만 말이다.

하지만,
유년 시절을 한국에서 보낸 나에게는
새로운 교육을 또 내세운다는 사실에 굉장히 부정적일 수 밖에 없다.

왜냐하면,
유년 시절에 겪었던 한국의 교육 프로세스는
결코 교육생들을 위한 프로세스는 아니였기 때문이다.

그렇기 때문에 
교육 시장의 초점은 학부모의 시점으로 맞춰지고,
정작 교육 받는 교육생들의 생각은 무시당하기 일쑤이고

그리고 어른들이 자랑하는 교육이 끝난 시점에는 
어깨를 으쓱하며 자신들은 할만 큼 했다며
무책임하게 내팽겨친다.

왜냐하면 어른들이 정한 기준선을 넘는다면
승리한 콜로세움의 검투사 처럼 한 없는 찬사를 받지만,

패배한 교육생들은 마치 패배한 검투사 처럼
정량적으로 계산할 수 없는 '노력'이라는 것이
부족하다는 이유로 매몰차게 야유를 보내기 때문이다.

하지만, 최고의 검투사의 수는 하나 이듯이
최고의 교육생의 수는 대학 정원으로 한정되어 있기 때문에
무책임한 어른들의 말 처럼 모두가 최선의 노력을 다한다고 하더라도
모두가 기준선을 넘는 것은 사실상 불가능하다.

또한 나이가 많던 적던 인간으로서 중요한 것은 
과정인데에도 불구말이다.
더욱 재미있는 것은  그런 어른들도 
결과보다 과정이 중요하다고 떠들어댄다는 것이다.

어쨋든 그런 교육을 유년 시절 받아왔고
IT 업계에서 발을 조금 담고 있는 개발자로서 
코딩 교육은 필요한지, 그렇지 않은지에 대한 이야기를 나누어보자.

왜 코딩 교육이 주목 받았는가?


이런 것들에 대해 이야기를 하기 전에
왜 이런 이야기가 주목 받았는지에 대해 
먼저 이야기 해봐야한다.

그래야 인과관계가 설명되기 때문이다.

한국에서 '코딩 교육'이라는 단어가 주목 받기 시작한 것은 
대략 6년전 2015년 이라고 생각 한다.

나는 이에 대한 한가지 해답으로
한 영상에 주목하고 싶은데

 
대략 8년전인 2013년에 Code.org라는 채널에서 제작한
대부분의 학교에서 가르치지 않는 것
(What Most Schools Don't Teach)라는 제목의 영상이다.

실제 유튜브에서 찾아보면,
이 영상에 대한 번역 영상을 꽤나 찾아볼 수 있다.

이 영상에는 
위의 사진의 마이크로 소프트 창업자 빌 게이츠를 시작해

트위터 창업자 


잭 도시,

페이스북 창업자 


마크 주커버그,

스팀으로 잘 알려져 있는 
애플리케이션을 만든 회사인 벨브 창업자 


게이브 뉴웰을 포함해 

이외에 수 많은 현업 엔지니어들이 나오며 
그들의 경험을 이야기 한다.

이 영상을 의심 없이 본다면 
세계의 탑급 엔지니어들 처럼 보이는 사람들과 
IT업계 창업자까지 
한국에서 이야기하는 코딩 교육이라고 부르는 것을 
정말로 해야만 하는 것 처럼 들릴 지는 모르겠다.

하지만, 주목해야 하는 것은
이는 정말 짧막하게 10초 정도만 
그들의 말이 나오도록 편집되어 있다.

나는 이에 대해 
코딩(혹은 프로그래밍) 교육의 필요성을 
강조하기 위해 짜여진 쇼라고 생각한다.

왜냐하면, 각 인물들은 단순히 
'코딩'에 대해, '프로그래밍'에 대해 이야기하는 것이 아닌
어떤 사람은 프로그래밍에 대해 이야기하기도 하지만
어떤 사람은 Computer Science(컴퓨터 과학)에 대해
이야기하고 있기 때문이다.

또한 대부분 주어가 불분명해 
무엇에 대해 이야기하고 있는지 알기 힘들다

이에 더해
해당 사람이 무엇에 대해 이야기하는지 알기 힘들 정도로
짧게 짧게 편집되어 있어,

마치 이들 모두가 '코딩', 
'프로그래밍'만을 말하고 있는 것 처럼 보이게 했다.

의도 했는지 의도 하지 않았는지는 모르겠지만 말이다.

이는 편집의 힘이라고 할 수 도 있지만,
받아드리는것에 따라 사기에 가까울 것이다.

이에 대해 확신을 가질 수 있었던 것은
그런 인물들의 말을 이어서 
누군가는 편하게 소파에 앉아 컴퓨터를 두두리거나,
드럼을 치고, 게임을 하는 등의 파라다이스를 보여준다.

정확히 말하면
마치 당신이 프로그래밍을 혹은 코딩을 배운다면,
저런 환경에서 일을 할 수 있을 것이라는 것을 보여준다.

하지만, 저런 영상에서 사람들이 
저런 마치 노는것 처럼 보이는 행위를 할 수 있는 것은 
그렇게 하는 것이 자신의 '퍼포먼스'를 높일 수 있기 때문이다.

떨어진 퍼포먼스를 끌어올리기 위한 휴식이며,
이를 위한 자신만의 루틴일 뿐이다.

또한 그런 루틴을 가질 수 있는 사람들은
정말로 프로페셔널하고 엔지니어라고 
불리울 수있을 만큼의 자질과 실력을 가지고 있는 사람들이다.

왜냐하면,
자신이 언제 퍼포먼스가 떨어지는지 알고 있고,
어떤 행위를 하면 퍼포먼스가 높아지는지 알정도로
자신에 대한 분석이 정확한 사람들이기 때문이다.

즉, 일과 휴식의 경계를 
넘어 다니며 삶의 밸런스를 유지 할 수 있는 사람들 때문이다.

과연 영상에서 말하는 것 처럼
모두가 코딩을 배우고, 프로그래밍을 배우면
노는것 처럼 보이는 행위를 해가면서 일을 할 수 있을까?

전혀 아니다.

사람마다 그런 루틴이 필요한 사람이 있고 
필요하지 않은 사람이 있다.

만약 필요하지 않는 사람이 그런 짓을 하다가
퍼포먼스가 눈에 띄게 줄어든다면,
다음 주에 혹은 다음 달에
혹은 내년에 그 사람의 자리가 있을 것이라 생각하는가?

있더라도 유리하게 연봉 협상을
즉, 많은 사람들이 원하는 
높은 연봉을 손에 넣을 수 있다고 생각하는가?

나는 없다에 한 표를 걸겠다.

왜냐하면 IT 업계에서 행해지는 
모든 행위들은 퍼포먼스에 집중하기 때문이다.

일에 대한 문화, 고용 등 
모든 것은 높은 퍼포먼스를 어떻게 이룰까에 대한 
해답으로서 발전해왔다.

지금 현재 한국(동양권( IT 업계에서 하나의 흐름처럼 다가오고 있는
그리고 마치 유행처럼 행해지고 있는 
애자일 개발 방법론도 워터폴 모델의 퍼포먼스가 떨어지자
워터폴 모델의 단점을 해결하기 위해
나온 2001년에 소수 개발자들에 의해 선언된(만들어진) 개발 방법론이다.

또한 IT업계의 고용 문화 
즉, 유연한 고용과 해고, 헤드 헌팅 또한 
높은 퍼포먼스를 가져오기 위해 발달되어져 왔던 것들이다. 

영상에서 보여주는 업무 시간에 게임을 하거나 
사무실에 벗어나 일을 하는 것들은 
그런 행위들이 모두 '높은 퍼포먼스'를 가져왔음이 증명되었기 때문이다.

또한 IT 업계에서 만 보이는 
좋은 복지들은 사원들의 높은 퍼포먼스 위함이다.

국가에서 행하지는 복지들과 똑같으리라 생각하면 
그건 엄청난 착각이라고 말하고 싶다. 
(국가 차원에서 행해지는 복지는 다수의 국민을 위하기 때문)

그렇다면,
그들이 원하는 것은 무엇일까?

내가 보기에는 그들이 
그런 영상을 통해 이야기 하고 싶었던 것은 
프로그래밍에 대해 꼭 배워야 함을 남에게 전하고 싶어 했을까? 

프로그래밍이 모든 사람의 인생에 
영향을 끼칠 정도로 중요하기 때문에 
마치 종교인들이 성서를 설파하는 것과 같이 
그러한 마음에서 그들은 그런 영상을 만들었을까?

물론 그런 마음이 조금도 
없었다고는 생각하지 않지만,

그들이 그런 영상을 제작했던 이유,
그리고 그런 영상을 통해 원하는 것은 '코딩 교육' 혹은 
'프로그래밍 교육'이라는 
새로운 교육 시장을 창조하거나,
자신들의 솔루션의 점유율을 높여 자신들이 이득을 얻는 것 이다.

이는 한국도 마찬가지라고 생각 한다.

이는 새로운 시장을 창조하기 위한 
교육 시장의 시도이다.

특히 이런 새로운 것을 배운다는 것에 
목 말라 있는 한국의 부모들에게는
(재미있는 점은 자신이 배우는 것이 아니라
자신의 아이들에게 시키는 것이다.)

매우 구미가 당기는 일이다.

모든 지식을 안다고 해서 
인생이 풍요로워질 것이라는 생각은 
이제 그만 두는 것이 좋다.

인간이 모든 지식을 알 수 있기에는
인간에게 주어진 시간은 너무 나도 짧고,

모든 지식을 어린 아이들이 
받아드리기에는 무리가 있으며,

이는 자신들 스스로가 어른이라고 
주장하고 생각하는 사람들에게 있어서도 무리가 있다.

또한 자신들의 아이들은 
남들에게 뽐낼 수 있는 부모의 훈장이 아니며,
비교 대상은 더더욱 아니다.

나이가 많건 적건, 
비교 당하는 행위는 누구에게나 기분이 썩 좋지는 않다.

그렇지 않은가?

그런 부모 밑에서 보통의 어린 아이들은
자신의 부모에게 다른 부모의 자식과 비교당하는 일은 
누구나 한번 쯤은 있으며,

한국의 젊은 세대 사람이라면 
연휴 기간에 친가에서 모두가 모여서
자신들의 아이를 두고 누가누가 대단한가에 대한 배틀에 대한 
기분 나쁜 경험 또한 한국 어린 세대라면 존재 할 것이다.

적어도 한국의 코딩 교육은 이런 부모들의 
알량한 자존심을 챙기기 위한
카드 손패를 늘려 줄 훌륭한 기회일 뿐이다.

다만, 그렇다고 
새로운 시장을 만들기 위한 행동들에 대해서
문제를 제기하기에는 조금 무리가 있는데,

이에 대해서
단순히 거짓말이라고 하기에는 무리가 있기 때문이다.

그들은 자신의 솔루션을 팔기 위해 
마케팅 기법을 활용한 것 뿐이다.

한국 교육 업계는 
부모의 알량한 자존심을 만족시킴과 더불어
이런 저런 이유로 가정 교육을 남에게 떠넘기고 싶어하는
마음을 정확히 캐치하고, 이를 제공해줬을 뿐이다. 

이에 따른 한국 교육 업계의 솔루션과 
마케팅 기법은 훌륭하다고 말할 수 밖에 없다.

그 결과 엄청난 파이를 키우지 않았는가? 

물론 여기에 정작 당사자인 어린아이들의 
의견은 무시되었다는 점은 재미있다.

그런 마케팅 기법이 정당하지 않았다면,
먼저 몇 십 년 동안 행해졌던 
마케팅 기법에 대한 판단을 하지 않으면 안된다.

그렇기에 
이를 단순히 나쁘다고 보기에는 힘들다.

물론 그래도 높은 도덕적 감성을 지닌 
사람들에게 있어서는 사기라며,
울분을 토할지는 모르겠으나

적어도 나에게 있어서는 
그들의 마케팅은 정당해 보인다. 

왜냐하면, 그런 마케팅이 정당하지 못한다면 
지금 까지 행해진 모든 마케팅에 대해 
이야기를 나눠봐야하고, 

적절한 마케팅은 무엇이고, 
적절하지 않은 마케팅에 대한 이야기를 나누어야 한다.

그런 이야기가 끝난 이후
그러한 마케팅이 정당하지 않았다는 주장이
설득력을 얻고 정당성이 확보되는 것이다.

그런 도덕적 감성이 높은 사람들이 
생각하는 것 만큼 간단한 논제는 결코 아니다.

하지만, 이를 타인의 미래(어린 아이들)를 위한다며 
정당성을 내세운다면 이야기가 매우 달라진다.

그렇다면 코딩 교육은 필요할까?


위의 글을 보면 알겠지만,
특별한 이유 없이 코딩 교육은 필요 없다.

물론 미래를 위해 필요하다며,
다른 사람의 '미래를 망치지 말라'며
나에게 손가락 질을 할지는 모르겠으나

그런 말 하는 사람은 대게 무책임한 사람들이다.

왜냐하면 아무도 
그 미래라는 것을 모르기 때문이다.

웃기지 않은가?

그러한 교육을 받은 미래에 
그에게 그 미래가 다가오지 않는다면 
어떻게 책임을 지겠다는 말인가?

항상 하는 이야기이지만,
만약 어떠한 사람이 미래를 알고 있다면
그런 곳에서 오지랖을 떨기보다는
서울역 앞에서 점쟁이를 하는 것이 좋을 것이며

그렇지 않더라도
주식을 사거나, 로또 사러 갔을 것이다.

그렇지 않고 
남에게 오지랖을 떨고 있다는 것은 
그가 미래에서 왔을 확률은 더더욱 희박하다.

사람들은 다른 사람에 대해 
관심이 놀랍게도 없다.

한 가지 예를 들어보자.

언젠가 인류는 
핵 전쟁을 할지도 모른다.
(또는 문명은 멸망할 것이다.)

그렇다면 이에 대해서 어떻게 대처해야 할까?
대부분은 쉘터를 짓지 않을 것이다.

왜냐하면 그럴 확률이 매우 매우 적기 때문이라고
많은 사람들이 생각하기 때문이다.

몰론 실제로 집 아래에 쉘터를 짓고,
비상 식량을 보존하는 사람들은 여전히 존재 한다.

하지만 대게 집 아래에 
쉘터를 짓고, 보존 식량을 관리하는 사람들은 매우 드물다.

그렇다면 쉘터를 짓지 않은 
대부분의 사람들은 미래에 
대비도 안하는 멍청한 사람들일까?

전혀 아니다.

쉘터를 짓지 않은 사람들은
살면서 그 만큼의 리스크를 가지고 살아가는 것이다.

그 대신에 쉘터를 짓지 않은 사람들은
쉘터를 짓고, 관리하는데 드는 모든 비용(Cost)을 아낄 수 있다.

여기서 말하는 비용은 모든 것을 이야기한다.

시간, 돈과 같은 모든 자원이다.

이는 어느 누가 멍청하고, 
똑똑한지를 이야기할 수 있는 종류의 이야기가 아니다.

어떤 선택을 할지,
혹은 자원을 어떻게 사용할지를 결정하고,

이에 대해 나타날지 모르는 
리스크를 얼마나 받아들일 것인가에 대한 것이다.

이에 쉘터를 짓지 않는 것은 
인간 다운 매우 합리적인 선택이다.

좀 더 일상으로 들어가보자.

당신은 오늘 일기 예보를 보았다.

애석하게도 오늘 비 올 확률은 50%였다.

그 경우 만약 당신이 우산을 들고 나가지 않았고,
실제로 비가 왔다면,
당신은 리스크에 대한 대가로 당신의 옷은 흠뻑 젖을 것이다.

역으로 만약 당신이 우산을 들고 나가지 않았고,
실제로 비가 안왔다면,
당신은 하루 동안 한쪽 손이 
자유로운 이득을 얻을 수 있을 것이다.

이는 교육에 대한 이야기에서도 마찬 가지다.

핵 전쟁에 대비해 
쉘터를 짓지 않는 사람이 
우산을 들고나가지 않은 사람이 
멍청하고 우둔한 사람이 아니듯이

미래에 대비해 교육을 받지 않는다고 하더라도
미래를 대비하지 않는다고 보기는 힘들며,
멍청한 사람은 더더욱 아니다.

왜냐하면, 그 자원만큼 
다른 곳에 얼마든지 활용할 수 있으니깐 말이다.

비난의 화살은 
교육을 받지 않는 사람에게 향하는 것이 아니라
남는 자원을 잘 활용하지 못한 사람에게로 향해야 한다.

리스크를 받아들이고,
리스크 분의 남는 자원을 어디에 활용할 것이며
또 그러한 자원에 따른 리스크를 받아들일 것인가는
스스로 정해야만 하며,

실제 리스크가 현실로 다가왔을때, 
어떻게 할 것인지에 대한 대비를 해야 한다.

그렇다면 일단 나의 앞선 리스크에 대한 이야기는 
잠시 접어두고, 
사람들(아이들)의 미래를 위한다는 사람들에 대한 이야기를 해보자.

그들은 정말로 탁월한 통찰력을 가지고 있었기에  
그러한 미래가 왔다고 가정해보자.

또한 당신이 그들이 이야기하는 
자랑스러운 코딩 교육을 받았고 
훌륭히 완수했다고 가정해보자.

낙관론자들의 이야기대로
정말 놀랍게도 그러한 시대가 왔다고 생각해보자.

그리고 놀랍게도 
당신은 코딩에 재능이 있었고,
놀랍게도 
당신은 코딩을 하는 것을 즐거워했기에
당신의 인생은 충분한 만족감에 빠질 수 있게 되면서
적어도 부족함 없는 생활을 향유할 수 있을 것이다.

하지만,
여기서의 전제 조건은
'놀랍게도'
그러한 당신을 필요로 하는 미래가 와야하며
'놀랍게도'
당신이 코딩에 재능(퍼포먼스가 뛰어남을 의미함)이 있어야 하며,
'놀랍게도'
당신이 코딩하는 것을 즐거워해야만 한다.

만약 이 세 가지 전제 조건 중 
하나라도 만족하지 못한다면, 
당신의 삶은 쉽게 굴러가지 않을 것이다.

왜냐하면 코딩하는 것을 즐거워하지만,
좋은 퍼포먼스를 내지 못한다면 
당신은 매주 당신의 자리가 있을 지 없을지 모르는
불안감에 떨며 살아야하며,

당신이 코딩에 대한 퍼포먼스가 좋지만,
코딩하는 것이 즐겁지 않다면
당신에게는 매일 매일 지루함과 싸워가며
퇴근 시간만 기다리는 일상이 기다리고 있기 때문이다. 

특히 이 중 코딩을 즐거워하지 않는다면
(정확히는 문제해결을 통한 성취감)
당신의 개발자로서 직업 수명은 한 없이 떨어질 것이다.

한국에서 말하는 개발자의 치킨집 테크트리는
결코 우스갯소리가 아니라 현실이다.

IT업계는 이직과 전직이 다소 자유롭고 
할때마다 다른 직업에 비해 연봉 꽤 뛰는 편이지만 

그 만큼 어필 할 수 있는 경력이나
개인 프로젝트 등의 포트폴리오를 내세울 수 없다면 
연봉 협상의 주도권은 개발자에게 없다.

역으로 어필 할 수 있는 경력이나 
그외의 프로젝트 등의 포트폴리오를 내세울 수 있다면 
연봉 협상의 주도권은 개발자에게 있다고도 할 수 있다.

또한 이러한 예에서 벗어나 
당신 생각대로 당신의 미래가 
그려진 적이 있었는지 생각해보자.

대부분 당신의 생각대로 
인생이 돌아갔는가?

물론 그렇지는 않았을 것 이다.

당장 내일 하려고 하는 것 조차 
정말 특별한 이유가 없는 이상 
의도한대로 하기란 쉽지 않은 것이 인간의 본성이다.

대부분 인간이라면 
그리고 자기 기만을 훌륭하게 이룬 인간이 아니라면
성공보다 실패가 많다는 사실은 말하지 않아도 
인간의 자아를 뒤흔든다.

몇 사람 정도로 예측할 수 있을 정도로 
세계는 그리고 사회는 단순하지 않다.

그럼 이제 
반대로 생각해보자.

그런 낙관론자들의 예상과는 다르게
현재 예측할 수 있는 미래 중 하나의 시나리오인
AI가 단순한 코딩을 모두 할 수 있는 시대가 되었다.

그럴 경우 
당신은 사회에 유용성을 전혀 제공할 수 없었을 것이고,
최저 임금밖에 받을 수 밖에 없을 것 이다.

왜냐하면,
코딩에 한해서는 이미 컴퓨터 하나의 유용성이 
한 사람의 인간을 뛰어 넘기 때문이다.

이 경우 당신은 속은 것이다.

왜냐하면, 당신이 코딩 교육에 사용했던 
돈, 시간이 모두 낭비되었음은 물론이고,

이 때문에 
당신의 미래는 매우 불투명해졌기 때문이다.

그렇다면 이때 당신은 어떻게 할 것인가?

기계가 사람을 대신해 일자리를 잃은 노동자들이 
기계들을 부순 러다이트 운동 처럼

당신은 당신의 일자리를 빼앗은 가증스러운 
AI를 부스기 위해 제 2의 러다이트 운동을 해야 할까?

물론 지금에서 생각해보자면
당신이 AI를 부수는데 걸리는 시간 보다 
경찰에 잡혀가는게 더 빠르겠지만 말이다.

그렇다고 해서 
그런 낙관론자에게 찾아가 죄를 물을 수 있을까?

매우 안타깝게도 그런 현실에 대해
죄책감을 느끼는 사람은 매우 드물며,
대게 그건 나와 상관없는 일이라며 어깨를 으쓱할 것이다.

혹은 오히려 역으로 화를 내며, 
나는 할만큼 했으니
당신이 노력하지 않은 것이라며 화를 낼지도 모른다.

대게는 그렇지 않겠지만 
만약 그러한 사람들이 죄책감을 느낀다고해서
과연 내 돈은 둘째 치고, 시간을 돌려받을 수 있을까?

하지만 이는 상식적으로 불가능하지 않은가?
무슨 수로 시간을 돌려받겠는가?

돌려받을 수 있었다면 영화속 처럼 
지금 사회는 시간을 사고 파는 사회가 되었을 것이다.

하지만, 시간을 사고 팔 수 없지 않은가

그렇기에 내가 그러한 사람들을 
무책임하다고 하는 것이다.

타인의 미래를 타인이 책임져 줄 수 없으며,
그러할 자격은 더더욱 없다.

이러한 것들은 실제 삶에서 통용되는 사실들이며,
특히 현대 자본주의에서는 너무 나도 잘 적용되는 사실이다.

그렇기에 
민주주의와 자본주의가 결합되어 있는 사회에 살고 있는
지금의 현대인들은 
자신의 미래를 알 수 없기 때문에
이에 대한 선택은 스스로 해야만 하며,

선택에 대한 리스크를 정확히 알고
실제 리스크가 현실로 다가왔을 때
덤덤하게 받아드리며, 차분히 이에 대처해야만 한다.

그리고 이런 과정 속에서
각 개인은 옛것에 새것을 더한다는 의미의 
진정한 '진보'를 이룰 수 있다. 

이러한 것들은 결코 남이 대신해줄 수 없는 것이다.

부모 조차도 말이다.

단, 그의 인생 전부를 죽을 때 까지 
책임질 수 있다면, 
그런 행위가 그에게 도움이 될지 안될지를 떠나서
나는 정당하다고 생각 한다.

하지만, 그런 사람은 이 세상에 존재 할까?

부모라도 이는 대게 불가능하다.

자식을 훌륭한 미래로 이끄는 부모는 
생각보다 그리 많지 않으며,

대게는 자신 스스로가 그런 부모라는 착각속에 빠져
자신의 아이들의 시간과 수 많은 기회,
즉, 미래를 빼앗고 있다.

가장 가까운 타인인 부모조차 하기 힘든 일을 
도대체 어떻게 얼굴 몇 번 못 본 타인이 한다는 말인가?

그런 생각을 하는 사람이 있다면
스스로를 너무 과대평가하고 있는 것이다.

설사 그런 것을 전부 
책임진다고 할 수 있다고 한들 

이는 둘 다 불행으로 빠지는 길이다.

책임지는 사람은 
한 사람을 짊어져야 하는 책임의 무게에

그리고 책임짐을 당하는 사람은 
꼭두각시 처럼 죽을 때 까지 살아야 하는 저주에 걸리는 것이다.

하지만
이 무게는 나이가 적건 많건, 
사회적으로 성공하고 그렇지 않건 
인간이 짊어지기에는 
너무나도 무겁고 버겨워 보이는 것은 나만의 생각일까?

그렇다면 단순히 취업하기 위한 대안은 무엇일까


단순히 '미래를 위해서'라는 
무책임한 낙관론자들에 대한 논의는 이쯤에서 접어두자.

코딩 교육이 미래를 보장해주지 않는다는 
논의는 충분히 했다고 생각한다.

솔직히 나는 이러한 논의에 대한 
이 더 이상의 가치는 없다고 생각 한다.

아마 이런 코딩 교육을 받기 원하는 사람들이 
진짜로 원하는 것은 자신의 미래를 위해서가 아닌
단순히 취업을 하기 위함일 것이다.

미래를 위한다 함은
자신이 장기적으로 어떤 것을 하기 위한 행위를 말하며,

여기서 말하는 미래라는 것은 
매우 추상적이기 때문에 명확하지도 않으며
그렇기에 로드맵이란 존재하기 힘들다.

물론 그러한 로드맵이 존재한다는 사람도 있을 수 있다.

하지만 이는 
양자 이론처럼 예측한 순간 빗나갈 것이다.

왜냐하면 사회는 계속해서 움직이고 있으며,
과학과 IT기술에 의해 
사회는 점점 빠르게 움직이고 있기 때문이다.

예측하는 순간 그 자리에 존재하지 않는다. 
미래의 사회는 그 자리에 존재하지 않을 확률이 크다.

미래의 사회를 예측한다는 것은 그런 것이다.

그럴싸한 분석과 예측은 누구나 할 수 있다.

당장 나에게 데이터만 주어진다면,
다른 업계라도 그럴싸한 분석과 예측은 할 수 있다.

하지만 이런 이야기 이전에 
그 이전에 도달하고 싶은 '어떤 것'에 대한 생각 없이 
미래를 위한다는 이야기는 앞뒤가 맞지 않는다.

그렇기에 나는 
그런 낙관론자들의 이야기는 사실 
단순한 취업을 위해 코딩 교육이 필요하다고 이야기하고 있을 것이다.

하지만, 여기서 취업을 위해 라고 한다면 
모양세가 살지 않으니 취업을 추상적인 미래라는 단어로 
바꿔서 이야기하고 있다고 한다고 가정한다면,

이제야 조금은 인과관계가 들어 맞는 듯 하다.

그렇다는 것은 그들은 정확히 
다른 사람들의 미래를 걱정하는 것이 아닌
다수의 상대로 '비지니스'를 하고 있는 것이다.

그렇다면 이에 포커스를 맞춰보자.

일단 이야기를 하기에 앞서
드라마나 영화에서 나오는 것 처럼
천재 해커, 천재 프로그래머는 
현실에 존재하지 않는다는 것을 밝히고 싶다.

엔터프라이즈급 시스템을 혼자서 
설계하고 코딩하고 테스트해서 
품질 좋은 시스템을 개발하기에는 
혼자서는 물리적으로 절대 불가능하다.

아웃 소싱을 적절히 이용한다면, 
그렇게 보이게는 할 수는 있다.

하지만 그렇게 보이는 것과 
정말 그러한 것은 하늘과 땅 차이라는 것은 
어린 꼬마 아이들도 알고 있는 사실이다.

또한 시스템을 개발한다고 해서 끝나는 것이 결코 아니다.

대체로 시스템 속에는 
미처 발견하지 못한 버그가 있으며,
시스템을 계속해서 운용하기 위해서는 유지 보수가 필수이다. 

이에 대해 이해하기 위한 쉬운 예는 
과거의 네이버와 현재의 네이버를 비교해보면 쉽다.

위의 그림은 2001년 정도의 네이버의 메인 화면이며,



위의 사진은 2021년도 네이버 메인화면을 보여준다.
    
눈에 봐도 확 보이지 않은가?

이미 2000년대 초반에 네이버라는 솔루션은 개발이 끝났다. 

나머지 개발 완료한 시점부터 지금(2021년)까지의 과정은 
엄밀히 말하면(엔지니어링 관점에서 본다면) 개발이 아닌 '유지보수'다.

2000년대 초반에 개발한 네이버라는 포탈 사이트를
웹툰, 지식인, 쇼핑 등의 기능을 유지 보수 한 것이
지금의 2021년 네이버라는 사이트 이다.

물론 개발의 시작과 끝을 
어떻게 정하느냐에 따라 다르겠지만 말이다.

하지만 프로젝트가 끝나 서비스가 제공되면 
일반적으로 개발은 끝이 난 것이다.

그렇다는 것은 대부분의 비용은 
개발 비용보다 유지,보수 비용이 훨씬 높다는 것을 의미하며,

개발자들의 대부분의 일이 
처음부터 시작하는 '개발'이 아닌
'유지 및 보수'를 한다고 볼 수 있다.

그렇다는 것은 결국 
순수하게 '개발'이라고 할 수 있는 프로세스를 하는 
개발자는 매우 소수이며,

대부분 '유지 및 보수'를 하는 
개발자가 대부분이라는 결론에 도달할 수 있다.

네이버로 예를 든다면,
완성된 네이버 웹사이트에
지식인, 쇼핑, 웹툰과 같은 기능을 붙이는 것이다.

이런 것들을 엔지니어링 관점에서 
유지 보수를 한다고 한다.

완성된 레고 모형에 
레고 블럭을 덧붙이는 행위와 매우 비슷하다.

그런 상황에서 무언가를 개발하는 능력에 
포커스를 맞춘다는 것은 매우 부적절 하다.

즉,
어떤 프로그램을 만들 줄 아느냐는 
그렇게 중요하지 않다는 것이다.

따라서
미래가 아닌 단순히 취업을 위한다면,
무엇을 만들 줄 아는 것보다 
코드를 볼 줄 아는 능력과 컴퓨터 시스템에 대한 이해에 집중 해야 한다.

무엇을 만들 줄 아느냐는 그 다음이다.
하지만, 아이러니하게도 IT 산업은 패러다임이 빨리 변하기 때문에 
대체로 무엇을 만들 줄 아느냐는 별로 의미가 없다.

그렇기에 IT 업계에서 일하게 될 경우
가장 많은 테스크는 유지 보수이며

유지보수에서 가장 중요한 것은
유지보수하기 앞서 해당 시스템에 대한 이해가 있어야 하며,

그런 시스템을 구성하고 있는 
'다수의 사람'이 작성한 코드를 
가능한 빨리, 가능한 정확하게 이해할 수 있어야 한다.

그리고 이런 시스템을 이해하기 위한
다른 사람들과의 커뮤니케이션 능력 또한 중요하다.

이런 능력들이 비교적 떨어져
시스템에 대한 이해가
늦으면 늦을 수록 주어진 기간이 촉박해지며,
정확하지 않으면 않을 수록
코드의 버그 생성 확률은 증가한다.

여기서 좀 더 추상 적으로 나아간다면,
문제해결능력이라 말할 수 있다.

그렇기에 
코딩 교육을 해야한다고 침을 튀며 이야기하는
낙관론적인 사람들에 대해

이에 대해 충분히 인지하고 있는지 의심스러우며,
인지하고 있더라도 
정말로 믿을 수 있는 
훌륭한 개발자인지 더더욱 의심스럽다.

왜냐하면, IT업계에서 필요한 것은
위에서 잠깐 언급했다시피
단순히 코딩 능력, 프로그래밍 능력이 아닌
종합적인 '문제 해결 능력'이 필요 하다.

여기서 말하는 문제 해결 능력 중 하나가 
코딩 능력, 프로그래밍 능력일 뿐이며,

개발 과정 속에서 단순히 코딩과 
프로그래밍이 차지하는 비율은 
IT업계를 잘 모르는 사람들이 생각하는것 처럼 그리 높지 않다.

여기서 말하는 '문제 해결 능력'은
굉장히 복합적인 의미를 담고 있는데,

코딩 능력이나 프로그래밍 능력도 여기에 포함되지만,
다른 사람들과 잘 협업 할 수 있는 커뮤니케이션 능력도 포함 된다.

위에서 언급했듯이
엔터프라이즈 급 시스템은 
물리적으로 혼자서는 절대로 개발할 수 없기에

필연적으로 각 개발 프로세스를 맡고 있는
사람들과 협업하게 되는데, 

여기서 얼마나 자신의 커뮤니케이션 능력을 활용해 
상대와 잘 협력하느냐에 따라 엄청난 
퍼포먼스 상승 효과를 기대할 수 있다.

만약 두 사람 분의 
퍼포먼스를 낼 수 있지만, 
커뮤니케이션 능력이 평균 이하인
한 명의 엔지니어가 있으며

그리고 각 한 사람분의 몫을 해낼 수 있는 
퍼포먼스를 낼 수 있지만, 커뮤니케이션 능력이 뛰어난  
두 명의 엔지니어가 있다고 가정해보자.

단순한 수학 공식을 대입하면
두 집단의 퍼포먼스는 같을 것이다.

하지만, 실제로 전혀 그렇지 않은데
그 이유는 위에서 계속해서 언급했다시피 
프로젝트는 다수의 협업으로 이루어지기 때문이다.

전자의 경우 물론 두 사람분의 
프로그래밍 부분에서 퍼포먼스를 낼 수 있지만,

부족한 커뮤니케이션 능력으로 
다른 팀원들과 불화가 일어나면 일어날 수록 
프로젝트 전체로 보면 실제로는 
계속해서 퍼포먼스가 떨어지고 있는 것이다.

후자의 경우 뛰어난 커뮤니케이션으로 
팀원들과의 시너지 효과를 이르켜 1+1=2이 아닌
1+1이 3,4,5까지 충분히 효과를 낼 수 있다.

프로그래밍 능력은 프로젝트 내부에서 
수 많은 요소들 중 하나에 불과하다.

그렇기에 실제 프로젝트에서는
다른 수 많은 재능을 가지고 있는 사람들과 협업을 하며 진행해야 한다.

그렇기에 커뮤니케이션 능력이란
단순한 코딩 능력이나 
프로그래밍 능력에서 나타나는 
퍼포먼스 보다 중요할 수 밖에 없다. 

시너지를 일으키면 일으킬 수록 
퍼포먼스는 계속해서 향상 되기 때문이다.

하지만, 현실의 프로그래머들은 
사람들과 이야기하는 시간보다 
모니터를 처다보며 컴퓨터와 이야기하는 시간이 더 길기 때문에
일반적으로 커뮤니케이션 능력이 그리 뛰어나지 않은 경우가 많다.

프로젝트 측면에서 보면
한 사람이 퍼포먼스가 안나온다면,
솔직히 그냥 돈을 써서 인원을 좀 더 투입하는 것이
결과적으로 싸게 먹힐때가 많을 것이다.

따라서 단순히 취업하기 위해서라면,

무책임한 낙관론자들의 말을 무시하고
코딩 능력이나 프로그래밍 능력보다는
 
'문제 해결 능력'을 복합적으로 지닐 수 있게 
스스로 탐구하는 것이 좋다고 생각하며,
이를 어필하는 것이 더 중요하다.

이는 신입이던 경력이던 마찬가지다.

단순히 유지 보수 관점으로 보자면 
컴퓨터 시스템에 대한 이해와 
다른 사람들이 작성한 코드를 얼마나 빨리 
파악 할수 있는지에 대해 어필 한다면 
나는 이 업계에서의 취직은 문제 없다고 생각한다.
(취직과 연봉은 별개 문제이다)

물론 회사 입장에서는
실제 이 사람이 실제로 
그에 맞는 능력을 알고있는지 파악하기란 매우 힘들다.

아마 IT업계가 다른 업계에 비해
연봉 협상을 자주하는 이유는
그러한 이유가 크다고 본다.

실제 내가 작은 회사의 사장이고,
경력이 아닌 신입을 뽑고자 한다면

나는 이런 능력을 보기 위해 
면접 프로세스를 구성하고 싶으며,
나는 코딩 능력보다 심화된 면접을 통해
면접자의 내면과 가능성을 보려고 할 것이다.

실제 좋은 IT기업들은 
그렇게 구성하고 있는 것으로 보인다.

좋은 IT기업에서 신입 사원을 뽑을 때
수 차례의 코딩 테스트보다
수 차례의 면접을 중요시하는 이유는 
그러한 이유에서 나온다고 나는 생각하고 있다.

결론


코딩 교육은 필요 할까?

아니다.

최소한 코딩 교육의 
중요성을 이야기 하는 만큼은 절대 아니다.

코딩 교육은 침을 튀어가며 
코딩 교육의 중요성을 이야기하는 
무책임한 낙관론자들의 말처럼 

코딩 교육은 
아니 '교육' 자체로는
정확히 말하면 '지식의 축적' 만으로는
그 누구의 미래도 보장해줄 수 없다.

그런 교육으로 얻을 수 있는 지식들은 
이미 구글에 검색 한번이면 다 찾을 수 있는 시대이다.

또한 그들이 이야기하는
좋은 복지, 좋은 작업 환경을 누리고 있는 
개발자들은 극히 일부이다.

이는 다른 업계들도 마찬가지 아닌가?

또한 그러한 사람이 되기 위해서 
정해진 길이란 존재하지 않는다.

교육을 받고 자격증을 취득한다고 
훌륭한 개발자가 되는 것이 아니며,
정말 휼륭한 개발자들 또한 
그런 것이 중요하다고 말하지 않는다.

그런 정해지지 않은 경로에 
교육이라는 것이 있을 지는 모르겠지만,
나는 그렇게 큰 비중을 차지하고 있다고 보지 않는다.

물론 그들 스스로가 너무나도 자애로운 성격과 
박애주의 정신을 가지고 있기 때문에 
정말로 너무나도 타인을 걱정한 나머지
(믿기 힘들겠지만 말이다)
우리의 교육 솔루션을 받으라는 것이 있을 수는 있다.

하지만, 
그런 비율이 얼마나 되겠으며,
그 중 정말로 좋은 솔루션이 얼마나 되겠는가?

그들이 그런 말을 하는 궁극적인 이유는
자신들의 교육 솔루션을 팔거나,

사람들을 끌여들여 어떻게든 
업계의 파이를 키워 간접적이든 
직접적이든 이득을 얻기 위해서 이다.

즉, 미래를 보장할 수 있을 것 처럼 보이게 하여,
당신에게 영업을 하고 있을 뿐이다.

그렇기에 
그들이 당신의 미래를 보장해주지 않음은 물론이고,
대부분 그러할 생각 또한 전혀 없다.

만약 이 글을 읽고 있는 당신이 누구인지는 모르겠지만,
그러한 미래를 그리고 있고, 
그러한 교육을 받으려 한다면 
이에 대해 한번 쯤은 생각해보는 것이 좋다.

교육은 미래를 책임져 주지 않으며,
한 사람의 미래를 책임져 줄 수 있는 사람 또한 드물다.

그렇기에 그런 교육에 열중하는 것 보다
먼저 스스로 이런 행위에 대해 유용성에 대한 
철학적 고민이 필요하다.

그 다음 유용성이 있다고 판단된다면,
실제 현업에서 일하고 있는 사람들에게 
다수의 메일을 보내고, 

그들이 이야기를 적절히 통합하고 적절한 정보를 
추출함으로써 
현실과 이상을 비교해보며 탐구하는 것이 
미래를 대비하는데에 있어서 더욱 현명할 것이다.

또는 구글 검색을 통해
다수의 경험담을 보고 통합해 탐구하는 것도 좋다.

그런 다음 교육을 고려해보는 것이 좋을 것이다.

충분한 철학적 고민 없이 
받는 교육은 생각보다 매우 유용성이 떨어진다.

무책임한 낙관론자들의 달콤한 말을 믿기 보다는 
현실을 바라보기를 바란다.

현실은 그렇게 달콤하지만은 않음은
아마 잘 느끼고 있으리라 생각 한다.




2021.06.01 초안 작성 및 개행 완료
2021.06.03 내용 수정 및 개선 완료
2021.06.07 내용 다듬기 완료
2021.08.01 내용 수정 및 개선 완료
2021.08.21 내용 수정 및 개선 완료






이 블로그의 인기 게시물

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

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

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