test-automation

7 개의 포스트

토스인컴 QA Platform: ‘누구나 테스트할 수 있는’ 도구의 시작 (새 탭에서 열림)

토스 QA 팀은 반복되는 테스트 데이터 생성과 복잡한 API 호출 문제를 해결하기 위해 기존 Swagger API를 GUI 기반으로 추상화한 'QA Platform'을 구축했습니다. 이 도구는 테스트의 진입 장벽을 낮춰 QA뿐만 아니라 모든 팀원이 품질 검증에 참여하게 함으로써 제품 개발 속도를 획기적으로 높이는 결과를 가져왔습니다. 단순히 테스트를 자동화하는 것을 넘어, 품질을 제품 설계 과정의 일환으로 내재화하여 팀 전체가 확신을 가지고 움직일 수 있는 환경을 조성한 것이 핵심입니다. **Swagger 기반의 접근성 개선 (Phase 1)** * Swagger에 흩어져 있는 테스트 API들을 한곳에 모으고, 복잡한 JSON 작성 없이 버튼 클릭만으로 실행할 수 있는 GUI를 도입했습니다. * 사용자의 숙련도에 따라 입력 방식을 이원화했습니다. 'Normal 모드'는 복잡한 필드를 숨겨 누구나 쉽게 쓰게 했고, 'Swagger 모드'는 QA 매니저나 엔지니어가 세부적인 파라미터를 제어할 수 있도록 설계했습니다. * 환경 스위칭, 최근 실행 값 저장, API 응답 값의 자동 복사 기능 등 사소하지만 빈번한 번거로움을 줄여주는 UX 요소를 배치해 심리적 장벽을 낮췄습니다. **자동화의 대중화와 통합 관리 (Phase 2 & 3)** * QA 팀 내부에서만 활용되던 기존의 자동화 스크립트를 플랫폼 내 컨트롤러로 이식하여, 개발자나 기획자도 버튼 하나로 자동화 테스트를 수행할 수 있게 했습니다. * 복잡한 환경 설정이나 스크립트 실행 지식 없이도 자동화 자산을 활용할 수 있게 되어, 검증의 주체가 QA 팀에서 제품 팀 전체로 확장되었습니다. * 외부 도구에 의존하는 대신 조직의 고유한 테스트 방식에 최적화된 통합 관리 시스템을 구축하여, 테스트 설계부터 실행 및 관리까지의 전 과정을 하나로 연결하고 있습니다. **품질 검증에서 품질 설계로의 관점 전환** * 테스트가 '시간을 내서 해야 하는 특별한 작업'이 아니라 '생각나면 바로 하는 일상'이 되면서, 제품의 병목 현상이 제거되고 의사결정 속도가 빨라졌습니다. * 개발자가 기능을 완성하자마자 직접 검증할 수 있는 환경이 마련됨에 따라, 품질은 마지막 단계의 체크리스트가 아닌 개발 흐름 속에 자연스럽게 녹아드는 요소가 되었습니다. * QA 팀은 단순 반복적인 테스트 데이터 세팅 작업에서 벗어나, 더 고도화된 비즈니스 로직 분석과 리스크 관리에 집중할 수 있는 환경을 확보했습니다. 테스트가 쉬워지면 제품의 속도는 자연스럽게 빨라집니다. 기술적인 고도화만큼이나 중요한 것은 "누가 하느냐"에 갇혀 있던 테스트 권한을 "누구나 할 수 있는 구조"로 만드는 것이며, 이를 통해 팀 전체가 품질에 대한 공동의 책임과 확신을 갖는 것이 실질적인 제품 경쟁력으로 이어집니다.

세금 환급 자동화 : AI-driven UI 테스트 자동화 일지 (새 탭에서 열림)

