inblog logo
|
석우의 개발블로그

    9장 모던 리액트 개발 도구로 개발 및 배포 환경 구축하기

    강석우's avatar
    강석우
    Apr 06, 2024
    9장 모던 리액트 개발 도구로 개발 및 배포 환경 구축하기
    Contents
    Next.js로 리액트 개발 환경 구축하기9.2 깃허브 100% 활용하기깃허브 액션으로 CI 환경 구축하기직접 작성하지 않고 유용한 액션과 깃허브 앱 가져다 쓰기깃허브 Dependabot으로 보안 취약점 해결하기리액트 어플리케이션 배포하기NetlifyVercelDigitalOcean리액트 애플리케이션 도커 라이즈하기

    Next.js로 리액트 개발 환경 구축하기

    • pakage.json 파일 만들기

      • npm init 을 실행해 pakage.json을 만드는 CLI 실행.

      • 핵심 라이브러리 및 devDependencies 설치.

    • tsconfig.json 작성하기

      • 타입스크립트 작성을 위한 파일

    • next.config.js 작성하기

      • Nextjs 설정을 위한 파일

    • ESLint 와 Prettier 설정하기

    • 스타일 설정하기

    • 어플리케이션 코드 작성

    9.2 깃허브 100% 활용하기

    깃허브 액션으로 CI 환경 구축하기

    CI란?

    코드 중앙 저장소에서 여러 기여자가 기여한 코드를 지속적으로 빌드하고 테스트해 코드의 정합성을 확인하는 과정.
    이 과정의 핵심은 코드의 변경이 있을 때 마다 정합성을 확인하는 과정을 자동으로 실행해야 한다는 것. → 테스트, 빌드, 정적분석, 보안 취약점 분석 등

    이러한 환경을 구축하는 도구로 Jenkins, GithubAction 등이 있다.

    깃허브 액션의 기본 개념.

    • 러너 ( runner )

      • 파일로 작성된 깃허브 액션이 실행되는 서버로 특별히 지정하지 않으면 공용 깃허브 액션 서버를 사용.

    • 액션 ( action )

      • 러너에서 실행되는 하나의 작업 단위를 의미. yaml 파일로 작성된 내용을 하나의 액션으로 볼 수 있다.

    • 이벤트 ( event )

      • 깃헙 액션의 실행을 일으키는 이벤트.

      • pull_request, issues, push, schedule 등이 있다.

    • 잡 ( job )

      • 하나의 러너에서 실행되는 여러 스텝의 모음. 각 잡은 병렬로 실행.

    • 스텝 ( steps )

      • 잡 내부에서 일어나는 각각의 작업. 셀 명령어나 다른 액션 실행 가능. 병렬 아님.

    깃헙 액션 작성하기.

    1. 저장소의 루트에 .github/workflows 폴더를 생성하고 내부에 파일 작성

    2. 파일 확장자를 .yml 또는 .yaml 로 지정.

    3. 브랜치에서 푸시하고 PR 만들어 확인하기

    name: MD 생성 자동화
    
    on:
      push:
        branches: ["*"]
    
    jobs:
      create-pr:
        runs-on: ubuntu-20.04
    
        steps:
          - name: Check out the code
            uses: actions/checkout@v3
            with:
              fetch-depth: 0
              
          - name: Create Dynamic Pull Request
            env:
              GH_TOKEN: ${{ github.token }}
    
            run: |
              git config user.name "unchaptered"
              git config user.email "workstation19961002@gmail.com"
              
              chmod +x auto.sh
              ./auto.sh 
    • name

      • 액션의 이름

      • 필수 값은 아니지만 액션의 구별에 도움이 됨.

    • run-name

      • 액션이 실행될 때 구별할 수 있는 타이틀.

      • 필수 값은 아님

    • on

      • 필수 값이며 언제 해당 액션이 실행될 지 정의.

    • jobs

      • 필수 값으로 액션에서 어떤 잡을 수행할 지 정의.

      • 병렬로 실행됨.

    직접 작성하지 않고 유용한 액션과 깃허브 앱 가져다 쓰기

    • calibreapp/image-actions

      • 이미지를 최적화하는 깃허브 액션

      • PR로 올라온 이미지를 sharp 패키지를 이용해 무손실로 압축해서 커밋해준다.

    • lirantal/is-website-vulnerable

      • 특정 웹사이트를 방문해 해당 웹사이트의 라이브러리 취약접이 존재하는지 확인하는 깃허브 액션

    • Lighthouse CI ( 프로젝트 PR에 사용해보면 좋을 듯 )

      • 구글에서 제공하는 액션으로 라이트하우스를 CI 기반으로 실행할 수 있도록 도와주는 도구.

    깃허브 Dependabot으로 보안 취약점 해결하기

    의존성에 문제가 있다면 이에 대해 문제를 알려주고 해결할 수 있는 PR을 열어준다.

    유의적 버전이란?

    16.0.0 ( 주.부.수 )를 의미한다.
    16.0.1 → 기존 버전의 버그 패치. ( 수 )
    16.1.0 → 호환이 되며 새로운 기능 추가. ( 부 )
    17.0.0 → 16버전과 호환되지 않도록 제공하는 API 변경이 일어남. ( 주 )

    npm 버전 규칙

    react@16.0.0 : 버전 앞에 아무런 기호가 없으므로 해당 버전에 대해서만 의존.
    react@^16.0.0 : 16.0 ~ 17.0 미만의 모든 버전은 호환이 가능하다.
    react@~16.0.0 : 16.0.0 ~ 16.1.0 과 같은 패치 버전에 대해서만 호환된다.  

    하지만 위의 규칙들은 개발자들 간의 약속일 뿐 반드시 지켜지는 것은 아니다.

    의존성 관련 이슈를 방지하는 가장 좋은 방법은 의존성을 최소한으로 유지하는 것이다.

    리액트 어플리케이션 배포하기

    Netlify

    장점

    • 많은 자료들

    • 무료로 어느 정도 활용이 가능

    가격

    • 월 100GB 제한

    • 빌드 시간 300분 제한

    • 동시에 여러 개의 사이트 빌드 불가능

    Vercel

    가격

    • 월 100GB 제한

    • 이미지 최적화 1000개 제한

    • 서버리스 함수 실행시간 100GB , 함수의 실행 시간은 10초로 제한

    • 동시에 여러 개의 사이트 빌드 불가능

    • 배포 하루에 100개로 제한

    DigitalOcean

    Github Student Pack에 포함 되어있어 학생 계정으로 가입한 깃허브에 200달러 상당의 무료 크레딧이 제공된다.

    리액트 애플리케이션 도커 라이즈하기

    도커는 vercel, netlify 와 같은 특정 서비스에 종속적이지 않은 사이트를 배포하기 위해 도커에 이미지 상태로 애플리케이션을 준비해놓고 배포해놓는 방법이다.

    도커는 개발자가 모던 애플리케이션을 구축, 공유, 실행하는 것을 도와줄 수 있도록 설계된 플랫폼이다. 도커는 지루한 설정 과정을 대신해 주므로 코드를 작성하는 일에만 집중할 수 있다.

    여기서 지루한 설정 과정이란 운영체제 설치, Node.js 설치, 빌드 등을 말한다.

    애플리케이션을 ‘컨테이너’ 단위로 패키징하고 이 내부에서 실행될 수 있도록 도와준다.

    용어

    • 이미지

      • 컨테이너를 만드는 데 사용되는 템플릿

    • 컨테이너

      • 도커의 이미지를 실행한 상태를 컨테이너.

      • 독립된 공간으로 이미지가 목표하는 운영체제, 파일 시스템, 각종 자원 및 네트워크 등이 할당되어 실행할 수 있는 독립된 공간이 생성된다.

    • Dockerfile

      • 어떤 이미지를 만들지 정의하는 파일.

      • 이 파일을 빌드하면 이미지를 만들 수 있으며, 도커 이미지화 라는 작업이 Dockerfile을 만드는 것.

    • 태그

      • 이미지를 식별할 수 있는 레이블 값.

      • ubuntu : latest → 이미지 이름 = ubuntu, 태그= latest

    • 리포지터리

      • 이미지를 모아두는 저장소.

      • 다양한 태그로 지정된 이미지가 모여있는 저장소

    • 레지스트리

      • 리포지터리에 접근할 수 있게 해주는 서비스.

      • 대표적인 서비스로 도커 허브 등이 있음.

    Share article

    석우의 개발블로그

    RSS·Powered by Inblog