Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

316 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ ์‹ฌํ”Œํ™ˆํŽ˜์ด์ง€ FrontEnd

react javascript nodejs npm vite
workflow

โ€ป ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ์กด JSP ๋ทฐ ๋ฐฉ์‹์—์„œ ๋ฒ—์–ด๋‚˜ BackEnd์™€ FrontEnd๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜ˆ์‹œ ํŒŒ์ผ๋กœ ์ฐธ๊ณ ๋งŒ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋‹จ์ˆœ ํ™ˆํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‹œ ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฒฝ๋Ÿ‰ํ™” ๋œ ์‹คํ–‰ํ™˜๊ฒฝ ์ œ๊ณต
๋ฉ”์ธ ํŽ˜์ด์ง€, ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ, ๊ณต์ง€์‚ฌํ•ญ ๊ด€๋ฆฌ, ๊ฒŒ์‹œํŒ ๊ด€๋ฆฌ, ์•ˆ๋‚ด ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

๋ฉ”๋‰ด ๊ตฌ์„ฑ

menu_sht_v4

์ฐธ๊ณ  ํ™”๋ฉด ๋ฐ ๋ฉ”๋‰ด ์„ค๋ช…

๋ฉ”์ธ ํ™”๋ฉด

sh1

  1. ์ตœ์ดˆ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์„ค์ •์€ [ ๋กœ๊ทธ์ธ๊ณ„์ • : admin , ๋กœ๊ทธ์ธ์•”ํ˜ธ : Admin@1234 ] ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค.
  2. ๋ฉ”์ธ ํ™”๋ฉด ์šฐ์ธก ์ƒ๋‹จ์˜ ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.
  3. ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด๋‚˜ ์˜ˆ์‹œ ๋ฉ”๋‰ด๋ฅผ ์‹ค๋ฌด์ ์œผ๋กœ ์ถ”๊ฐ€ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด

login

  1. ์ตœ์ดˆ ๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ํ†ตํ•œ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. ํšŒ์›๊ฐ€์ž… ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ƒ์„ฑํ•œ ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ํ†ตํ•œ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์‚ฌ์šฉ์ž ๊ณ„์ •์€ ์ผ๋ถ€ ๋ฉ”๋‰ด ์ ‘๊ทผ์ด ์ œํ•œ๋œ๋‹ค)
  3. ๋กœ๊ทธ์ธ ์ฐฝ ํ•˜๋‹จ์˜ ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์œผ๋กœ ๋„ค์ด๋ฒ„ ๋ฐ ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๊ฒฝ์šฐ์˜ ๊ถŒํ•œ์€ ์‚ฌ์šฉ์ž ๊ณ„์ •๊ณผ ๋™์ผํ•˜๋‹ค.
  4. ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์˜ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์ „์— ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ ๋ฐ ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž ์„ผํ„ฐ ์—์„œ Client IDยทClient Secret ๋ฐœ๊ธ‰ ๋ฐ Callback URL ๋“ฑ๋ก์„ ์ง„ํ–‰ํ•œ ๋’ค, ๋ฐ›์€ ๊ฐ’์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•œ๋‹ค.
    • ๋„ค์ด๋ฒ„ โ€” ๋ฐฑ์—”๋“œ application.properties ์˜ Sns.naver.clientId, Sns.naver.clientSecret, Sns.naver.callbackUrl / ํ”„๋ก ํŠธ์—”๋“œ .env.development ์˜ VITE_APP_NAVER_CLIENTID, VITE_APP_NAVER_CALLBACKURL
    • ์นด์นด์˜ค โ€” ๋ฐฑ์—”๋“œ application.properties ์˜ Sns.kakao.clientId, Sns.kakao.callbackUrl / ํ”„๋ก ํŠธ์—”๋“œ .env.development ์˜ VITE_APP_KAKAO_CLIENTID, VITE_APP_KAKAO_CALLBACKURL
    • โ€ป Client Secret ์€ ๋ฐฑ์—”๋“œ์—๋งŒ ๋“ฑ๋ก (ํ”„๋ก ํŠธ์—”๋“œ ๋ฒˆ๋“ค์— ํฌํ•จ๋˜๋ฉด ์•ˆ ๋จ). ์นด์นด์˜ค๋Š” ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ Secret ๋ฏธ์‚ฌ์šฉ.
    • โ€ป OAuth CSRF ๋ฐฉ์–ด์šฉ state ๊ฐ’์€ ๋กœ๊ทธ์ธ ์‹œ๋„ ์‹œ ์ž๋™์œผ๋กœ ๋ฌด์ž‘์œ„ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ณ„๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋ถˆํ•„์š”.
  5. ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ .env.development, ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ ํ™˜๊ฒฝ์€ .env.production ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์€ ์‹ฌํ”Œ ํ™ˆํŽ˜์ด์ง€ Backend ์˜ application.properties ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
  6. ๋„ค์ด๋ฒ„ ์†Œ์…œ ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์ƒ์„ธ ์‚ฌํ•ญ์€ ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ API ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.
  7. ์นด์นด์˜ค ์†Œ์…œ ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ์ƒ์„ธ ์‚ฌํ•ญ์€ ์นด์นด์˜ค ๋กœ๊ทธ์ธ API ๋ฌธ์„œ ๋ฅผ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