토스인컴의 복잡한 세금 환급 서비스 QA를 위해 1명의 매니저가 AI를 팀원으로 활용하여 4~5명 규모의 자동화 성과를 낸 과정을 다룹니다. AI 에이전트에게 코드 작성과 설계를 맡기고 사람은 문제 정의와 검증에 집중함으로써, 5개월 만에 35개의 고난도 E2E 테스트 시나리오를 성공적으로 구축하고 운영화했습니다. 이 실험은 기술적 난도가 높은 환경에서도 AI와의 협업을 통해 자동화 효율을 극대화할 수 있음을 입증했습니다. **AI 자동화 도입 배경과 도구 구성** * 복잡한 환급 플로우(15~20단계)와 빈번한 UI/정책 변경, 외부 연동 시스템의 불안정성 때문에 전통적인 수동 자동화 방식으로는 대응이 불가능했습니다. * 메인 개발자인 Claude Sonnet 4.5를 비롯해 Cursor(IDE 페어 프로그래밍), Codex(코드 분석) 등 각기 다른 강점을 가진 AI 도구들을 조합하여 사용했습니다. * AI를 SDET 에이전트(설계), 문서화 전문가(기록), Git 마스터(형상 관리)라는 세 가지 페르소나로 분리하여 역할 분담을 명확히 했습니다. **기술적 문제 해결과 아키텍처 고도화** * **Page Object Model(POM) 도입:** 중복 셀렉터 문제를 해결하고 유지보수성을 높이기 위해 AI와 협업하여 모든 페이지 요소를 객체화하는 POM 구조를 설계했습니다. * **React 타이밍 이슈 해결:** 요소가 화면에는 보이지만 이벤트 핸들러가 바인딩되지 않아 발생하는 클릭 실패를 해결하기 위해, UI 안정화와 상호작용 준비 상태를 분리해 감지하는 'Interaction Readiness' 전략을 구현했습니다. * **Fallback 클릭 로직:** 표준 클릭 실패 시 키보드 엔터 입력, 자바스크립트 직접 클릭 순으로 시도하는 안전한 클릭 함수를 만들어 테스트의 견고함을 높였습니다. * **동적 약관 처리:** 서비스별로 상이하고 복잡한 약관 동의 플로우를 AI가 자동으로 감지하고 처리하도록 설계하여, 약관이 변경되어도 테스트가 중단되지 않는 구조를 만들었습니다. **운영 효율화를 위한 협업 시스템 구축** * **문서화 및 일지 자동 생성:** 매일 커밋 기록을 기반으로 AI가 회고 일지와 가이드 문서를 작성하게 하여, 수십 분이 걸리던 기록 업무를 1~2분 내외의 검토 수준으로 단축했습니다. * **메신저 기반 리포팅 루프:** 테스트 결과, 실패 지점 스크린샷, 오류 로그(EventID 등)를 사내 메신저에 자동으로 연동하여 개발팀과의 빠른 논의가 가능하도록 환경을 조성했습니다. * **테스트 격리 및 리팩토링:** 수천 줄의 단일 파일을 분리하고 테스트 데이터(userNo) 충돌 방지 로직을 도입하여 자동화 품질을 관리 가능한 수준으로 끌어올렸습니다. 단순히 AI에게 코드를 짜게 하는 수준을 넘어, 아키텍처 설계와 운영 프로세스 전반을 AI와 함께 고민하는 'AI-First' 접근 방식은 리소스가 제한된 환경에서 QA 품질을 혁신적으로 높일 수 있는 실질적인 해법이 됩니다. 6개월간의 여정은 AI를 도구가 아닌 실제 팀원으로 대우할 때 자동화의 본질인 '안정적인 반복 실행'을 달성할 수 있음을 보여줍니다.

AI와 함께하는 테스트 자동화: 플러그인 개발기 | 우아한형제들 기술블로그 (새 탭에서 열림)

낮은 테스트 커버리지 문제를 해결하기 위해 AI를 활용한 테스트 자동화 도구를 개발하고 적용한 과정을 담고 있습니다. 처음에는 AI에게 모든 것을 맡기는 완전 자동화를 시도했으나 높은 컴파일 오류율로 인해 실패했고, 대신 플러그인이 구조적 템플릿을 생성하고 AI가 로직을 채우는 협업 모델을 통해 30분 만에 100개의 테스트 코드를 성공적으로 생성했습니다. 결과적으로 AI의 할루시네이션(환각) 문제를 개발 도구의 맥락 파악 능력으로 보완하여 운영 안정성을 확보할 수 있었습니다. **AI 에이전트 도입과 초기 한계** * 팀의 생산성을 위해 IntelliJ와 통합이 원활하고 프로젝트 전체 컨텍스트 이해도가 높은 Amazon Q를 도입했습니다. * 단순 AI 사용 시 매번 팀 컨벤션을 설명해야 하는 번거로움과 클래스당 약 10분의 소요 시간, 그리고 15% 정도의 빌드 오류가 발생하는 한계가 있었습니다. * 반복적인 프롬프트 작성과 의존성 수집 작업을 자동화하기 위해 IntelliJ 플러그인 개발을 결정했습니다. **플러그인 첫 버전의 실패와 문제 패턴** * 플러그인이 클래스 코드를 수집해 AI API로 직접 전체 테스트 코드를 생성하는 방식을 시도했으나, 컴파일 성공률이 10%에 불과했습니다. * 주요 실패 원인은 존재하지 않는 클래스를 참조하는 할루시네이션, Import 오류, 기존 테스트 코드를 덮어씌워 삭제하는 문제 등이었습니다. * 특히 실제 운영 환경의 멀티모듈 구조에서는 동일한 이름의 클래스가 여러 패키지에 존재하여 AI가 정확한 의존성을 판단하지 못하는 복잡성이 장애물이 되었습니다. **'컴파일 보장 템플릿'을 통한 해결** * AI에게 모든 생성을 맡기는 대신, 플러그인이 PSI(Program Structure Interface) 분석을 통해 정확한 의존성과 메서드 구조가 포함된 템플릿을 먼저 생성하도록 전략을 수정했습니다. * 플러그인은 팀의 테스트 컨벤션(Kotest, MockK 등)을 반영한 골격과 정확한 Import 문을 작성하여 컴파일 오류 가능성을 원천 차단합니다. * 이렇게 생성된 안전한 기반 위에서 Amazon Q가 구체적인 테스트 로직만 채워 넣게 함으로써 생성 정확도를 획기적으로 높였습니다. AI는 복잡한 프로젝트의 구조와 의존성을 파악하는 데 한계가 있으므로, 이를 플러그인과 같은 도구로 보완하는 '하이브리드 접근법'이 실질적인 생산성 향상의 핵심입니다. 단순히 AI에게 모든 것을 요청하기보다, AI가 가장 잘할 수 있는 '로직 구현'에 집중할 수 있도록 개발자가 정확한 맥락과 구조를 먼저 설계해 주는 도구를 구축하는 것이 권장됩니다.

토스인컴 세금 환급 서비스 : 빠른 속도에서 품질을 지키기 위한 E2E 자동화 여정 (새 탭에서 열림)

토스인컴은 빠른 배포 속도에 대응하기 위해 기존의 수동 검증과 복잡한 클래스 기반 POM(Page Object Model)에서 벗어나, 함수형 POM 중심의 자동화 시스템을 구축했습니다. 이를 통해 4시간 이상 소요되던 검증 시간을 20분(병렬 실행 시)으로 단축하고 테스트 성공률 100%를 달성하며, QA가 제품의 품질을 초기부터 설계하고 실행 속도를 높이는 핵심 동력으로 자리 잡았습니다. ### 클래스 기반 POM에서 함수형 POM으로의 전환 * **무상태(Stateless) 함수 설계**: 상태를 갖는 클래스 대신 `page` 객체를 입력받아 동작을 수행하고 다시 `page`를 반환하는 단순한 함수 구조를 채택했습니다. * **가독성 및 유지보수성 향상**: 테스트 코드를 '사람이 읽는 시나리오'처럼 작성할 수 있게 되었으며, 버튼 문구 등 UI 변경 시 수십 개의 파일 대신 POM 함수 한 곳만 수정하면 되도록 캡슐화했습니다. * **명확한 네이밍 컨벤션**: `goto`, `click`, `enter`, `verify` 등 동작 중심의 접두사를 사용하여 코드만 보고도 어떤 테스트 단계인지 직관적으로 이해할 수 있게 했습니다. ### 여정 중심의 단계 분리와 레고식 조립 * **사용자 여정 기반 설계**: 단순히 화면 단위로 나누지 않고, '로그인/약관', '공제 확인', '결제', '신고' 등 세금 환급의 4가지 핵심 단계로 파일을 분리해 관리합니다. * **독립적 모듈화**: 의료비, 신용카드, 인적공제 등 각 공제 항목을 독립된 함수로 만들어, 새로운 테스트 시나리오가 필요할 때 필요한 기능만 레고 블록처럼 조립해 빠르게 생성할 수 있습니다. ### 테스트 안정성을 높이는 기술적 전략 * **4단계 클릭 폴백(Robust Click)**: React 렌더링 타이밍 문제로 발생하는 클릭 실패를 방지하기 위해 'Enter 키 입력 → 일반 클릭 → Force 클릭 → JS 직접 실행' 순의 단계별 재시도 전략을 유틸리티화했습니다. * **최신 페이지 자동 감지**: 리다이렉트나 새 창 열림이 빈번한 환경에서 `getLatestNonScrapePage` 유틸을 통해 항상 유효한 최신 탭을 추적하고 `currentPage`를 갱신하여 페이지 닫힘 에러를 방지했습니다. * **네트워크 대기 최적화**: Playwright의 기본 `networkidle` 방식 대신, 타임아웃이 발생해도 테스트를 중단하지 않고 UI 앵커(텍스트, role 등)로 화면 준비를 판단하는 `waitForNetworkIdleSafely`를 구현했습니다. ### 자동화 도입이 가져온 성과 * **정량적 지표 개선**: 검증 시간 77% 감소, 테스트 커버리지 600% 증가, 코드 중복률 76% 감소 등 모든 지표에서 비약적인 발전을 이루었습니다. * **업무 문화의 변화**: 24시간 자동 검증 시스템을 통해 개발 완료 즉시 기능을 점검하고 결과를 슬랙으로 공유하며, QA는 단순 반복 검증이 아닌 세금 엔진의 금액 정합성 검증 및 성능 지표 분석 등 고부가가치 업무에 집중하게 되었습니다. **실전 팁** 가장 빈번하게 오류가 발생하는 구간(예: 로그인)부터 자동화를 시작하고, 추상화에 너무 매몰되기보다 누구나 읽고 고칠 수 있는 명료한 함수 구조를 유지하는 것이 중요합니다. 특히 페이지 전환이 일어날 때마다 최신 페이지 객체를 새로 할당하는 원칙만으로도 상당수의 자동화 실패를 예방할 수 있습니다.

100년 가는 프론트엔드 코드, SDK (새 탭에서 열림)

토스페이먼츠는 결제 연동의 복잡성을 해결하기 위해 SDK를 제공하고 있으며, 최근 V1의 한계를 극복하고 안정성과 확장성을 극대화한 V2 SDK를 구축했습니다. 가맹점의 다양한 런타임 환경과 예측 불가능한 요구사항에 대응하기 위해 단순한 기능 구현을 넘어 체계적인 아키텍처와 모니터링 시스템을 도입했습니다. 결과적으로 개발자에게는 쉬운 연동 경험을, 비즈니스에는 견고한 신뢰성을 제공하는 결제 생태계를 완성했습니다. **SDK 개발의 특수성과 V1의 한계** * **환경의 의존성:** SDK는 가맹점의 코드 내에서 실행되므로, 가맹점의 호출 빈도나 네트워크 상태에 직접적인 영향을 받습니다. 일례로 사용량 분석을 위해 추가한 로그 코드가 특정 가맹점의 잦은 호출과 맞물려 네트워크 병목 현상을 일으키고 서비스 전체를 다운시키는 사례가 발생했습니다. * **런타임 예측 불가능성:** 가맹점에서 잘못된 데이터 타입(예: String 대신 Number)을 전달할 경우 `startsWith` 같은 표준 메서드에서 에러가 발생하는 등, 일반적인 프론트엔드 개발보다 훨씬 방어적인 코딩이 요구됩니다. * **커뮤니케이션의 접점:** SDK는 단순히 API를 호출하는 도구가 아니라 가맹점 개발자와 만나는 기술적 창구이며, 가맹점의 수많은 커스텀 요구사항을 수용해야 하는 복잡성을 안고 있습니다. **안정성 확보를 위한 테스트와 모니터링** * **촘촘한 테스트 체계:** 로직 검증을 위한 300개 이상의 단위 테스트와 다양한 유즈케이스를 반영한 500개 이상의 E2E 통합 테스트를 통해 코드 수준의 안정성을 확보했습니다. * **Global Trace ID:** 프론트엔드부터 백엔드까지 결제 전 과정을 하나의 식별자로 추적하는 체계를 도입하여, 장애 발생 시 시스템 레이어 전체를 쉽게 파악할 수 있도록 했습니다. * **모니터링 CLI:** 배포 전후의 결제 성공률을 가맹점 및 런타임 환경(OS, 브라우저, 웹뷰 등)별로 비교 분석하는 자체 도구를 개발했습니다. 이를 통해 특정 환경에서 발생하는 결제 중단 현상을 실시간으로 탐지하고 즉각 대응합니다. **확장성을 위한 레이어드 아키텍처** * **조립 가능한 구조:** 특정 가맹점만을 위한 예외 처리가 `if`문으로 산재되어 코드 복잡도가 올라가는 문제를 해결하기 위해, 기능을 레고 블록처럼 독립적으로 구성했습니다. * **3계층 분리:** "변경의 원인"을 기준으로 코드의 경계를 명확히 나누어 관리합니다. * **Public Interface Layer:** 가맹점과 약속한 인터페이스를 검증하고 도메인 언어로 번역하는 역할 * **Domain Layer:** 핵심 비즈니스 로직과 결제 정책을 담당하는 중심부 * **External Service Layer:** 서버 API나 Web API 등 외부 의존성과의 통신을 담당하는 계층 * **관심사 격리:** 이러한 계층화를 통해 가맹점별 커스텀 요구사항이 추가되더라도 기존의 핵심 로직에 영향을 주지 않고 특정 블록만 교체하거나 확장할 수 있는 유연성을 확보했습니다. 성공적인 SDK 개발을 위해서는 단순히 편리한 기능을 제공하는 것을 넘어, 타사의 코드 환경에서도 견고하게 동작할 수 있는 방어적인 설계와 문제 발생 시 즉시 원인을 파악할 수 있는 관측성(Observability) 확보가 필수적입니다. 가맹점별 특이 케이스를 코드 전반에 흩뿌리기보다는, 명확한 레이어 구분을 통해 비즈니스 로직과 커스텀 로직을 분리하는 설계 원칙을 권장합니다.

PD1 AI 해커톤, 그 뜨거웠던 열기 속으로! (새 탭에서 열림)

PD1 해커톤 2025는 LINE 앱의 핵심 개발 조직인 PD1이 주관하여 AI 기술을 서비스에 접목할 혁신적인 아이디어를 발굴하고 기술적 가능성을 실험한 자리였습니다. 약 60명의 개발자가 참여해 48시간 동안 대화 경험 개선부터 업무 자동화까지 다양한 영역에서 AI 활용 방안을 제시하며 LINE 앱의 미래를 탐색했습니다. 이번 행사는 단순한 이벤트의 차원을 넘어 실제 서비스에 즉각 적용 가능한 수준 높은 기술적 성취를 확인했다는 점에서 큰 의미를 가집니다. **PD1 해커톤의 지향점과 조직적 배경** * LINE 앱의 iOS, Android 메신저 기능과 내부 플랫폼 개선을 담당하는 PD1 조직이 주도하여 실질적인 사용자 경험 변화를 목표로 삼았습니다. * AI 기술을 메시징, 콘텐츠, 업무 자동화에 필수적으로 도입해야 하는 산업 흐름에 발맞추어 기획되었습니다. * 혁신적인 AI 기술 확보, 일상적인 문제 해결, 그리고 내부 개발 생산성 향상이라는 세 가지 핵심 과제를 탐구했습니다. **AI 기반의 커뮤니케이션 및 콘텐츠 혁신** * **NextVoIP 팀 (VoIP x AI):** 1:1 및 그룹 통화의 음성 데이터를 실시간으로 텍스트로 변환(STT)한 뒤, AI 모델을 통해 보이스피싱 등 사고 예방, 대화 보조, 관련 콘텐츠 제안 기능을 구현했습니다. * **MELODY LINE 팀 (Music from Conversation):** 대화의 맥락과 감정을 AI로 분석하여 그 분위기에 맞는 멜로디를 자동으로 생성하는 '음악 기반 대화'라는 독특한 사용자 경험을 제시하여 최우수상을 수상했습니다. * 서비스 내 메시지 데이터를 AI로 분석해 즉석에서 해커톤 주제가를 작곡하는 등 기술과 예술을 융합한 창의적인 시도들이 돋보였습니다. **실무 직결형 AI 테스트 자동화 솔루션** * **IPD 팀 (AI 테스트 자동화 - 대상 수상):** 반복적인 QA 업무를 효율화하기 위해 AI가 테스트 케이스를 생성·관리하고, 자동 실행 및 실패 원인 분석까지 수행하는 시스템을 시연했습니다. * 현업에 즉시 투입 가능한 수준의 실용성과 완성도를 보여주었으며, 개발 이후 단계인 테스트 과정의 비용 절감 및 품질 향상 가능성을 입증했습니다. * 단순한 아이디어 제시에 그치지 않고 실제 프로젝트에 적용 가능한 구체적인 기술적 프레임워크를 선보여 참가자들의 높은 평가를 받았습니다. 이번 해커톤에서 도출된 QA 자동화나 VoIP 보안 강화와 같은 아이디어들은 실제 서비스의 안정성과 편의성을 높이는 데 중요한 이정표가 될 것입니다. 개발자들이 짧은 시간 내에 몰입하여 AI의 실용적 가치를 증명해낸 만큼, 여기서 얻은 기술적 자산들을 실제 LINE 앱 고도화 과정에 적극적으로 반영하고 지속적인 실험 환경을 구축하는 것을 추천합니다.