Project

[Project/4th] 4. ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ์ธํ”„๋ผ ๊ตฌ์ถ• - SSH ์ ‘์†, Docker๋กœ ์ˆ˜๋™๋ฐฐํฌ

giraffe_ 2024. 4. 5. 00:39

[ํ”„๋กœ์ ํŠธ ์ผ์ง€] 4๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ - 1. ์„œ๋ฒ„ ์„ค๊ณ„ํ•˜๊ธฐ

[ํ”„๋กœ์ ํŠธ ์ผ์ง€] 4๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ - 2. ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์„ฑ

[ํ”„๋กœ์ ํŠธ ์ผ์ง€] 4๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ - 3. JPA Entity ๊ด€๊ณ„ ์„ค์ •ํ•˜๊ธฐ

 

 

 

 

์ €๋ฒˆ์ฃผ์— ์ง„ํ–‰ํ–ˆ๋˜ ์ผ์ด์ง€๋งŒ, ๋’ค๋Šฆ๊ฒŒ ์ž‘์„ฑ์„ ํ•œ๋‹ค. ๊ทธ๋™์•ˆ ์ง„ํ–‰ํ•œ ๊ฒŒ ๋งŽ์€๋ฐ ๋ฐ€๋ ธ๋‹ค๐Ÿฅฒ

 

 

 

 

 ํ˜„์žฌ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ API ๊ฐœ๋ฐœ์ด ์กฐ๊ธˆ์”ฉ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์™€์˜ API ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ๋ฐฐํฌํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค๋Š” EC2์—์„œ ๋ฐฐํฌํ•˜๊ธฐ๋กœ ํ–ˆ์ง€๋งŒ, ์•„์ง ์ถœ์‹œ ์ „์ด๋ผ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๋Š” 5์›”๊นŒ์ง€ ๊ฐœ๋ฐœํ•˜๋Š” ๋™์•ˆ ์ž ๊น ์“ธ ๊ฑฐ๋ผ์„œ ๋‹ค๋ฅธ ํŒ€์›์˜ GCP 1๋…„ ๋ฌด๋ฃŒ ์„œ๋น„์Šค๋กœ ๊ตฌ๋™ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

 ํŒ€์— ์ธํ”„๋ผ๋ฅผ ์ „๋‹ดํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†๋‹ค๋ฉด, ๋ฐฑ์—”๋“œ์—์„œ ์ธํ”„๋ผ๋„ ๊ฐ™์ด ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด์ „์— ์‹ธํ”ผ ํ”„๋กœ์ ํŠธ์—์„œ ์ธํ”„๋ผ๋ฅผ ๋‹ด๋‹นํ–ˆ๋˜ ๊ฒฝํ—˜์ด ๋„์›€์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. (๊ณ ์ƒํ•˜๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ์ธํ”„๋ผ..)

 

 

 

 

 

 

์•„ํ‚คํ…์ฒ˜


ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

 

 

 

 

 

ํ”„๋กœ์ ํŠธ ํ™˜๊ฒฝ


๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • OS : MAC OS(M2)
  • IDE : IntelliJ IDEA 2023.3.5 (Ultimate Edition) 
  • Server : Amazon corretto 17.0.10, Spring Boot 3.2.4
  • DB : MySQL 8.0.36
  • Deploy : Docker 25.0.3, Dockerhub
  • Git : Github

 

ํด๋ผ์šฐ๋“œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • Server : Google Cloud Platporm
  • OS : Ubuntu 20.04.6 LTS
  • Deploy : Docker 26.0.0, Dockerhub
  • DB : MySQL Latest

 

 

 

 

 

GCP ์ธ์Šคํ„ด์Šค ์ ‘์†ํ•˜๊ธฐ, ssh ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…


ํŒ€์›์ด ์ƒ์„ฑํ•œ GCP ํ”„๋กœ์ ํŠธ์— ๊ณต์œ  ๊ถŒํ•œ์„ ๋ฐ›์•˜๊ณ , ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ GCP ์ธ์Šคํ„ด์Šค์— ์ ‘์†์„ ํ•ด์•ผ ํ–ˆ๋‹ค.

ssh ์ ‘์†์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ‚ค๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ssh ์ ‘์†์„ ์œ„ํ•œ Termius ์„ธํŒ…์„ ํ–ˆ๋‹ค.

 

 

 

ํ‚ค ์ƒ์„ฑํ•ด์„œ GCP์— ๊ณต๊ฐœํ‚ค ๋“ฑ๋กํ•˜๊ธฐ

 GCP ssh ์ ‘์†์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ‚ค(๊ฐœ์ธํ‚ค, ๊ณต๊ฐœํ‚ค)๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ณต๊ฐœํ‚ค๋ฅผ GCP VM ์ธ์Šคํ„ด์Šค์— ๋“ฑ๋ก์„ ํ•ด์•ผ ํ•œ๋‹ค.

 

 

๊ฐœ์ธํ‚ค์™€ ๊ณต๊ฐœํ‚ค๋Š” ๋‚ด ์ปดํ“จํ„ฐ์—์„œ `ssh-keygen -C [์ด๋ฆ„]` ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

ํ‚ค ์ƒ์„ฑ

 

 

๊ทธ๋ฆฌ๊ณ  ์ƒ์„ฑ๋œ ๊ณต๊ฐœํ‚ค(`id_rsa.pub`)๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ GCP์— ๋“ฑ๋ก์„ ํ•ด์คฌ๋‹ค.

๊ณต๊ฐœํ‚ค ํŒŒ์ผ ํ™•์ธ

 

 

