Skip to content

Commit

Permalink
Change webpack config
Browse files Browse the repository at this point in the history
  • Loading branch information
samchon committed Nov 17, 2023
1 parent 1bc12bd commit 8ec5813
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 41 deletions.
32 changes: 16 additions & 16 deletions packages/payment-backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ GRANT SELECT ON ALL TABLES IN SCHEMA payments TO samchon_r;
### 2.3. Server
NodeJS 및 PostgreSQL 의 설치가 끝났다면, 바로 `payment-backend` 구동을 시작할 수 있다.

제일 먼저 `git clone` 을 통하여, 결제 서버 프로젝트를 로컬 저장소에 복사하도록 한다. 그리고 해당 폴더로 이동하여 `npm install` 명령어를 실행함으로써, 통합 결제 서버를 구동하는 데 필요한 라이브러리들을 다운로드 한다. 그리고 `npm run build` 명령어를 입력하여, 결제 서버의 소스 코드를 컴파일한다. 마지막으로 `npm run start` 명령어를 실행해주면, 결제 서버가 구동된다.
제일 먼저 `git clone` 을 통하여, 결제 서버 프로젝트를 로컬 저장소에 복사하도록 한다. 그리고 해당 폴더로 이동하여 `npm install` 명령어를 실행함으로써, 통합 결제 서버를 구동하는 데 필요한 라이브러리들을 다운로드 한다. 그리고 `npm run build` 명령어를 입력하여, 결제 서버의 소스 코드를 컴파일한다. 마지막으로 `npm run pm2:start` 명령어를 실행해주면, 결제 서버가 구동된다.