์‚ฌ์ดํŠธ ์†Œ๊ฐœ ํ™”๋ฉด

sh2

  • ํ•ด๋‹น ํ™”๋ฉด ๋ฐ ์„ธ๋ถ€ ๋ฉ”๋‰ด ํ™”๋ฉด์€ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์ƒ˜ํ”ŒํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  1. ์„ธ๋ถ€๋ฉ”๋‰ด : ์‚ฌ์ดํŠธ์†Œ๊ฐœ, ์—ฐํ˜, ์กฐ์ง์†Œ๊ฐœ, ์ฐพ์•„์˜ค์‹œ๋Š” ๊ธธ
  2. ๊ธฐ๋Šฅ์„ค๋ช… : ์˜ˆ์‹œ ๋ฉ”๋‰ด์— ํ•ด๋‹นํ•˜๋Š” ํ•ญ๋ชฉ์œผ๋กœ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค.
  3. ํ™œ์šฉ๋ฐฉ๋ฒ• : ๊ฐ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ณด๋งˆ๋‹น ํ™”๋ฉด

sh3

  • ํ•ด๋‹น ํ™”๋ฉด ๋ฐ ์„ธ๋ถ€ ๋ฉ”๋‰ด ํ™”๋ฉด์€ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์ƒ˜ํ”ŒํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  1. ์„ธ๋ถ€๋ฉ”๋‰ด : ์ฃผ์š”์‚ฌ์—… ์†Œ๊ฐœ, ๋Œ€ํ‘œ์„œ๋น„์Šค ์†Œ๊ฐœ
  2. ๊ธฐ๋Šฅ์„ค๋ช… : ์˜ˆ์‹œ ๋ฉ”๋‰ด์— ํ•ด๋‹นํ•˜๋Š” ํ•ญ๋ชฉ์œผ๋กœ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค.
  3. ํ™œ์šฉ๋ฐฉ๋ฒ• : ๊ฐ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒˆ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณ ๊ฐ์ง€์› ํ™”๋ฉด

