- Google Chrome 팀에서 13년간 근무한 엔지니어링 리더 Addy Osmani가 전문 소프트웨어 엔지니어를 위한 AI 기반 개발 방법론을 소개
-
Vibe coding은 빠른 프로토타이핑에는 유용하지만, 프로덕션 품질 소프트웨어 개발에는 엔지니어링 원칙과 인간의 감독이 필수적
- AI 도구 활용 시 명세 기반 개발, 테스트 작성, 코드 이해를 통해 품질을 담보하고, 모델의 사고 과정을 검토하여 생성된 코드를 완전히 파악해야 함
- LLM은 애플리케이션의 약 70%까지 빠르게 생성하지만 나머지 30%의 완성도, 보안, 유지보수성 확보를 위해서는 시니어 엔지니어의 전문성이 더욱 중요해짐
- 비동기 백그라운드 에이전트, 병렬 코딩 등 새로운 개발 워크플로우가 등장하며, 엔지니어는 비판적 사고와 코드 이해 능력을 유지하면서 AI를 활용하는 평생 학습자가 되어야 함
Vibe Coding vs. AI 보조 엔지니어링의 차이
-
Vibe coding은 AI와의 창의적 흐름에 완전히 몰입하여, 고수준 프롬프팅에 집중하고 코드 자체는 잊어버리는 방식
- AI 제안을 깊은 검토 없이 수용하고 빠른 반복 실험에 집중
- 프로토타입, MVP, 학습 목적으로 유용하며 속도와 탐색을 정확성과 유지보수성보다 우선시
-
AI 보조 엔지니어링은 AI를 강력한 협업자로 활용하되 엔지니어링 원칙을 대체하지 않는 접근법
- AI는 전체 소프트웨어 개발 생명주기에서 보일러플레이트, 디버깅, 배포 등을 돕는 force multiplier 역할
- 인간 엔지니어가 아키텍처 설계, 모델 검토, 모든 생성 코드 이해에 대한 책임을 유지
- 최종 제품의 보안, 확장성, 유지보수성을 보장하는 것은 엔지니어의 몫
- 소프트웨어 엔지니어링 전문성이 높을수록 LLM을 사용한 결과물의 질이 향상됨
- 프로덕션 품질 프로그래밍을 위해서는 다른 사람에게 완전히 설명 가능한 코드만 리포지토리에 커밋해야 함
Addy의 AI 도구 활용 방법
-
명세 기반 개발(Spec-driven development) 중심 접근
- 빌드할 내용에 대한 명확한 계획 수립이 핵심
- Vibe coding은 개인 도구, 일회용 프로젝트, 아이디어 시각화용으로 활용
- 프로토타입으로 비전을 명확히 한 후, 실제 요구사항을 문서화하여 LLM의 고품질 결과물 유도
-
테스트 작성을 통한 리스크 감소
- 최신 모델도 때로 복잡하거나 잘못된 코드를 생성할 수 있음
- 테스트로 작동을 증명하고 문제 발생 시 명확한 식별 가능
-
Chrome DevTools MCP 활용
- LLM에 브라우저에 대한 "시각"을 제공하여 렌더링, 콘솔 오류, 경고 등을 감지
- 브라우저를 루프에 포함시켜 피드백 루프 개선
- 새로운 모델, 도구, 플랫폼에 대한 지속적인 실험과 팀 간 인사이트 공유
- 심리적 안전성을 조성하여 함께 학습하는 문화 구축
Google에서의 AI 도구 관찰 및 학습
- Google의 검증된 소프트웨어 엔지니어링 원칙은 AI 시대에도 유효
- 품질과 실사(due diligence)에 대한 관심은 여전히 중요
-
프롬프트 엔지니어링과 컨텍스트 엔지니어링의 중요성
- LLM에서 최상의 결과를 얻기 위한 올바른 "주문(incantations)" 구성
- 컨텍스트 윈도우 최적화로 고품질 결과 확률 증가
- 프로젝트별 설명, 세부사항, 파일, 예제 등 LLM 학습 데이터에 없는 콘텐츠 포함
-
AI native 엔지니어로의 전환 촉진
- 문제 해결 전에 AI에게 먼저 시도하도록 하는 사고방식 훈련
- 평가 벤치마크, RAG vs. 파인튜닝 등 AI 전문성 구축
-
인간 감독의 중요성
- AI가 코드 작성과 리뷰를 모두 수행하면 실제로 무엇이 배포되는지 불확실해짐
- 증가하는 PR 속도로 인해 인간 리뷰가 병목 지점이 되는 현상 발생
- 코드 리뷰 모범 사례는 여전히 진화 중
Addy가 선호하는 도구들
-
Klein in VS Code를 주로 사용
- Cursor, GitHub Copilot도 많은 기능 제공
- 도구들이 보여주는 사고 과정(thinking log) 검토
- 솔루션 구축 과정에서 모델의 의사결정과 생성 코드를 확인
- PR 전에 코드를 검토하여 향후 유지보수 가능성 확보
- LLM이 문제 해결에 실패할 때 직접 디버깅할 수 있는 역량 유지
- 코드 작동 방식을 이해하지 못하면 정글에 던져진 것처럼 느껴짐
- 전문 엔지니어와 일반인의 차이
- 프롬프트만 입력하는 것은 누구나 가능
-
코드 작동 원리 이해, 모델 실패 시 수정 능력, 회의에서 명확한 설명 능력이 차별화 요소
70% 문제의 본질
- LLM은 작동하는 애플리케이션의 약 70%를 매우 빠르게 생성 가능하지만 나머지 30%에서 어려움을 겪음
-
마지막 30%의 구성 요소
- "Two steps back" 패턴: 한 프롬프트가 UI나 기능을 완전히 다시 작성하는 등 잘못된 방향으로 진행
-
숨겨진 유지보수 비용: 명확하지 않은 명세로 인해 책임을 LLM에 위임하면 수익 감소
-
보안 취약점: API 키 노출, XSS 문제 등 전체적 사고 부족으로 인한 문제
- Vibe coding으로 만든 PoC는 프로덕션 배포 전 재작성 필요
- 실제 사용자 기반을 다루는 코드베이스에서는 보안과 품질이 필수
-
경험 많은 엔지니어는 마지막 30%를 훨씬 쉽게 완료
- 주니어 엔지니어는 LLM에 계속 재프롬프팅하는 것 외에 다음 단계를 모르는 경우가 많음
-
비판적 사고와 문제 해결 마인드셋의 중요성 부각
- 코드를 읽고, 시스템을 이해하고, 모든 부분이 어떻게 연결되는지 파악하는 성실함은 여전히 필수
효율적인 LLM 사용을 위한 전술
-
프로젝트 관리자 마인드셋 채택
- 작업을 작고 검증 가능한 단위로 분해
- 모든 요구사항을 한 번에 던지면 효과적이지 않음
- 명확한 기대치 설정과 AI와의 반복 작업 준비
-
모듈화되고 테스트 가능한 코드 작성
- 코드 리뷰 시행 등 소프트웨어 엔지니어링 모범 사례는 AI 시대에도 유효
-
입출력 제약 조건 고려와 충분한 컨텍스트 제공
- 인간을 루프에 포함시키는 성실함 유지가 성공의 핵심
- LLM에 책임을 넘길수록 문제 발생 위험 증가
자율 에이전트 및 새로운 워크플로우
-
비동기 백그라운드 코딩 에이전트의 등장
- Jewels, Devin, Codex 등의 도구와 GitHub의 실험
- 백로그 일부를 위임하고 비동기적으로 구현되도록 하는 아이디어
- 현재 상태
-
테스트 작성/업데이트, 라이브러리 버전 마이그레이션 등에는 이미 효과적
- 다크 모드 추가 같은 작은 변경사항 위임에 적합
-
관리 과제
- 오케스트라의 지휘자로서 모든 작업을 관리하는 적절한 인터페이스 필요
- 동시에 관리할 수 있는 현실적인 작업 수 고려
- 인간의 주의력은 유한하므로 철저한 코드 리뷰를 위해서는 몇 가지 작업만 동시 처리 가능
-
Vibe designing의 진화
- Figma의 MCP를 통해 디자이너와 개발자의 협업 강화
- 디자이너가 비전을 기능적 프로토타입으로 전환하여 프로덕션화 가능한 코드에 근접
EM과 PM 역할의 변화
-
PM 역할
- 문제 프레이밍, 메트릭, 에이전트 정책에 더 많은 시간 투자
-
EM 역할
- 평가(evals), 안전성 검토, 팀이 AI를 자신 있게 활용할 수 있도록 지원
-
결과에 대한 책임은 변하지 않음
-
제품 엔지니어링에서 취향(taste)의 중요성
- 누구나 프롬프트로 유사한 기능을 만들 수 있으므로 차별화 요소는 취향
-
주니어 vs. 시니어
- AI가 하한선을 높이지만 상한선도 함께 상승
- 주니어는 더 빠르게 시작 가능
-
명세 작성, 작업 분해, 시스템 아키텍처 이해, 효과적인 리뷰 능력을 가진 시니어는 더욱 가치 있어짐
- 마지막 30%는 단순 업무가 아닌 레버리지
새로운 역할과 개발자 교육의 변화
-
전방 배치 엔지니어(Forward deployed engineers) 등 새로운 역할 부상
- 고객과 더 긴밀하게 협력하며 AI로 기능을 빠르게 구축하고 요구사항 피드백
- 개발자, PM, 디자이너 역할 간 경계 모호화 가능성
-
AI 엔지니어링 교육
- 고등학교와 대학에서 프롬프트 및 컨텍스트 엔지니어링 모범 사례 교육 필요성
-
시스템 설계와 엔지니어링 사고방식 유지 방안 모색
-
트리오 프로그래밍
- 주니어, 시니어, AI가 함께 작업
- 시니어가 AI 생성 코드를 설명하도록 요청하거나 시스템의 다른 부분과의 연결 방식 설명
AI 작업 시 비판적 사고의 중요성
- AI 도구 사용 시 수용의 용이함으로 인한 비판적 사고력 저하 위험
- 특별히 중요하지 않은 작업에서 Tab/Accept를 눌러 모든 것을 수용하는 경향
- 신뢰가 쌓이면서 비판적 검토 감소
-
코드 리뷰 병목 현상
- AI 생성 코드의 속도 증가로 인간 리뷰가 병목이 됨
- LGTM(Looks Good To Me) 남발 위험
-
대응 전략
- 특정 기능이나 요일에는 의도적으로 AI 없이 작업하여 비판적 사고력 유지
- 모든 주요 LLM 제공업체가 다운되면 어떻게 할지 고려
-
코드 작성 vs. 읽기
- 직접 코드를 입력하면 자체 검토가 이루어지고, 다른 사람이 작성자를 알고 검토
- AI 시대에는 읽기와 검토가 더 큰 비중 차지
-
AI를 코드 리뷰에 활용
- AI의 "승인"은 하나의 신호일 뿐
- CI/CD 통과, 테스트 성공 등과 마찬가지로 품질에 대한 개인적 관점 여전히 필요
- 여전히 작업의 20-30%는 AI 없이 수행하여 두뇌를 계속 사용
학습 도구로서의 LLM
-
새로운 코드베이스 이해를 위한 강력한 도구
- 첫 번째 작업이 가치 제공을 위해 새 기능을 프롬프트하는 것이 아니라 코드베이스 작동 방식 학습이어야 함
-
프로그래밍 개념, 프레임워크, 아키텍처 패턴 이해에 유용
-
다른 언어로 작성된 코드베이스 간 기능 이전 시 필수적
-
팀 문화 조성
- AI를 학습 도구로 사용하는 것이 괜찮다는 인식 확산
- 실험, 모범 사례 공유를 정기적으로 장려
-
신입 사원의 빠른 온보딩
- AI 도구가 24/7 신뢰할 수 있는 멘토 역할
- 시니어 엔지니어에게 하루 종일 질문하는 것보다 부담 없이 학습 가능
-
Claude Code의 학습 모드
- 설명 모드와 학습 모드 제공
- 일시 정지하고 사용자에게 특정 부분을 직접 수행하도록 요청
AI 도구의 진화와 기대치 설정
-
도구 진화의 역사
- 템플릿 다운로드 → CLI와 스캐폴딩 → AI 기반 부트스트래핑
- 각 단계마다 개발자 경험이 조금씩 개선
-
학습 데이터의 한계 인식
- GitHub의 permissive 라이선스 코드나 오픈 웹의 패턴 기반
-
최저 공통분모(lowest common denominator) 패턴 반영 가능성
- 최고 수준의 보안, 성능, 접근성은 보장되지 않음
-
Stack Overflow 복사-붙여넣기와의 유사성
- 과거: 이메일 검증 정규식 같은 것을 Stack Overflow에서 복사
- 현재: LLM이 유사한 패턴 생성하지만 엣지 케이스나 보안 문제 가능
-
제3자 라이브러리 vs. 직접 구현
- LLM으로 작은 버전을 직접 구현할 수 있지만 유지보수 책임 부담
- 라이브러리는 보안 문제 등에 대한 중앙 집중식 수정 가능
- 각 선택의 트레이드오프 고려 필요
-
낮은 기대치와 높은 통제력 유지가 핵심
우수한 소프트웨어 엔지니어의 정의 변화
-
평생 학습자(Lifelong learner) 중요성은 불변
- 프레임워크, 도구, 산업이 진화해도 새로운 것을 배우려는 개방성 필수
-
성장 마인드셋(Growth mindset)
- 새로운 모델, 도구, 플랫폼을 기꺼이 시도
- 실패를 통한 학습과 제약 조건 이해
-
리더십의 역할
- 리더가 학습에 개방적임을 보여주면 팀의 심리적 안전성 조성
- Addy는 매주 월요일 팀 내부 뉴스레터 작성
- 개인 프로젝트, 글, 생각 공유
- AI 및 AI 엔지니어링의 중요한 업데이트 선별
- 다른 임원들도 유용하게 활용
-
정보 과부하 시대의 큐레이션
- 소셜 네트워크에서 매 시간 근본적 변화가 발생하는 것처럼 느껴짐
- 리더가 실제로 중요한 것을 선별하여 팀에 안내
-
기술력 유지
- 논문, 백서, 블로그, 비디오, 강의 등을 지속적으로 읽고 시청
- 팀이 어디에 시간을 투자해야 할지 가이드
-
제품 개발과의 연결
- 코딩 워크플로우 개선 작업이 제품 고객 경험 개선에도 기여
즐겨 사용하는 도구와 추천 사항
-
즐겨 사용하는 프로그래밍 언어: JavaScript
- 개인적 선호보다는 누구나 웹에 빌드하고 배포할 수 있는 개방성 때문
- 게이트키퍼 없이 해방감 제공
-
현재 가장 좋아하는 도구: Bolt
- Vibe coding 스캐폴딩 도구
- 최근 커스텀 에이전트 지원 추가 (Claude Code 등 사용 가능)
- 고품질 결과물과 훌륭한 디자인
- Supabase, 인증 제공업체 등 통합 자동화 기능
- 설정 마찰 제거에 초점
-
추천 도서
- "The Software Engineer's Guidebook"
- "AI Engineering" by Chip Huyen - AI 엔지니어링의 기초적 측면 학습을 위한 책