Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 모든 프로젝트가 공통으로 참조하는것 ( 오픈소스 공통 라이브러리)
  • 특정 프로젝트만 참조하는것 ( 특정 로컬 참조)
  • 그룹 프로젝트가 공통으로 참조하는것 ( 내부공통 라이브러리)
BadGood

Image Modified

의존성 관계가 스파게티가 되는 일반적인 예입니다.

Image Modified


여기서 의존성 단순화 목표는 , 우리가 사용할 스프링요소에대해서 크게 신경쓰지 않는 것입니다.

...

더이상 신규 라이브러리를 도입하기 어려운 상황이 오게됩니다.


Root 셋팅예

Code Block
languagejava
themeEmacs
title/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.webnori.psmon.cloudspring</groupId>
    <artifactId>psmon-cloudspring</artifactId>
    <version>0.1.0</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.M3</spring-cloud.version>
    </properties>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <modules>
        <module>config-service</module>
        <module>eureka-serviceregistry</module>
        <module>library</module>
        <module>front-web</module>
        <module>accountapi</module>
        <module>lobbyapi</module>
        <module>gameapi</module>
    </modules>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    

</project>

설정 포인트:

  • 사용되는 라이브러리의 버젼을 모두 중앙에서 관리합니다. properties 설정및 dependencyManagement에서 목표를 이룰수 있습니다.
  • spring-boot-starter 을 사용하여 부트 사용 요소를 단일화 합니다.
  • repositories 는 spring의 snapshorts버젼을 사용못하게 막습니다. (릴리즈 이상만 사용)
  • modules는 이 시스템이 가진 하위 시스템을 명시합니다. ( 기본으로 하위 디렉토리)
  • groupid지정은 전체 모듈이 같이 사용할수 있게 그룹핑하며 artifactid에서 실제 하위 서비스를 구분하게합니다.  


하위 프로젝트 예

Code Block
languagejava
themeEmacs
title/eureka-serviceregistry/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>

   <artifactId>eureka-serviceregistry</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>eureka-serviceregistry</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>com.webnori.psmon.cloudspring</groupId>
      <artifactId>psmon-cloudspring</artifactId>
      <version>0.1.0</version>
      <relativePath>../</relativePath>
   </parent>

   <properties>
   </properties>

   <dependencies>
      <!-- Eureka Server -->
      <dependency>
         <groupId>org.springframework.cloud</groupId>
         <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>

</project>


설정포인트:

  • 자신의 부모를 (parent)를 지정합니다. 그룹은 부모에서 정해졌기때문에 지정할 필요없습니다.
  • 부모에서 어떠한 버젼의 요소를 사용할것인가 이미 정리가 되었기때문에 , 추가 사용모듈에대해 버젼지정을 하지 않습니다.
  • 하위 모듈에서 만약 버젼을 한번 지정하기 시작하면, 다른 하위모듈에서도 지정하기때문에 서로 다른 버젼이되어 작동될수 있습니다.