구글 안티그래비티 완전 분석 — 모델·요금제·CLI 총정리

🚀 구글 안티그래비티(Antigravity) 완전 분석 구글이 2025년 11월 Gemini 3와 함께 공개한 에이전트 퍼스트(agent-first) IDE 안티그래비티는 Claude·GPT·Gemini를 한 도구에서 골라 쓰는 멀티모델 코딩 환경이다. 이 글에서는 ① 지원 모델과 요금제별 사용량의 실체, ② 실사용자 평가, ③ 구글의 방향성, ④ Claude Code와의 비교·연계, ⑤ CLI( agy )로 직접 쓰는 법까지 다섯 갈래를 차례로 정리한다. 자료 간 충돌이 있는 지점은 한쪽으로 단정하지 않고 양쪽을 모두 살려 표기했다. 📅 기준 시점: 2026년 6월 · 프리뷰 단계 정보로 수치는 변동 가능 1. 안티그래비티란 무엇인가 — 기초 정리 안티그래비티는 2025년 7월 구글이 24억 달러 규모 라이선스 계약 으로 영입한 전 Windsurf 팀이 설계를 주도했다. VSCode를 포크한 위에 자율 에이전트 오케스트레이션 계층을 얹은 구조다. 2026년 5월 Google I/O에서 발표된 안티그래비티 2.0 은 데스크탑 앱과 함께 공식 CLI agy 를 처음 공개하며 기존 Gemini CLI의 공식 후계자 자리를 확정했다. 핵심 정체성은 단순 코드 자동완성이 아니라 병렬 에이전트 오케스트레이션 이다. 여러 에이전트가 동시에 — 하나는 API, 하나는 테스트, 또 하나는 프론트엔드 — 작업을 나눠 진행하고, 각 에이전트는 계획·테스트 결과·스크린샷·영상을 담은 Artifact 를 남긴다. "사람이 한 줄씩 승인"하는 방식이 아니라 "에이전트들이 일을 마치고 사람이 사후 검수"하는 모델이다. flowchart TD A([사용자 작업 지시]) --> B[에이전트 A API 구현] A --> C[에이전트 B 테스트 작성] A --> D[에이전트 C UI 생성] B --> E[Artifact 계획·결과·영상] C --> E D --> E...

Arm Cortex-A53에서 A55로, 리셋 설계 철학이 바뀌었다

🔬 Arm Cortex-A53 vs A55: 실행 상태 전환 메커니즘 완전 해부

Arm 효율 코어의 세대 교체가 가져온 리셋 설계 혁신을 깊이 들여다봅니다

모바일 SoC의 심장부에는 언제나 Arm의 효율 코어가 자리하고 있습니다. 스마트폰을 켜는 순간부터 화면이 꺼진 채 알림을 기다리는 순간까지, 전력 한 방울까지 아끼는 '리틀(Little)' 코어의 역할은 절대적입니다. 그런데 이 작은 코어 안에서 벌어지는 실행 상태 전환이라는 정교한 작업은 세대가 바뀌면서 완전히 다른 방식으로 진화했습니다. Cortex-A53과 A55 사이에 놓인 설계 철학의 간극, 지금부터 하나씩 풀어보겠습니다.

📐 1. 아키텍처 세대 비교: Armv8.0-A vs Armv8.2-A

두 코어를 이해하려면 먼저 각각이 기반하는 아키텍처 세대의 차이를 짚어야 합니다. 단순한 버전 넘버링이 아니라, 프로세서가 리셋을 처리하는 근본적인 구조가 달라졌기 때문입니다.

항목 🅰 Cortex-A53 🅱 Cortex-A55
아키텍처 Armv8.0-A Armv8.2-A
클러스터 기술 big.LITTLE (전통 방식) DynamIQ (차세대)
EL3 지원 AArch32 + AArch64 모두 AArch32 + AArch64 모두
리셋 제어 외부 핀 기반 (Warm Reset Request) DSU + PPU 내부 버스 기반
코어 배치 동종 코어 4개 고정 이종 코어 최대 8개 유연 배치

A53은 외부에서 물리적 핀으로 "리셋해줘"라고 요청하면 코어가 반응하는 직관적인 구조였습니다. 반면 A55는 DSU(DynamIQ Shared Unit)라는 중앙 관리자가 내부적으로 모든 리셋 시퀀스를 조율합니다. 마치 각 직원이 직접 비상벨을 누르던 방식에서, 중앙 관제실이 모든 비상 상황을 통합 관리하는 방식으로 바뀐 것과 같습니다.

