이전글들
[ AWS + Serverless.js ] AWS람다 + 서버리스 로 배포하기!
1. serverless 설치 및 AWS연결
https://burning-camp.tistory.com/38
2. 환경설정
https://burning-camp.tistory.com/39
테스트 코드 작성
test/utils/db 디렉토리에 dbmanager.test.js 파일을 만든다.
const dbClient = require('serverless-mysql')({
config: {
host: 'localhost',
user: 'mj',
password: 'asdf12',
port: 3306,
database: 'testdb',
},
})
test('DB Connection', () => {
expect(typeof dbClient === 'object').toBe(true)
})
test('Query', async () => {
await dbClient.connect()
const result = await dbClient.query(` SELECT 2*4 AS number `)
expect(result[0].number).toBe(8)
await dbClient.end()
})
DB에 connection이 정상적으로 된다는 걸 위의 테스트 코드로 파악 했음으로 실제 소스를 작성 해보자.
먼저 환경에 따라 config 내용을 변경할 수 있도록 /config/env.local.json 을 작성해 주자.
{
"database": {
"rds_hostname": "localhost",
"rds_username": "mj",
"rds_password": "asdf12",
"rds_port": 3306,
"rds_database": "testdb"
}
}
여기에 들어가는 내용은 환경 마다 다르므로 주의하도록 하자.
아까 작성한 dbmanager.test.js 의
const dbClient = require('serverless-mysql')({
config: {
host: 'localhost',
user: 'mj',
password: 'asdf12',
port: 3306,
database: 'testdb',
},
})
부분에 입력한 내용을 적으면 된다.
이제 src/utils/db 경로에 DBManager.js 파일을 만들어 주자.
import env from './../../../config/env.local.json';
// Jest 테스트시 process.env 설정에 env.local.json 파일을 읽게 하기 위해 설정한 부분임
if (process.env.MODE !== 'Serverless') {
process.env = Object.assign(process.env, {
RDS_HOSTNAME: env.database.rds_hostname,
RDS_USERNAME: env.database.rds_username,
RDS_PASSWORD: env.database.rds_password,
RDS_PORT: env.database.rds_port,
RDS_DATABASE: env.database.rds_database
})
}
// DBClient 개체
export const dbClient = require('serverless-mysql')({
config: {
host: process.env.RDS_HOSTNAME,
user: process.env.RDS_USERNAME,
password: process.env.RDS_PASSWORD,
port: process.env.RDS_PORT,
database: process.env.RDS_DATABASE
}
})
// DB Connect 이후 Query를 실행 하는 함수
export const executeQuery = async (_query, params) => {
try {
await dbClient.connect()
return await dbClient.query(_query, params)
} catch (err) {
throw err
} finally {
await dbClient.end()
}
}
// Jest 테스트시 process.env 설정에 env.local.json 파일을 읽게 하기 위해 설정한 부분임
if (process.env.MODE !== 'Serverless') {
process.env = Object.assign(process.env, {
RDS_HOSTNAME: env.database.rds_hostname,
RDS_USERNAME: env.database.rds_username,
RDS_PASSWORD: env.database.rds_password,
RDS_PORT: env.database.rds_port,
RDS_DATABASE: env.database.rds_database
})
}
// DBClient 개체
export const dbClient = require('serverless-mysql')({
config: {
host: process.env.RDS_HOSTNAME,
user: process.env.RDS_USERNAME,
password: process.env.RDS_PASSWORD,
port: process.env.RDS_PORT,
database: process.env.RDS_DATABASE
}
})
// DB Connect 이후 Query를 실행 하는 함수
export const executeQuery = async (_query, params) => {
try {
await dbClient.connect()
return await dbClient.query(_query, params)
} catch (err) {
throw err
} finally {
await dbClient.end()
}
}
이제 만들어준 DBManager.js를 이용한 새로운 DB테스트 코드를 작성해 보자
/test/utils/db/dbmanager_2nd.test.js 를 작성해 주자.
import { dbClient, executeQuery } from "./../../../src/utils/db/DBManager"
test('DB Connection 테스트', () => {
expect(typeof dbClient === 'object').toBe(true)
})
test('Query 테스트', async () => {
const result = await executeQuery(`SELECT 2*5 AS number`)
expect(result[0].number).toBe(10)
})
정상적으로 작동한다.
'IT,프로그래밍 > AWS' 카테고리의 다른 글
[Lambda + RDS] connect ETIMEDOUT ERROR 해결법 (0) | 2020.06.09 |
---|---|
[Lambda + AWS SDK S3] 람다로 S3 접근가능 url 가져오는법 (0) | 2020.05.26 |
[Azure + AWS] Azure Devops 파이프라인 에서 ECR로 push하기 (0) | 2020.04.20 |
[ AWS + Serverless.js ] 2. 환경설정 (0) | 2020.04.09 |
[ AWS + Serverless.js ] 1. serverless 설치 및 AWS연결 (0) | 2020.04.06 |