프로그래머스 데브코스 웹 풀사이클 20주차 1일차

geun·2024년 3월 24일
0

데브코스

목록 보기
69/79
post-thumbnail

웹 기반 문서 편집기 제작 프로젝트

BE 단위 테스트

단위 테스트 구현 예시

백엔드의 단위 테스트

• 독립적으로 테스트할 수 있는 함수/메서드들은 모두 테스트한다
• 몇 개의 모듈이 조합하여 결과를 만들어야 하는 경우가 많다
• 발생할 수 있는 요청 각각에 대한 테스트 케이스들을 마련하는 것이 합리적이다
• 대부분의 요청에 대해서는 데이터베이스 및 쿠키 등 상태를 가지는 객체가 결부되어 있다
• Mock 을 이용하여 테스트 대상을 분리하는 것이 필요하다

라이브러리 설치

dependencies
  • cookie-parser
  • jsonwebtoken
devDependencies
  • jest
  • ts-jest
  • supertest
  • @types/cookie-parser
  • @types/jest
  • @types/jsonwebtoken
  • @types/supertest

테스트 절차의 재사용성 확보

Makefile 을 이용해서 테스트 단계의 재현성을 높임

• Dependency 활용 가능하다
• 이후 CI/CD 파이프라인 스크립트 구성에 활용한다
• build, package, deploy 등의 타겟을 추가하면서 변경을 한 곳에서 관리한다

FE 단위 테스트

사용자 인터페이스의 테스트

만족해야 하는 조건들

• HTML 요소들의 생성 (렌더링)
• "회원가입" 버튼의 클릭 🡪 onSubmit callback 의 호출
• input 요소들에 의한 올바른 인자의 전달
• "로그인" 링크의 클릭 🡪 /login 으로 이동
• "회원가입" 버튼의 클릭 (단, "비밀번호" 와 "비밀번호 확인" input에 입력된 내용의 불일치)
• onSubmit callback 호출 발생하지 않음
• alert 로 경고 메시지 발생

UI 테스트를 위한 Mocking

렌더링

• HTML 요소들을 DOM 형태로 출력 (response body 에 싣지 않고 테스트를 위한 DOM 구조 생성)
• src/utils/test/renderWithRouter.ts 파일에 renderWithRouter() 함수로 작성

브라우저 이벤트

• (예) window.alert() 등이 이용되면, 테스트 목적으로 이를 mocking 할 수 있는 기능이 필요
• src/setupTests.ts 파일에 DOM object 의 속성으로 선언

BE 의 컨테이너화

컨테이너의 구성 및 테스트

  • 베이스 이미지 결정
  • Dockerfile 을 이용하여 컨테이너 구성 설정, 컨테이너가 실행할 환경에 대하여 설정이 필요
  • 테스트
    1. Docker compose 를 이용하여 데이터베이스와 백엔드를 동일 네트워크 안에 실행
    2. Postman 을 이용하여 독립 테스트

Dockerfile 의 구성

  • 베이스 이미지 지정 ‒ node:18
  • BE 응용을 설치하고 실행할 위치 선정 ‒ /var/app
  • 컨테이너 빌드
    1. ${PROJECT_ROOT}/backend/package*.json 을 이용하여 프로덕션 의존성 설치
    2. RUN npm ci --omit=dev
    3. Typescript 소스 빌드 결과를 복사
  • 기본 환경변수 설정 🡨 컨테이너가 응용을 실행할 환경에 맞추는 것이 좋겠음
    1. BE 가 요청 수신할 포트 (PORT)
    2. Database: host, port, database, user, password
    3. CORS_ALLOWED_ORIGIN

데이터베이스 초기화

  • 테스트용 데이터베이스 (내용) 구성
    1. 앞서 “데이터베이스 설계” 강의에서 소개한 초기화 파일들을 적용
    2. DB_HOST 가 localhost 이기 때문에 mysql CLI 에서 "--protocol tcp" 옵션 필요
  • 절차
    1. docker compose up ‒d
    2. mysql 클라이언트 이용하여 (계정: root, port: 3032) 초기 데이터베이스 셋업
    3. mysql 클라이언트 이용하여 (계정: prgms, port: 3032) 데이터베이스 상태 확인
    4. docker compose down

테스트를 위한 BE 실행

• docker compose up ‒d
• Healthcheck 완료하기를 대기
• Postman 을 이용한 테스트
• docker compose down

FE 의 컨테이너화

환경변수의 적용

  • "REACTAPP" 으로 시작하는 셸 환경변수를 window._ENV 객체에 저장
  • /var/app/build/env.js 파일로 생성
  • Docker entrypoint 에서 셸 스크립트의 형태로 실행

테스트 절차

  • docker compose up ‒d
  • 테스트
  • docker compose down

로컬 클러스터에 시험 배포

Frontend

Backend

환경 구성 및 배포 방식 요약

ProductionLocal Test
DB 접근 방식DNS 이용k8s service discovery 이용
JWT 쿠키 설정SSL 가정
sameSite: "lax"
secure: false
SSL 없음
sameSite: "none"
secure: true
배포에 적용하는 방법Terraform IaCkubectl + manifest

BE 실행 환경 적용

  • k8s 의 ConfigMap 을 이용
  • namespace: prgms-notes (이하 모든 객체에 적용)

FE 의 실행 환경 설정

  • REACT_APP_API_BASE_URL 을 지정
  • 컨테이너의 환경변수로 전달
  • 컨테이너가 실행할 때, docker-entrypoint.sh 의 실행에 의하여 /var/app/build/env.js 파일 생성
  • React 응용이 실행할 때 window.ENV 객체에 REACT_APP 으로 시작하는 환경 변수를 저장
  • ${PROJECT}/frontend/src/settings.ts 에 지정한 바에 따라 환경변수를 적용

0개의 댓글