๐Ÿ” ๋ชฉ์ , ๋ฐฐ๊ฒฝ

๋‚ด๊ฐ€ ์žˆ์—ˆ๋˜ ํŒ€์˜ ๋ฐฑ์—”๋“œ๋Š” MSA ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋งŽ์€ ๊ณณ์—์„œ ๋ ˆํฌ๊นŒ์ง€ ๋‚˜๋ˆ„๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌํŒ€์€ ๋ชจ๋“ˆ๋งŒ ๋‚˜๋ˆ„์–ด ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ๊ตฌ์กฐ๋กœ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์„ ๊ด€๋ฆฌํ•˜๋‹ค ๋ณด๋‹ˆ ์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๊ณ , ์ค‘๋ณต์ฝ”๋“œ ๊ด€๋ฆฌ์˜ ํ•„์š”์„ฑ์„ ๋А๋ผ๊ณ  ์žˆ์—ˆ๋‹ค.

์ค‘๋ณต์ฝ”๋“œ๊ฐ€ ๋ญ๊ฐ€ ์žˆ๋ƒ? ์‹ถ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, security ์„ค์ •, ์ธ์ฆํ•„ํ„ฐ, swagger ์„ค์ • ๋“ฑ ๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ ์ ์šฉ๋˜๋Š” ์„ค์ •๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ
๊ฑฐ๋ž˜์†Œ ์กฐํšŒ ๊ธฐ๋Šฅ, ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ, ์—‘์…€ ์ƒ์„ฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ ๋“ฑ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ค‘๋ณต์ฝ”๋“œ๋Š” ๋งŽ์•„์งˆ์ˆ˜๋ก ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•  ๋•Œ ๋ชจ๋“  ๋ชจ๋“ˆ์— ๋“ค์–ด๊ฐ€์„œ ํ™•์ธ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์„ ๋†“์น˜๊ธฐ ์‰ฝ๋‹ค. ํ•˜๋‚˜๋ผ๋„ ๋†“์น˜๋ฉด ์žฅ์• ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ํญํƒ„๊ณผ ๊ฐ™์€ ์กด์žฌ์ด๋‹ค! ๐Ÿ’ฃ

 

์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•  ํ•„์š”์„ฑ์€ ์ถฉ๋ถ„ํžˆ ๋А๋‚€ ๊ฒƒ ๊ฐ™๊ณ , ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ์ข‹์„๊นŒ?

  1. Core ๋ชจ๋“ˆ
    multi module ํ”„๋กœ์ ํŠธ์— core ๋ชจ๋“ˆ์„ ๋‘๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ฐฌ๋ฐ˜ ๋…ผ๋ž€์ด ๊ฝค ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋‹ค.
    ํ†ตํ•ฉ์–ด๋“œ๋ฏผ์„ ๊ตฌ์ถ•ํ•  ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งŽ์€ ๋…ผ์Ÿ๊ณผ ํ† ๋ก ์ด ์žˆ์—ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ core ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ์—ˆ๋‹ค.

    ๊ทธ๋กœ ์ธํ•ด ์šฐ๋ฆฌํŒ€์€ core ๋ชจ๋“ˆ์„ ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ , ๋ชจ๋“  ๋ชจ๋“ˆ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉ๋˜์–ด์•ผ๋งŒ ํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ๋“ค๋งŒ ๋ชจ์•„๋‘์—ˆ๋‹ค.
    (core ๋ชจ๋“ˆ์— ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” PR์ด ์˜ฌ๋ผ์˜ค๋ฉด, ๊ทธ ๋‚ ์€ ํ† ๋ก ์˜ ์žฅ์ด ์—ด๋ฆฐ๋‹ค ๐Ÿคฃ)

    ๊ทธ๋Ÿฌ๋‚˜ ์—‘์…€ ์ƒ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ core์— ๋„ฃ๊ธฐ๋Š” ๋ถ€๋‹ด์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์—‘์…€์˜ ๊ธฐ๋Šฅ์ด ๋ฐ”๋€๋‹ค๊ณ  ๋ชจ๋“  ๋ชจ๋“ˆ์ด ์˜ํ–ฅ์„ ๋ฐ›์•„์•ผํ•˜๋‚˜? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฑด ์ข€.. ์ด๋Ÿฐ ์ƒ๊ฐ์„ ํ•  ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋Ÿผ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ์ œ์™ธํ•œ ๊ณตํ†ต ์ฝ”๋“œ๋Š”... ์–ด๋””์— ๋„ฃ์ง€...?

  2. Common ๋ชจ๋“ˆ
    common ๋ชจ๋“ˆ์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ณตํ†ต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ์œผ๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
    ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ์‚ฌ์šฉ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ์—์„œ๋Š” ๋ชจ๋“ˆ๋ผ๋ฆฌ ํ†ต์‹ ์ด ํ•„์ˆ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, User ๋ชจ๋“ˆ ํ˜ธ์ถœ์— ์‚ฌ์šฉํ•  VO๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฒ• ํ•˜๋‹ค.
    ๊ทธ๋Ÿผ UserVO ํด๋ž˜์Šค๋Š” common์— ๋„ฃ์–ด์•ผ์ง€~

    ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฐ ๋ชจ๋“ˆ์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฉด ๊ต‰์žฅํžˆ ์œ„ํ—˜ํ•œ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค. "๊ณตํ†ต์ฝ”๋“œ ๋ชจ์Œ"์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ชจ๋“ˆ์€ common ๋ชจ๋“ˆ์„ importํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๊ทธ๋Ÿผ common์— ๊ธฐ๋Šฅ ํ•˜๋‚˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ชจ๋“  ๋ชจ๋“ˆ์— ์˜ํ–ฅ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค!

    ๊ทธ๋Ÿผ ์ด๋Ÿฐ ์˜๋ฌธ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. core๋„ ์ฝ”๋“œ ๋ฐ”๋€Œ๋ฉด ๋ชจ๋“  ๋ชจ๋“ˆ ์˜ํ–ฅ ๋ฐ›๋Š”๊ฑด ๋˜‘๊ฐ™์ž–์•„? ๋ญ๊ฐ€ ๋‹ค๋ฅธ๋ฐ?
    ๋‹ค๋ฅด๋‹ค. core๋Š” ์ด๋ฆ„์—์„œ ์ฃผ๋Š” "ํ•ต์‹ฌ" ์ด๋ผ๋Š” ์••๋ฐ•๊ฐ๊ณผ, "ํ•„์ˆ˜ ๊ณตํ†ต ๊ธฐ๋Šฅ๋งŒ ์ถ”๊ฐ€"๋ผ๋Š” ํŒ€ ์ปจ๋ฒค์…˜์œผ๋กœ ๋งž์ถฐ์ง„ hardํ•œ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋กœ ์ •์ œ๋œ๋‹ค.
    ์ด์™€ ๋ฐ˜๋Œ€๋กœ common์€ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, core์™€ ๊ฐ™์ด ํŒ€์›๋“ค์˜ ์‹ฌ๋ฆฌ์  ์••๋ฐ•๊ฐ๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ํ™•๋ฅ ์ด ๋†’๋‹ค.

    common์€ ๋ฆฌ์Šคํฌ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋‹ค!

  3. Library ๋ชจ๋“ˆ
    library๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ, ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.
    ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•จ์ด ๋ชฉ์ ์ด๋‹ˆ๋งŒํผ, ๋ฌด์ฐจ๋ณ„์ ์ธ ๋ณ€๊ฒฝ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.
    ๋˜ํ•œ ๊ธฐ๋Šฅ๋ณ„๋กœ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์‘์ง‘์„ฑ๋„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ์›ํ•˜๋˜ ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค!


์ด๋Ÿฌํ•œ ํ๋ฆ„์œผ๋กœ ์šฐ๋ฆฌํŒ€์€ ํ•ต์‹ฌ์ฝ”๋“œ๋Š” Core ๋ชจ๋“ˆ์—, ๊ธฐ๋Šฅ๋‹จ์œ„ ์ค‘๋ณต์ฝ”๋“œ๋Š” Library ๋ชจ๋“ˆ์— ๋งŒ๋“ค๊ธฐ๋กœ ํ•˜์˜€๋‹ค!

๊ทธ๋ ‡๊ฒŒ ํŒŒ์ผ ์—…๋กœ๋“œ, ์—‘์…€, ์•”ํ˜ธํ™” ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.

์‹ ๋‚˜๊ฒŒ ์‚ฌ์šฉํ•˜๋˜ ์ค‘, ํ•œ ํŒ€์›์ด JPA ๊ธฐ๋Šฅ์˜ sort ๊ธฐ๋Šฅ์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก library ๋ชจ๋“ˆ์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
library ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜๋ฉด library๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ชจ๋“ˆ์ด ์žฌ๋นŒ๋“œ๋˜์–ด ๋ฐฐํฌ๋˜๋Š” ๋ฐฉ์‹์ธ๋ฐ, ํ•œ ์„œ๋ฒ„๊ฐ€ ๋œจ์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์† ์ฃฝ๊ณ  ์žˆ์—ˆ๋‹ค.

์›์ธ์„ ์‚ดํŽด๋ณด๋‹ˆ, library์— JPA ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, ํ•ด๋‹น ์„œ๋ฒ„์—์„œ๋Š” DB๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ datasource ์„ค์ •์ด ์—†์–ด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์ฝ”๋“œํ•˜๋‚˜ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ ์–ด๋”˜์ง€ ๋ชจ๋ฅด๋Š” ์–ด๋–ค ์„œ๋ฒ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋Š”๊ฑด ๊ต‰์žฅํžˆ ํฐ ๋ฌธ์ œ๋ผ๊ณ  ๋А๊ปด์กŒ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ”์•ผ๊ฒ ๋‹ค...!

 

๋ฌธ์ œ์ 

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ธฐ ์ „, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋“ˆ์˜ ๋ฌธ์ œ์ ์„ ๋‚˜์—ดํ•ด๋ณด์•˜๋‹ค.

  1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ๋ผ๋ฆฌ ์˜์กด์„ฑ์ด ๊ฐ•ํ•˜๋‹ค
    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋ ค๊ณ  ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ๋Š์–ด ๋†“์•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์ด ์ŠคํŒŒ๊ฒŒํ‹ฐ์ฒ˜๋Ÿผ ์—ฎ์—ฌ ์žˆ์—ˆ๋‹ค.
    ๊ธฐ๋Šฅ๋ผ๋ฆฌ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋‹ค ๋ณด๋‹ˆ library๋ฅผ ๋”๋”์šฑ ๋œ์–ด๋‚ด๊ธฐ ์–ด๋ ค์›Œ์กŒ๊ณ , ๊ธฐ๋Šฅ๋ผ๋ฆฌ์˜ ์˜์กด์„ฑ์„ ๋Š์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ชจ๋“  ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.
    ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ๋กœ ๋ฌถ๋‹ค ๋ณด๋‹ˆ, ๋ชจ๋“  ๋ชจ๋“ˆ์ด library์— ์˜์กด์„ฑ์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ๋‹ค.
    ๊ทธ๋ž˜์„œ library์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ๋ชจ๋“ˆ์ด ๋ฐฐํฌ ๋˜์–ด์•ผํ•˜๊ณ , ๋ชจ๋“  ๋ชจ๋“ˆ์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.

ํ•ด๊ฒฐ์ฑ…

  1. Library๋ฅผ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ
    library๋ฅผ github repository๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ทธ ์•ˆ์—์„œ ๊ธฐ๋Šฅ๋“ค์„ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค!
    repo๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋“ค๊ณผ ๋ฌผ๋ฆฌ์ ์ธ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด๊ณ , ๊ธฐ๋Šฅ๋ผ๋ฆฌ์˜ ์˜์กด์„ฑ์€ ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ๋กœ ๋Š์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  2. Github Maven Registry๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฒ„์ €๋‹ํ•˜๊ธฐ
    ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •์— ๊ธฐ์กด ๋ชจ๋“ˆ๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋ฉด ๋ฒ„์ €๋‹ ์™ธ์—๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.
    ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์—†์„๊นŒ ์ฐพ๋‹ค๊ฐ€ maven repository์— ์˜ฌ๋ฆฌ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์˜€๊ณ , github์—๋„ ์กด์žฌํ•˜๊ธธ๋ž˜ ๋ƒ‰ํผ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑํ•˜๊ธฐ

์™œ Github Maven Registry์ธ๊ฐ€?

  • private maven repository๊ฐ€ ํ•„์š”ํ•˜๋‹ค
  • github์— ๋Œ€ํ•œ ์ดํ•ด๋„๊ฐ€ ๋†’๋‹ค
  • ๋ณด์•ˆ์„ฑ ๊ฒ€ํ† ๊ฐ€ ํ•„์š” ์—†๋‹ค.

์ด 3๊ฐ€์ง€ ์ด์œ ๋กœ ์ฑ„ํƒํ•˜์˜€๋‹ค.

 

GIthub Action ๊ตฌ์„ฑํ•˜๊ธฐ

๋ชจ๋“ˆ ์ด๋ฆ„๊ณผ ๋ฒ„์ „์„ ๋ฐ›๊ณ , github registry์— publishํ•˜๋Š” ์žฌ์‚ฌ์šฉ workflow ์˜ˆ์‹œ์ด๋‹ค.

on:
  workflow_call:
    inputs:
      module_name:
        required: true
        type: string
      version:
        required: true
        type: string

