From d223510198fc0a86bd668a30143fb94b8e8c820e Mon Sep 17 00:00:00 2001 From: Hyowon Yang Date: Mon, 27 Oct 2025 16:25:26 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BB=A8=ED=85=8C=EC=9D=B4=EB=84=88=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../deploy-actions-cicd-guide-back.md | 10 + .../deploy-actions-cicd-guide-front.md | 11 + .claude/commands/deploy-build-image-back.md | 2 + .claude/commands/deploy-build-image-front.md | 2 + .claude/commands/deploy-help.md | 55 ++ .../deploy-jenkins-cicd-guide-back.md | 10 + .../deploy-jenkins-cicd-guide-front.md | 11 + .claude/commands/deploy-k8s-guide-back.md | 12 + .claude/commands/deploy-k8s-guide-front.md | 14 + .../deploy-run-container-guide-back.md | 11 + .../deploy-run-container-guide-front.md | 12 + deployment/container/Dockerfile-backend | 25 + deployment/container/build-image.md | 365 +++++++++++++ deployment/container/run-container-guide.md | 493 ++++++++++++++++++ 14 files changed, 1033 insertions(+) create mode 100644 .claude/commands/deploy-actions-cicd-guide-back.md create mode 100644 .claude/commands/deploy-actions-cicd-guide-front.md create mode 100644 .claude/commands/deploy-build-image-back.md create mode 100644 .claude/commands/deploy-build-image-front.md create mode 100644 .claude/commands/deploy-help.md create mode 100644 .claude/commands/deploy-jenkins-cicd-guide-back.md create mode 100644 .claude/commands/deploy-jenkins-cicd-guide-front.md create mode 100644 .claude/commands/deploy-k8s-guide-back.md create mode 100644 .claude/commands/deploy-k8s-guide-front.md create mode 100644 .claude/commands/deploy-run-container-guide-back.md create mode 100644 .claude/commands/deploy-run-container-guide-front.md create mode 100644 deployment/container/Dockerfile-backend create mode 100644 deployment/container/build-image.md create mode 100644 deployment/container/run-container-guide.md diff --git a/.claude/commands/deploy-actions-cicd-guide-back.md b/.claude/commands/deploy-actions-cicd-guide-back.md new file mode 100644 index 0000000..794d662 --- /dev/null +++ b/.claude/commands/deploy-actions-cicd-guide-back.md @@ -0,0 +1,10 @@ +@cicd +'๋ฐฑ์—”๋“œGitHubActionsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ GitHub Actions๋ฅผ ์ด์šฉํ•œ CI/CD ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 \ No newline at end of file diff --git a/.claude/commands/deploy-actions-cicd-guide-front.md b/.claude/commands/deploy-actions-cicd-guide-front.md new file mode 100644 index 0000000..184aaa0 --- /dev/null +++ b/.claude/commands/deploy-actions-cicd-guide-front.md @@ -0,0 +1,11 @@ +@cicd +'ํ”„๋ก ํŠธ์—”๋“œGitHubActionsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ GitHub Actions๋ฅผ ์ด์šฉํ•œ CI/CD ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- SYSTEM_NAME: phonebill +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 \ No newline at end of file diff --git a/.claude/commands/deploy-build-image-back.md b/.claude/commands/deploy-build-image-back.md new file mode 100644 index 0000000..9893547 --- /dev/null +++ b/.claude/commands/deploy-build-image-back.md @@ -0,0 +1,2 @@ +@cicd +'๋ฐฑ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์ด๋ฏธ์ง€์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. \ No newline at end of file diff --git a/.claude/commands/deploy-build-image-front.md b/.claude/commands/deploy-build-image-front.md new file mode 100644 index 0000000..4c81118 --- /dev/null +++ b/.claude/commands/deploy-build-image-front.md @@ -0,0 +1,2 @@ +@cicd +'ํ”„๋ก ํŠธ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์ด๋ฏธ์ง€์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. \ No newline at end of file diff --git a/.claude/commands/deploy-help.md b/.claude/commands/deploy-help.md new file mode 100644 index 0000000..cc52548 --- /dev/null +++ b/.claude/commands/deploy-help.md @@ -0,0 +1,55 @@ +๋ฐฐํฌ ์ž‘์—… ์ˆœ์„œ + +## 1๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ž‘์„ฑ +### ๋ฐฑ์—”๋“œ +/deploy-build-image-back +- ๋ฐฑ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์ด๋ฏธ์ง€์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค + +### ํ”„๋ก ํŠธ์—”๋“œ +/deploy-build-image-front +- ํ”„๋ก ํŠธ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์ด๋ฏธ์ง€์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค + +## 2๋‹จ๊ณ„: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€์ด๋“œ ์ž‘์„ฑ +### ๋ฐฑ์—”๋“œ +/deploy-run-container-guide-back +- ๋ฐฑ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์‹คํ–‰๋ฐฉ๋ฒ•๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ACR๋ช…, VM ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +### ํ”„๋ก ํŠธ์—”๋“œ +/deploy-run-container-guide-front +- ํ”„๋ก ํŠธ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์‹คํ–‰๋ฐฉ๋ฒ•๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์‹คํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ์‹œ์Šคํ…œ๋ช…, ACR๋ช…, VM ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +## 3๋‹จ๊ณ„: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฐฐํฌ ๊ฐ€์ด๋“œ ์ž‘์„ฑ +### ๋ฐฑ์—”๋“œ +/deploy-k8s-guide-back +- ๋ฐฑ์—”๋“œ๋ฐฐํฌ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ K8s ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ACR๋ช…, k8s๋ช…, ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๋ฆฌ์†Œ์Šค ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +### ํ”„๋ก ํŠธ์—”๋“œ +/deploy-k8s-guide-front +- ํ”„๋ก ํŠธ์—”๋“œ๋ฐฐํฌ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ K8s ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ์‹œ์Šคํ…œ๋ช…, ACR๋ช…, k8s๋ช…, ๋„ค์ž„์ŠคํŽ˜์ด์Šค, ๋ฆฌ์†Œ์Šค, Gateway Host ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +## 4๋‹จ๊ณ„: CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž‘์„ฑ +### Jenkins CI/CD +#### ๋ฐฑ์—”๋“œ +/deploy-jenkins-cicd-guide-back +- ๋ฐฑ์—”๋“œJenkinsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ACR_NAME, RESOURCE_GROUP, AKS_CLUSTER, NAMESPACE ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +#### ํ”„๋ก ํŠธ์—”๋“œ +/deploy-jenkins-cicd-guide-front +- ํ”„๋ก ํŠธ์—”๋“œJenkinsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— SYSTEM_NAME, ACR_NAME, RESOURCE_GROUP, AKS_CLUSTER, NAMESPACE ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +### GitHub Actions CI/CD +#### ๋ฐฑ์—”๋“œ +/deploy-actions-cicd-guide-back +- ๋ฐฑ์—”๋“œGitHubActionsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— ACR_NAME, RESOURCE_GROUP, AKS_CLUSTER, NAMESPACE ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค + +#### ํ”„๋ก ํŠธ์—”๋“œ +/deploy-actions-cicd-guide-front +- ํ”„๋ก ํŠธ์—”๋“œGitHubActionsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค +- [์‹คํ–‰์ •๋ณด] ์„น์…˜์— SYSTEM_NAME, ACR_NAME, RESOURCE_GROUP, AKS_CLUSTER, NAMESPACE ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค \ No newline at end of file diff --git a/.claude/commands/deploy-jenkins-cicd-guide-back.md b/.claude/commands/deploy-jenkins-cicd-guide-back.md new file mode 100644 index 0000000..d14ddc4 --- /dev/null +++ b/.claude/commands/deploy-jenkins-cicd-guide-back.md @@ -0,0 +1,10 @@ +@cicd +'๋ฐฑ์—”๋“œJenkinsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ Jenkins๋ฅผ ์ด์šฉํ•œ CI/CD ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 \ No newline at end of file diff --git a/.claude/commands/deploy-jenkins-cicd-guide-front.md b/.claude/commands/deploy-jenkins-cicd-guide-front.md new file mode 100644 index 0000000..4c7dc11 --- /dev/null +++ b/.claude/commands/deploy-jenkins-cicd-guide-front.md @@ -0,0 +1,11 @@ +@cicd +'ํ”„๋ก ํŠธ์—”๋“œJenkinsํŒŒ์ดํ”„๋ผ์ธ์ž‘์„ฑ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ Jenkins๋ฅผ ์ด์šฉํ•œ CI/CD ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- SYSTEM_NAME: phonebill +- ACR_NAME: acrdigitalgarage01 +- RESOURCE_GROUP: rg-digitalgarage-01 +- AKS_CLUSTER: aks-digitalgarage-01 +- NAMESPACE: phonebill-dg0500 \ No newline at end of file diff --git a/.claude/commands/deploy-k8s-guide-back.md b/.claude/commands/deploy-k8s-guide-back.md new file mode 100644 index 0000000..e6f23bb --- /dev/null +++ b/.claude/commands/deploy-k8s-guide-back.md @@ -0,0 +1,12 @@ +@cicd +'๋ฐฑ์—”๋“œ๋ฐฐํฌ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ACR๋ช…: acrdigitalgarage01 +- k8s๋ช…: aks-digitalgarage-01 +- ๋„ค์ž„์ŠคํŽ˜์ด์Šค: tripgen +- ํŒŒ๋“œ์ˆ˜: 2 +- ๋ฆฌ์†Œ์Šค(CPU): 256m/1024m +- ๋ฆฌ์†Œ์Šค(๋ฉ”๋ชจ๋ฆฌ): 256Mi/1024Mi \ No newline at end of file diff --git a/.claude/commands/deploy-k8s-guide-front.md b/.claude/commands/deploy-k8s-guide-front.md new file mode 100644 index 0000000..8773bd4 --- /dev/null +++ b/.claude/commands/deploy-k8s-guide-front.md @@ -0,0 +1,14 @@ +@cicd +'ํ”„๋ก ํŠธ์—”๋“œ๋ฐฐํฌ๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋น„์Šค ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ์‹œ์Šคํ…œ๋ช…: tripgen +- ACR๋ช…: acrdigitalgarage01 +- k8s๋ช…: aks-digitalgarage-01 +- ๋„ค์ž„์ŠคํŽ˜์ด์Šค: tripgen +- ํŒŒ๋“œ์ˆ˜: 2 +- ๋ฆฌ์†Œ์Šค(CPU): 256m/1024m +- ๋ฆฌ์†Œ์Šค(๋ฉ”๋ชจ๋ฆฌ): 256Mi/1024Mi +- Gateway Host: http://tripgen-api.20.214.196.128.nip.io \ No newline at end of file diff --git a/.claude/commands/deploy-run-container-guide-back.md b/.claude/commands/deploy-run-container-guide-back.md new file mode 100644 index 0000000..e18d86c --- /dev/null +++ b/.claude/commands/deploy-run-container-guide-back.md @@ -0,0 +1,11 @@ +@cicd +'๋ฐฑ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์‹คํ–‰๋ฐฉ๋ฒ•๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ACR๋ช…: acrdigitalgarage01 +- VM + - KEYํŒŒ์ผ: ~/home/bastion-dg0502 + - USERID: azureuser + - IP: 4.218.10.89 \ No newline at end of file diff --git a/.claude/commands/deploy-run-container-guide-front.md b/.claude/commands/deploy-run-container-guide-front.md new file mode 100644 index 0000000..faca872 --- /dev/null +++ b/.claude/commands/deploy-run-container-guide-front.md @@ -0,0 +1,12 @@ +@cicd +'ํ”„๋ก ํŠธ์—”๋“œ์ปจํ…Œ์ด๋„ˆ์‹คํ–‰๋ฐฉ๋ฒ•๊ฐ€์ด๋“œ'์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. +ํ”„๋กฌํ”„ํŠธ์— '[์‹คํ–‰์ •๋ณด]'ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ˆ˜ํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ด ์ฃผ์„ธ์š”. +{์•ˆ๋‚ด๋ฉ”์‹œ์ง€} +'[์‹คํ–‰์ •๋ณด]'์„น์…˜ ํ•˜์œ„์— ์•„๋ž˜ ์˜ˆ์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”. +[์‹คํ–‰์ •๋ณด] +- ์‹œ์Šคํ…œ๋ช…: tripgen +- ACR๋ช…: acrdigitalgarage01 +- VM + - KEYํŒŒ์ผ: ~/home/bastion-dg0500 + - USERID: azureuser + - IP: 4.230.5.6 \ No newline at end of file diff --git a/deployment/container/Dockerfile-backend b/deployment/container/Dockerfile-backend new file mode 100644 index 0000000..37da239 --- /dev/null +++ b/deployment/container/Dockerfile-backend @@ -0,0 +1,25 @@ +# Build stage +FROM openjdk:23-oraclelinux8 AS builder +ARG BUILD_LIB_DIR +ARG ARTIFACTORY_FILE +COPY ${BUILD_LIB_DIR}/${ARTIFACTORY_FILE} app.jar + +# Run stage +FROM openjdk:23-slim +ENV USERNAME=k8s +ENV ARTIFACTORY_HOME=/home/${USERNAME} +ENV JAVA_OPTS="" + +# Add a non-root user +RUN adduser --system --group ${USERNAME} && \ + mkdir -p ${ARTIFACTORY_HOME} && \ + chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME} + +WORKDIR ${ARTIFACTORY_HOME} +COPY --from=builder app.jar app.jar +RUN chown ${USERNAME}:${USERNAME} app.jar + +USER ${USERNAME} + +ENTRYPOINT [ "sh", "-c" ] +CMD ["java ${JAVA_OPTS} -jar app.jar"] diff --git a/deployment/container/build-image.md b/deployment/container/build-image.md new file mode 100644 index 0000000..d861c9e --- /dev/null +++ b/deployment/container/build-image.md @@ -0,0 +1,365 @@ +# ๋ฐฑ์—”๋“œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ž‘์„ฑ ๊ฒฐ๊ณผ + +์ž‘์„ฑ์ผ: 2025-10-27 +์ž‘์„ฑ์ž: DevOps Engineer + +## 1. ๊ฐœ์š” + +KT ์ด๋ฒคํŠธ ๋งˆ์ผ€ํŒ… ํ”Œ๋žซํผ์˜ ๋ฐฑ์—”๋“œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์„ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ณผ์ •์„ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค. + +## 2. ์„œ๋น„์Šค ํ˜„ํ™ฉ + +### 2.1 ์ „์ฒด ์„œ๋น„์Šค ๋ชฉ๋ก (settings.gradle ๊ธฐ์ค€) + +``` +rootProject.name = 'kt-event-marketing' + +// Common module +include 'common' + +// Microservices +include 'user-service' +include 'event-service' +include 'ai-service' +include 'content-service' +include 'distribution-service' +include 'participation-service' +include 'analytics-service' +``` + +### 2.2 ๊ตฌํ˜„ ์ƒํƒœ + +| ์„œ๋น„์Šค๋ช… | ๊ตฌํ˜„ ์ƒํƒœ | JAR ๋นŒ๋“œ | ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ | ๋น„๊ณ  | +|---------|----------|---------|---------------|------| +| common | โœ… | N/A | N/A | ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ | +| user-service | โš ๏ธ | โŒ | โธ๏ธ | ์ปดํŒŒ์ผ ์—๋Ÿฌ (ํƒ€์ž… ๋ถˆ์ผ์น˜) | +| event-service | โœ… | โœ… | โธ๏ธ | Docker Desktop ํ•„์š” | +| ai-service | โŒ | โŒ | โŒ | ๋ฏธ๊ตฌํ˜„ | +| content-service | โœ… | โœ… | โธ๏ธ | Docker Desktop ํ•„์š” | +| distribution-service | โŒ | โŒ | โŒ | ๋ฏธ๊ตฌํ˜„ | +| participation-service | โœ… | โœ… | โธ๏ธ | Docker Desktop ํ•„์š” | +| analytics-service | โœ… | โœ… | โธ๏ธ | Docker Desktop ํ•„์š” | + +**๋นŒ๋“œ ๊ฐ€๋Šฅ ์„œ๋น„์Šค**: 4๊ฐœ (event-service, content-service, participation-service, analytics-service) + +## 3. JAR ํŒŒ์ผ ๋นŒ๋“œ + +### 3.1 bootJar ์„ค์ • ํ™•์ธ + +root `build.gradle`์— ์ด๋ฏธ ์„ค์ •๋˜์–ด ์žˆ์Œ: + +```gradle +// Configure bootJar task for each service +bootJar { + archiveFileName = "${project.name}.jar" +} +``` + +### 3.2 JAR ๋นŒ๋“œ ์‹คํ–‰ + +**๋ช…๋ น์–ด**: +```bash +./gradlew :analytics-service:bootJar :content-service:bootJar :event-service:bootJar :participation-service:bootJar :user-service:bootJar --no-daemon +``` + +**๋นŒ๋“œ ๊ฒฐ๊ณผ**: + +โœ… **์„ฑ๊ณตํ•œ ์„œ๋น„์Šค (4๊ฐœ)**: +- `analytics-service/build/libs/analytics-service.jar` +- `content-service/build/libs/content-service.jar` +- `event-service/build/libs/event-service.jar` +- `participation-service/build/libs/participation-service.jar` + +โŒ **์‹คํŒจํ•œ ์„œ๋น„์Šค (1๊ฐœ)**: +- `user-service`: ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒ + +**user-service ์ปดํŒŒ์ผ ์—๋Ÿฌ ์ƒ์„ธ**: +``` +UserController.java:93: error: incompatible types: UUID cannot be converted to Long + Long userId = principal.getUserId(); + ^ +UserController.java:109: error: incompatible types: UUID cannot be converted to Long + Long userId = principal.getUserId(); + ^ +UserController.java:126: error: incompatible types: UUID cannot be converted to Long + Long userId = principal.getUserId(); + ^ +AuthenticationServiceImpl.java:72: error: method createAccessToken in class JwtTokenProvider cannot be applied to given types; + required: UUID,UUID,String,String,List + found: Long,String,String,List + reason: actual and formal argument lists differ in length +``` + +**์กฐ์น˜ ํ•„์š”**: user-service์˜ User ID ํƒ€์ž…์„ Long์—์„œ UUID๋กœ ๋ณ€๊ฒฝ ํ•„์š” + +## 4. Dockerfile ์ž‘์„ฑ + +**ํŒŒ์ผ ์œ„์น˜**: `deployment/container/Dockerfile-backend` + +**๋‚ด์šฉ**: +```dockerfile +# Build stage +FROM openjdk:23-oraclelinux8 AS builder +ARG BUILD_LIB_DIR +ARG ARTIFACTORY_FILE +COPY ${BUILD_LIB_DIR}/${ARTIFACTORY_FILE} app.jar + +# Run stage +FROM openjdk:23-slim +ENV USERNAME=k8s +ENV ARTIFACTORY_HOME=/home/${USERNAME} +ENV JAVA_OPTS="" + +# Add a non-root user +RUN adduser --system --group ${USERNAME} && \ + mkdir -p ${ARTIFACTORY_HOME} && \ + chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME} + +WORKDIR ${ARTIFACTORY_HOME} +COPY --from=builder app.jar app.jar +RUN chown ${USERNAME}:${USERNAME} app.jar + +USER ${USERNAME} + +ENTRYPOINT [ "sh", "-c" ] +CMD ["java ${JAVA_OPTS} -jar app.jar"] +``` + +**ํŠน์ง•**: +- Multi-stage build (๋นŒ๋“œ ๋‹จ๊ณ„์™€ ์‹คํ–‰ ๋‹จ๊ณ„ ๋ถ„๋ฆฌ) +- OpenJDK 23 ์‚ฌ์šฉ +- ๋น„root ์‚ฌ์šฉ์ž(k8s)๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋ณด์•ˆ ๊ฐ•ํ™” +- JAVA_OPTS ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ JVM ์˜ต์…˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ +- linux/amd64 ํ”Œ๋žซํผ ์ง€์› + +## 5. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ + +### 5.1 ์‚ฌ์ „ ์กฐ๊ฑด + +โš ๏ธ **Docker Desktop ์‹คํ–‰ ํ•„์š”** + +์ด๋ฏธ์ง€ ๋นŒ๋“œ ์ „์— Docker Desktop์ด ์‹คํ–‰๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: + +1. Windows์—์„œ Docker Desktop ์‹คํ–‰ +2. ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด์—์„œ "Docker Desktop is running" ํ™•์ธ +3. ํ™•์ธ ๋ช…๋ น์–ด: `docker ps` + +### 5.2 ๋นŒ๋“œ ๋ช…๋ น์–ด + +#### analytics-service +```bash +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="analytics-service/build/libs" \ + --build-arg ARTIFACTORY_FILE="analytics-service.jar" \ + -f deployment/container/Dockerfile-backend \ + -t analytics-service:latest . +``` + +#### content-service +```bash +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="content-service/build/libs" \ + --build-arg ARTIFACTORY_FILE="content-service.jar" \ + -f deployment/container/Dockerfile-backend \ + -t content-service:latest . +``` + +#### event-service +```bash +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="event-service/build/libs" \ + --build-arg ARTIFACTORY_FILE="event-service.jar" \ + -f deployment/container/Dockerfile-backend \ + -t event-service:latest . +``` + +#### participation-service +```bash +docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="participation-service/build/libs" \ + --build-arg ARTIFACTORY_FILE="participation-service.jar" \ + -f deployment/container/Dockerfile-backend \ + -t participation-service:latest . +``` + +### 5.3 ์ผ๊ด„ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ + +๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ ํ•œ ๋ฒˆ์— ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”: + +**Windows (PowerShell)**: +```powershell +# ๋นŒ๋“œ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ๋ชฉ๋ก +$services = @( + "analytics-service", + "content-service", + "event-service", + "participation-service" +) + +# ๊ฐ ์„œ๋น„์Šค ๋นŒ๋“œ +foreach ($service in $services) { + Write-Host "Building $service..." -ForegroundColor Green + docker build ` + --platform linux/amd64 ` + --build-arg BUILD_LIB_DIR="$service/build/libs" ` + --build-arg ARTIFACTORY_FILE="$service.jar" ` + -f deployment/container/Dockerfile-backend ` + -t ${service}:latest . + + if ($LASTEXITCODE -eq 0) { + Write-Host "โœ… $service build completed" -ForegroundColor Green + } else { + Write-Host "โŒ $service build failed" -ForegroundColor Red + } +} +``` + +**Linux/Mac (Bash)**: +```bash +#!/bin/bash + +# ๋นŒ๋“œ ๊ฐ€๋Šฅํ•œ ์„œ๋น„์Šค ๋ชฉ๋ก +services=( + "analytics-service" + "content-service" + "event-service" + "participation-service" +) + +# ๊ฐ ์„œ๋น„์Šค ๋นŒ๋“œ +for service in "${services[@]}"; do + echo "Building $service..." + docker build \ + --platform linux/amd64 \ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${service}.jar" \ + -f deployment/container/Dockerfile-backend \ + -t ${service}:latest . + + if [ $? -eq 0 ]; then + echo "โœ… $service build completed" + else + echo "โŒ $service build failed" + fi +done +``` + +## 6. ์ด๋ฏธ์ง€ ํ™•์ธ + +### 6.1 ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€ ๋ชฉ๋ก ํ™•์ธ + +```bash +docker images | grep -E "analytics-service|content-service|event-service|participation-service" +``` + +**์˜ˆ์ƒ ์ถœ๋ ฅ**: +``` +analytics-service latest