메인 μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°
이 κ°€μ΄λ“œλŠ” Sonamu ν”„λ‘œμ νŠΈλ₯Ό μ„€μΉ˜ν•œ ν›„ 개발 ν™˜κ²½μ„ μ‹€ν–‰ν•˜λŠ” 방법을 λ‹¨κ³„λ³„λ‘œ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.

μ „μ œ 쑰건

μ„€μΉ˜ν•˜κΈ° κ°€μ΄λ“œλ₯Ό μ™„λ£Œν•˜κ³  ν”„λ‘œμ νŠΈκ°€ μƒμ„±λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

개발 ν™˜κ²½ μ‹€ν–‰

Sonamu 개발 ν™˜κ²½μ€ λ‹€μŒ μ„Έ κ°€μ§€ μ„œλ²„λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€:
  • PostgreSQL - λ°μ΄ν„°λ² μ΄μŠ€
  • API μ„œλ²„ - λ°±μ—”λ“œ REST API (Sonamu UI 포함)
  • Web μ„œλ²„ - ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜
1

λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμž‘

ν”„λ‘œμ νŠΈμ˜ api λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•˜μ—¬ PostgreSQL μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€:
cd my_app/api
pnpm docker:up

docker:up μ‹€ν–‰ ν›„ 성곡 λ©”μ‹œμ§€ 및 μ»¨ν…Œμ΄λ„ˆ μ‹œμž‘ 둜그

이 λͺ…λ Ήμ–΄λŠ” Docker Composeλ₯Ό μ‚¬μš©ν•˜μ—¬ PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ν•©λ‹ˆλ‹€.
λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ docker ps λͺ…λ Ήμ–΄λ‘œ μ»¨ν…Œμ΄λ„ˆ μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
docker ps κ²°κ³Ό

docker ps μ‹€ν–‰ κ²°κ³Ό (PostgreSQL μ»¨ν…Œμ΄λ„ˆκ°€ Up μƒνƒœ)

2

API μ„œλ²„ μ‹€ν–‰

같은 api λ””λ ‰ν† λ¦¬μ—μ„œ 개발 μ„œλ²„λ₯Ό μ‹œμž‘ν•©λ‹ˆλ‹€:
pnpm dev

pnpm dev μ‹€ν–‰ ν›„ μ„œλ²„ μ‹œμž‘ 둜그

μ„œλ²„κ°€ μ„±κ³΅μ μœΌλ‘œ μ‹œμž‘λ˜λ©΄ λ‹€μŒκ³Ό 같은 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€:
🌲 Server listening on http://localhost:1028
이 λͺ…λ Ήμ–΄ ν•˜λ‚˜λ‘œ λ‹€μŒμ΄ λͺ¨λ‘ μ‹€ν–‰λ©λ‹ˆλ‹€:API μ„œλ²„λŠ” Hot Module Replacement(HMR)을 μ§€μ›ν•˜λ―€λ‘œ μ½”λ“œ λ³€κ²½ μ‹œ μžλ™μœΌλ‘œ μž¬μ‹œμž‘λ©λ‹ˆλ‹€.
둜컬 개발 ν™˜κ²½μ—μ„œλŠ” API μ„œλ²„κ°€ Web μ•±κΉŒμ§€ ν†΅ν•©ν•˜μ—¬ μ œκ³΅ν•©λ‹ˆλ‹€. Web λ””λ ‰ν† λ¦¬μ˜ Vite Dev Serverλ₯Ό API μ„œλ²„μ— middleware둜 μ—°κ²°ν•˜μ—¬ ν•˜λ‚˜μ˜ 포트둜 λͺ¨λ“  것을 μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이 터미널 창은 계속 열어두어야 ν•©λ‹ˆλ‹€. API μ„œλ²„κ°€ μ‹€ν–‰ 쀑인 μƒνƒœλ₯Ό μœ μ§€ν•©λ‹ˆλ‹€.
3

Web μ„œλ²„ μ‹€ν–‰ (선택사항)

Web κ°œλ°œμ— μ§‘μ€‘ν•˜κ±°λ‚˜ Vite의 전체 κΈ°λŠ₯을 ν™œμš©ν•˜κ³  μ‹Άλ‹€λ©΄, μƒˆ 터미널 창을 μ—΄κ³  web λ””λ ‰ν† λ¦¬μ—μ„œ λ³„λ„λ‘œ 개발 μ„œλ²„λ₯Ό μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
cd my_app/web
pnpm dev

web λ””λ ‰ν† λ¦¬μ—μ„œ pnpm dev μ‹€ν–‰ ν›„ Vite μ‹œμž‘ 둜그

Vite 개발 μ„œλ²„κ°€ μ‹œμž‘λ˜λ©΄ λ‹€μŒκ³Ό 같은 λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€:
  VITE v5.x.x  ready in xxx ms

  ➜  Local:   http://localhost:3028/
  ➜  Network: http://192.168.x.x:3028/
