Dependency Mechanism

๋“ค์–ด๊ฐ€๋ฉฐ

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ์€ ๋งค์šฐ ์‰ฝ๋‹ค.
  • ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ชจ๋“ˆ์„ ๊ฐ€์ง„ ํ”„๋กœ์ ํŠธ์—์„œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์€ ์–ด๋ ค์šด ์ผ์ด๋‹ค.
  • ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ „๋žต๋“ค์ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

Transitive Dependency๋ž€?

  • ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ์˜์กด์„ฑ์ด ๊ฐ€์ง„ ์˜์กด์„ฑ๋„ ํ•จ๊ป˜ ํฌํ•จ๋˜์–ด์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ๊ฐ™์ด ํฌํ•จ๋˜์–ด์„œ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ ์˜์กด์„ฑ์„ Transitive Dependecy๋ผ๊ณ  ํ•œ๋‹ค.

Dependency Mediation์ด๋ž€?

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜์กด์„ฑ์„ ๋งŒ๋‚˜๋Š” ๊ฒฝ์šฐ ์–ด๋Š ์˜์กด์„ฑ์„ ์„ ํƒํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ „๋žต์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์•„๋ž˜์™€ ๊ฐ™์€ ์˜์กด์„ฑ ์ƒํ™ฉ์„ ๋งŒ๋‚ฌ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž
  A
  โ”œโ”€โ”€ B
  โ”‚   โ””โ”€โ”€ C
  โ”‚       โ””โ”€โ”€ D 2.0
  โ””โ”€โ”€ E
      โ””โ”€โ”€ D 1.0
  • Maven์€ ๊ฐ€์žฅ ๋‚ฎ์€ Depth์˜ ์˜์กด์„ฑ์„ ์ฑ„ํƒํ•˜๋Š” ์ „๋žต์„ ์„ ํƒํ•˜๊ณ  ์žˆ๋‹ค.

    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Dependency D๋Š” A โ†’ E๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ์„ ํƒํ•˜๊ณ  1.0์„ ๊ฐ€์ ธ์˜จ๋‹ค.
  • 1.0 ๋Œ€์‹  2.0์„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

    • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ๊ฐ€์žฅ ๋‚ฎ์€ Depth์˜ ์˜์กด์„ฑ์ธ 2.0์„ ์„ ํƒํ•˜๊ณ  ๊ฐ€์ ธ์˜จ๋‹ค.
 A
  โ”œโ”€โ”€ B
  โ”‚   โ””โ”€โ”€ C
  โ”‚       โ””โ”€โ”€ D 2.0
  โ”œโ”€โ”€ E
  โ”‚   โ””โ”€โ”€ D 1.0
  โ”‚
  โ””โ”€โ”€ D 2.0

Dependency Management์ด๋ž€?

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ 2๊ฐœ์˜ pom.xml์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
  • ๋ถ€๋ชจ์˜ XML
<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>maven</groupId>
 <artifactId>A</artifactId>
 <packaging>pom</packaging>
 <name>A</name>
 <version>1.0</version>
 <dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>test</groupId>
       <artifactId>c</artifactId>
       <version>1.0</version>
       <scope>compile</scope>
     </dependency>
     <dependency>
       <groupId>test</groupId>
       <artifactId>d</artifactId>
       <version>1.2</version>  <!-- ๋ถ€๋ชจ๋Š” 1.2 Version -->
     </dependency>
   </dependencies>
 </dependencyManagement>
</project>
  • ๋ถ€๋ชจ๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ XML
<project>
  <parent>
    <artifactId>A</artifactId>
    <groupId>maven</groupId>
    <version>1.0</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven</groupId>
  <artifactId>B</artifactId>
  <packaging>pom</packaging>
  <name>B</name>
  <version>1.0</version>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>test</groupId>
        <artifactId>d</artifactId>
        <version>1.0</version> <!-- ๋ถ€๋ชจ์˜ Version ๋Œ€์‹  ์ง์ ‘ ๋ฒ„์ ผ์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค -->
      </dependency>
    </dependencies>
  </dependencyManagement>
 
  <dependencies>
    <dependency>
      <groupId>test</groupId>
      <artifactId>c</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>
  • ๋ถ€๋ชจ๊ฐ€ ์„ ์–ธํ•œ Dependency D์— ๋Œ€ํ•ด์„œ ์ž์‹์€ 1.0์œผ๋กœ dependencyManagement๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.
    • ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ๋ฒ„์ ผ์„ ์ง์ ‘์ ์œผ๋กœ ๋ช…์‹œํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ƒฅ dependencies์— ์ถ”๊ฐ€ํ•˜๋ฉด dependency mediation์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด ์•„๋‹Œ๊ฐ€?

  • dependencyManagement์™€ dependencies ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.
    • dependencyManagement๋Š” ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ์ˆ˜ํ–‰๋œ๋‹ค.
    • ์ฆ‰ ์ž์‹์ด ์˜์กด์„ฑ์„ ์ƒ์†๋ฐ›์•„ ์ž‘์„ฑํ•˜์—ฌ๋„ ์˜์กด์„ฑ ์˜ํ–ฅ์€ ์—†๋‹ค.
  • dependencies๋Š” ์ž์‹์˜ ์˜์กด์„ฑ๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • ์ƒ์†๋ฐ›๋Š” ๋ชจ๋“  ์˜์กด์„ฑ์ด dependencyManagement๋ฅผ ์„ ์–ธํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์˜ค๊ฒŒ ๋œ๋‹ค.

Reference