Antigravity로 ATS‑최적화 AI 포트폴리오를 만든 방법: Nginx 지옥에서 Cloud Run까지
Source: Dev.to
About Me
저는 앙골라 루안다에 거주하는 AI 소프트웨어 엔지니어 Veríssimo Cassange입니다 🇦🇴. 기술 아키텍처가 사회적 영향을 어떻게 이끌어낼 수 있는지에 항상 매료되어 왔습니다. 일상은 주로 Python, 머신러닝을 다루며, 가족에게 Infrastructure as Code가 왜 흥미로운지 설명하는 일로 채워집니다.
이번 도전에서는 단순히 “예쁜” 사이트를 만들고 싶지는 않았습니다. 인재 채용 담당자에게는 고급스럽게 보이면서, 실제로는 ATS(지원자 추적 시스템)에 최적화된 포트폴리오, 즉 트로이 목마처럼 작동하는 포트폴리오를 원했습니다. ATS는 종종 재능 있는 엔지니어들을 일찍 걸러내기 때문이죠.
Portfolio
앱을 Google Cloud Run에 배포했습니다. 실시간 버전은 여기에서 확인할 수 있습니다:
🔗 실시간 포트폴리오:
How I Built It
The “ATS Algorithm” Strategy
포트폴리오를 데이터가 풍부한 문서로 취급했습니다. 프로젝트를 단순히 나열하는 대신, 메타데이터와 설명에 Generative AI, RAG, Docker, CI/CD와 같은 특정 키워드를 직접 삽입했습니다.
GitHub API는 프로젝트 뒤에 있는 “왜”를 제공하지 않으므로, 저는 저장소 데이터를 사용자 정의 목표와 기술 태그로 직접 보강했습니다. GitHub에서 가져온 데이터를 풍부하게 만들기 위해 로컬 매니페스트 시스템을 구축했습니다.
The Tech Stack
- Frontend: React 19 + Vite
- Styling: Tailwind CSS 4 (접근성을 고려한 글래스모피즘 디자인)
- Animations: Framer Motion (예: 부드러운 스크롤 진행 바 BPROGRESS)
- Deployment: Docker + Google Cloud Run
The Google AI Copilot
저는 Antigravity(Google의 AI‑first 개발 환경)를 두 번째 두뇌처럼 활용했습니다. “버튼을 클릭하면 사이트가 생성된다”는 수준이 아니라, 마치 시니어 엔지니어가 옆에 있는 듯한 경험이었습니다.
예를 들어, Antigravity는 nanobanana Pro를 사용해 모든 프로젝트에 일관된 전문 썸네일을 생성하도록 도와주었고, 시각적 스타일을 통일된 브랜드와 맞출 때까지 반복 작업을 수행했습니다.
What I’m Most Proud Of
1. Breaking (and Fixing) Docker for Cloud Run
배포가 가장 큰 골칫거리였습니다. 보안을 위해 Nginx를 비루트 사용자로 실행하고 싶었지만, Cloud Run의 파일시스템 제한 때문에 /var/cache/nginx에 접근할 때 권한 오류가 발생했습니다. 몇 시간에 걸친 디버깅 끝에 nginx.conf를 수정해 PID와 임시 파일을 /tmp에 두도록 했습니다.
# Fixing permissions for a non‑root Nginx user
RUN mkdir -p /var/cache/nginx /tmp/nginx && \
chown -R nginx:nginx /var/cache/nginx /tmp/nginx && \
chmod -R 755 /var/cache/nginx /tmp/nginx
Google Cloud Console에서 “Service is Healthy” 체크마크가 뜨는 순간은 정말 보람찼습니다.
2. The Project Modal System
방문자를 바로 GitHub로 리다이렉트하는 대신, 모달 시스템을 구축해 기술적 상세(기술 스택, 목표, 도전 과제)를 빠르게 제공하고 사용자가 코드를 탐색할지 결정하도록 했습니다. 이를 통해 참여도를 높일 수 있었습니다.
3. Localization and Impact
루안다 출신으로서 Frontier Tech Leaders – Angola와의 협업을 강조해 포트폴리오가 지역적 맥락을 반영하면서도 글로벌 기술 표준을 보여줄 수 있도록 했습니다.
Key Learnings
- AI as a Copilot: Antigravity를 사용하면서 디버깅 방식이 바뀌었습니다. StackOverflow를 검색하는 대신, 컨텍스트를 이해하는 어시스턴트가 Docker 멀티‑스테이지 빌드를 최적화하도록 도와주었습니다.
- Structure Matters: ATS 최적화는 단순히 “키워드 채우기”가 아니라 의미론적 HTML을 의미합니다. 적절한
‑사용과 가벼운 DOM 구조가 핵심입니다. - Trade‑offs: 헤더와 압축을 더 잘 제어하기 위해 단순 Node 서버 대신 Nginx를 선택했으며, 이는 Cloud Run의 파일시스템 제한과 씨름해야 하는 대가를 수반했습니다.