Web μ„œλ²„λ₯Ό λ³„λ„λ‘œ μ‹€ν–‰ν•˜λ©΄ http://localhost:3028 둜 μ ‘μ†ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. Web μ„œλ²„λŠ” /api/* 경둜 μš”μ²­μ„ μžλ™μœΌλ‘œ API μ„œλ²„(localhost:1028)둜 ν”„λ‘μ‹œν•©λ‹ˆλ‹€.
두 κ°€μ§€ 개발 방식
  • 톡합 λͺ¨λ“œ (ꢌμž₯): API μ„œλ²„λ§Œ μ‹€ν–‰ β†’ localhost:1028둜 λͺ¨λ“  것에 μ ‘κ·Ό
  • 뢄리 λͺ¨λ“œ: API + Web 별도 μ‹€ν–‰ β†’ APIλŠ” localhost:1028, Web은 localhost:3028
λŒ€λΆ€λΆ„μ˜ 경우 톡합 λͺ¨λ“œλ‘œ μΆ©λΆ„ν•˜λ©°, Web κ°œλ°œμ— 집쀑할 λ•Œλ§Œ 뢄리 λͺ¨λ“œλ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

접속 확인

톡합 λͺ¨λ“œ (API μ„œλ²„λ§Œ μ‹€ν–‰ν•œ 경우)

λΈŒλΌμš°μ €μ—μ„œ λ‹€μŒ URL둜 접속할 수 μžˆμŠ΅λ‹ˆλ‹€:
μ„œλΉ„μŠ€URLμ„€λͺ…
Web μ•±http://localhost:1028ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜
API μ„œλ²„http://localhost:1028/apiREST API μ—”λ“œν¬μΈνŠΈ
Sonamu UIhttp://localhost:1028/sonamu-uiμ—”ν‹°ν‹° 관리 μΈν„°νŽ˜μ΄μŠ€

πŸ“Έ ν•„μš”: λΈŒλΌμš°μ €μ—μ„œ localhost:1028 μ ‘μ†ν•œ ν™”λ©΄ (κΈ°λ³Έ Web μ•± ν™ˆνŽ˜μ΄μ§€)

πŸ“Έ ν•„μš”: λΈŒλΌμš°μ €μ—μ„œ localhost:1028/api μ ‘μ†ν•œ ν™”λ©΄ (404 λ˜λŠ” API 응닡)

πŸ“Έ ν•„μš”: λΈŒλΌμš°μ €μ—μ„œ localhost:1028/sonamu-ui μ ‘μ†ν•œ ν™”λ©΄ (Sonamu UI λŒ€μ‹œλ³΄λ“œ)

뢄리 λͺ¨λ“œ (API + Web μ„œλ²„ λͺ¨λ‘ μ‹€ν–‰ν•œ 경우)

μ„œλΉ„μŠ€URLμ„€λͺ…
Web μ•±http://localhost:3028ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜
API μ„œλ²„http://localhost:1028/apiREST API μ—”λ“œν¬μΈνŠΈ
Sonamu UIhttp://localhost:1028/sonamu-uiμ—”ν‹°ν‹° 관리 μΈν„°νŽ˜μ΄μŠ€
Web 앱에 μ ‘μ†ν•˜μ—¬ Sonamu μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λŠ”μ§€ ν™•μΈν•˜μ„Έμš”.

Sonamu UI κΈ°λŠ₯

λΈŒλΌμš°μ €μ—μ„œ http://localhost:1028/sonamu-ui 둜 μ ‘μ†ν•˜λ©΄ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€:
  • μ—”ν‹°ν‹° 생성 및 νŽΈμ§‘
  • λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 관리
  • API μ—”λ“œν¬μΈνŠΈ 확인
  • λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ μ‹œκ°ν™”

πŸ“Έ ν•„μš”: Sonamu UI 메인 ν™”λ©΄ (Entity νƒ­, Migration νƒ­ 등이 λ³΄μ΄λŠ” 전체 UI)

μ„œλ²„ 쀑지

κ°œλ°œμ„ 마치고 μ„œλ²„λ₯Ό μ€‘μ§€ν•˜λ €λ©΄:
  1. API μ„œλ²„ (그리고 Web μ„œλ²„κ°€ μ‹€ν–‰ 쀑이라면): 각 ν„°λ―Έλ„μ—μ„œ Ctrl + C ν‚€λ₯Ό 눌러 μ€‘μ§€ν•©λ‹ˆλ‹€.
  2. λ°μ΄ν„°λ² μ΄μŠ€: api λ””λ ‰ν† λ¦¬μ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€:
pnpm docker:down
docker:down λͺ…λ Ήμ–΄λŠ” μ»¨ν…Œμ΄λ„ˆλ₯Ό μ€‘μ§€λ§Œ ν•˜λ©°, λ°μ΄ν„°λŠ” λ³΄μ‘΄λ©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ™„μ „νžˆ μ΄ˆκΈ°ν™”ν•˜λ €λ©΄ λ°μ΄ν„°λ² μ΄μŠ€ 관리 λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜μ„Έμš”.

λ‹€μŒ 단계

개발 ν™˜κ²½μ΄ μ€€λΉ„λ˜μ—ˆμŠ΅λ‹ˆλ‹€! 이제 λ‹€μŒ κ°€μ΄λ“œλ₯Ό 톡해 Sonamu의 핡심 κΈ°λŠ₯을 λ°°μ›Œλ³΄μ„Έμš”: