AI를 쓰다 보면 어느 순간 벽을 만난다. Node가 필요합니다. 설치해주세요, 터미널을 여세요. 이 말이 내가 하던걸 멈춰야하나? 라는 물음이 생기게 만든다. 왜? 도대체 이게 뭔지 하나도 모.르.겠.으.니.까.
시작은 엉뚱하게도 컴퓨터 그 자체였다. 근데 생각해보면 당연하다. AI도 결국 컴퓨터 안에서 돌아간다. 컴퓨터를 이해할수록 AI를 더 잘 쓰게 된다. 그래서 컴퓨터부터 시작했다. 그걸 알아야 그 위의 것들이 보였다.
한 가지 먼저 정리하고 간다. 이 글은 'AI 첫걸음'이 아니다. 개발자는 이 개념을 알고 프로그래밍을 시작한다. 하지만 비개발자는 터미널 하나 여는 것도 벅차다. 그 상태에서 컴퓨터 구조부터 살피라는 건 순서가 아니다. 뭐가 뭘 움직이고 뭐가 되는지를 눈으로 한 번 본 다음에야, 구조를 받아들일 마음이 열린다. 나도 그랬다. 그래서 이 기본적인 컴퓨터의 이해, 언어와 작동 방식의 이해는 첫걸음이 아니라 한걸음 더의 시작에 놓는 게 맞다. 이미 A를 활용해서 이것저것 해보며 컴퓨터 언어를 간접적으로 직접적으로 사용해 본지 6개월이 넘어서 드디어 생기는 지적 호기심, 컴퓨터란 무엇인가? 라는 주제로 AI한걸음 더 라는 글의 시작을 열어본다.
내가 매일 쓰는 컴퓨터, 도대체 어떻게 작동하는거야?
컴퓨터는 결국 명령을 받아서 실행하는 기계다.
본체를 열면 부품이 몇 개 있다. 부엌에 빗대면 좀 쉽게 이해할 수 있다. 오늘은 이 세개의 개념을 알아볼 것이다. CPU, RAM, SSD
CPU는 요리사다. 실제로 손을 움직여 요리, 그러니까 명령 실행을 한다.
메모리(RAM)는 조리대다. 지금 만드는 재료를 펼쳐두는 곳. 넓으면 여러 개를 동시에 펼친다. 대신 불을 끄면, 전원을 끄면 위에 있던 게 싹 치워진다.
저장장치(SSD)는 냉장고다. 안 쓰는 재료를 넣어둔다. 전원을 꺼도 남는다. 대신 꺼내오는 게 조리대보다 느리다.
여기서 평소 듣던 말들을 예시로 보면 더 이해가 잘 된다. 메모리 부족은 조리대가 좁아 요리를 여러 개 못 펼치는 거다. 저장 안 하고 끄면 날아가는 건 조리대 위 재료라 그렇다. 저장을 눌러야 냉장고로 옮겨져 남는다.
그럼 왜 굳이 나눴을까. 하나로 만들면 안 되나. 안 된다. 빠르면서 동시에 큰 메모리는 물리적으로 못 만들기 때문이다. 빠르게 만들면 작아지고, 크게 만들면 느려진다. 둘 중 하나는 포기해야 한다.
요리사, CPU좀 더 자세히 알아보자.
CPU는 컴퓨터의 두뇌이자 일꾼이다. 계산하고 명령을 실행하는 게 전부 이곳에서 한다.
그런데 이 두뇌는 딱 하나만 할 줄 아는 점원 같다. "이 숫자랑 저 숫자 더해." 그거밖에 못 한다. 근데 이 점원이 눈 깜빡할 사이에 수십억 번을 처리한다. 똑똑한 게 아니라 말도 안 되게 빠른 거다. 우리가 보는 영화도 게임도 AI도, 사실은 이 단순한 계산 수십억 개가 쌓인 결과다.
요즘 CPU는 이 점원이 한 명이 아니다. 여럿이 일을 나눠서 한다. 이 점원 수를 코어라고 부른다. 8코어면 점원 여덟 명이다. 그래서 CPU가 좋다는 건 점원이 빠르고 여럿이라는 뜻이다. 반대로 CPU 사용률 90%처럼 들리는 건 성능이 아니라 지금 점원들이 다 바빠 손이 모자란 상태다.
예를 들어본다. 맥이면 M 시리즈다. M1, M2, 뒤 숫자가 클수록 최신이고, 같은 세대 안에서도 일반 < Pro < Max 순으로 세다. 윈도우 PC면 인텔 Core나 AMD Ryzen이고, i5 < i7 < i9처럼 숫자가 클수록 성능이 좋다. "M5 Pro", "i7" 같은 이름이 곧 이 점원은 이 정도 능력을 가지고 있다 라는 표현이다.
그럼 성능이 높으면 무조건 좋을까? 성능이 높을수록 비싸지고, 더 뜨거워지고, 전기도 더 먹는다. 고성능 노트북이 팬이 윙윙 돌고 배터리가 빨리 닳는 게 그래서다.
그리고 안 쓰는 성능은 성능이 아니라 낭비다. 카톡과 문서만 쓰는 사람이 너무 높은 성능을 사용해버리면, 점원 대부분이 논다. 돈은 세 배 냈는데 한 개도 다 못 쓰는 거다. 반대로 영상 편집이나 AI를 돌리는 사람은 점원이 많을수록 값을 한다. 결국 좋은 성능은 정해져 있는 게 아니라, 내가 하는 일에 맞느냐의 문제다.
CPU는 0과 1밖에 모른다
CPU는 전기로 돌아간다. 전기는 켜짐과 꺼짐, 두 가지 상태뿐이다. 그걸 숫자로 쓰면 1과 0이다. 그래서 CPU는 오직 0과 1로 된 명령만 읽는다.
메모장에 print("안녕") 이라고 써보자.
이건 지금 그냥 글자다. CPU이 글자를 바로 주면 알 수 없다.
그럼 언어는 왜 필요해?
사람은 0과 1로 프로그램을 못 짠다. 너무 어렵기 때문에! 그래서 Python, JavaScript 같은 사람 언어로 짠다. 그런데 방금 봤듯 CPU는 그 언어를 모른다. 그 사이를 메우는 작동할 수 있는 언어로 변경하는 작업이 필요하다.
print("안녕") 이라는 낙서를 Python 엔진한테 주면, "아 print는 화면에 띄우라는 거구나" 하고 CPU가 먹을 수 있는 0과 1로 바꿔준다. 그제야 화면에 "안녕"이 뜬다.
그래서 어떤 프로그램이 Node가 필요합니다.라고 하면, 그건 이런 뜻이었다. 이 프로그램은 JavaScript로 쓰여 있어요. 그 통역사(Node)가 없네요. 먼저 데려오세요.라는 뜻
언어마다 이 통역사의 이름이 다르다. 이해하기 쉽게 짝꿍을 적어봤다.
JavaScript → Node (브라우저 안에선 V8)
Python → CPython (보통 그냥 '파이썬'이라 부른다)
Java → JVM (자바 가상 머신)
Ruby → 루비 인터프리터
C, C++ → 컴파일러
근데 언어가 왜 여러 개야. 하나면 되잖아
웹을 만들든 데이터를 분석하든, 어차피 마지막엔 다 0과 1 아닌가. CPU한텐 다 똑같은 0과 1일 텐데, 왜 언어를 나눌까? 애초에 언어를 하나로 통일하면 되는데 왜 이렇게 복잡하게 여러가지 언어를 만들고 여러가지를 배워야하는걸까? 라는 생각이 들었다. 언어마다 잘하는 일이 달라서, 분업이라고 하는데 정확하게 와닿지 않았다.밑바닥에선 다르지 않고 다 0과 1이고, CPU한텐 다 똑같다.
그럼 왜 안 합쳐졌을까? 쓰는 사람들이 불편하기 때문이다.
비효율은 어디서 생기는건데?
웹 화면에 버튼 그리는 능력은 언어에 있는 게 아니다. 그 언어의 부엌에 뭐가 이미 갖춰져 있느냐에 있다.
JavaScript의 부엌은 웹페이지 위다. 1995년, 웹을 위해 만들어졌다. 그 부엌엔 화면도, 버튼도, 클릭도 이미 갖춰져 있다.(라이브러리) 그러니 버튼 그려줘 한마디면 끝난다. 재료가 이미 다 준비되어있기 때문이다.
Python의 부엌은 맨 컴퓨터 위다. 1991년, 특정 용도 없이 두루 쓰려고 태어났다. 그 부엌엔 화면이 없다. 기본은 글자만 오간다. 그래서 "버튼 그려"라고 하면 화면부터 지어야 한다. 창 띄우고, 빈 화면 만들고, 버튼 올리고, 안 꺼지게 붙잡고. 이게 사람에게 생기는 불편함. 비효율이다.
그럼 대표적인 언어는 뭐가 있나
구체적인 예시를 봐야 이해가 되는 스타일이라 추가로 정리해봣다.
Python. 지금 제일 많이 쓰는 언어다. AI와 데이터 분석에 특화된 부엌이라, 우리가 쓰는 AI 대부분이 이걸로 만들어졌다. 문법도 쉬운 편이라 처음 배우는 언어로 많이 고른다.
JavaScript. 웹을 움직이는 언어다. 우리가 보는 거의 모든 웹사이트가 이걸로 돌아간다. 버튼을 누르면 반응하고 화면이 바뀌는 게 다 이 부엌 일이다.
Java. 은행이나 큰 회사의 시스템에서 오래 쓰였다. 오래됐고 튼튼해서 크고 안 멈춰야 하는 곳에 강하다. 예전엔 안드로이드 앱도 주로 이걸로 만들었는데, 지금은 Kotlin으로 많이 넘어갔다. 이름이 비슷한 JavaScript와는 아예 다른 언어다.
SQL. 오직 하나, 데이터베이스에서 자료를 찾고 꺼내는 일만 한다. "회원 중에 이번 달 가입한 사람 다 보여줘" 같은 걸 이걸로 물어본다.
Swift. 애플이 만든, 아이폰과 맥 앱용 언어다. 네 아이폰에 깔린 앱 상당수가 이 부엌에서 나왔다.
C. 아주 오래된 뿌리다. 컴퓨터 깊숙한 곳, 운영체제나 성능이 중요한 데서 쓴다. 지금 언어 대부분이 이 C의 문법을 물려받았다.
이름은 달라도 원리는 같다. 다 사람 언어고, 다 통역사를 거쳐 0과 1이 된다. 어떤 부엌에서 시작하느냐가 다를 뿐이다.
그래서, 벽의 정체
여기까지 알아보고 나서야 알았다. 나를 막았던 벽은 기술이 아니었다. 이건 원래 그런 거예요라는 말, 아무도 왜인지 말해주지 않는다는 것, 그게 벽이었다.
그 원래 그런 거 라는 생각을 한 번 받아들이지 않고 개발자만 아는것이라는 편견을 걷어내고 하나씩 조금씩 알아가다보니 이해가 됐다. 이렇게 컴퓨터, 컴퓨터 언어에 대한 단어와 한걸음 더 다가갔다.