๐Ÿš€ macOS ๋ฐ Linux์—์„œ Magento + Warden + Hyvรค๋ฅผ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (mage-mirror ์†Œ๊ฐœ)

๋ฐœํ–‰: (2025๋…„ 12์›” 12์ผ ์˜คํ›„ 12:11 GMT+9)
7 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Magentoโ€ฏ2 ํ™˜๊ฒฝ์„ ์ƒˆ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜โ€ฏโ€”โ€ฏํ”„๋กœ๋•์…˜ ์Šคํ† ์–ด๋ฅผ ๋ณต์ œํ•ด ๋กœ์ปฌ์—์„œ ๋””๋ฒ„๊น…ํ•˜๋ ค๊ณ โ€ฏโ€”โ€ฏ์‹œ๋„ํ•ด ๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ ํ†ต์„ ์ž˜ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

  • ์„ค์น˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ
  • Composer ์„ค์ • ์ค‘ ํŒจํ‚ค์ง€ ์‹คํŒจ
  • OpenSearch ์˜ค๋ฅ˜
  • Warden ๋ฒ„์ „ ๋ถˆ์ผ์น˜
  • PHP ํ™•์žฅ ๋ชจ๋“ˆ ๋ˆ„๋ฝ
  • ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ ๋ฌธ์ œ
  • ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฆฌํ—ˆ์„ค์ด ๋А๋ฆผ

๊ฐ™์€ ํ™˜๊ฒฝ ์„ค์ • ๋‹จ๊ณ„๋ฅผ ์ˆ˜๋…„๊ฐ„ ๋ฐ˜๋ณตํ•œ ๋’ค, ์ €๋Š” mageโ€‘mirror๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹คโ€ฏโ€”โ€ฏํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ Magentoโ€ฏ+โ€ฏWardenโ€ฏ+โ€ฏHyvรค๋ฅผ ์„ค์น˜ํ•ด ์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

GitHub:

2โ€ฏ๋ถ„ ์•ˆ์— mageโ€‘mirror๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•œ ์™„์ „ํ•œ Magento ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค:

  • Magentoโ€ฏ2.4.x
  • Warden (Docker) ์Šคํƒ
  • Hyvรค ํ…Œ๋งˆ (์„ ํƒ ์‚ฌํ•ญ)
  • ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ (์„ ํƒ ์‚ฌํ•ญ)
  • ๋ฉ€ํ‹ฐโ€‘์Šคํ† ์–ด ๋ผ์šฐํŒ…
  • Composer ์„ค์ •
  • OpenSearch ์ž๋™ ์ˆ˜์ •
  • ๊ด€๋ฆฌ์ž ์ž๋™ ์ƒ์„ฑ
  • ์›๊ฒฉ ๋™๊ธฐํ™” ๋ฐ ๋ณต์ œ
  • ์—…๊ทธ๋ ˆ์ด๋“œ ๋ชจ๋“œ

์‹คํ–‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค:

./_mage-mirror.sh

โ€ฆ๊ทธ๋ฆฌ๊ณ  ๋โ€”Magento๊ฐ€ ๋ฐ”๋กœ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค.

A quick gif showing _mage-mirror.sh in action and the results of the local Hyva theme installed

์™œ Magento ๋กœ์ปฌ ๊ฐœ๋ฐœ์€ ์•„์ง๋„ ์–ด๋ ค์šด๊ฐ€

Magento๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • PHPโ€ฏ+โ€ฏComposerโ€ฏ+โ€ฏMySQL์„ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜
  • ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • OpenSearch ๊ณ ์น˜๊ธฐ
  • Composer๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ 20~40๋ถ„ ๋Œ€๊ธฐ
  • ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ
  • ์•”ํ˜ธ ํ‚ค ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ์„ค์ • ํŒจ์น˜
  • ์Šคํ† ์–ด์™€ ์Šค์ฝ”ํ”„ ์ƒ์„ฑ

Magento๋ฅผ ์ „๋ฌธ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒฝ์šฐ, ๋‚ญ๋น„๋˜๋Š” ์‹œ๊ฐ„์ด ๊ธˆ๋ฐฉ ์Œ“์ž…๋‹ˆ๋‹ค. Hyvรค๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ํฌ๊ฒŒ ๋น ๋ฅด๊ฒŒ ํ•ด ์ฃผ์ง€๋งŒ, ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ ์„ค์ •์€ ์—ฌ์ „ํžˆ ํŒ€์˜ ๋ณ‘๋ชฉ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ด ์ค„ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

mageโ€‘mirror๊ฐ€ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ

mageโ€‘mirror๋Š” ์†๋„, ๋ฐ˜๋ณต ๊ฐ€๋Šฅ์„ฑ, ๋ถˆํŽธํ•จ ์ œ๋กœ๋ฅผ ๋ชฉํ‘œ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

1. ํ•œ ๋ฒˆ์˜ ๋ช…๋ น = ์ „์ฒด Magento ํ™˜๊ฒฝ

./_mage-mirror.sh

