구글 안티그래비티 완전 분석 — 모델·요금제·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...

[Python] try / except 예외처리

 Python은 C와는 달리 예외처리를 위한 기본기능이 제공된다. 이를 이용하면 에러가 발생하는 상황에도 코드가 멈추지 않고 예외처리로 지정된 동작을 수행하고 다음 단계로 넘어 갈 수 있다. 기본적인 형태는 아래와 같다.

try :
	# 기본 동작 코드
except :
	# try 밑의 코드에 에러가 발생하였을때 실행할 코드


하지만 위와 같이 사용하는 것은 권장되지 않는데 그건 모든 에러코드를 예외처리 하기 때문에 반드시 봐야 할 에러를 넘어 갈 수 있기 때문이다. 그렇기 때문에 오히려 예외 객체를 이용해서 에러메세지를 출력해주는 것이 좋다. 샘플 코드는 아래와 같다.

try :
	# Error Code
except Exception as e:
	print(f"Error code: {e}")

이 코드 또한 모든 에러에 대해서 예외처리가 진행되지만 첫번째와 다른점은 as를 이용해서 예외객체 "e"를 할당 할 수 있다는 점이다. 이를 출력하면 error의 종류와 어디서 에러가 발생했는지 유추 할 수 있다.


잠깐 위 print문에서 ""앞에 붙어있는 f를 설명해보면, 이는 python 3.6 이후에서부터 지원하기 시작한 기능이며, f-string이라고 불리운다. 이를 이용하면 {}안에 변수를 직접 입력해 출력이 가능해진다.  즉, f-string을 사용하기 위해서는 f""와 같은 형태로 기술되어야 하며, 출력에 대한 대표적인 2개 케이스와 함께 비교구문을 보여주면 아래와 같다.

txt = "Code"
print("Test {}".format(txt))
print("Test %s"%(txt))
print(f"Test {txt}")

위 3개의 print는 모두 같은 결과를 출력한다. 하지만 가독성과 함께 편리함에 있어서는 f-string이 간결해짐을 알 수 있다. 또한 %포멧팅이나 str.format() 메서드보다 동작속도가 더 빠르다고 한다.

참고로, {}안에서는 연산도 가능하다. (예를들어 a + b 와 같은 형태로 말이다)


다시 본문으로 돌아오면 Errorcode를 적어주면 다양한 에러를 처리 할 수 있으며, 발생할 수 있는 에러에 대해서 의도적으로 처리하는 것이 가능하다. 아래의 예시 파일을 봐보자.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except ZeroDivisionError as e :
    print(f"Error Code: {e}")
except ValueError as e :
    print(f"Error Code: {e}")

위 코드의 경우는 산술적으로 에러가 나오는 0으로 나누기를 하는 경우에 대한 에러코드, 그리고 str -> int로 변환할때 발생하는 에러에 대해서 예외처리를 진행한 것이다. 이와 같이 except 구문은 1개만 존재 할 수 있는게 아니라 여러개가 존재 할 수 있다. 또한 에러객체 "e"를 받아서 출력함으로써 문제가 발생한 부분을 정확히 알 수 있으며 디버깅에 유용한 기능을 제공한다.

하지만 위와 같이 각각의 errorcode를 받는 경우도 있지만, 이걸 묶어서 하나의 except에서 여러개의 errorcode를 받는 방법도 존재한다.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except (ZeroDivisionError, ValueError) as e :
    print(f"Error Code: {e}")

try / except의 구문은 위처럼 여러개의 except가 들어갈 수 있지만 else와 finally 또한 들어 갈 수 있다.

x = "3"
y = "0"
try :
    print(f"{int(x) // int(y)}")
except ZeroDivisionError as e :
    print(f"Error Code: {e}")
except ValueError as e :
    print(f"Error Code: {e}")
else :
	# 예외가 발생하지 않았을 때 실행되는 코드
finally :
	# 예외 발생여부와 상관없이 무조건 실행되는 부분


위와 같이 try except else finally를 이용하면 다양한 에러들에 대해서 처리가 가능한 코드를 만들 수 있다.

댓글

이 블로그의 인기 게시물

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

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

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