์ด์ ๊ธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ํ ๋ ํ๊ฒฝ๋ณ์๋ฅผ ํตํด์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ต๋๋ค.
์ด๋ฒ์๋ ํ๊ฒฝ๋ณ์ ๋์ Git Submodule์ด๋ผ๋ ๊ธฐ๋ฅ์ ํตํด์ ์ด๋ฌํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ง Git Submodule
๊น ๊ณต์ ๋ฌธ์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ๋์ด ์์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ํํ๋ค ๋ณด๋ฉด ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์๋ค.
ํจ๊ป ์ฌ์ฉํ ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ธ๋ถ์์ ๊ฐ๋ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋๊ฐ ๋ด๋ถ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ผ ์ ์๋ค.
์ด๋ฐ ์ํฉ์์ ์์ฃผ ์๊ธฐ๋ ์ด์๋ ๋ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ณ๊ฐ๋ก ๋ค๋ฃจ๋ฉด์๋ ๊ทธ ์ค ํ๋๋ฅผ ๋ค๋ฅธ ํ๋ ์์์ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
Atom ํผ๋๋ฅผ ์ ๊ณตํ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ก ๋ค์ด๋ณด์.
Atom ํผ๋๋ฅผ ์์ฑํ๋ ์ฝ๋๋ ์ง์ ์์ฑํ์ง ์๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ๋ก ํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด CPAN์ด๋ Ruby gem ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Shared ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ก ์ฐ๊ฑฐ๋ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ค์ฝ๋๋ฅผ ํ๋ก์ ํธ๋ก ๋ณต์ฌํด์ ์ฌ์ฉํ ์ ์๋ค.
์ฐ์ Shared ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ์๋ ๋ฌธ์ ๊ฐ ์๋ค.
ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํ๊ฒฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก์ ํธ์ ๋ง๊ฒ ์ฝ๊ฐ ์์ ํด์ ์ฌ์ฉํ๊ณ ๋ฐฐํฌํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
๋ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค์ฝ๋๋ฅผ ์ง์ ํ๋ก์ ํธ์ ํฌํจ์ํค๋ ๊ฒฝ์ฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Upstream ์ฝ๋๊ฐ ์ ๋ฐ์ดํธ๋์ ๋ Merge ํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
Git์ ์๋ธ๋ชจ๋์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๋ ๋๊ตฌ๋ค.
Git ์ ์ฅ์ ์์ ๋ค๋ฅธ Git ์ ์ฅ์๋ฅผ ๋๋ ํ ๋ฆฌ๋ก ๋ถ๋ฆฌํด ๋ฃ๋ ๊ฒ์ด ์๋ธ๋ชจ๋์ด๋ค.
๋ค๋ฅธ ๋ ๋ฆฝ๋ Git ์ ์ฅ์๋ฅผ Clone ํด์ ๋ด Git ์ ์ฅ์ ์์ ํฌํจํ ์ ์์ผ๋ฉฐ ๊ฐ ์ ์ฅ์์ ์ปค๋ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
๊ณต์๋ฌธ์์์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค๋ ๋ด์ฉ์ ์์ผ๋, Private Repository์ ๋ณด์์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ฌ๋ ค๋ ํ, ์ด๋ฅผ ์ค์ ํ๋ก์ ํธ Repository ๋ด๋ถ์์ ์ฌ์ฉํ๋๋ก ํจ์ผ๋ก์จ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ง Submodule๋ก ์ฌ์ฉํ ๋ ํฌ์งํ ๋ฆฌ ์์ฑ
์ฐ์ ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ Private Repository๋ฅผ ํ๋ ์์ฑํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ต์ด ์ปค๋ฐ์ ํ๋ ๋ง๋ค์ด์ฃผ๊ธฐ ์ํด Add a README file๋ ์ฒดํฌํด ์ฃผ์์ต๋๋ค.
ํด๋น ๋ ํฌ์งํ ๋ฆฌ ์ฃผ์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๐ง ๊ธฐ์กด Repository์์ Submodule ์ถ๊ฐ
์์ ๊ฐ์ด ์ฐ์ ์๋ธ๋ชจ๋์ ์ถ๊ฐํ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค.
์ด๊ณณ์์ ์์์ ์๋ก ๋ง๋ค์ด์ค Repository๋ฅผ ์๋ธ๋ชจ๋๋ก ์ถ๊ฐํด์ฃผ๋ฉด ๋๋๋ฐ์, ์ง๊ธ๋ถํฐ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ธ๋ชจ๋์ ์ถ๊ฐํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
git submodule add [์๋ธ๋ชจ๋๋ก ์ฌ์ฉํ Repository ์ฃผ์]
git submodule add https://github.com/shin-mallang/secure-submodule-test.git
๊ธฐ๋ณธ์ ์ผ๋ก ์๋ธ๋ชจ๋์ ์๋ธ๋ชจ๋๋ก ์ฌ์ฉํ ๋ ํฌ์งํ ๋ฆฌ์ ์ด๋ฆ์ผ๋ก ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
์์์๋ secure-submodule-test๋ก ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋์์ผ๋ฉฐ, ๋ด๋ถ์ ํด๋น ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๊ฐ์ง README.md ๊ฐ ๊ฐ์ ธ์์ง ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ํ .gitmodules ๋ผ๋ ํ์ผ์ด ๋ง๋ค์ด์ง ๊ฒ์ ์ ์ ์๋๋ฐ์, ํ๋ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ ํ์ผ์ ์์ฑ๋ ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ์ ์๋ธ๋ชจ๋ URL์ ๋งคํ ์ ๋ณด๋ฅผ ๋ด์ ์ค์ ํ์ผ์ ๋๋ค.
.gitmodules ํ์ผ๋ ํ์๊ด๋ฆฌ์ ๋์์ด๋ฉฐ, ๋ฐ๋ผ์ ๋ค๋ฅธ ํ์ผ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Pushํ๊ณ Pull ํ ์ ์์ต๋๋ค.
์ด์ ์ง๊ธ๊น์ง ์ค์ ํ ์ ๋ณด๋ฅผ ์ปค๋ฐํ๊ณ Pushํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
git add .
git commit -m "์๋ธ๋ชจ๋ ์ถ๊ฐ"
git push origin main
์ด์ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋ค์ด๊ฐ์ ํ์ธํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ ์ค์ ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ ๋ฉ์ธ Repository์์ Submodule ๋ด์ฉ ๋ณ๊ฒฝ
๋ง์ฝ ๋ฉ์ธ Repository์์ Submodule ๋๋ ํ ๋ฆฌ ๋ด์ ํ์ผ์ ๋ณ๊ฒฝํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ ๊ฐ์ด ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ์ mallang.txt๋ผ๋ ํ์ผ์ ์ถ๊ฐํ์ต๋๋ค.
๊ณผ์ฐ ์ด๋ป๊ฒ ๋ ๊น์?
์ ๋ต์ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค์ ๋๋ค.
์๋ธ๋ชจ๋์ ๋๋ ํ ๋ฆฌ๋ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ์ ๊ด๋ฆฌ๋์์ด ์๋๊ธฐ ๋๋ฌธ์ธ๋ฐ์, git status๋ฅผ ์ณ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค.
(์ด์ mallang.txt ํ์ผ์ ๋ค์ ์ง์์ฃผ์ธ์ ๐)
๐ง Submodule์ ๋ฏผ๊ฐํ ์ ๋ณด ์ค์ ํ๊ธฐ
๋ฉ์ธ ๋ ํฌ์งํฌ๋ฆฌ์์ ์๋ธ๋ชจ๋์ ์ถ๊ฐํด ์ฃผ์์ผ๋, ์ด์ ์๋ ํ๋ ค๋ Submodule์ ํตํด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ณผ์ ์ผ๋ก ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ Submodule๋ก ์ฌ์ฉํ๋ private Repository์ ๋ค์๊ณผ ๊ฐ์ ํ์ผ๋ค์ ์์ฑํฉ๋๋ค.
โ๏ธ application.yml
spring:
profiles:
active: dev
my-env: # ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ค.
first: ${FIRST_MALLANG_ENV}
second: ${SECOND_MALLANG_ENV}
โ๏ธ application-dev.yml
spring:
datasource:
url: jdbc:h2:mem:testdb;MODE=MySQL
driver-class-name: org.h2.Driver
username: sa
password:
โ๏ธ application-prod.yml
spring:
datasource:
driver-class-name: ${RDS_DRIVER}
url: ${RDS_URL}
username: ${RDS_USERNAME}
password: ${RDS_PASSWORD}
์ด์ ์ด๋ค์ Commit & Push ํด์ค๋๋ค.
์์ ๊ฐ์ด ์๋ธ๋ชจ๋๋ก ์ฌ์ฉํ ๋ ํฌ์งํ ๋ฆฌ์ ์ค์ ํ์ผ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
์๋ธ๋ชจ๋ ๋ ํฌ์งํ ๋ฆฌ์ ์ปค๋ฐ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฆ ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐ์ํ ์ปค๋ฐ์ ํด์๊ฐ์ด 81c8e17์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ์์๋ ์์ง ๋ฐ์์ด ์ ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด์ ์ด๋ค์ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ค์ ํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ์ ํ์ผ ๊ฒฝ๋ก๋ก ๋์์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ํตํด ์๋ธ๋ชจ๋์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์ ธ์ต๋๋ค.
git submodule update --remote
๊ทธ๋ฆฌ๊ณ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ์์ ์ฐธ์กฐํ๋ ์๋ธ๋ชจ๋์ ๊ธฐ๋ก์ ์ ๋ฐ์ดํธ ์์ผ์ฃผ๊ฒ ์ต๋๋ค.
git add .
git commit -m "์๋ธ๋ชจ๋ ์ต์ ํ"
git push origin main
์ด์ ๋ค์ ๋ฉ์ธ ๋ ํฌ์งํ ๋ฆฌ๋ก ๋์๊ฐ๋ฉด ์๋์ ๊ฐ์ด ์๋ธ๋ชจ๋์ด ์ต์ ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๐ง Submodule์ ์ค์ ํ์ผ ์ฌ์ฉํ๊ธฐ
์ด์ ์ด์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์กด ์ค์ ์ ๋ณด๋ ๋ชจ๋ ์ง์ฐ๊ณ , ์๋ธ๋ชจ๋์ ์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ์์ ํ๊ฒ ์ต๋๋ค.
์ฐ์ ๊ธฐ์กด์ ๊ฐ์ง ์ค์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค.
์ด์ ๋น๋ ์ ์๋ธ๋ชจ๋์ ์ค์ ์ ๋ณด๋ค์ ๊ฐ์ ธ์ค๋๋ก build.gradle ํ์ผ์ ์์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
processResources.dependsOn('copySecret')
tasks.register('copySecret', Copy) {
from './์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก'
include "application*.yml" // ๋ณต์ฌํ ํ์ผ๋ค
into 'src/main/resources' // ๋ณต์ฌ ์์น
}
โ๏ธ build.gradle
plugins {
// ... ์๋ต
}
// ... ์๋ต
tasks.named('test') {
useJUnitPlatform()
}
processResources.dependsOn('copySecret')
tasks.register('copySecret', Copy) {
from './secure-submodule-test' // ์๋ธ๋ชจ๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก
include "application*.yml" // ๋ณต์ฌํ ํ์ผ๋ค
into 'src/main/resources' // ๋ณต์ฌ ์์น
}
์ด์ ๋น๋๋ฅผ ํ๊ฒ๋๋ฉด ์๋ธ๋ชจ๋์ด ๊ฐ์ง ์ค์ ํ์ผ๋ค์ด ๋ฉ์ธ ํ๋ก์ ํธ์ src/main/resources ๊ฒฝ๋ก์ ๋ณต์ฌ๋ฉ๋๋ค.
์ด์ ๋ณ๊ฒฝ๋ ์ฌํญ๋ค์ Commit & Pushํ๋๋ก ํ๊ฒ ์ต๋๋ค.
git add .
git commit -m "๊ธฐ์กด ํ๋ก์ ํธ ์ค์ ์ ๋ณด ์ ๊ฑฐ & ์๋ธ๋ชจ๋ ์ค์ ์ ๋ณด ์ฌ์ฉ"
git push origin main
์ด์ EC2์ ์ ์ํด์ ์์ฑํ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์คํ ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด ์คํจํ๋ค๋ ๊ฒ์ ์ ์ ์๋๋ฐ์, ์ค์ ์ ๋ณด๊ฐ ๋ณต์ฌ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ๋ฒ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
์์๋๋ก ์ค์ ๋์ง ์์ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด์ ๋ ํ๋ก์ ํธ pull ์ ์๋ธ๋ชจ๋๊น์ง ๊ฐ์ ธ์ค์ง ์๋๋ค๋ ๊ฒ์ด ๋ฌธ์ ์ธ๋ฐ์, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํด์ฃผ์ด์ผ ํฉ๋๋ค.
git submodule update
์ฆ ์ด๋ฅผ ์ ์คํฌ๋ฆฝํธ์ ์ถ๊ฐํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
echo " ๐ณ ์๋ธ๋ชจ๋์ ์ค์ ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.\n"
git submodule update
โ๏ธ bapo.sh
#!/bin/sh
PROJECT_PATH=/home/ubuntu/mallang-projects
PROJECT_NAME=bapo-test
PORT=8080
BUILD_PATH=build/libs
JAR_NAME=jwp-shopping-order.jar
echo "\n ๐ณ [$PROJECT_PATH/$PROJECT_NAME] ๊ฒฝ๋ก๋ก ์ด๋ํฉ๋๋ค.\n"
cd $PROJECT_PATH/$PROJECT_NAME
echo " ๐ณ ์ต์ ์ฝ๋๋ฅผ PULL ํฉ๋๋ค!\n"
git pull
echo " ๐ณ ์๋ธ๋ชจ๋์ ์ค์ ํ์ผ์ ๊ฐ์ ธ์ต๋๋ค.\n"
git submodule update
echo " ๐ณ ํ๋ก์ ํธ๋ฅผ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค.\n"
./gradlew clean build
echo " ๐ณ [$PORT] ๋ฒ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐพ์ต๋๋ค...\n"
PID=$(lsof -i :$PORT -t)
if [ -z $PID ]; then
echo " ๐ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ๊ณง๋ฐ๋ก ์คํํฉ๋๋ค.\n"
else
echo " โ ์คํ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์
์ด ์์ด์ ์ด๋ฅผ ์ข
๋ฃํฉ๋๋ค. [PID = $PID]\n"
kill -15 $PID
fi
echo " ๐ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๋๋ฐ ํ์ํ ํ๊ฒฝ๋ณ์๋ฅผ ์ธํ
ํฉ๋๋ค.\n"
export FIRST_MALLANG_ENV="mallang1"
export SECOND_MALLANG_ENV=1234
export SPRING_PROFILES_ACTIVE="prod"
export RDS_DRIVER="com.mysql.cj.jdbc.Driver"
export RDS_URL="jdbc:mysql://[DB์ฉ EC2์ ํ๋ผ์ด๋น IPv4 ์ฃผ์]:3306/bapo_test"
export RDS_USERNAME="mallang"
export RDS_PASSWORD="1234"
echo " ๐ ์ ํ๋ฆฌ์ผ์ด์
์คํํฉ๋๋ค~ ๐\n"
nohup java -jar $PROJECT_PATH/$PROJECT_NAME/$BUILD_PATH/$JAR_NAME &
๋ํ EC2 ์๋ฒ์ ์ค์ ๋ ํ์ผ์ ์๋ธ๋ชจ๋ ์ค์ ์ด์ ์ ์์ฑ๋ ํ์ผ์ด๋ฏ๋ก ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ต์ด 1ํ ์คํ์์ผ์ฃผ์ด์ผ ํฉ๋๋ค.
git submodule init
์ด์ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉด, git submodule update๋ก ์ธํด ๋ค์๊ณผ ๊ฐ์ด ๊นํ๋ธ ์ธ์ฆ์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
๐ง EC2์์ Private Repository์ ๋ํ ์ธ์ฆ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ec2 ssh์ ์ ์ํ ํ์ ssh-keygen -t rsa ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด key๋ฅผ ์์ฑํฉ๋๋ค.
(๋์ค์ sudo๋ฅผ ํตํด ssh ์ฃผ์๋ฅผ ์ฌ์ฉํ๋ git์ ์ฌ์ฉํ ์ผ์ด ์๋ค๋ฉด sudo ssh-keygen -t rsa ๋ก ์์ฑํด์ฃผ์ด์ผ ํฉ๋๋ค.)
(Enter ~~ ์ ๋ํด์๋ ๋ชจ๋ ๊ทธ๋ฅ ์ํฐ๋ง ์ ๋ ฅํฉ๋๋ค)
cat ~/.ssh/id_rsa.pub ๋ช ๋ น์ด๋ฅผ ํตํด ์์ฑ๋ ํค๋ฅผ ํ์ธํ ํ, ์ด๋ฅผ github ๊ณ์ ์ ๋ฑ๋กํด์ฃผ์ด์ผ ํฉ๋๋ค.
(๋ง์ฝ sudo๋ฅผ ํตํด Key๋ฅผ ์์ฑํ๋ค๋ฉด, sudo su ๋ฅผ ๋จผ์ ์ ๋ ฅํ ์ดํ, ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ๋ณด์ ๋๋ค.)
์๋ฅผ ๋ณต์ฌํ ๋ค ๊นํ๋ธ์ ์ ์ํฉ๋๋ค.
์ฐ์ธก ์๋จ ํ๋กํ ์ฌ์ง์ ํด๋ฆญํ ๋ค, Settings๋ก ์ด๋ํฉ๋๋ค.
SSH and GPG keys -> New SSH key๋ฅผ ํด๋ฆญํฉ๋๋ค.
Title์ ์์๋ก ์์ฑํด์ฃผ์๊ณ , Key์ ๋ฐฉ๊ธ ์ ์ ๋ณต์ฌํ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ์ด์ค๋๋ค.
์ดํ Add SSH key๋ฅผ ํตํด ์์ฑํฉ๋๋ค.
์ด์ ๊ธฐ์กด https ๋ฐฉ์์ ์ฌ์ฉํ๋ submodule์ ์ฃผ์๋ฅผ ssh๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋จผ์ ๋ก์ปฌ๋ก ๋์๊ฐ .gitmodules ํ์ผ์ ๋ค์ด๊ฐ๋๋ค.
url์ ๋ณด๋ฉด https ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ์ ์ ์๋๋ฐ์, ์ด๋ฅผ SSH ๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ์ต๋๋ค.
์ฐ์ ์๋ธ๋ชจ๋์ Repository๋ก ๋ค์ด๊ฐ๋๋ค.
์ดํ Code -> SSH ๋ฅผ ํด๋ฆญํ ๋ค ๋์ค๋ ์ฃผ์๋ฅผ ๋ณต์ฌํฉ๋๋ค.
๊ธฐ์กด .gitmodules์ ์กด์ฌํ๋ url์ ์ง์ด ๋ค ์ ssh ์ฃผ์๋ฅผ ๋ถ์ฌ๋ฃ์ด์ค๋๋ค.
์ด์ ์ด๋ฅผ ์ปค๋ฐํด์ฃผ๋ฉด, ์ค์ ์ด ๋ชจ๋ ๋๋ฌ์ต๋๋ค.
๋ค์ ec2๋ก ๋์์์ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
๐ง ์คํํ๊ธฐ
์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ํ์ธ ๊ฒธ "/members"๋ก ์์ฒญ์ ํ๋ฒ ๋ณด๋ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๋ชจ๋ ์ ์๋ํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ง ์ฐธ๊ณ - ์ต์ด ํด๋ก ์ ์๋ธ๋ชจ๋๊น์ง ๋ชจ๋ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ
ํ ์คํธํด๋ณด๊ธฐ ์ํด EC2 ์๋ฒ์ ์กด์ฌํ๋ ๊ธฐ์กด์ ํ๋ก์ ํธ๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ค์ clone๋ฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐ์ EC2 ์๋ฒ์ ์กด์ฌํ๋ ๊ธฐ์กด์ ํ๋ก์ ํธ ์ฝ๋๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ์์ต๋๋ค.
์๋ธ๋ชจ๋๊น์ง cloneํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
git clone --recurse-submodules {project_url}
์ฆ ์ ๋ช ๋ น์ด๋ ์๋ ์ธ ๋ช ๋ น์ด๋ฅผ ํฉ์น ๊ฒ์ด๋ผ ๋ณผ ์ ์์ต๋๋ค.
git clone {project_url}
git submodule init
git submodule update
๐ง ์ฃผ์์
์๋ธ๋ชจ๋์ ๋ด์ฉ์ ์์ ํ์ ๋, ๋ฐ๋์ ์๋ธ ๋ชจ๋์ ์ปค๋ฐ์ ๋ฉ์ธ ์ปค๋ฐ๋ณด๋ค ๋จผ์ ํด์ผ ํฉ๋๋ค.
๐ง git submodule update์ git submodule update --remote์ ์ฐจ์ด
update ๋ค์ --remote ๋ฅผ ๋ถ์ฌ์ค๋ค๋ฉด, ํ์ฌ ์๋ธ๋ชจ๋ ์๊ฒฉ์ ์ฅ์์ ์ ์ฅ๋์ด์๋ ์ํ๋ฅผ ๋ด ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ ์ด๊ฒ์ด ์๋ค๋ฉด ํ์ฌ ์์
์ค์ธ commit ์ด ์ฐธ์กฐํ๊ณ ์๋ ์๋ธ๋ชจ๋์ ์ํ๋ฅผ ๋ด ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ EC2 ์๋ฒ์์๋ --remote ์ต์ ์ ๋นผ์ฃผ๊ณ ์คํํ๋ฉฐ,
์ค์ ๋ธ๋์น์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ค์ ํ์ผ์ ์ ๋ฐ์ดํธ ํ๋ ค๋ ๊ฒฝ์ฐ git submodule update --remote๋ฅผ ํตํด ์๋ธ๋ชจ๋์ ์ต์ ๋ฒ์ ์ ๊ฐ์ ธ์จ ํ, ์ด๋ฅผ ์ปค๋ฐํด์ฃผ๋ ์์ ์ด ํ์ํฉ๋๋ค.
๐ง ๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ ํด์ ์๋ธ๋ชจ๋์ ํตํด ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค.
์๋ธ๋ชจ๋์ ์ฌ์ฉํ ๋, Private Repository ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ๊ฒฝ๋ณ์๋ฅผ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ๋์ง๋ง,
ํน์๋ผ๋(ํด๋จผ ์๋ฌ ๋ฑ..?) private repository๊ฐ ๋ ธ์ถ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ ๋ ๋ฌด์์์ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค์.. ใ ใ ๐ญ
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ์ง๋ฌธ์ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
"ํ๊ฒฝ๋ณ์ ์ธ๊ฑฐ๋ฉด Submodule์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์์ง ์๋์??"
์ด๋์ ๋ ๋์ํฉ๋๋ค๋ง, ์ฌ๋ฌ ํ๋ก์ ํธ์์ ๋์ผํ ์ค์ ์ ๋ณด๋ฑ์ ์ฌ์ฉํ ๋, ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค๋ ์ฅ์ ์ด ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์ ๋ค์ ๊ธ๋ถํฐ๋ CI/CD๋ฅผ ์ ์ฉํด ๋ณด๋๋ก ํ ํ ๋ฐ์, ์ฐ์ ์๋์ ์ผ๋ก ์ฝ๋ค๋ Github Action์ ๋จผ์ ์ ์ฉํด ๋ณธ ์ดํ์, Jenkins๋ ์ ์ฉํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
(์์ํ๊ธฐ ์๋ฆฌ์ฆ์ ๋ง๊ฒ, ์ ๋ง ์ค์นํ๊ณ ๋ง๋ง ๋ณด๋ ์ ๋๋ก๋ง ์งํํ ๊ฒ ๊ฐ์ต๋๋ค.. ์ ๋ ์ ๋ชจ๋ฅด๊ธฐ์..๐ญ)
๐ Reference
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88
https://jujeol-jujeol.github.io/2021/07/12/git-submodule-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0/
https://hudi.blog/git-submodule/
https://tecoble.techcourse.co.kr/post/2021-07-31-git-submodule/
https://my-codinglog.tistory.com/30
https://prolog.techcourse.co.kr/studylogs/3571