jobs:
  publish-package:
    runs-on: [ self-hosted ]
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          distribution: 'corretto'
          java-version: '17'
          cache: 'gradle'

      - name: Publish to Github Registry
        run: ./gradlew :${{ inputs.module_name }}:publish
        env:
          MAVEN_USER: ${{ github.repository_owner }}
          MAVEN_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
          VERSION: ${{ inputs.version }}

 

Gradle ์„ค์ •ํ•˜๊ธฐ

  • Library ํ”„๋กœ์ ํŠธ Gradle
    ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๊ฐ™์ด ํฌํ•จํ•ด์„œ ๋นŒ๋“œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜์˜€๋‹ค.
import org.springframework.boot.gradle.tasks.bundling.BootJar

plugins {
	`maven-publish`
}

allprojects {
	apply(plugin = "maven-publish")
	group = "com.test.library"
}

subprojects {
    val sourceSets = the<SourceSetContainer>()
    val sourcesJar = task<Jar>("sourcesJar") {
        from(sourceSets["main"].allSource)
        archiveClassifier.set("sources")
    }

    publishing {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/<ORG_NAME>/library")
                credentials {
                    username = System.getenv("MAVEN_USER")
                    password = System.getenv("MAVEN_PASSWORD")
                }
            }
        }
        publications {
            create<MavenPublication>(project.name) {
                version = System.getenv("VERSION") ?: project.property("VERSION").toString()

                artifacts {
                    artifact(tasks.getByName("jar").outputs.files.singleFile) {
                        builtBy(tasks.getByName("jar"))
                    }
                    artifact(sourcesJar)
                }
            }
        }
    }
}
  • API ํ”„๋กœ์ ํŠธ Gradle
    ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์˜ gradle์—๋Š” maven์— github ์ฃผ์†Œ๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.
allprojects {
	repositories {
        mavenCentral()
        maven {
            url = uri("https://maven.pkg.github.com/<ORG_NAME>/library")
            credentials {
                username = System.getenv("MAVEN_USER")
                password = System.getenv("MAVEN_PASSWORD")
            }
        }
        mavenLocal()
    }
}

 

๋งŒ๋“  ๋ชจ๋“ˆ์„ importํ•˜๋ ค๋ฉด, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •ํ•˜๋“ฏ์ด ํ•˜๋ฉด ๋œ๋‹ค.

implementation("<groupId>:<artifactId>:<version>")

ex) implementation("com.test.library:excel:1.0.0")

 

๋ธŒ๋žœ์น˜ ์ „๋žต ์„ค์ •ํ•˜๊ธฐ

๋‹ค์–‘ํ•œ ๋ธŒ๋žœ์น˜ ์ „๋žต์ด ์žˆ๋Š”๋ฐ, ๋‚˜๋Š” Github-flow ์ „๋žต์„ ์ฑ„ํƒํ•˜์˜€๋‹ค. [๊ณต์‹ ๋ฌธ์„œ]

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฉ”์ธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— git-flow์™€ ๊ฐ™์€ ๋„ˆ๋ฌด ๋งŽ์€ step์„ ๋‘๊ณ  ์‹ถ์ง€๋Š” ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„์ „๋ณ„๋กœ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌ๋Š” ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๋‹จ์ˆœํ•œ github-flow๊ฐ€ ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฐœ๋ฐœ ์Šคํ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. main branch์—์„œ ์ƒˆ๋กœ์šด branch ์ƒ์„ฑ
    ๋ธŒ๋žœ์น˜ ๋ช… ์ปจ๋ฒค์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    <module_name>/<๋ฒ„์ „>
    ex) excel/1.1.0

  2. ํ•ด๋‹น ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ ํ›„ PR ์ƒ์„ฑ
  3. main branch์— merge ์‹œ github action์œผ๋กœ maven registry์— publish

 

๋กœ์ปฌ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•

๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋Ÿด ๋• local maven์œผ๋กœ publish ํ•œ ๋’ค ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์—์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค.

./gradlew :{{ module_name }}:publishToMavenLocal

ex) ./gradlew :excel:publishToMavenLocal

---

gradle :{{ module_name }}:publishToMavenLocal

ex) gradle :excel:publishToMavenLocal

 

๋กœ์ปฌ์—์„œ๋Š” ์ฃผ์˜ํ•ด์•ผํ•  ์ ์ด ์žˆ๋‹ค. ๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด Local Maven Registry์— ์ด๋ฏธ publish๊ฐ€ ๋˜์–ด์žˆ๋‹ค๋ฉด, API ๊ฐœ๋ฐœํ•  ๋•Œ Github์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด๋• intellij์—์„œ local maven์„ ์ฐพ์•„ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์šฐ๋ฉด ๋œ๋‹ค.

+ Recent posts