⚙️ 2. AArch32 ↔ AArch64 전환: 왜 리셋이 필수인가

Arm 아키텍처에서 32비트와 64비트 실행 상태를 바꾸는 일은 단순히 플래그 비트 하나를 토글하는 수준이 아닙니다. 레지스터 뱅크의 구조 자체가 다르고, 명령어 디코딩 파이프라인이 완전히 재구성되어야 하기 때문에 반드시 최상위 예외 수준(EL3)에서 리셋을 동반해야 합니다.

🔑 핵심 레지스터: RMR_EL3 (Reset Management Register)

이 레지스터 하나가 전환의 열쇠를 쥐고 있습니다. 리셋 후 프로세서가 어떤 상태로 깨어날지를 결정하는 유일한 제어점입니다.

AA 비트 (Bit [1]) — 다음 리셋 후 실행 상태 결정

1 = AArch64로 진입 | 0 = AArch32로 진입

RR 비트 (Bit [0]) — 리셋 요청 트리거

→ 이 비트에 1을 쓰는 순간, 프로세서는 시스템에 리셋을 요청합니다

🔄 3. A55 실행 상태 전환 — 6단계 시퀀스 완전 분석

Cortex-A55에서 AArch32 → AArch64(또는 그 반대) 전환이 실제로 어떤 순서로 일어나는지, 시간 흐름에 따라 추적해 보겠습니다.

준비 단계 (Context Save)

현재 실행 중인 모든 컨텍스트를 메모리에 저장합니다. 리셋이 발생하면 레지스터 값이 초기화되므로, 캐시 데이터의 정합성을 위해 Clean & Invalidate 작업을 반드시 수행해야 합니다.

전환 상태 설정 (AA Bit Write)

RMR_EL3 레지스터의 AA 비트를 원하는 목표 상태로 설정합니다. AArch64로 전환하려면 1, AArch32라면 0을 씁니다.

리셋 요청 활성화 (RR Bit Write)

RMR_EL3의 RR 비트에 1을 기록합니다. 이 순간부터 프로세서는 리셋 대기 상태에 진입합니다.

WFI 실행 (Wait For Interrupt) — 가장 중요한 단계 ⚠️

RR 비트 기록 직후, 소프트웨어는 반드시 WFI 명령어를 실행해야 합니다. 이 단계가 없으면 리셋이 지연되거나 하드웨어 데드락이 발생할 수 있습니다.

→ WFI는 내부 파이프라인을 완전히 비우고, 코어가 안정 상태(Idle)에 도달했음을 DSU의 PPU(Power Policy Unit)에 알리는 핵심 신호입니다.

하드웨어 시퀀싱 (DSU/PPU 내부 처리)

DSU가 해당 코어의 리셋 요청을 접수하고, 내부 클럭을 차단한 뒤 리셋 신호를 인가합니다. 외부 핀이 아닌 내부 버스를 통해 신호가 전달되므로 SoC 외부에서는 관측되지 않습니다.

재부팅 완료 (Warm Reset Exit) ✅

리셋 신호가 해제되면, 프로세서는 RMR_EL3의 AA 비트에 설정된 값에 따라 새로운 실행 상태로 부팅을 시작합니다. RVBAR_EL3에 캡처된 주소로 점프하여 코드 실행을 개시합니다.

📍 4. RVBARADDR — 리셋 후 "어디서 시작할 것인가"

프로세서가 리셋에서 깨어났을 때 가장 먼저 하는 일은 "어디부터 코드를 읽을까"를 결정하는 것입니다. 이 첫 번째 주소를 결정하는 것이 바로 RVBAR(Reset Vector Base Address Register)입니다.

🔒 RVBAR_EL3의 핵심 특성

▶ AArch64에서 이 레지스터는 읽기 전용(Read-only)입니다. 런타임에 소프트웨어가 값을 변경할 수 없습니다.

▶ 리셋 신호가 해제되는 순간(Rising Edge), 외부 핀의 전위 상태를 읽어 내부 레지스터에 고정합니다.

▶ SoC 설계자가 부트로더 주소를 하드웨어적으로 고정하거나, 별도의 제어 레지스터에 연결해 둡니다.

💡 멀티코어에서의 활용

RVBARADDR의 진정한 가치는 멀티코어 환경에서 빛납니다. 각 코어마다 다른 시작 주소를 부여할 수 있어, 웜 리셋 후 일반 부팅 경로가 아닌 '전환 전용 핸들러'로 바로 점프하는 것이 가능합니다. 이를 통해 불필요한 초기화 과정을 건너뛰고 빠르게 새로운 실행 상태에 진입할 수 있습니다.