ssh ํ‚ค ๋“ฑ๋ก

 

 

 

 

 

 

Termius๋กœ SSH ์›๊ฒฉ ์ ‘์†

 ๊ธฐ๋ณธ ํ„ฐ๋ฏธ๋„๋กœ ssh ์ ‘์†์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งค๋ฒˆ ๋ช…๋ น์–ด ์ž…๋ ฅํ•˜๊ณ  ๋น„๋ฒˆ ์ž…๋ ฅํ•ด์„œ ์ ‘์†ํ•˜๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ๋‹ค.

Termius๋Š” ssh ์›๊ฒฉ ์ ‘์† ํ”Œ๋žซํผ์ธ๋ฐ, ์„œ๋ฒ„ host๋ž‘ ํ‚ค ๋“ฑ๋ก๋งŒ ํ•ด์ฃผ๋ฉด ํด๋ฆญ ํ•œ ๋ฒˆ๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ์ ‘์†์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  SFTP๋„ ์ œ๊ณตํ•˜์—ฌ ๋‚ด ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ๋„ ์‰ฝ๊ฒŒ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. + UI๊นŒ์ง€ ์ข‹์Œ

 

 

๊ฐœ์ธ ํ‚ค ๋“ฑ๋กํ•˜๊ธฐ

 

Termius์—์„œ ์ ‘์†์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค. ํ‚ค ์ƒ์„ฑํ•œ ํด๋”์—์„œ `cat ~/.ssh/id_rsa`๋กœ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

Termius๋กœ ์ ‘์†

 

 

 

 

 

๋„์ปค ์„ค์น˜ ๋ฐ DB ์„ค์น˜


 

 

 

 

 

๋„์ปค๋กœ ์„œ๋ฒ„ ๋ฐฐํฌํ•˜๊ธฐ


 

 CI/CD๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ๋“œ๋Š” ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋‚˜๋ฉด ๋‚˜์ค‘์— ๊ตฌ์ถ•ํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ์ผ๋‹จ ์ˆ˜๋™ ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ด์ „์— Docker๋กœ ์ˆ˜๋™๋ฐฐํฌ๋ฅผ ํ•ด๋ณธ์ ์ด ์žˆ์–ด์„œ ๊ธˆ๋ฐฉ ํ•  ์ค„ ์•Œ์•˜์œผ๋‚˜.. ๋‹ฌ๋ผ์ง„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(MAC OS๐Ÿ˜‡) ๋•Œ๋ฌธ์— ์• ๋ฅผ ๋จน์—ˆ๋‹ค.

 

 ๊ฒฐ๊ณผ์ ์œผ๋กœ CI/CD๋ฅผ ๋นจ๋ฆฌ ๋„์ž…ํ•ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋ ค๋‹ˆ ๊ท€์ฐฎ๋‹ค.

 

 ์ด์ „์— GitLab์— Jenkins๋ฅผ ์ด์šฉํ•ด์„œ CI/CD๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณธ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ Github์€ Github Action์„ ๋งŽ์ด ์“ด๋‹ค๊ณ  ํ•ด์„œ ์ด๊ฑธ ๋ฐฐ์›Œ์„œ ์ ์šฉํ•ด์•ผ ํ•˜๋‚˜ ์ƒ๊ฐ์ค‘์ด๋‹ค.

 

 

 

์ˆ˜๋™ ๋ฐฐํฌ ๊ณผ์ •

  • ๋กœ์ปฌ์—์„œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œํ•˜๊ธฐ
./gradlew build

 

 

 

  • ๋กœ์ปฌ์—์„œ ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build. -t [docker๊ณ„์ •๋ช…]/[ํ”„๋กœ์ ํŠธ๋ช…] .

 

 

๋‚˜์ค‘์— `docker run` ํ•  ๋•Œ, ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

 

The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested ...

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์ฐธ๊ณ  : [Docker] ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ ๊ด€๋ จ ์—๋Ÿฌ (linux/amd64)

 

 ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋งฅ๋ถ M ๊ณ„์—ด ์นฉ์ด Arm64 ์•„ํ‚คํ…์ฒ˜๋ผ์„œ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋„์ปค ์ด๋ฏธ์ง€๋„ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋กœ ๋นŒ๋“œ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

(๋งฅ๋ถ ๋•๋ถ„์—(?) ๋‹ค์–‘ํ•œ ํ˜ธํ™˜์„ฑ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๋ฉฐ CPU์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค)

 

 

docker build --platform linux/amd64 -t [docker๊ณ„์ •๋ช…]/[ํ”„๋กœ์ ํŠธ๋ช…] .

 

`--platform linux/amd64` ์˜ต์…˜์„ ์ถ”๊ฐ€๋กœ ์คฌ๋‹ค.

 

 

 

  • ๋กœ์ปฌ์—์„œ Docker Hub์— ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ
docker push [docker๊ณ„์ •๋ช…]/[ํ”„๋กœ์ ํŠธ๋ช…]

 

 

 

  • ์„œ๋ฒ„์—์„œ ๋„์ปค ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ
docker pull [docker๊ณ„์ •๋ช…]/[ํ”„๋กœ์ ํŠธ๋ช…]

 

 

 

  • ๋„์ปค ์ด๋ฏธ์ง€ ์‹คํ–‰
docker run --name [์ปจํ…Œ์ด๋„ˆ์ด๋ฆ„] -d -p [ํฌํŠธ๋ฒˆํ˜ธ]:[ํฌํŠธ๋ฒˆํ˜ธ] [docker๊ณ„์ •๋ช…]/[ํ”„๋กœ์ ํŠธ ์ด๋ฆ„]