sh4

  • ํ•ด๋‹น ํ™”๋ฉด ๋ฐ ์„ธ๋ถ€ ๋ฉ”๋‰ด ํ™”๋ฉด์€ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์ƒ˜ํ”ŒํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
  1. ์„ธ๋ถ€๋ฉ”๋‰ด : ์ž๋ฃŒ์‹ค, ๋ฌป๊ณ ๋‹ตํ•˜๊ธฐ, ์„œ๋น„์Šค์‹ ์ฒญ
  2. ๊ธฐ๋Šฅ์„ค๋ช… : ์˜ˆ์‹œ ๋ฉ”๋‰ด์— ํ•ด๋‹นํ•˜๋Š” ํ•ญ๋ชฉ์œผ๋กœ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค.
  3. ํ™œ์šฉ๋ฐฉ๋ฒ• : ๊ฐ ์ƒ˜ํ”Œ ํŽ˜์ด์ง€์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ๊ฐœ๋ฐœ ํ›„ ๊ตฌ์„ฑํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•Œ๋ฆผ๋งˆ๋‹น ํ™”๋ฉด

sh5

  1. ์„ธ๋ถ€๋ฉ”๋‰ด : ์˜ค๋Š˜์˜ํ–‰์‚ฌ, ๊ธˆ์ฃผ์˜ํ–‰์‚ฌ, ๊ณต์ง€์‚ฌํ•ญ, ์‚ฌ์ดํŠธ๊ฐค๋Ÿฌ๋ฆฌ
  2. ๊ธฐ๋Šฅ์„ค๋ช… : ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ ์ผ์ •๊ด€๋ฆฌ(๋ถ€์„œ์ผ์ •)์™€ ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ํ™œ์šฉ๋ฐฉ๋ฒ• : ๊ด€๋ฆฌ์ž๊ฐ€ ๋“ฑ๋กํ•œ ์ผ์ •์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ดํŠธ๊ด€๋ฆฌ ํ™”๋ฉด

sh6

  1. ์„ธ๋ถ€๋ฉ”๋‰ด : ์ผ์ •๊ด€๋ฆฌ, ๊ฒŒ์‹œํŒ์ƒ์„ฑ๊ด€๋ฆฌ, ๊ฒŒ์‹œํŒ์‚ฌ์šฉ๊ด€๋ฆฌ, ๊ณต์ง€์‚ฌํ•ญ ๊ด€๋ฆฌ, ์‚ฌ์ดํŠธ ๊ฐค๋Ÿฌ๋ฆฌ๊ด€๋ฆฌ, ์‚ฌ์ดํŠธ๊ด€๋ฆฌ์ž ์•”ํ˜ธ๋ณ€๊ฒฝ, ํšŒ์›๊ด€๋ฆฌ
  2. ๊ธฐ๋Šฅ์„ค๋ช… : ๊ณตํ†ต์ปดํฌ๋„ŒํŠธ ์ผ์ •๊ด€๋ฆฌ(๋ถ€์„œ์ผ์ •)๊ณผ ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ํ™œ์šฉ๋ฐฉ๋ฒ• : ๊ด€๋ฆฌ์ž๋กœ ๋กœ๊ทธ์ธ ํ•œ ํ›„ ์ผ์ •์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ๊ฒŒ์‹œ๋ฌผ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฒŒ์‹œํŒ ์„ค์ • ๊ฐ€๋Šฅ)

ํ™˜๊ฒฝ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๊ตฌ๋™์— ํ•„์š”ํ•œ ํ™˜๊ฒฝ ํ”„๋กœ๊ทธ๋žจ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ๋ช… ๋ฒ„์ „ ๋ช…
Node.js v20.19 ~ v22 LTS
NPM v10 ์ด์ƒ

BackEnd ๊ตฌ๋™

์‹ฌํ”Œ ํ™ˆํŽ˜์ด์ง€ Backend ์†Œ์Šค๋ฅผ ๋ฐ›์•„ ๊ตฌ๋™ํ•œ๋‹ค.

FrontEnd ๊ตฌ๋™

์•„๋ž˜ 1 ~ 3์˜ ๊ณผ์ •์„ ๋”ฐ๋ผ์„œ ์ง„ํ–‰ํ•œ๋‹ค.

1. ํ”„๋กœ์ ํŠธ์˜ ์ƒ์„ฑ