실제 DynamIQ 기반 SoC에서는 빅 코어와 리틀 코어가 서로 다른 RVBAR 값을 가지는 것이 일반적이며, 이는 부팅 시 각 코어의 역할에 맞는 펌웨어로 즉시 분기하기 위함입니다.

🧭 5. A53 → A55, 무엇이 근본적으로 달라졌나

이제 두 세대 간의 변화를 한 장의 그림으로 정리해 보겠습니다.

구분 Cortex-A53 (구세대) Cortex-A55 (신세대)
리셋 트리거 외부 Warm Reset Request 핀 RMR_EL3 + WFI → DSU 내부 처리
리셋 관리 주체 개별 코어 + SoC 컨트롤러 DSU + PPU (중앙 집중식)
SoC 배선 복잡도 코어별 리셋 라인 필요 내부 버스로 단순화
전력 효율 기본적 PPU 통합으로 극대화

🧠 핵심 인사이트

Cortex-A53에서 A55로의 진화의 본질은 리셋 관리의 주도권이 개별 코어에서 DSU라는 중앙 집중식 관리 체계로 이전된 것입니다. 이는 단순한 성능 개선이 아니라 SoC 설계 패러다임 자체의 변화를 의미하며, 더 적은 배선으로 더 정교한 전력 관리를 가능케 한 아키텍처적 도약입니다.

🛠️ 6. 개발자를 위한 실전 가이드

A55 기반 시스템에서 실행 상태 전환 코드를 작성할 때 반드시 기억해야 할 사항들을 정리합니다.

⚠️ 절대 빠뜨리면 안 되는 것

RMR_EL3.RR에 1을 기록한 직후, 반드시 WFI 명령어를 실행하세요. 이 단계를 생략하면 파이프라인이 비워지지 않은 상태에서 리셋이 시도되어 하드웨어 데드락이 발생할 수 있습니다. 이 문제는 디버깅이 극도로 어렵고, JTAG으로도 원인 파악이 쉽지 않습니다.

✅ 안정적인 전환을 위한 체크리스트

→ 전환 전 캐시 Clean & Invalidate 완료 확인

→ 인터럽트 비활성화 상태에서 RMR_EL3 쓰기 수행

→ RR 비트 기록 → ISB(배리어) → WFI 순서 엄수

→ RVBARADDR 입력 신호가 리셋 해제 전에 안정화되었는지 SoC 레벨에서 검증

→ 전환 후 컨텍스트 복원 루틴의 무결성 사전 테스트

📚 참고 문서

→ Arm Cortex-A55 Technical Reference Manual

→ Armv8-A Architecture Reference Manual (DDI 0487)

→ DynamIQ Shared Unit Technical Reference Manual

본 콘텐츠는 공개된 Arm 기술 문서를 기반으로 작성되었으며, 특정 SoC 구현에 따라 세부 동작이 다를 수 있습니다.
기술적 판단은 해당 SoC 벤더의 공식 문서를 참조하시기 바랍니다.

📄 Raw Data
# [종합 리서치] Arm Cortex-A53 및 A55 아키텍처 변천에 따른 실행 상태(AArch32/64) 전환 메커니즘 분석

본 보고서는 싱크탱크 수석 연구원의 관점에서 Arm의 가장 성공적인 효율성 코어인 Cortex-A53과 그 후속작인 Cortex-A55 간의 아키텍처적 차이점을 심층 분석합니다. 특히 사용자가 질문하신 실행 상태(Execution State) 전환 과정의 변화, 관련 레지스터 제어, 그리고 하드웨어 수준의 리셋 벡터 캡처 방식에 대해 기술적 근거를 바탕으로 상세히 설명합니다.

---

## 1. 서론: 아키텍처 세대의 변화와 기술적 배경

Arm의 Cortex-A 시리즈 중 '리틀(Little)' 코어 계열은 모바일 SoC의 전력 효율을 담당하는 핵심 요소입니다. **Cortex-A53**은 Armv8-A 아키텍처를 최초로 구현한 코어 중 하나로, 64비트 컴퓨팅의 대중화를 이끌었습니다. 반면, **Cortex-A55**는 Armv8.2-A 아키텍처를 기반으로 하며, Arm의 차세대 클러스터 기술인 **DynamIQ(다이내믹)** 기술이 처음으로 적용된 코어입니다.

이 두 코어 사이에는 단순히 성능 향상을 넘어, '프로세서가 리셋을 처리하고 실행 상태를 전환하는 방식'에서 근본적인 설계 철학의 변화가 존재합니다. A53이 개별 코어 중심의 리셋 제어 방식을 가졌다면, A55는 DSU(DynamIQ Shared Unit)라는 통합 관리 유닛을 통해 보다 정교하고 복잡한 제어 루틴을 따릅니다.

---

## 2. 근본적 아키텍처 비교: Armv8.0-A vs Armv8.2-A

### 2.1 Cortex-A53 (Armv8.0-A)
Cortex-A53은 전통적인 **big.LITTLE** 구조를 따릅니다. 
- **아키텍처 버전:** Armv8.0-A
- **특징:** 모든 예외 수준(EL0~EL3)에서 AArch32와 AArch64를 모두 지원합니다.
- **리셋 구조:** 외부 핀(Warm Reset Request)을 통해 비교적 단순하게 코어의 상태를 재설정할 수 있었습니다. 소프트웨어가 특정 레지스터를 설정하면, 시스템 컨트롤러가 이를 감지하여 해당 코어에 하드웨어 리셋을 가하는 방식이 직관적으로 연결되어 있었습니다.

### 2.2 Cortex-A55 (Armv8.2-A)
Cortex-A55는 **DynamIQ** 기술의 도입으로 클러스터 내부 구조가 완전히 재설계되었습니다.
- **아키텍처 버전:** Armv8.2-A
- **특징:** L3 캐시를 공유하는 DSU 내부에 최대 8개의 코어가 자유롭게 배치될 수 있습니다. 
- **리셋 구조의 변화:** A55에서는 'Warm Reset'의 개념이 보다 추상화되었습니다. 과거처럼 단순한 외부 요청 핀에 의존하기보다, **PPU(Power Policy Unit)**와 **DSU의 상태 머신**이 유기적으로 결합되어 전력 소모를 최소화하면서 상태를 전환하도록 설계되었습니다. 질문하신 "외부 warm reset request의 부재"는 바로 이 DSU 중심의 통합 전력 및 리셋 관리 시스템으로의 이전을 의미합니다.

---

## 3. AArch32와 AArch64 전환 과정의 심층 분석

Arm 아키텍처에서 실행 상태(Register Width)를 변경하는 것은 런타임에 단순히 비트를 바꾸는 것으로는 불가능합니다. 반드시 **최상위 예외 수준(EL3)에서 리셋을 동반**해야 합니다.

### 3.1 핵심 제어 레지스터: RMR_EL3 (Reset Management Register)
AArch32에서 AArch64로(또는 그 반대) 전환하기 위해 가장 중요한 레지스터는 `RMR_EL3`입니다. 이 레지스터는 리셋 후 프로세서가 어떤 상태로 깨어날지를 결정합니다.

- **비트 구성:**
    - **AA (Bit [1]):** 다음 리셋 후의 실행 상태를 결정합니다.
        - `1`: AArch64로 진입
        - `0`: AArch32로 진입
    - **RR (Bit [0]):** 리셋 요청(Reset Request) 비트입니다. 이 비트에 `1`을 쓰는 순간, 프로세서는 시스템에 리셋을 요청합니다.

### 3.2 A55에서의 상세 전환 시나리오 (Time Sequence)

사용자가 요청하신 시간 순서에 따른 상세 동작 과정은 다음과 같습니다.

1.  **준비 단계 (Preparation):** 현재 실행 중인 모든 컨텍스트를 메모리에 저장합니다. 리셋이 발생하면 레지스터 값들이 초기화되거나 유실될 수 있기 때문입니다. 특히 캐시 데이터의 정합성을 위해 `Clean & Invalidate` 작업을 수행합니다.
2.  **전환 상태 설정:** `RMR_EL3` 레지스터의 **AA 비트**를 원하는 상태(예: AArch64라면 1)로 설정합니다.
3.  **리셋 요청 활성화:** `RMR_EL3`의 **RR 비트**에 1을 작성합니다.
4.  **WFI (Wait For Interrupt) 실행:** **매우 중요한 지점입니다.** 사용자가 언급한 'WTI'는 아마도 **WFI(Wait For Interrupt)**의 오기이거나, 특정 SoC 설계에서의 'Wait for Transition/Interrupt'를 의미할 수 있습니다. Arm 표준 가이드라인에 따르면, `RMR_EL3.RR`에 1을 쓴 직후 소프트웨어는 반드시 **WFI 지침**을 실행해야 합니다. 
    - **이유:** 프로세서 코어가 리셋 사이클로 진입하기 전, 내부 파이프라인을 완전히 비우고(Drain) 안정적인 상태(Idle/Quiet State)에 도달했음을 시스템 전력 관리자(PPU)에게 알리는 신호 역할을 합니다. WFI가 실행되지 않으면 리셋이 지연되거나 예기치 않은 하드웨어 교착 상태(Deadlock)가 발생할 수 있습니다.