์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ:

  • Warden๊ฐ€ ์—†์œผ๋ฉด ์„ค์น˜
  • Composer๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • Magentoโ€ฏ2.4.x ์„ค์ •
  • URL ๋ฐ ์Šค์ฝ”ํ”„ ๊ตฌ์„ฑ
  • ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž ์ƒ์„ฑ
  • ์ •์  ์ž์‚ฐ ๋ฐฐํฌ
  • DI ์ปดํŒŒ์ผ
  • ํŒŒ์ผ ๊ถŒํ•œ ์ˆ˜์ •
  • ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋กœ๋“œ (์„ ํƒ ์‚ฌํ•ญ)

์ˆ˜๋™ ์ž‘์—… ์—†์ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค.

2. Hyvรค ํ…Œ๋งˆ ์ž๋™ ์„ค์ • (์„ ํƒ ์‚ฌํ•ญ)

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค:

INSTALL_HYVA=yes

mageโ€‘mirror๋Š” Hyvรค ํ…Œ๋งˆ๋ฅผ (OSS Composer ๋ฏธ๋Ÿฌ๋ฅผ ํ†ตํ•ด) ๊ฐ€์ ธ์™€ ์„ค์น˜ํ•˜๊ณ , ์Šคํ† ์–ดํ”„๋ก ํŠธ๋กœ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ธฐ์กด Magento ํ”„๋กœ์ ํŠธ ๋ณต์ œ (๋กœ์ปฌ ๋˜๋Š” ์›๊ฒฉ)

ํ”„๋กœ๋•์…˜ ์Šคํ† ์–ด, ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ดํŠธ, QA ์Šค๋ƒ…์ƒท ๋“ฑ์„ rsync, tar, ์›๊ฒฉ mysqldump, ๋กœ์ปฌ SQL ๋คํ”„ ๋“ฑ์œผ๋กœ ๋ณต์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

USE_RSYNC_MAGENTO=yes
USE_REMOTE_DB_DUMP=yes

์Šคํ† ์–ด๊ฐ€ ๋ช‡ ๋ถ„ ์•ˆ์— ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค โ€” ๋ช‡ ์‹œ๊ฐ„์ด ์•„๋‹ˆ๋ผ์š”.

4. Magento ์—…๊ทธ๋ ˆ์ด๋“œ ๋ชจ๋“œ

2.4.x โ†’ 2.4.y ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด:

UPGRADE_MAGENTO=yes
UPGRADE_MAGENTO_VERSION=2.4.*

mageโ€‘mirror๋Š”:

  • ๊ธฐ์กด ์Šคํ† ์–ด๋ฅผ ๊ฐ€์ ธ์˜ด
  • Composer ๋ฒ„์ „ ์ œ์•ฝ์„ ์กฐ์ •
  • ์ „์ฒด Composer ์—…๋ฐ์ดํŠธ ์‹คํ–‰
  • setup:upgrade ์ˆ˜ํ–‰
  • ํ•„์š”์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค ์žฌ์ƒ์„ฑ, ์ปดํŒŒ์ผ, ๋ฐฐํฌ, ์„ค์ • ํŒจ์น˜

์œ ์ง€๋ณด์ˆ˜ ์ž‘์—…์— ํฐ ๋ณ€ํ™”๋ฅผ ์ค๋‹ˆ๋‹ค.

5. ๋ฉ€ํ‹ฐโ€‘์Šคํ† ์–ด ๋ผ์šฐํŒ… (์‚ฌ์ „ ๊ตฌ์„ฑ)

ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ, mageโ€‘mirror๋Š” ์ž๋™์œผ๋กœ ๋‹ค์Œ์„ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค:

mage.test      โ†’ Website A
app.mage.test  โ†’ Website B

/etc/hosts๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , pub/index.php๋ฅผ ํŒจ์น˜ํ•ด MAGE_RUN_CODE๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ๊ธฐ๋ณธ URL๊ณผ ์Šค์ฝ”ํ”„๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค โ€” ์ˆ˜๋™ ๋‹จ๊ณ„๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

6. OpenSearch ์ž๋™ ์ˆ˜์ • (โ€œNo alive nodes foundโ€ ์˜ค๋ฅ˜ ํ•ด์†Œ)

ํ”ํžˆ ๋ณด๋Š” ์˜ค๋ฅ˜:

Could not validate a connection to OpenSearch. No alive nodes found.

mageโ€‘mirror๋Š” OpenSearch๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค:

catalog/search/engine = opensearch
hostname = opensearch
port = 9200
prefix = magento2

๊ทธ ํ›„ ์ „์ฒด ์žฌ์ธ๋ฑ์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด ์˜ค๋ฅ˜๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘

git clone https://github.com/j-scriptz/mage-mirror
cd mage-mirror
chmod +x _mage-mirror.sh
./_mage-mirror.sh

Magento๋Š” ๋‹ค์Œ ์ฃผ์†Œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค:

  • (๋ฉ€ํ‹ฐโ€‘์Šคํ† ์–ด๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ)

์˜ˆ์‹œ ์„ค์ • ํŒŒ์ผ

๋ชจ๋“  ์„ค์ •์€ _mage-mirror.config์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฅธ Hyvรค ์„ค์น˜

