API 요청을 보낼 시 사용되는 Axios의 baseUrl을 예로 들면서 환경변수의 설정 방법을 보도록 하자.
우리 서비스에서는 Nuxt 플러그인에서 axios.interceptors를 통해 API 요청을 할 baseUrl을 미리 설정해 둔다. 이 때의 baseUrl은 로컬에서는 .env에서 세팅한다.
# .env
API_BASE_URL=https://api-base-url.exam.ple
이를 nuxt.config.js
에서 process.env를 통해 접근하여 Nuxt 어플리케이션 내에서 공개적으로 사용할 수 있도록 publicRuntimeConfig
속성을 통해 환경 변수로 설정한다.
// nuxt.config.ts
export default {
publicRuntimeConfig: {
API_BASE_URL: process.env.API_BASE_URL,
},
}
// plugin/api.ts
export default function ({ $config }: Context, inject: any): void {
const apiInstance = axios.create({
baseURL: $config.API_BASE_URL
})
inject('apiInstance', apiInstance)
}
로컬이 아닌 배포 환경에서는 .env 파일이 .gitignore에 설정되어 있으므로 쿠버네티스에서도 환경변수에 접근할 수 있도록 yaml 파일에 설정해 준다.
# deploy/config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
namespace: default
data:
API_BASE_URL: <https://api-base-url.exam.ple>
예를 들어 직접 API 요청을 테스트하고 싶은 경우를 보자. API 요청을 보내고 싶을 때는 요청할 API의 baseUrl을 설정해 주어야 한다. 이는 다음과 같이 cypress.config.ts
의 setupNodeEvents() 함수를 사용하여 테스트 코드 내에서 직접 사용할 수 있다.
// cypress.config.ts
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
setupNodeEvents(on, config) {
config.env.API_BASE_URL = '<https://api-base-url.exam.ple>'
return config
}
})
// cypress/e2e/login.cy.ts
describe('[로그인] 사용자는 로그인 페이지에서 로그인할 수 있습니다.', () => {
it('[로그인] API 테스트', () => {
cy.visit('/login')
cy.request('POST', `${Cypress.env('API_BASE_URL')}/login`, {
email: '[email protected]',
password: 'example123!',
})
})
})
하지만 늘 테스트 코드에서 미리 설정한 환경 변수를 사용할 수 없는 경우도 있다. 사용자 동작을 테스트하는 코드의 경우가 그 사례이다.
예를 들어보자. 버튼을 클릭하였을 때 API를 요청하고, 만약 요청이 성공하였으면 다른 페이지로 이동하는 테스트가 있다고 하자.
// cypress/e2e/login.cy.ts
describe('[로그인] 사용자는 로그인 페이지에서 로그인할 수 있습니다.', () => {
it('[로그인] 로그인을 시도하여 성공하면 메인 페이지로 넘어갑니다.', () => {
cy.visit('/login')
cy.get('[data-cy="email"]').type('[email protected]')
cy.get('[data-cy="password"]').type('example123!')
cy.get('[data-cy="submit"]').click()
cy.url().should('include', '/main')
})
})
이 테스트 코드에는 Cypress config 파일에서 설정된 env를 사용하는 코드가 없다. 단지 직접 해당 어플리케이션에 접속하여 로그인 제출 버튼을 클릭하는 동작만 있을 뿐이다. 그러므로 이 땐 Cypress에서 설정된 환경변수가 아닌 어플리케이션 자체에 설정된 baseUrl 환경변수를 가져와 사용하게 된다.