프롤로그 - "맥북 배터리는 왜 이렇게 오래 갈까?"
처음 M1 맥북을 샀을 때 충격을 받았습니다. 인텔 맥북을 쓸 때는 팬 소리가 이륙하는 비행기 같았고, 충전기 없이는 카페에 갈 엄두도 못 냈습니다. 코드를 컴파일하면 팬이 최대 RPM으로 돌면서 책상이 뜨거워졌습니다. 게다가 2시간이면 배터리가 바닥났습니다.
그런데 M1은 달랐습니다. 하루 종일 써도 배터리가 60%나 남아있었고, 팬은 한 번도 돌지 않았습니다. 무거운 Docker 컨테이너를 10개 띄워도 조용했습니다.
단순히 "애플이 칩을 잘 만들어서"라고 퉁치고 넘어가기엔 뭔가 찝찝했습니다. 찾아보니 '아키텍처가 다르다'고 하더군요. 하나는 x86이고, 하나는 ARM이라는데... 도대체 이게 무슨 말일까요?
처음엔 이해가 안 갔던 설명들
초반에 구글링하면서 읽은 설명들은 이랬습니다:
"x86은 CISC 기반이고, ARM은 RISC 기반입니다."
저: "?????"
"CISC는 Complex Instruction Set Computer의 약자로, 복잡한 명령어를 한 번에 처리합니다."
저: "그래서 그게 왜 배터리랑 관련있는데요?"
너무 이론적이어서 실감이 안 났습니다. 그러다 우연히 읽은 비유 하나가 머리를 때렸습니다. "셰프와 알바생" 비유였습니다.
1. 셰프와 알바생: CISC vs RISC
이해하기 가장 쉬웠던 비유는 "주방"이었습니다.
x86 (CISC): 천재 셰프 미슐랭
인텔과 AMD가 만드는 x86 칩은 CISC(Complex Instruction Set Computer) 방식입니다. 이름 그대로 '복잡한(Complex) 명령어'를 씁니다.
비유하자면 "미슐랭 3스타 천재 셰프"입니다. 이 셰프는 엄청나게 똑똑합니다. "초밥 만들어!"(Complex Instruction)라고 한 마디만 하면, 혼자서:
- 냉장고에서 생선을 꺼내고
- 밥을 짓고
- 생선을 썰고
- 와사비를 찍어서
- 접시에 담습니다
명령은 간단합니다. "초밥 만들어" 딱 한 줄이면 되니까요. (코드 길이가 짧음)
하지만 단점이 있습니다. 셰프가 너무 똑똑하고 하는 일이 많아서, 머리에 열이 많이 나고 밥(전기)을 많이 먹습니다. 복잡한 요리(고성능 연산)는 기가 막히게 잘하지만, 단순한 김밥 말기 같은 건 좀 과하다는 느낌입니다.
ARM (RISC): 손 빠른 알바 군단
반면 ARM이 사용하는 RISC(Reduced Instruction Set Computer) 방식은 '줄여진(Reduced) 명령어'를 씁니다.
비유하자면 "손 빠른 단순 노동 알바 군단"입니다. 이 친구들은 "초밥 만들어"라는 복잡한 명령을 모릅니다. 대신 아주 단순한 명령만 알아듣습니다:
- "밥을 퍼라"
- "김을 깔아라"
- "생선을 올려라"
- "말아라"
- "접시에 담아라"
명령어는 길어집니다. (코드 길이가 길어짐) 하지만 각 동작이 너무 단순해서, 실행 속도가 압도적으로 빠릅니다. 그리고 단순하니까 머리를 덜 써서 전기를 훨씬 적게 먹습니다.
이 비유가 현실로 이어지는 순간
이 비유를 읽고 나서 제 M1 맥북이 이해되기 시작했습니다.
- 인텔 맥북(x86): 천재 셰프가 혼자 다 함 → 머리 과열(팬 소음) → 밥 많이 먹음(배터리 소모)
- M1 맥북(ARM): 알바 군단이 분업 → 각자 단순 작업 → 전기 적게 먹음(배터리 오래 감)
"아, 그래서 M1이 조용하고 시원했구나."
2. 왜 시대가 변했는가?
그런데 의문이 생겼습니다. "복잡한 명령어 한 방이 더 좋은 거 아냐? 왜 굳이 단순한 명령어 여러 개로 쪼개?"
답은 시대의 변화에 있었습니다.
1980년대 - 메모리가 금이었던 시대
예전에는 RAM이 엄청 비쌌습니다. 1980년대 집에 컴퓨터가 있으면 부자였고, 메모리는 KB 단위였습니다. 그래서 프로그램 용량(코드 길이)을 줄이는 게 지상 과제였습니다.
"초밥 만들어" 한 줄로 끝나는 CISC(x86)가 왕이었던 이유입니다. 인텔의 전성기였죠.
당시 개발자들은 이렇게 생각했습니다:
"코드 짧게 = 메모리 절약 = 최고!"
2020년대 - 배터리가 왕인 시대
하지만 지금은 메모리가 쌉니다. 제 노트북엔 16GB RAM이 꽂혀있고, 앱 하나에 수백 MB를 써도 아무도 신경 안 씁니다. 코드 좀 길어져도 상관없습니다.
오히려 "배터리 효율(전성비)"과 "발열 관리"가 중요해졌습니다. 스마트폰 시대니까요.
- 아이폰이 3시간 만에 죽으면 망합니다.
- 노트북이 화상을 입힐 정도로 뜨거우면 망합니다.
- 서버를 돌리는데 전기료가 너무 나오면 망합니다.
그래서 작고, 전기 덜 먹고, 발열 적은 RISC(ARM)가 떡상한 것입니다.
제가 직접 체감한 순간
AWS에서 서버를 돌릴 때였습니다. 같은 성능의 인스턴스인데:
- x86 인스턴스: 월 $50
- ARM (Graviton) 인스턴스: 월 $40
20% 차이. 1년이면 $120 차이입니다.
"아, 이게 실제 돈으로 보이는구나."
3. 내 서비스에는 뭘 써야 할까? (AWS Graviton 경험)
이 이론이 실제 제 지갑 사정과 연결된 건 AWS 인스턴스를 고를 때였습니다.
t3.medium (x86 기반)과 t4g.medium (ARM 기반, Graviton) 사이에서 고민했습니다.
처음엔 겁먹었습니다
"ARM? 그거 호환 안 되는 거 많지 않나?" "x86으로 짠 코드가 ARM에서 안 돌아가면 어떡하지?"
온라인에서 찾은 글들도 양분됐습니다:
- 긍정파: "Graviton 쓰면 가격 20% 저렴하고 성능도 좋아요!"
- 부정파: "일부 라이브러리 안 돌아가서 삽질함. x86 쓰세요."
실험 - Docker로 ARM 빌드해보기
제 블로그 백엔드는 Next.js였습니다. Dockerfile을 만들어서 두 가지 버전으로 빌드했습니다:
# x86 빌드
docker build --platform linux/amd64 -t blog:x86 .
# ARM 빌드
docker build --platform linux/arm64 -t blog:arm .
결과:
- x86: 문제없이 빌드 성공.
- ARM: 처음엔
sharp라이브러리(이미지 처리)에서 에러.
하지만 sharp를 최신 버전으로 업데이트하니까 해결됐습니다.
Node.js나 Python 같은 고수준 언어는 대부분 ARM 지원이 잘 돼있었습니다.
배포 후 - 실제 성능 비교
AWS Graviton(t4g.medium)으로 배포한 후:
| 항목 | x86 (t3.medium) | ARM (t4g.medium) |
|---|---|---|
| 가격 | 월 $50 | 월 $40 (20% 저렴) |
| 응답 속도 | 평균 120ms | 평균 100ms (더 빠름!) |
| CPU 사용률 | 평균 30% | 평균 25% |
| 메모리 | 4GB | 4GB (동일) |
심지어 성능이 더 좋았습니다. 같은 요청을 처리하는데 CPU를 덜 썼습니다.
"왜 모두가 ARM을 안 쓰지?"싶었습니다.
주의사항 - 레거시 환경
물론 모든 경우에 ARM이 답은 아닙니다.
ARM이 어려운 경우:
- 오래된 바이너리 라이브러리 사용 (예: 10년 전 C++ 라이브러리)
- 특정 하드웨어 종속성 (예: NVIDIA GPU 드라이버 - x86 전용)
- Windows 서버 (Windows는 ARM 지원이 약함)
ARM이 좋은 경우:
- Python, Node.js, Go, Rust 같은 최신 언어
- Docker 컨테이너 기반 배포
- API 서버, 웹 서버 (stateless workload)
4. 팁 - ARM으로 전환하기
제가 x86 → ARM 전환하면서 배운 노하우입니다.
Step 1: 로컬에서 먼저 테스트
# Mac M1/M2 사용자는 기본이 ARM
docker build --platform linux/arm64 -t myapp:arm .
docker run myapp:arm
# Intel Mac / Windows 사용자는 QEMU로 에뮬레이션
docker buildx build --platform linux/arm64 -t myapp:arm .
로컬에서 돌아가면 99% 실제 ARM 서버에서도 돌아갑니다.
Step 2: Multi-platform 빌드
x86과 ARM 둘 다 지원하려면:
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest .
이러면 하나의 이미지로 두 아키텍처를 동시 지원합니다. AWS ECS/Fargate에서 인스턴스 타입 바꿔도 재배포 필요 없음.
Step 3: 점진적 마이그레이션
전체 서버를 한 번에 바꾸지 마세요.
- 개발 환경부터 ARM으로 전환
- 스테이징 환경 테스트
- 운영 환경 Blue/Green 배포로 전환
- 문제 생기면 즉시 롤백
5. 미래 - ARM이 x86을 대체할까?
모바일 - 이미 ARM이 100%
스마트폰은 100% ARM입니다. 아이폰(Apple A시리즈), 안드로이드(Qualcomm Snapdragon) 모두 ARM 아키텍처입니다. x86 스마트폰은 아예 없습니다.
데이터센터 - 천천히 전환 중
AWS, Google Cloud, Azure 모두 ARM 인스턴스를 제공합니다.
- AWS: Graviton
- Google Cloud: Tau T2A
- Azure: Ampere Altra
2025년 현재, 클라우드 워크로드의 약 15%가 ARM입니다. 2030년에는 50%가 될 거라는 예측도 있습니다.
데스크탑 - x86의 마지막 보루
고성능 게이밍 PC는 여전히 Intel i9, AMD Ryzen이 지배합니다. Windows 게임들이 x86 기반이라 당분간은 바뀌지 않을 것 같습니다.
하지만 Apple M시리즈가 게임 성능도 따라잡기 시작하면... 모를 일입니다.
6. 요약 - 선택의 기준
| 구분 | CISC (x86) | RISC (ARM) |
|---|---|---|
| 비유 | 만능 천재 셰프 | 손 빠른 알바 군단 |
| 장점 | 복잡한 연산을 한 방에 처리 | 전력 소모가 적고 발열이 낮음 |
| 대표 주자 | Intel i9, AMD Ryzen | Apple M1/M2, AWS Graviton |
| 한마디 | "무거운 작업을 강력하게" | "가볍고 빠르고 오래가게" |
마치며 - 결국 효율이 이긴다
처음 M1 맥북을 샀을 때는 "애플이 칩을 잘 만들어서"라고만 생각했습니다. 하지만 깊이 파고들어보니, 아키텍처 철학의 차이였습니다.
- x86: "복잡한 걸 한 방에!" (1980년대 메모리 부족 시대의 산물)
- ARM: "단순한 걸 빠르게!" (2020년대 효율 중심 시대의 승자)
결국 모바일과 클라우드 시대가 되면서, 무겁고 뜨거운 '천재'보다 가볍고 효율적인 '알바 군단'이 더 환영받는 시대가 된 것 같습니다.
물론 고성능 게이밍 데스크탑은 여전히 x86이 지배하고 있지만, 그마저도 언제 바뀔지 모른다는 생각이 듭니다.
이 글을 쓰고 있는 지금도 제 M1 맥북은 배터리 80%를 유지하고 있습니다. 팬 소리는 여전히 들리지 않습니다.
7. 제3의 물결 - RISC-V (오픈소스 CPU)
ARM도 완벽하지 않습니다. 가장 큰 문제는 "라이선스 비용"입니다. 애플이나 삼성이 ARM 칩을 만들 때마다 ARM사에 천문학적인 로열티를 내야 합니다.
그래서 등장한 것이 RISC-V (리스크 파이브)입니다.
- 특징: 설계도가 무료로 공개된 오픈소스 아키텍처 (Linux의 하드웨어 버전).
- 장점: 로열티가 0원입니다. 누구나 마음대로 뜯어고칠 수 있습니다.
- 현황: 구글, 엔비디아, 인텔까지 투자하고 있으며, 중국이 제재를 피하기 위해 전력투구하고 있습니다. 미래에는 x86 vs ARM 양강 구도가 아니라, RISC-V까지 포함된 삼파전이 될지도 모릅니다.
8. 핵심 정리
Q1. RISC와 CISC의 결정적인 차이는?
- 답변: 명령어의 복잡도와 길이입니다.
- CISC(x86): 명령어 하나가 많은 일을 처리하며, 길이가 가변적입니다. 메모리 효율이 좋지만 최적화가 어렵습니다.
- RISC(ARM): 명령어가 단순하고 고정된 길이를 가집니다. 실행 속도가 빠르고 파이프라이닝 최적화에 유리하여 전력 효율이 높습니다.
Q2. 왜 서버 시장(AWS Graviton)에서 ARM 점유율이 늘어나나요?
- 답변: 가성비(전성비) 때문입니다. 클라우드 비용의 상당 부분은 전력료와 냉각 비용입니다. ARM은 x86 대비 전력 소모가 적어 운영 비용을 획기적으로 낮출 수 있습니다. 또한 마이크로서비스(MSA) 환경의 단순한 워크로드처리에 매우 적합하기 때문입니다.
Q3. 컴파일된 바이너리는 x86과 ARM이 호환되나요?
- 답변: 아니요, 호환되지 않습니다. 기계어(Assembly) 명령어 셋 자체가 다르기 때문입니다. 그래서 Docker 이미지도
linux/amd64용과linux/arm64용을 따로 빌드하거나, Multi-arch 빌드를 해야 합니다.
Q4. 애플 실리콘 맥북에서 x86 앱(롤, 포토샵)이 돌아가는 원리는?
- 답변: Rosetta 2 (로제타 2)라는 번역기 덕분입니다. 앱을 실행하는 순간, x86 명령어를 ARM 명령어로 실시간 번역(JIT + AOT)해서 실행합니다. 성능 저하가 있지만 워낙 M1 칩 성능이 깡패라(?) 사용자는 느려진 줄 모를 정도입니다.