다른 곳에 전달되기 전에 잠시 머무는 곳일 뿐이다
나에게 돈은 temp 변수와 같다. 나의 에너지와 노력, 시간이 다른 곳에 전달되기 전에 잠시 머무는 곳일 뿐이다. 나를 포함해서 누군가를 돕거나, 누군가를 기쁘게 해 줄 수 있는 소중한 것이기에 temp라는 이름이 격에 맞지 않는 것 같은 느낌이 들 때도 있다. 하지만 돈 그 자체에 어떠한 품격과 숭배도 엮고 싶지 않기에 오히려 더 아무런 의미가 없는 temp 변수로 두고 싶은 것이 내 마음이다. 그리고 이름은 temp라도, 어느 개발자도 목적 없이 temp 변수를 만들지 않는 것처럼 목적 없이 돈을 모으는 것만큼은 절대 하고 싶지 않다.
프로그램 언어를 배우기 시작할 때 보통 자료형이라는 것을 먼저 배운다. 정수형, 실수형, 문자형 등등 정말 재미없기 그지없는 내용들이다. 웃긴 게 왜 그게 필요한지 분명한 설명을 하고 시작하는 책이나 강의가 거의 없다. 지금 생각해도 참 이상한데, 대부분 대충 그냥 외우거나 귓등으로 듣고 지나가 버린다. 그래서 나는 '암호화폐 자동매매 프로그램 만들기 with 파이썬' 책을 쓸 때 과감하게 자료형 설명은 대폭 생략해 버렸다.
자료형이 중요한 이유는 현존하는 거의 모든 컴퓨터가 폰노이만 구조의 컴퓨터이기 때문이다. 폰노이만 구조는 CPU로 알려진 연산장치와 메모리가 분리되어 있고, 메모리에서 데이터를 읽어와서 연산장치에서 처리를 하고 다시 메모리에 집어넣는 과정을 반복하는 것이다. 그렇게 복잡해 보이는 컴퓨터도 결국은 0과 1로 이루어진 64bit 데이터를 가져와서 연산하고 결과를 다시 메모리에 집어넣는 것이 전부다. 정말 너무 충격적이지 않은가. 말 그대로 컴퓨터는 그냥 계산기일 뿐이다.
컴퓨터의 구조는 어떻게 생겼을까? - https://m.blog.naver.com/with_msip/221981730449
나는 앞에서 말한 대로 자료형부터 시작되는 따분한 설명을 거쳐서 프로그래밍을 배웠는데, 적당히 외우고 주의해서 사용하면 별 문제가 없었다. 그저 주의사항 정도였달까? 대학에 가서야 폰노이만 구조를 알게 되었고, 내 프로그램이 어떻게 CPU와 메모리에서 동작하는지 알게 되면서 큰 충격을 받았다. 그렇게 지루하고 따분하고 필요 없게 생각되었던 자료형이 64bit 데이터가 되어 버스를 타고 여행하는 과정으로 설명이 되니까 세상의 진리를 하나 깨달은 것 같은 기분이었다. 그 후 새롭게 배우는 언어나 기술들은 훨씬 이해하기 쉬웠고 받아들이기 편했다. 왜 파이썬은 모든 것이 객체인지, 어떻게 그것이 가능한 것인지 이해하면서 배우니까 재미있게 새로운 언어를 배울 수 있었다.
프로그래밍을 배울 때 변수에 데이터를 넣고, 연산하는 것부터 배우는데, 두 개의 변수의 값을 서로 바꾸는 것도 배운다. 아주 기본적이고 간단한 것이지만, 프로그래밍이 무엇인지, 프로그램이 어떻게 동작하는지 설명할 수 있는 좋은 예제로 사용될 수 있다.
아래와 같이, x와 y라는 변수의 값을 서로 바꾸려면 변수가 하나 더 필요한데, 이때 보통 temp 변수를 만들어서 사용한다.
두 변수의 값을 서로 바꾸기 swap - https://blog.naver.com/tipsware/221247918322
이처럼 프로그램에서 무엇인가를 하려면 공간이 필요하다. 앞에서 본 것과 같이 x에서 y로 옮기기 전에 잠시 넣어두는 공간일 수도 있고, 보다 복잡한 과정에서 잠시 중간 계산값을 넣어두는 공간일 수도 있다. 또는 속도를 빠르게 하기 위해서 미리 계산한 값을 공간에 넣어 둘 수도 있는데, 미리 계산된 값을 가지고 있기 때문에 계산할 시간을 절약할 수 있다. 공간은 메모리라고 생각할 수도 있지만 사실 공간의 종류도 다양하다.
[Server] Cache(캐시)란? - https://mangkyu.tistory.com/69
그림에서 오른쪽에 용량과 cycles가 적혀있는데, 데이터를 가져오는 데 걸리는 시간이라고 볼 수 있다. Registers부터 우리에게 친숙한 하드디스크까지 표시가 되어 있는데, L3 Cache까지는 CPU 내에 존재한다. 그림에는 없지만 Memory나 하드디스크에도 자체 Cache가 있고, 논리적으로도 Cache를 시스템에 배치해서 성능을 획기적으로 개선할 수 있다. 하지만 빠르지만 비싸기 때문에 Cache가 곧 Cash(돈)이라는 농담을 하기도 한다.
요즘 핫한 인공지능 모델에도 공간은 중요하다. chatGPT로 대표되는 대규모 언어 모델(LLM)의 핵심 원리는 인간의 수많은 언어 데이터의 패턴을 학습해서 다음 단어를 예상하는 것에 불과하다. 그러다 발견된 놀라운 사실은 chatGPT를 비롯한 많은 대규모 언어 모델(LLM)이 트랜스포머라는 모델이 근간이 되는데, 근간이 되는 모델은 같으면서도, 학습 데이터의 양을 급격하게 늘렸더니 예상치 못했던 능력이 생기는 것이 확인된 것이다. 그것은 규모의 법칙(Scaling Law)이라고 chatGPT 논문에 함께 발표되었으며, 대규모 언어 모델(LLM)이라는 명칭이 등장하게 된 계기가 되었다. 앞서 컴퓨터에서 이야기하던 공간과는 비슷한 듯 조금은 다르지만 개념적으로 어떤 일을 하기 위해 충분한 공간이 필요하다는 것을 보여주는 사례로 볼 수도 있을 것 같다.
언어 모델 규모의 법칙- https://deepdaiv.stibee.com/p/55
돈에 대한 나의 마음가짐을 소프트웨어랑 묶어서 살짝 풀어보려다가 인공지능까지 와버렸다. 앞에서 말한 대로 프로그램과 시스템에서 temp 변수와 같은 공간은 비용과 직결된다. 나에게 돈은 temp 변수라고 했는데, 아이러니하게도 사실 temp 변수가 돈이었다! 게다가 무언가 더 큰 일을 잘 해내려면 더 큰 공간이 필요하다. LLM을 봐라! 우리가 프로그램에서 사용하는 보통의 temp 변수 정도는 그냥 Register를 사용한다. 나는 큰 꿈이 있고, 그 꿈을 위해서 temp 변수의 사이즈를 많이 늘리고 싶고, 그것을 위해 치열하게 노력한다. 하지만 동시에 나는 아무런 목적 없이 또는 불분명한 목적으로 temp 변수의 사이즈를 늘리고 보자는 오버엔지니어링을 경계한다. 이것이 내 삶에서 돈에 대한 나의 Architectural Decision이다.