← 글 목록

notes

Test

인프라·개발 메모 테스트 페이지. 내용 확인용 기록.

이 페이지는 블로그/노트용으로 스택을 한곳에 모아 둔 실험 메모다. 본격 가이드라기보다, 프론트엔드 쪽에서 자주 붙이는 도구를 “왜 후보로 두지?” 수준으로만 적어 둔다.

  • 테스트는 Jest, UI 확인은 Storybook, GraphQL을 붙이면 Apollo Client를 후보로 둔다.
  • 전역 상태는 처음엔 Recoil을 봤지만 저장소가 보관 처리돼서 지금은 Zustand를 쓴다.
  • 모션은 Reanimated, 배포는 GitHub Actions로 트리거하고 Fastlane으로 스토어까지 올린다.

Jest

유닛·스냅샷용. React(와 React Native) 쪽에서 기본처럼 쓰이는 편이라, 컴포넌트나 유틸이 깨졌는지 빠르게 볼 때 둔다. 처음엔 설정만 해도 시간이 갔는데, 스냅샷이 의도치 않게 바뀌는 걸 몇 번 겪고 나서부터는 “무엇을 스냅샷으로 둘지”를 더 가린다. 요즘은 화면 전체 스냅샷보다 Testing Library로 “버튼을 누르면 문구가 바뀐다” 같은 동작을 확인하는 쪽이 덜 깨졌다.

유틸 테스트 예시
// formatPrice.test.js
import { formatPrice } from './formatPrice'

describe('formatPrice', () => {
  it('천 단위 쉼표를 붙인다', () => {
    expect(formatPrice(12000)).toBe('12,000원')
  })
  it('null이면 빈 문자열', () => {
    expect(formatPrice(null)).toBe('')
  })
})

Storybook

UI를 화면 단위로 따로 띄운다. 앱 전체 플로우를 안 타고도 버튼·카드·모달 상태를 맞춰 볼 수 있어서, 디자인 확인이나 회귀 체크할 때 편했다.

Apollo Client

GraphQL 클라이언트. 쿼리/뮤테이션과 캐시를 묶어 다룬다. REST만 쓰는 프로젝트면 필수는 아니고, GraphQL API를 붙일 때 로딩·캐시를 한곳에서 관리하고 싶을 때 후보로 둔다.

Recoil

React 전역 상태. Context만으로 깊어지는 전달이 거슬릴 때 atom 단위로 쪼개 보는 식으로 접근한다. 팀 표준이 Redux나 Zustand면 굳이 새로 안 넣어도 된다. 그리고 Recoil 저장소가 2025년 초에 보관(archive) 처리돼서, 새 프로젝트에는 더 안 넣는다. 같은 자리에 지금은 Zustand를 쓴다.

Reanimated 2 계열 애니메이션

네이티브 스레드 쪽에서 모션을 돌리는 쪽. 스크롤·제스처와 맞물릴 때 Animated만으로 버벅이면 여기를 본다. API는 메이저마다 갈린다. 2에서 들어온 useSharedValue, useAnimatedStyle, withTiming은 지금도 그대로고, 4부터는 New Architecture가 필수라 RN 버전부터 확인한다.

Github Actions + Fastlane

빌드·스토어 배포를 손으로 반복하지 않으려는 조합. Actions로 트리거하고 Fastlane으로 서명·업로드를 묶는 식이 흔하다. 키스토어와 인증서 경로는 프로젝트마다 다르니 Android, iOS 배포 메모와 같이 맞춘다.

태그를 밀면 Actions가 돌고, 그 안에서 Fastlane lane 하나만 부르는 식으로 두면 로컬에서도 같은 lane을 돌려 볼 수 있어서 편했다.

워크플로 뼈대
# .github/workflows/ios-beta.yml
on:
  push:
    tags: ['v*']
jobs:
  beta:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - run: bundle exec fastlane ios beta
        env:
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_API_KEY: ${{ secrets.ASC_API_KEY }}

위 여섯 가지는 유닛·UI·GraphQL·상태·모션·CI까지 한 바퀴 도는 실험 스택이다.