INSTALL_HYVA=yes
WITH_SAMPLE_DATA=no
USE_EXISTING_DB=no

ํ”„๋กœ๋•์…˜ ์Šคํ† ์–ด ๋ณต์ œ

USE_RSYNC_MAGENTO=yes
USE_REMOTE_DB_DUMP=yes
REMOTE_HOST=myserver
REMOTE_PATH=/var/www/magento

์—…๊ทธ๋ ˆ์ด๋“œ ๋ชจ๋“œ

UPGRADE_MAGENTO=yes
UPGRADE_MAGENTO_VERSION=2.4.*

mageโ€‘mirror๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์‚ฌ๋žŒ

  • Magento ์—์ด์ „์‹œ
  • ํ”„๋ฆฌ๋žœ์„œ
  • Hyvรค ๊ฐœ๋ฐœ์ž
  • Magento ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋ฌธ๊ฐ€
  • ๊ธฐ์—ฌ์ž
  • ์›ํด๋ฆญ ์„ค์ •์ด ํ•„์š”ํ•œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž
  • ํ‘œ์ค€ํ™”๋œ ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ์›ํ•˜๋Š” ํŒ€

Magento๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด mageโ€‘mirror๊ฐ€ ์ฃผ๋‹น ๋ช‡ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ค๋‹ˆ๋‹ค.

๋ณด๋„ˆ์Šค: ๋ฌด๋ฃŒ Hyvรคโ€‘ํ˜ธํ™˜ ์„œ๋ธŒ์นดํ…Œ๊ณ ๋ฆฌ ์นด๋“œ

์„ค์ • ์ค‘์— Jscriptz Subcats ๋ชจ๋“ˆ์„ ์ž๋™ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

โ†’

์Šคํ† ์–ดํ”„๋ก ํŠธ UX์™€ Hyvรค ๋นŒ๋“œ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•˜๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?

mageโ€‘mirror๊ฐ€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ฃผ์—ˆ๋‹ค๋ฉด, ์ง€์› ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • GitHub ์ €์žฅ์†Œ์— ์Šคํƒ€ ๋‹ฌ๊ธฐ
  • ์ด์Šˆ๋‚˜ PR ์ œ์ถœ
  • Magento ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์•Œ๋ฆฌ๊ธฐ

GitHub:

๋งˆ๋ฌด๋ฆฌ ์ƒ๊ฐ

Magento ๊ฐœ๋ฐœ์€ ๋ณต์žกํ•˜์ง€๋งŒ, ๋กœ์ปฌ ํ™˜๊ฒฝ์€ ๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿด ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. mageโ€‘mirror๋Š” ๋ฐ˜๋ณต๋˜๋Š” ๊ณ ํ†ต์„ ์—†์• ๊ณ , Magento ์Šคํ† ์–ด๋ฅผ ์Šคํ•€์—…ํ•˜๊ฑฐ๋‚˜ ๋ณต์ œํ•˜๋Š” ์ž‘์—…์„ ๋‹ค์Œ ๋ช…๋ น ํ•˜๋‚˜๋งŒ์œผ๋กœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค:

./_mage-mirror.sh
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์šฐ๋ฆฌ ์‚ฌ์ดํŠธ๊ฐ€ ์‹ฑ๊ฐ€ํฌ๋ฅด์—์„œ๋Š” ๋А๋ฆฌ๊ณ  ์œ ๋Ÿฝ์—์„œ๋Š” ์™„๋ฒฝํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š”.

๋ฌธ์ œ: ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ API๋Š” Cloudflare ๋’ค์— ์œ„์น˜ํ•˜๊ณ  ์—ฃ์ง€ ์บ์‹ฑ์„ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋Š” p95 ์‘๋‹ต ์‹œ๊ฐ„์ด 100 ms ๋ฏธ๋งŒ์ž„์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. Af...

๋‚˜๋Š” Game Boy๋ฅผ ChatGPT ์•ˆ์— ๋„ฃ์—ˆ๋‹ค (ChatGPT Apps)

์†Œ๊ฐœ: ChatGPT ์•ฑ์€ ์•„์ง BETA ๋‹จ๊ณ„์ด์ง€๋งŒ, ์–ด์ œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ์•ฑ์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Game Boy ์•ˆ์— ๋งž์ถ”์–ด ๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

spaceorbust โ€“ GitHub ์ปค๋ฐ‹์œผ๋กœ ์šฐ์ฃผ ๋ฌธ๋ช…์„ ์›€์ง์ด๋Š” ํ„ฐ๋ฏธ๋„ RPG

๊ฐœ์š”: ์‹ค์ œ GitHub ํ™œ๋™์ด ์ธ๋ฅ˜์˜ ์šฐ์ฃผ ์ง„์ถœ์„ ์ด‰์ง„ํ•˜๋Š” ํ„ฐ๋ฏธ๋„ RPG. - ์ปค๋ฐ‹์€ ์—๋„ˆ์ง€๋กœ ๋ณ€ํ™˜๋œ๋‹ค - ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋Š” ์žฌ๋ฃŒ๊ฐ€ ๋œ๋‹ค - ์ด์Šˆโ€ฆ