Git์—์„œ ๋ณต์ œํ•˜์—ฌ ์„ค์น˜ ์‹œ 1-1. ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

1-1. Git์—์„œ ํ”„๋กœ์ ํŠธ ๋ณต์ œ ๋ฐ ๋ชจ๋“ˆ ์„ค์น˜

Git์—์„œ clone ํ•œ๋‹ค.

# ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ๋กœ ๋ณต์ œ
git clone https://github.com/[๊ณ„์ •๋ช…]/egovframe-template-simple-react.git

# ๋ณต์ œ๋œ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd egovframe-template-simple-react

# node modules๋ฅผ ์„ค์น˜ํ•ด ์ค€๋‹ค.
npm install

2. ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ์„ค์ •

ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋ฐฑ์—”๋“œ๋ฅผ ๋™์ผ ์ถœ์ฒ˜ ์ƒ๋Œ€๊ฒฝ๋กœ /api ๋กœ ํ˜ธ์ถœํ•œ๋‹ค (src/config.js์˜ SERVER_URL, ๊ธฐ๋ณธ๊ฐ’ /api). ๊ฐœ๋ฐœ ์„œ๋ฒ„(npm run dev)๋Š” vite.config.js ์˜ ํ”„๋ก์‹œ ์„ค์ •์ด /api/* ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ๋กœ ์ „๋‹ฌํ•˜๋ฏ€๋กœ, ๋ฐฑ์—”๋“œ๊ฐ€ http://localhost:8080 ์—์„œ ๊ตฌ๋™ ์ค‘์ด๋ฉด ์ถ”๊ฐ€ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ๋™์ž‘ํ•œ๋‹ค.

๋ฐฑ์—”๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ/ํฌํŠธ์—์„œ ๋œฐ ๋•Œ๋งŒ ์•„๋ž˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

# ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ํ”„๋ก์‹œ ๋Œ€์ƒ ๋ณ€๊ฒฝ (.env.development ๋˜๋Š” ์…ธ ํ™˜๊ฒฝ๋ณ€์ˆ˜)
VITE_APP_API_PROXY_TARGET=http://192.168.0.10:8080

# ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ์ด ๋ฐฑ์—”๋“œ๋ฅผ ์ ˆ๋Œ€ URL๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ•  ๋•Œ (๋นŒ๋“œ ์‹œ์ )
VITE_APP_API_BASE_URL=http://api.example.com

์ปจํ…Œ์ด๋„ˆ/Kubernetes ๋ฐฐํฌ์—์„œ๋Š” nginx ๊ฐ€ /api ๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œํ•˜๋ฏ€๋กœ ์œ„ ๋ณ€์ˆ˜ ์—†์ด ๊ธฐ๋ณธ๊ฐ’(/api)์„ ๊ทธ๋Œ€๋กœ ์“ฐ๊ณ , ๋ฐฑ์—”๋“œ ์ฃผ์†Œ๋Š” ๋Ÿฐํƒ€์ž„์— BACKEND_URL ๋กœ ์ฃผ์ž…ํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ "์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ" ์ ˆ์„ ์ฐธ๊ณ ํ•œ๋‹ค.

3. ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ๋ฐ ๊ธฐํƒ€ ๋ช…๋ น์–ด

# ํ…Œ์ŠคํŠธ์šฉ ๋ฆฌ์•กํŠธ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
npm run dev
# ๋นŒ๋“œํ•  ๋•Œ์—๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
npm run build
# ๋กœ์ปฌ์—์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐํ•  ๋•Œ๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
npm run preview
# ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์€ vite.config.js ์˜ test.include ํŒจํ„ด์— ๋”ฐ๋ผ ์ˆ˜์ง‘๋œ๋‹ค.
# watch ๋ชจ๋“œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
npm run test

# ์ผํšŒ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
npm run test:run

์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ (Docker / Kubernetes)

์ •์  ๋ฒˆ๋“ค์„ nginx ๋กœ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€์™€ Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. nginx ๊ฐ€ /api/* ์š”์ฒญ์„ ๋ฐฑ์—”๋“œ๋กœ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œํ•˜๋ฏ€๋กœ, ํ”„๋ก ํŠธ์—”๋“œ๋Š” ๋ฐฑ์—”๋“œ ์ฃผ์†Œ๋ฅผ ๋นŒ๋“œ ์‹œ์ ์— ๊ณ ์ •ํ•˜์ง€ ์•Š๊ณ  ๋™์ผ ์ถœ์ฒ˜ ์ƒ๋Œ€๊ฒฝ๋กœ(/api) ๋กœ ํ˜ธ์ถœํ•œ๋‹ค. ๋ฐฑ์—”๋“œ ์ฃผ์†Œ๋Š” ๋Ÿฐํƒ€์ž„์— BACKEND_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฃผ์ž…ํ•œ๋‹ค.

API base ๋Š” src/config.js ์˜ SERVER_URL ๋กœ ๊ฒฐ์ •๋˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ /api ์ด๋‹ค. ๋ณ„๋„ ํ˜ธ์ŠคํŠธ๋กœ ์ง์ ‘ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋นŒ๋“œ ์‹œ VITE_APP_API_BASE_URL ๋กœ ์ ˆ๋Œ€ URL ์„ ์ง€์ •ํ•œ๋‹ค.

1. ์ด๋ฏธ์ง€ ๋นŒ๋“œ

Dockerfile ์€ heredoc(COPY <<'NGINX' ...) ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ BuildKit ์ด ํ•„์š”ํ•˜๋‹ค. Docker 20.10+ ์—์„œ๋Š” ๊ธฐ๋ณธ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋น„ํ™œ์„ฑ ํ™˜๊ฒฝ์ด๋ผ๋ฉด DOCKER_BUILDKIT=1 ์„ ์ง€์ •ํ•œ๋‹ค.

DOCKER_BUILDKIT=1 docker build -t egovframe-template-simple-react:5.0.0 .

2. ๋กœ์ปฌ ์‹คํ–‰ (docker compose)

2-1. ํ”„๋ก ํŠธ์—”๋“œ๋งŒ ์‹คํ–‰ (๋ฐฑ์—”๋“œ๋Š” ์™ธ๋ถ€์—์„œ ๊ตฌ๋™ ์ค‘์ธ ๊ฒฝ์šฐ)

# ์™ธ๋ถ€ ๋ฐฑ์—”๋“œ ์ฃผ์†Œ๋ฅผ BACKEND_URL ๋กœ ์ง€์ • (๊ธฐ๋ณธ๊ฐ’: http://egov-simple-backend:8080)
BACKEND_URL=http://host.docker.internal:8080 docker compose up -d web

# http://localhost:3000/ ์ ‘์† (WEB_PORT ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)

2-2. ๋ฐฑ์—”๋“œ๊นŒ์ง€ ํ•จ๊ป˜ ์‹คํ–‰ โ€” ๋กœ๊ทธ์ธ/CRUD ํ†ตํ•ฉ (fullstack ํ”„๋กœํŒŒ์ผ)

๋ฐฑ์—”๋“œ ์ด๋ฏธ์ง€์™€ DB ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋‹ค์Œ์„ ์ „์ œ๋กœ ํ•œ๋‹ค.

  • ์‹ฌํ”Œ ํ™ˆํŽ˜์ด์ง€ Backend ๋ฅผ ๋ณธ ์ €์žฅ์†Œ์™€ ๊ฐ™์€ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— clone (DB ์ดˆ๊ธฐํ™” SQL ๋งˆ์šดํŠธ ๊ฒฝ๋กœ ๊ธฐ์ค€, ๋‹ค๋ฅด๋ฉด BACKEND_DB_DIR ๋กœ ์กฐ์ •)
  • ๋ฐฑ์—”๋“œ ์ด๋ฏธ์ง€ ์‚ฌ์ „ ๋นŒ๋“œ: egovframe-template-simple-backend:5.0.0
# ๋ฐฑ์—”๋“œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ (๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ์—์„œ)
git clone https://github.com/eGovFramework/egovframe-template-simple-backend.git
(cd egovframe-template-simple-backend && DOCKER_BUILDKIT=1 docker build -t egovframe-template-simple-backend:5.0.0 .)

# DB ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ .env ์ž‘์„ฑ (ํ”„๋ก ํŠธ์—”๋“œ ์ €์žฅ์†Œ ๋ฃจํŠธ)
cat > .env <<'ENV'
MYSQL_ROOT_PASSWORD=changeit_root
MYSQL_PASSWORD=changeit_app
ENV

# ํ”„๋ก ํŠธ(nginx) + ๋ฐฑ์—”๋“œ + MySQL ๋™์‹œ ๊ธฐ๋™
docker compose --profile fullstack up -d

# http://localhost:3000/ ์ ‘์† ํ›„ admin / Admin@1234 ๋กœ ๋กœ๊ทธ์ธ

์ด ๊ตฌ์„ฑ์—์„œ ๋ธŒ๋ผ์šฐ์ € โ†’ nginx(/api/*) โ†’ ๋ฐฑ์—”๋“œ(:8080) โ†’ MySQL ๊ฒฝ๋กœ๋กœ ๋กœ๊ทธ์ธ๊ณผ ๊ฒŒ์‹œํŒ CRUD ๊ฐ€ ํ•œ ๋ฒˆ์— ๋™์ž‘ํ•œ๋‹ค.

3. Kubernetes ๋ฐฐํฌ

kubectl apply -f k8s/

# Service ๋Š” ClusterIP ์ด๋ฏ€๋กœ port-forward ๋กœ ์ ‘์†ํ•œ๋‹ค.
kubectl port-forward svc/egov-simple-react 3000:8080
# http://localhost:3000/ ์ ‘์†

๋ฐฑ์—”๋“œ ์—ฐ๋™: k8s/deployment.yaml ์˜ BACKEND_URL ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋ฐฑ์—”๋“œ ํ…œํ”Œ๋ฆฟ (egovframe-template-simple-backend)์˜ k8s Service ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋„๋ก http://egovframe-template-simple-backend:8080 ์œผ๋กœ ๊ธฐ๋ณธ ์„ค์ •๋˜์–ด ์žˆ๋‹ค. ๋ฐฑ์—”๋“œ๋ฅผ ํ•จ๊ป˜ ๋ฐฐํฌํ•˜๋ฉด ๋‘ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์˜ ๊ธฐ๋ณธ๊ฐ’๋งŒ์œผ๋กœ ์—ฐ๋™๋œ๋‹ค. ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ FQDN ์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค(์˜ˆ: http://egovframe-template-simple-backend.<namespace>.svc.cluster.local:8080). nginx ์ปจํ…Œ์ด๋„ˆ๋Š” readOnlyRootFilesystem ์ด๋ฏ€๋กœ ๊ธฐ๋™ ์‹œ BACKEND_URL ์น˜ํ™˜ ๊ฒฐ๊ณผ๋ฅผ emptyDir(/etc/nginx/conf.d)์— ๊ธฐ๋กํ•œ๋‹ค.


์ฐธ์กฐ

๋ณด๋‹ค ์ƒ์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜์˜ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•œ๋‹ค.

  1. vite ๊ณต์‹ ๊ฐ€์ด๋“œ ๋ฌธ์„œ(ํ•œ๊ธ€)
  2. ๊ฐœ๋ฐœํ™˜๊ฒฝ ์ดˆ๊ธฐ ์„ค์ •

About

No description, website, or topics provided.

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages