[ Essay - Technology, Essay - Intuition ] Chat GTP시대의 도래와 생각하는 방식에 대해

이미지
올해도 드디어 끝이 보이는 듯 싶다. 최근에 회사의 망년회를 끝내고 이래저래 회식이 늘어나는 듯 하다. 지금 시점에서는 개인적인 스케쥴도 마무리 되었기 때문에 이제는 여유롭게 연말을 즐기며 올해를 마무리 하려고 한다. 비교적 최근에 이사한 곳 근처의 스타벅스가 대학 병원 안에 있고 근처에 공원이 있어서 그런지 개를 대리고 산책하는 노인이나  아이를 동반한 가족이 눈에 띄게 보인다. 꽤나 좋은 곳으로 이사한듯 하다. 개인적으로는 올해 드디어 미루고 미루었던 이직을 하였고  그 이후에 비약적인 성장을 이루었으니  분명 안좋은 일도 있었지만 만족할 수 있는 해를 보내지 않았나 싶다. 내가 도달하려고 하는 곳으로 가려면 아직 갈길이 멀지만  궤도에 오른 것만으로도 큰 성과라면 큰 성과 일 것 이다. 어쨋든 이직하고 많은 일들을 맡게 되었는데 그 과정에서 나는 의도적으로 Chat GTP를 활용하고자 하였고 몇 가지 직감을 얻게 되었는데  이 중 한 가지를 글로 작성하려고 한다. 따라서 올해의 마무리 글은 Chat GTP에 대한 이야기로 마무리 하려고 한다. 서론 불과 약 10년전 IT업계는 원하던 원치 않던간에  한번의 큰 패러다임의 변화를 맞이해야만 했다 바로 아이폰의 등장에 따른 스마트폰의 시대의 도래와  이에 따른 IT업계의 패러다임 변화가 그것이다. 내 기억으로는 아주 격변의 시대였던 걸로 기억하는데 왜냐하면 게임은 물론이고 웹과 백신을 비롯한 모든 솔루션의 변화가 이루어졌다. 이 뿐만 아니라 가볍고 한손의 들어오는 이 디바이스는  그 당시에는 조금 비싸다는 인식이 있었지만  감추려고 해도 감출 수 없는 뛰어난 유용성으로 회의론을 금세 종식시켰고 이에 대한 결과로 어린아이 부터 노인 까지 작은 컴퓨터를 가지게 되었고 이는 당연하게도 IT업계의 전체적인 호황을 가져다주었다.  그리고 질서는 다시 한번 재정렬되었다. 이러한 패러다임의 변화의 증거로 언어 또한 변하게 되었는데...

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


이번 글에서는 컴퓨터 아키텍처에 대해 이야기 할 것이다.

현재에 와서는 여러가지의 컴퓨터 아키텍처가
언급될 수 있으나,
소프트웨어 개발자로서,
그 중 비전공자 주니어에게 알아야 하는 것은
폰 노이만 구조 만 알면 된다고 생각한다.

왜냐하면,
지금 존재하고 있는 컴퓨터 기기들은 모두 이런
폰 노이만 구조에 크게 벗어나지 않았다고 봐도 무방하기 때문이다.

따라서 일단 폰 노이만 구조에 대해 대략적으로 이해하기만 한다면,
다른 컴퓨터 아키텍처에 대한 것은
필요할때 마다 공부하면 된다.

이는 사실 Programmer라던가 Developer등의
다음 레벨의 개발자들에게도 마찬가지라 나는 생각하고 있다.

따라서 이번 글에서 이야기하고자 하는 것은
폰 노이만 구조 단 하나의 컴퓨터 아키텍처만 설명할 것이다.

그럼 이에 대한 이야기를 시작해보자.

폰 노이만에 대해


소프트웨어던 하드웨어던,
우리가 개발자로서 일을 할수 있는 것은
사실 이런 폰 노이만 구조와 같은 이론을
제시한 사람들이 있기 때문이다.

따라서 우리는 개발자로서 초기 컴퓨터 구조를 제시해준
폰 노이만과 그의 동료들에게
머가리를 천번 박아도 모자를 지도 모르겠다.

어쨋든 폰 노이만은 천재로서 세상에 알려져 있다.

그의 업적을 보면,
그 누구도 이에 동의하지 않는 사람은 없을 것이다.

폰 노이만은 아래와 같이 생겼다.

폰 노이만
하지만 이런 의문이 든다.

폰 노이만이 분명 천재이고,
그가 위대한 업적을 남긴것에 깊이 공감하며,
그 업적에 대해서는 찬사를 보내는 바이지만,
소프트웨어 개발자로서 그를 자세히 알 필요가 있을까?

나는 없다고 생각하기 때문에
딱히 언급하지는 않겠다.

하지만, 컴퓨터를 제외하고도 수학 등의 업적을 남긴 사람이기 때문에
어떻게 생긴 사람인지는 알아야 되며,
폰 노이만은 충분히 그럴 자격이 있는 사람이다.

혹시 알고 싶은 사람을 위해서 아래 위키백과의 링크를 남긴다.
(https://en.wikipedia.org/wiki/John_von_Neumann)

폰 노이만 구조에 대해


실제 우리들이 쓰고 있는 컴퓨터 시스템들이
이런 아키텍처로 이루어져 있기 때문에

앞서 우리는
이 폰 노이만 구조를 세상에 제시해준
폰 노이만와 그의 동료들에게 깊은 찬사를 보냈다.

또한 이 자리를 빌어
다시 한번 그에게 찬사를 보내는 바이다.

이 쯤하면 그도 충분히 만족하리라 생각된다.

그럼 이제 우리의 목표인 폰 노이만 구조를 살펴보자.



위와 같은 아키텍처를 폰 노이만 구조(Von Neumann architecture)라고 한다.

물론 이 아키텍처는 폰 노이만과 그의 동료들이
에드박(EDVAC) 보고서의 최초 초안(First Draft of a Report on the EDVAC)에서
서술된 기반으로 만들어진 아키텍처이다.

따라서 사실 폰 노이만이 혼자서 제시한 아키텍처는 아니며,
에드박의 보고서에는 수학적 논증만이 있을 뿐
위와 같은 아키텍처를 실제로 그들이 제시한 것은 아니라고 한다.

어쨋든 나는 현재(2020년)의 컴퓨터 아키텍처와
폰 노이만 아키텍처를 구분하여, 분류 할 것이다.

보기 쉽게 일단 색으로 표시해놨다.

분류는 다음과 같이 하였다.

제어 장치, 산술장치 → CPU(중앙처리장치)
메모리 → RAM, Cache, HDD(SSD)
누산기와 입력, 출력 → 프로그램(소프트웨어)

누산기와 입력, 출력에 대해 조금 오해의 소지가 있을 수 있어서
따로 언급하지만,

산술 장치 안에 있는 누산기는 물론 하드웨어로 구성되어 있다.

하지만, 좀 더 소프트웨어에 대한 이해를 돕기 위해
이런 누산기를 따로 빼서 이를 프로그램으로 취급하겠다.
물론 이를 좀 더 작은 개념에서 함수클래스와 같은 것으로 생각해도 무방하다.

그럼 분류를 하였으니 각각 살펴보자.

① 제어 장치, 산술 장치 → CPU(중앙처리장치)

이런 제어 장치와 산술 장치가 합쳐진 것이
현재 컴퓨터의 CPU라고 봐도 무방할 것이다.


따라서 우리는 위의 폰 노이만 아키텍처를 현실의 하드웨어에 대입해보면

AMD사의 RYZEN

위와 같은 AMD사의 RYZEN이라는 모델명의 CPU라고 할 수 있을 것이다.

이런 CPU에서 하는 일은 간단하다.
우리가 컴퓨터를 사용할때의 모든 명령과 계산은 이 CPU를 거친다.

우리는 컴퓨터를 부팅하면 운영체제로 진입할 탠데,
이런 운영체제와 그 운영체제 안에서 이루어지는 대부분의 명령 및 연산은
CPU에서 이루어진다.

② 메모리 → RAM, Cache, HDD(SSD)

폰 노이만 구조에서의 메모리는 모든 저장장치를 말한다.



현재 많은 사람들이 메모리라고 인식하는 것은
아마 RAM일 것이다.
RAM

하지만, 폰 노이만 구조에서의 메모리는 모든 저장장치이기 때문에
하드 디스크라고 불리우는 HDD와 SSD도 포함되며,
Cache도 마찬가지다.

Hard Disk Drive(HDD)

Soild State Drive(SSD)
Cache
심지어 Cache의 경우는 중앙처리장치인 CPU에서도 활용된다.

③ 누산기와 입력 출력 → 프로그램(소프트웨어)

다시 한번 말하지만,
설명의 편의를 위해 소프트웨어 취급 하는 것이다.


이런 소프트웨어는 크게 운영체제나

MS사의 Windows 운영체제

게임


Blizzard사의 WOW

등의 소프트웨어가 포함될 수 있으며,
작게는 단 하나의 함수와 같은 모듈도 포함된다.

그리고 이런 아키텍처의 부품들(물론 소프트웨어는 제외)은 Mother Borad라는
메인보드에 모두 장착되어져,

Mother Board(메인보드)

폰 노이만 구조 기반의
하나의 컴퓨터로서 기능을 하게 된다.

현대의 컴퓨터 기기라고 불리우는 것은
모두 이런 기반으로 만들어져있다고 해도 과언이 아니다.

현실에서 우리가 자주 볼수 있는 기기들인
데스크톱 컴퓨터, 노트북 컴퓨터와

데스크톱

노트북

그리고 최근에 패러다임인 모바일 컴퓨터의 대표 기기인

스마트폰
스마트폰까지 속 내부를 들여다보면
대개 이런 폰 노이만 구조에 크게 벗어나지 않는다.

이에 따라 우리는 폰 노이만 구조를 조금 더 확장 할 수 있다.

폰 노이만 구조의 확장

위와 같은 그림으로 확장 할 수 있으며,
소프트웨어 개발자로서 신경써야 할 부분은
보라색 박스 부분 뿐이다.

따라서 컴퓨터 개론에서 추출 할 수 있는
소프트웨어 개발자로서의 학사적 지식인 '부분적 진리'는
보라색 박스에 있다고 조심스럽게 결론지을 수 있다.

하지만, 나의 이런 논지에
어떤 사람들은 '나머지도 알고 가면 좋지 않느냐'라는 식으로
반박할지는 모르겠다.

물론 알고 가면 좋을 수 도 있다.

왜냐하면 그런 사람들은
'언젠가는 도움이 될것이다' 라는식의 논지이며,
나도 '언젠가'는 도움이 될지는 모르겠다는 의견에는 동의한다.

하지만 그 '언젠가'가 정확히 언제인지,
어느 시점인지는
그런 이야기를 하는 사람들은 모르는 척 한다.

만약 당신이 미래의 임베디드 개발자나 하드웨어 개발자로
전직한다는 계획을 가지고 있다면,
얼마나 도움이 될지는 알 수 없으나,
알고 있는 것도 괜찮을 것이라 생각한다.

하지만 그렇다고 하더라도
지금 당장 우리는 소프트웨어 개발자로서 일해야 하며,
소프트웨어 개발자로서 알아야 할 
컴퓨터 개론의 학사적 지식은 저 부분 뿐이다.

또한 설사 임베디드 개발자나 하드웨어 개발자로 전직하더라도
그 때가서 공부해도 충분히 늦지 않다.

흔히 듣는 이야기겠지만
선택과 집중을 할 필요가 있다.

어떤 사람들에게는 매우 불행한 이야기 일지는 모르겠지만
개발자는 평생 공부하는 직업이다.

자신의 가치를 증명하기 위해서
패러다임의 변화라는 큰 파도에 같이 올라 타야만
오래 살아남을 수 있다.

대게 저런 식으로 반박하는 사람들은
공부는 학생때 하고 끝이라는 생각을 가지고 있기 때문에
필요 없을지도 모르는 지식들 까지 모두 배우고
고찰과 성찰 없이 지식 만을 머리에 쑤셔 넣으려고 한다.

물론 이런 나의 이런 이야기에 그들은 손사래를 치며
그렇지 않다고 말할지는 모르겠다.

단 한번에 이해의 영역에 도달하기는 매우 힘들다.

물론 어떠한 사람들은 '난 됐는데'라며 이야기 할지는 모르겠으나

내가 됐기 때문에 다른 사람들도 될 것이라는 생각에서 
이제는 벗어날 필요가 있다.

이전과 다르게 이미 사회가 고도화 되었고 
이에 따라 고도로 분업화 되었기 때문에 
내가 할 수 있는 것을 다른 사람들은 못할 수 있다.

만약 그러한 생각이 아니라
단순히 상대를 업신여겨서 자신의 비열함을 만족시키기 위해서 라면
내가 이에 대해서 더 이상 말할 필요는 없을 것 같다.

하지만 정말로 그렇지 않다면
그런 것 들은 필요할 때 마다 탐구라는 이름의 공부하면 되는 것이다.

따라서 소프트웨어 개발자로서 일하고 싶은 우리들은
하드웨어 지식까지 알 필요는 없다고 나는 생각하고 있다.

하지만 그럼에도 더 알고 싶은 사람들은 따로 공부하면 된다.

탐구라는 이름의 공부를 해야하는 
적절한 시기는 있을지도 모르겠지만
해야만하는 시기는 존재 하지 않는다.

시중에 학문적인 컴퓨터 개론의 교과서가 많으며
거기에는 그런 사람들을 만족시킬 수 있는 지식들이 많을 것이다.

선택은 각자의 몫이다.

어쨋든 이런 폰 노이만 구조로 인해 확장된 것이
아래와 같은 아키텍쳐 구조이다.

폰 노이만 구조 기반의 현재 컴퓨터 아키텍처

혼란을 피하기 위해
폰 노이만 구조의 색을 그대로 가져왔다.

위에서 언급했던 것과 동일하게 아래와 같이 분류하겠다

제어 장치, 산술장치 → CPU(중앙처리장치)
메모리 → RAM, Cache 등
그외의 디바이스(저장 장치 등) → HDD, SSD , USB Drive ,CD Drive 등  

여기까지 해서 컴퓨터 아키텍처에 대한 이야기는 끝이다.
아키텍처에 대한 이야기는 끝났지만,

이런 아키텍처에 큰 단점이 있는데,
이는 우리 소프트웨어 개발자들에게도 매우 관련있는 이야기이다.





참고 -

폰 노이만 구조 :
https://ko.wikipedia.org/wiki/%ED%8F%B0_%EB%85%B8%EC%9D%B4%EB%A7%8C_%EA%B5%AC%EC%A1%B0

RAM 속도에 관해 :
https://www.howtogeek.com/438671/why-you-should-overclock-your-ram-its-easy/

CPU 속도에 관해 :
https://www.howtogeek.com/177790/why-you-cant-use-cpu-clock-speed-to-compare-computer-performance/

Cache Memory에 관해:
https://searchstorage.techtarget.com/definition/cache-memory




이 블로그의 인기 게시물

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

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

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )