jtwjs Dev Wiki
  • DEV_ROAD
    • 💪🏻 생존하기
    • Week 1
      • 개발 환경 세팅
      • 타입스크립트
      • 리엑트
      • Testing Library
      • Parcel & ESLint
    • Week 2
      • JSX
      • Virtual DOM
    • Week 3
      • React Component
      • React State
    • Week 4
      • Express
      • Fetch API & CORS
      • React Hook
      • useRef & Custom Hook
    • Week 5
      • TDD
      • React Testing Library
      • MSW
      • Playwrite
      • Snapshot
    • Week 6
      • Separtion of Concerns
      • Principle
      • DI, (Dependency Injection)
      • Reflect-metadata
      • TSyringe
      • External Store
      • Follow Redux
      • usestore-ts
      • useSyncExternalStore
    • Week 7
      • Routing
      • Routes
      • Router
      • Navigation
    • Week 8
      • Design System
      • Style Basics
      • CSS-in-JS
      • Styled-Components
      • Global Style & Theme
    • Week 9
      • 개발하기 전 준비
      • 상품 목록 페이지
      • 상품 상세 페이지
      • 장바구니 페이지
    • Week 10
      • 로그인
      • 로그아웃
      • 회원가입
      • 주문 목록 & 주문 상세
    • Week 11
      • 배송 정보 입력
      • 포트원 결제 요청
      • 배송 및 결제 정보 전달
    • Week 12
      • 관리자 웹사이트개발시작
  • DEV_NOTE
    • TypeScript
      • 기본적 문법
        • Enum
        • 다형성
          • Untitled
        • 구조적 타이핑
        • 제너릭 타입
        • 컨디셔널 타입
        • 함수 메서드 타이핑
        • infer로 타입스크립트의 추론 직접 활용
        • 재귀 타입
        • 템플릿 리터럴 타입
        • 추가적인 타입 검사 satisfies 연산자
        • 타입스크립트 건망증
        • 원시 자료형에도 브랜딩 기법 사용 가능
        • 타입 좁히기
        • 유용한 타입 만들기
        • 데코레이터 함수
        • 앰비언트 선언도 선언 병합이 된다.
        • 앰비언트 선언도 선언병합이 된다.
    • Testing
      • Unit Testing
      • 단위 테스트의 두 분파
      • 좋은 단위 테스트를 구성하는 4대 요소
      • 테스트 대역과 식별할 수 있는 동작
      • 단위 테스트 스타일
      • 가치 있는 단위 테스트를 위한 리팩토링
      • 통합 테스트
      • Cross Browsing Testing
      • 기능 테스트 종류
      • React Testing Pattern
      • 프론트엔드 테스트 입문
        • 테스트 범위
        • 단위 테스트 검증
        • Mock
        • UI 컴포넌트 테스트
        • 테스트 커버리지
        • 웹 통합 테스트
        • MSW
        • 스토리북
        • 시각적 회귀 테스트
        • E2E 테스트
        • Github Actions 설정
        • 깃허브 액션에서 E2E
      • 시프트 레프트
        • 테스트 기본중의 기본
        • 단위 테스트
        • 코드 복잡도
        • 리팩터링
        • 코드 리뷰
        • 통합 테스트 패턴
        • 시스템 테스트의 자동화
        • 탐색적 테스트
      • Test Tip
      • vitest
      • playwright
      • Test Data Generator
      • MSW
    • Algorithm
      • coding test
      • Data Structure
    • Next.js
      • Data Fetching
      • Hydration
      • Next 13
      • Optimization
      • Next 15
    • Tailwind
      • Tailwind CSS
      • Theme
      • Directives
      • Tool
      • Design System
    • Storybook
      • Storybook
      • CSF3
      • CDD
      • Headless Component
    • Funtional Programming
      • 함수형 프로그래밍
      • 참조 투명성
      • 부수효과
      • 함수 합성
      • 제너릭 타입 활용하기
      • 암묵적 입출력
      • 액션과 계산, 데이터
      • 계층형 설계
      • 호출 그래프
      • 함수형 설계
      • 불변성
      • 일급 함수
      • 함수형 도구
    • Git
      • Github Actions
      • Conflict
      • Branch 전략
    • Contents Format
      • Audio
    • 3D Graphic
      • 3D keyword
      • Three.js
      • Geometry
      • Material
      • Light
      • Camera
      • Decal
      • Rotation
      • Text
      • Shadow
      • Fog
      • Post Processing
      • Animation
      • Math
        • Vector Space
        • 벡터의 연산
        • 회전 계산
      • 3D 컨텐츠가 만들어지는 과정
      • R3F
      • Env
      • Scene
      • Transform
      • R3F
      • Interaction & Raycast
      • Rendering Algorithnm
      • Blender
      • Blender
    • Accessibility
      • 접근성이란
    • Interactive Web
      • Parallax
      • Canvas
      • requestAnimationFrame
      • Effect
      • HSL
      • React.js + Canvas
      • Matter.js
    • AWS
      • DevOps
      • Amplify
      • S3
      • 클라우드 컴퓨팅
        • 온프레미스와 클라우드
        • 클라우드 도입효과
        • 클라우드 컴퓨팅의 범위
        • 컴퓨팅 옵션
          • EC2 - Virtual Machin
          • ECS, EKS - Container
          • Lambda - Serverless
        • 네트워크 가상화
        • 스토리지
        • 데이터베이스
        • 데이터 수집
        • 머신 러닝 영역
        • IoT 영역
        • 블록체인 영역
      • 클라우드 아키텍처 설계
    • Network
      • Web Server & WAS
    • System Design
      • System Design
      • Component
      • 의존성을 배제한 개발
      • Error Handling
      • Architecture
        • 모노로틱 아키텍처
        • Clean Architecture
        • Layered Architecture
        • 이벤트 기반 아키텍처
      • 상황을 파악하는 메타인지
      • 중복 문제 해결하기
      • Monorepo Arhitecture
        • 모노레포 운영과 트러블슈팅
        • Module Federation
      • 코드 병목지점
      • API 대응
      • 공통 코드
      • Infra 구축
      • 모듈 기반의 개발 방식
      • Design System
        • 최소 수준의 아키텍처 설정
        • 더 효율적인 디자인시스템 만들기
        • 디자인 시스템과 UI 라이브러리 목적
        • 디자인 토큰
      • 효율적인 업무
        • 업무 프로세스 병목 파악
      • Clean Code
      • Design Pattern
        • CQRS Pattern
        • Strangler Fig Pattern
        • 데코레이터 패턴
        • 커맨드 패턴
        • 전략 패턴
        • 옵저버 패턴
      • A/B 테스팅
      • 대규모 리엑트 웹앱 개발
        • 복잡성 관리
        • 모듈성
        • 성능
        • 디자인 시스템
        • 데이터 패칭
        • 상태 관리
        • 국제화
        • 코드 조직화하기
        • 개인화 A/B 테스팅
        • 확장 가능한 웹 아키텍처
        • 테스팅
        • 툴링
        • 기술적 마이그레이션
        • 타입스크립트
        • 라우팅
        • 사용자 중심 API 디자인
        • 리액트 미래
    • Performance
      • React DevTools
      • Component 최적화
      • Page Load
      • API
    • MFA
      • MSA
      • MFA 도입하기
      • Monorepo
        • Monorepo Tool
        • Yarn Berry Workspace
        • Turborepo
      • MFA Composition
      • SPA 통합
      • Design System
      • Package Manager
        • Yarn
        • pnpm
      • Transpiler & Bundler
        • Babel
        • Rollup
        • esbuild
        • swc
        • Webpack
        • Vite
      • 분해와 통합을 위한 여러 기술 비교
    • State Management
      • Zustand
    • React v18
      • Automatic batching
      • Suspense
      • Transition
    • SEO
      • Search Engine Optimization
      • Open Graph Element
      • Metadata
    • FE Develop
      • Scrubbing
      • Clipboard
    • Refactoring
      • 리팩토링 깊게 들여다보기
      • 긴 코드 조각내기
      • 타입 코드 처리하기
      • 유사한 코드 융합하기
      • 데이터 보호
      • 코드 추가 및 제거
    • OAuth 2.0
    • Analytics
      • Mixpanel
    • ETC
      • VSCode
    • React Hook In Action
      • useContext & Provider
      • 커스텀 훅
      • 코드 분할하기 with Suspense, lazy
      • Suspense와 이미지 적재하기
      • useTransition, uesDeferredValue
      • SuspenseList
Powered by GitBook
On this page
  • 기술적 마이그레이션
  • 다양한 마이그레이션 전략
  • 마이그레이션 전략
  • 코드모드
  • 생성형 AI 역할
  1. DEV_NOTE
  2. System Design
  3. 대규모 리엑트 웹앱 개발

기술적 마이그레이션

Previous툴링Next타입스크립트

Last updated 2 months ago

기술적 마이그레이션

개발 과정에서 기술적 마이그레이션은 피할 수 없다.

앱이 성장하고 기술이 진화하면서 우리는 종종 기존 코드보다 새롭고 효율적인 기술 및 방법론에 맞는 코드로 마이그레이션 해야한다.

  • 기존 시스템, 앱, 혹은 데이터 셋의 스택, 플랫폼, 버전을 이동하는 프로세스를 가리킴

  • 성능, 유지보수성, 보안을 개선하거나 진화하는 업계표준과 발맞추기 위해 기술적 마이그레이션을 수행함

다양한 마이그레이션 예

  • 의존성, 라이브러리, 프레임워크 업그레이드 혹은 대체

  • 새로운 프로그래밍 언어 또는 플랫폼 이동

  • 테스팅, 모니터링, 디버깅을 위한 새로운 도구 혹은 방법론 도입

  • 성능, 유지보수성, 확장성 개선을 위한 기존 코드 리팩토링

  • 새로운 기능 혹은 비즈니스 요구사항을 지원하기 위한 앱 아키텍처 업데이트

다양한 마이그레이션 전략

좋은 마이그레이션

앱 코드를 완전히 새롭게 재작성하는 것

  • 모든 컴포너트가 새로운 프레임워크 혹은 기술로 완전히 이전되는것을 포함

  • 이 접근법을 활용하면 완전히 새롭게 시작, 현대적인 도구와 기법들로 장점을 취하고 보다 효율적으로 앱을 개발할수있게됨

  • 많은 시간과 노동이 소요되며, 앱 가용성 측면의 문제를 일으킴

  • 작은 프로젝트, 덜 중요한 앱, 자주 변경되지 않는 프로젝트에 적합

빠른 마이그레이션

완전히 재작성하는 접근법의 대안

  • 앱을 부분 혹은 조각으로 나누고 각 부분을 점진적으로 마이그레이션

교살자 애플리케이션

교살자 무화과가 기존 나무를 교살시키는 것과 비슷

  • 기존 웹 경계를 식별하고 새로운 프레임워크를 사용하여 새로운 기능을 추가함으로써 구식 시스템을 교살시키는 접근법

  • 통제된, 체계적인 방식으로 구식 컴포넌트를 새로운 컴포넌트로 점진적으로 대체함으로써 잠재적인 리스크를 줄임

  • 이 접근법을 따르려면 개발자들은 반드시 앱을 관련된 서로 다른 코드 조각으로 나눈뒤 이들을 새로운 컴포넌트로 감싸야함

  • 이 방법론은 어떤 동작도 추가하지 않고 기존 콘텐츠를 렌더링하는 컴포넌트를 생성할 수 있음

마이그레이션 전략

좋은 마이그레이션 전략은 이상적으로 포괄적이고 체계적인 접근법을 포함해야함

마이그레이션 범위를 이해

  • 마이그레이션 전에 마이그레이션 범위를 이해해야함

  • 마이그레이션할 컴포넌트 혹은 기능, 관련된 기술, 앱 아키텍처, 성능 및 사용자 경험에 미칠 영향을 식별

마이그레이션 계획 세우기

  • 범위를 식별한 후 계획을 세워야함

  • 수행 단계, 타임 라인, 필요한 리소스 정의 등이 포함됨

  • 실제적이고 달성할 수 있는 계획을 세우는 게 중요

  • 마이그레이션 복잡도와 잠재적인 리스크 어려움을 인지 및 고려해야함

잠재적인 마이그레이션 구현

  • 앱 중단 등의 혼란을 최소화하고 에러나 버그의 리스크를 줄이기 위해서는 점진적으로 구현해야함

  • 힌 번에 작은 부분만 마이그레이션하고 각 조각을 충분히 테스트하고 배포한 뒤 다음 단계 진행

성능 모니터링 및 최적화

  • 마이그레이션 프로세스를 진행하는 동안 앱 성능을 모니터링하고 최적화하는 것이 중요

  • 지연 로딩과 코드 분할 같은 기법을 구현해 새롭게 마이그레이션한 코드와 컴포넌트의 성능을 개선해야함

충분히 테스트

  • 테스팅은 모든 기술적 마이그레이션에서 대단히 중요

  • 각 컴포넌트를 충분히 테스트한 뒤 다음 단계 진행

  • 통합 테스트를 통해 컴포넌트들이 함께 올바르게 기능하는것을 보장해야함

이해관계자들과 소통

  • 진행하는 동안 최종 사용자, 개발자, 관리자를 포함한 모든 이해관계자와 소통해야함

  • 마이그레이션 진행에 대한 정기적인 업데이트를 제공하고, 질문이나 우려사항이 발생하면 이를 해결하고, 피드백을 제공함으로써 마이그레이션이 비즈니스와 사용자의 니즈를 만족시키고 있음을 보장해야한다.

코드모드

앱 코드 변경 프로세스를 자동화하는 스크립트를 뜻함

코드 수정 프로세스를 크게 간소화시킴

  • 코드베이스를 스캔하고 필요한 변경을 자동 수행함으로써 마이그레이션의 특정 측면을 자동화 가능

  • 구문 업데이트, 변경 사항 임포트, 구성 파일 업데이트 등을 수행

  • 프레임워크, 라이브러리 메이저 버전 사이에서 마이그레이션할 때 특히 유용

  • 변경의 많은 부분을 자동화함으로써 프로세스를 빠르고, 더 일관성 있고 에러가 덜 발생하도록 도움

  • 뿐만 아니라, 코드 리팩터링이나 여러 코드베이스에 모범 사례를 적용하는 테스크에도 유용하게 사용

예시: 모든 상대 임포트를 절대 임포트로 변환하기

// XYZ를 상대 경로로 임포트하기
import XYZ from '../../../../compoenents/XYZ'

// 절대 경로로 임포트하기
import XYZ from '.src/components/XYZ'
  • 발견: 상대 경로 임포트 구문을 가진 모든 파일을 식별

  • 경로 분석: 현재 파일 경로와 상대 임포트 경고를 분석하고 절대 경로를 계산

  • 대체: 상대 경로를 계산하는 절대 경로를 대체

jscodeshift -t ./absolute-import-codemode-transform.js src/**/*.js

생성형 AI 역할

생성형 AI는 코드 생성, 코드 자동완성, 코드 번역 같은 기능 제공하여 마이그레이션에 큰 도움을 줌

  • 생성된 코드는 항상 최적이거나 정확한것이 아니므로 개발자가 직접 리뷰하고 수정해야한다.

  • 사람의 전문성을 대신하는것이 아닌 보조하는 목적으로만 사용해야한다.

코드 생성

  • 자연 언어 프롬프트를 기반으로 새로운 코드를 생성

  • 수동으로 전체 코드베이스를 재작성하지 않아도 됨

코드 자동완성

  • 부분적으로 작성된 코드를 자동 완성 가능

  • 마이그레이션 과정에서 간극을 채우거나 기존 코드를 새로운 언어나 프레임워크에 맞게 조정해야할 때 유용

코드 번역

  • 한 프로그래밍 언어를 다른 프로그래밍 언어로 코드를 번역할 수 있다.

에서 유래

코드모드 스크립트가 준비되면 툴킷을 사용해 여러 JS/TS 대상으로 스크립트 실행

https://www.smashingmagazine.com/2021/07/migrate-jquery-nextjs/
교살자 무화과 패턴
Phenax가 작성한 스크립트
jscodeshift