다만 `payment-backend` 를 구동하기 전, 각각 [PaymentConfiguration](https://github.com/samchon/payments/tree/master/src/PaymentConfiguration.ts)[PaymentGlobal](https://github.com/samchon/payments/tree/master/src/PaymentGlobal.ts) 클래스에 어떠한 속성들이 있는지 꼼꼼히 읽어보고, 귀하의 서비스에 알맞는 설정을 해 주도록 한다.

Expand All @@ -250,8 +250,8 @@ npm run build
npm run schema

# START SERVER & STOP SERVER
npm run start
npm run stop
npm run pm2:start
npm run pm2:stop
```

[![npm version](https://badge.fury.io/js/@samchon/payment-backend.svg)](https://www.npmjs.com/package/@samchon/payment-backend)
Expand Down Expand Up @@ -606,40 +606,40 @@ export async function test_fake_iamport_payment_webhook
- Build the new soure code
- Restart the backend server without distruption

이러한 무중단 업데이트를 달성하기 위해서는, 서버 인스턴스는 메인 백엔드 서버 프로그램을 시작하기 전, 업데이트 프로그램을 실행해 줄 필요가 있다. 만일 귀하의 서버 인스턴스가 ELB (Elastic Loader Balancer) 등을 통하여 여러 대로 구성되어있고, 현재의 인스턴스가 슬레이브라면, `npm run start:updator:slave` 명령어를 실행해주면 된다.
이러한 무중단 업데이트를 달성하기 위해서는, 서버 인스턴스는 메인 백엔드 서버 프로그램을 시작하기 전, 업데이트 프로그램을 실행해 줄 필요가 있다. 만일 귀하의 서버 인스턴스가 ELB (Elastic Loader Balancer) 등을 통하여 여러 대로 구성되어있고, 현재의 인스턴스가 슬레이브라면, `npm run pm2:start:updator:slave` 명령어를 실행해주면 된다.

반면 현재가 마스터 인스턴스라면, `npm run start:updator:master` 명령어를 실행하도록 한다.
반면 현재가 마스터 인스턴스라면, `npm run pm2:start:updator:master` 명령어를 실행하도록 한다.

```bash
#----
# RUN UPDATOR PROGRAM
#----
# THE INSTANCE IS MASTER
npm run start:updator:master
npm run pm2:start:updator:master

# THE INSTANCE IS SLAVE
npm run start:updator:slave
npm run pm2:start:updator:slave

#----
# MOUNT THE BACKEND SERVER UP
#----
npm run start real
npm run pm2:start real
```

### 4.2. Local Server
간혹 로컬에, [테스트 자동화 프로그램](#33-test-automation-program)이 아닌, `@samchon/payment-backend` 그 자체를 구동해야 할 때가 있다. 이럴 때는 아래와 같이 `npm run start local` 명령어를 입력해주면, 로컬에 `@samchon/payment-backend` 서버를 개설할 수 있다. 그리고 실행된 서버를 종료하려거든, `npm run stop` 명령어를 입력해주면 된다.
간혹 로컬에, [테스트 자동화 프로그램](#33-test-automation-program)이 아닌, `@samchon/payment-backend` 그 자체를 구동해야 할 때가 있다. 이럴 때는 아래와 같이 `npm run pm2:start local` 명령어를 입력해주면, 로컬에 `@samchon/payment-backend` 서버를 개설할 수 있다. 그리고 실행된 서버를 종료하려거든, `npm run pm2:stop` 명령어를 입력해주면 된다.

```bash
npm run start local
npm run stop
npm run pm2:start local
npm run pm2:stop
```

또한, 로컬 개발 환경에서의 무중단 업데이트가 얼마나 의미가 있겠냐만은, 어쨋든 `@samchon/payment-backend` 는 로컬 환경에서도 무중단 업데이트라는 것을 할 수 있다. 아래와 같이 로컬 서버를 구동하기 전 `npm run start updator:master` 명령어를 통하여 업데이트 관리자 프로그램을 구동하고, 향후 무중단 업데이트가 필요할 때마다 `npm run update local` 명령어를 입력해주면 된다.
또한, 로컬 개발 환경에서의 무중단 업데이트가 얼마나 의미가 있겠냐만은, 어쨋든 `@samchon/payment-backend` 는 로컬 환경에서도 무중단 업데이트라는 것을 할 수 있다. 아래와 같이 로컬 서버를 구동하기 전 `npm run pm2:start updator:master` 명령어를 통하여 업데이트 관리자 프로그램을 구동하고, 향후 무중단 업데이트가 필요할 때마다 `npm run update local` 명령어를 입력해주면 된다.

```bash
# START THE LOCAL BACKEND SERVER WITH UPDATOR PROGRAM
npm run start updator:master
npm run start local
npm run pm2:start updator:master
npm run pm2:start local

# UPDATE THE LOCAL SERVER WITHOUT DISTRUPTION
npm run update local
Expand Down Expand Up @@ -667,8 +667,8 @@ npm install
npm run build
pm2 stop all
npm run test -- --mode=dev
npm run start:updator:master
npm run start dev
npm run pm2:start:updator:master
npm run pm2:start dev
```

더하여 `@samchon/payment-backend` 를 개발하다보면, 문득 현재 가동 중인 `@samchon/payment-backend` 서버의 정보가 이리저리 궁금해질 수 있다. 가령 현재 가동 중인 dev 서버가 사용 중인 소스 코드가 무엇인지 알고 싶어, 해당 서버가 사용 중인 소스 코드의 commit 에 대한 hash code 를 알고싶을 수도 있는 법이다.
Expand Down
48 changes: 26 additions & 22 deletions packages/payment-backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"main": "lib/index.js",
"typings": "lib/index.d.ts",
"scripts": {
"test": "node bin/test",
"test:update": "node bin/test/manual/update",
"------------------------BUILDS------------------------": "",
"build": "npm run build:sdk && npm run build:main && npm run build:test",
"build:api": "rimraf packages/api/lib && nestia sdk && tsc -p packages/api/tsconfig.json",
"build:main": "rimraf lib && tsc",
Expand All @@ -16,28 +19,28 @@
"eslint": "eslint src && eslint test",
"eslint:fix": "eslint src --fix && eslint test --fix",
"prepare": "ts-patch install && npm run build:prisma",
"-----------------------------------------------": "",
"reset-for-debugging": "npm run test -- --reset true --include __nothing__",
"test": "node bin/test",
"test:update": "node bin/test/manual/update",
"generate:password": "npx ts-node src/test/manual/password",
"generate:uuid": "ts-node test/manual/uuid",
"reset:dev": "git pull && npm install && npm run build && npm run stop && npm run test -- --mode dev && npm run start:updator:master && npm run start dev",
"schema": "node lib/executable/schema",
"------------------------------------------------": "",
"------------------------WEBPACK------------------------": "",
"webpack": "rimraf dist && npm run build:prisma && webpack",
"webpack:start": "cd dist && node server",
"webpack:start:testing": "cd dist && node server testing",
"webpack:start:updator:master": "cd dist && node updator-master",
"webpack:start:updator:slave": "cd dist && node updator-slave",
"------------------------DEPLOYS------------------------": "",
"revert": "node lib/executable/revert",
"start": "pm2 start lib/executable/server.js -i 0 --name payments-server-backend-server --wait-ready --listen-timeout 120000 --kill-timeout 15000 --",
"start:local": "pm2 start lib/executable/server.js -i 2 --name payments-server-backend-server --wait-ready --listen-timeout 120000 --kill-timeout 15000 -- local",
"start:updator:master": "pm2 start --name payments-server-backend-updator-master lib/executable/updator-master.js",
"start:updator:slave": "pm2 start --name payments-server-backend-updator-slave lib/executable/updator-slave.js",
"start:reload": "pm2 reload payments-server-backend-server",
"stop": "pm2 delete payments-server-backend-server",
"stop:updator:master": "pm2 delete payments-server-backend-updator-master",
"stop:updator:slave": "pm2 delete payments-server-backend-updator-slave",
"schema": "node lib/executable/schema",
"start": "node lib/executable/server",
"start:testing": "node lib/executable/server local",
"start:updator:master": "node lib/executable/updator-master",
"start:updator:slave": "node lib/executable/updator-slave",
"update": "node lib/executable/update",
"-------------------------------------------------": "",
"webpack": "webpack",
"prune": "npm ci --omit=dev --ignore-scripts && npm run build:prisma"
"--------------------------PM2--------------------------": "",
"pm2:start": "pm2 start lib/executable/server.js -i 0 --name payments-server-backend-server --wait-ready --listen-timeout 120000 --kill-timeout 15000 --",
"pm2:start:updator:master": "pm2 start --name payments-server-backend-updator-master lib/executable/updator-master.js",
"pm2:start:updator:slave": "pm2 start --name payments-server-backend-updator-slave lib/executable/updator-slave.js",
"pm2:start:reload": "pm2 reload payments-server-backend-server",
"pm2:stop": "pm2 delete payments-server-backend-server",
"pm2:stop:updator:master": "pm2 delete payments-server-backend-updator-master",
"pm2:stop:updator:slave": "pm2 delete payments-server-backend-updator-slave"
},
"repository": {
"type": "git",
Expand All @@ -63,6 +66,7 @@
"@typescript-eslint/eslint-plugin": "^5.26.0",
"@typescript-eslint/parser": "^5.26.0",
"cli": "^1.0.1",
"copy-webpack-plugin": "^11.0.0",
"copyfiles": "^2.4.1",
"iamport-server-api": "^5.1.2",
"nestia": "^5.0.3",
Expand All @@ -77,7 +81,7 @@
"typescript-transform-paths": "^3.4.6",
"webpack": "^5.89.0",
"webpack-cli": "^5.1.4",
"webpack-node-externals": "^3.0.0"
"write-file-webpack-plugin": "^4.5.1"
},
"dependencies": {
"@nestia/core": "^2.3.9",
Expand Down Expand Up @@ -107,4 +111,4 @@
"LICENSE",
"README.md"
]
}
}
44 changes: 41 additions & 3 deletions packages/payment-backend/webpack.config.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
const path = require("path");
const nodeExternals = require("webpack-node-externals");

const CopyWebpackPlugin = require("copy-webpack-plugin");
const WriteFilePlugin = require("write-file-webpack-plugin");
const { IgnorePlugin } = require("webpack");

const lazyImports = [
"@fastify/static",
"@fastify/view",
"@nestjs/microservices",
"@nestjs/websockets",
"class-transformer",
"class-validator",
];

// @reference https://tech-blog.s-yoshiki.com/entry/297
module.exports = {
// CUSTOMIZE HERE
entry: {
server: "./src/executable/server.ts",
"updator-master": "./src/executable/updator-master.ts",
},
output: {
path: path.join(__dirname, "dist"),
Expand All @@ -16,7 +28,6 @@ module.exports = {
},

// JUST KEEP THEM
externals: [nodeExternals()],
mode: "production",
target: "node",
module: {
Expand All @@ -31,4 +42,31 @@ module.exports = {
resolve: {
extensions: [".tsx", ".ts", ".js"],
},
plugins: [
new CopyWebpackPlugin({
patterns: [
{
from: ".env",
to: "[name][ext]",
},
{
from: "./node_modules/.prisma/client/*.node",
to: () => Promise.resolve("[path][name][ext]"),
},
],
}),
new WriteFilePlugin(),
new IgnorePlugin({
checkResource: (resource) => {
if (lazyImports.some((modulo) => resource.startsWith(modulo))) {
try {
require.resolve(resource);
} catch (err) {
return true;
}
}
return false;
},
}),
],
};

0 comments on commit 8ec5813

Please sign in to comment.