5.  **하드웨어 시퀀싱 (DSU/PPU):** DSU는 해당 코어의 리셋 요청을 접수하고, 내부 클럭을 차단한 후 리셋 신호를 인가합니다. 이때 외부 핀이 아닌 내부 버스를 통해 신호가 전달되므로 외부에서는 보이지 않을 수 있습니다.
6.  **재부팅 (Warm Reset Exit):** 리셋 신호가 해제되면 프로세서는 `RMR_EL3`에서 설정했던 AA 비트 값에 따라 새로운 실행 상태로 부팅을 시작합니다.

---

## 4. RVBARADDR의 역할과 캡처 메커니즘

AArch64 시스템에서 리셋 후 코어가 "어디서부터 코드를 읽기 시작할 것인가"는 매우 중요합니다. 이를 결정하는 것이 바로 **RVBAR (Reset Vector Base Address Register)**입니다.

### 4.1 RVBAR_EL3 레지스터의 특성
- AArch64에서 이 레지스터는 **읽기 전용(Read-only)**입니다. 소프트웨어가 실행 중에 이 값을 직접 바꿀 수 없습니다.
- 이 레지스터의 값은 프로세서가 리셋에서 깨어날 때, 하드웨어적으로 입력된 주소값을 '캡처'하여 고정됩니다.

### 4.2 RVBARADDR 캡처 타이밍 및 기준
A55 아키텍처에서 `RVBARADDR`은 코어 외부(보통 SoC의 System Configuration 영역)에서 들어오는 입력 신호 묶음입니다.

- **캡처 시점:** 프로세서에 인가된 **리셋 신호(nCPUHALTRESET 등)가 해제되는 시점(Rising Edge)**에 외부 핀의 전위 상태를 읽어 내부 `RVBAR_EL3` 레지스터에 저장합니다.
- **작동 원리:** 
    1. 시스템 설계자(SoC Designer)는 부트로더가 위치한 주소를 하드웨어적으로 고정하거나, 특정 제어 레지스터에 연결해둡니다.
    2. 코어가 리셋 상태에 있는 동안 이 주소 신호는 안정화되어 있어야 합니다.
    3. 리셋이 풀리는 순간, 코어는 이 주소를 '낙점'하고 해당 주소로 점프(PC 설정)합니다.
- **용도:** 멀티코어 환경에서 각 코어마다 다른 시작 주소를 부여하거나, 웜 리셋 후 일반 부팅 경로가 아닌 '전환 전용 핸들러'로 바로 점프하게 함으로써 효율적인 실행 상태 전환을 가능케 합니다.

---

## 5. 결론 및 시사점

Cortex-A53에서 A55로의 진화는 단순히 성능의 문제가 아니라, **리셋 관리의 주도권이 개별 코어에서 DSU라는 중앙 집중식 관리 체계로 넘어갔음**을 의미합니다. 

- **AArch32/64 전환:** 이제 외부 Warm Reset Request 핀을 기다리는 대신, 소프트웨어가 `RMR_EL3`을 설정하고 **WFI**를 통해 코어를 정지시키면, 내부의 DSU와 PPU가 협력하여 보이지 않는 곳에서 리셋 시퀀스를 완수합니다.
- **설계 효율성:** 이러한 방식은 SoC 레벨에서 복잡한 리셋 배선을 줄여주며, 전력 관리 효율을 극대화합니다.
- **개발자 주의사항:** A55 기반 시스템을 제어할 때는 리셋 요청 후 반드시 하드웨어가 상태를 정리할 시간을 주는 **WFI 시퀀스**를 누락하지 않는 것이 안정적인 상태 전환의 핵심입니다.
---

## References

- [Arm Cortex-A55 Technical Reference Manual](https://developer.arm.com/documentation/100442/latest)
- [Armv8-A Architecture Reference Manual](https://developer.arm.com/documentation/ddi0487/latest)
- [DynamIQ Shared Unit Technical Reference Manual](https://developer.arm.com/documentation/100453/latest)

댓글

이 블로그의 인기 게시물

Vim 9.2 릴리즈 총정리: 더 빠르고 강력해진 텍스트 편집의 제왕

폐쇄망 SoC 설계자를 위한 가볍고 빠른 Vim 최적화 가이드

에이전트 시대를 위한 터미널 cmux 가이드: 설치부터 AI 활용까지