Getting started with the skeleton project

2025. 3. 2. 19:12Spring Microservice

📌 Spring Boot 기반 Licensing Service 마이크로서비스 프로젝트 생성 및 설정

(O-stock의 Licensing Service 프로젝트 초기 구성 및 Maven 설정)

🔹 1. Licensing Service 스켈레톤 프로젝트 생성

✅ (1) Spring Initializr를 활용한 프로젝트 생성

Spring Boot 기반 마이크로서비스를 빠르게 생성하기 위해 Spring Initializr를 사용합니다.
Spring Initializr는 필수 종속성(Dependencies) 및 프로젝트 설정을 자동으로 구성해 줍니다.

📌 Spring Initializr 프로젝트 설정

  • Project: Maven
  • Language: Java
  • Spring Boot Version: 3.4.3
  • Group: com.optimagrowth
  • Artifact: licensing-service
  • Name: Licensing Service
  • Description: OStock Licensing Service
  • Package Name: com.optimagrowth.license
  • Packaging: Jar
  • Java Version: 17
  • Dependencies:
    • Spring Web → REST API 개발을 위한 Spring MVC 지원
    • Spring Boot Actuator → 서비스 모니터링 및 관리 기능 제공

Spring Initializr에서 위와 같이 설정한 후 "Generate" 버튼을 눌러 프로젝트를 다운로드합니다.
Spring Boot 프로젝트를 다운로드한 후, 선호하는 IDE(Eclipse, IntelliJ, NetBeans)에서 프로젝트를 엽니다.

📌 Spring Initializr 설정 화면 예시

 

✅ (2) 프로젝트 구조 확인

Spring Boot 프로젝트를 생성하면 기본적으로 아래와 같은 디렉터리 구조가 생성됩니다.

📌 Licensing Service 프로젝트 디렉터리 구조

Licensing-service
 ├── src/main/java
 │   ├── com.optimagrowth.license
 │   │   ├── controller    # REST API 컨트롤러 클래스
 │   │   ├── model         # 엔티티 및 DTO 클래스
 │   │   ├── service       # 비즈니스 로직 클래스
 │
 ├── src/main/resources
 │   ├── static
 │   ├── templates
 │   ├── application.properties  # 애플리케이션 설정 파일
 │
 ├── src/test/java
 │   ├── com.optimagrowth.license  # 단위 테스트 코드
 │
 ├── pom.xml  # Maven 프로젝트 설정 파일

📌 프로젝트 구조 예시(단, controller, model, 그리고 service 패키지는 생성되지 않습니다. 참고 바랍니다)

출처 : Spring Microservices in Action 2nd Edition

 

Spring Boot 기본 디렉터리 구조를 따르며, 패키지를 적절히 분리하여 유지보수성을 높입니다.
주요 패키지:

  • controller → REST API 엔드포인트 정의
  • model → 데이터 모델 및 DTO 정의
  • service → 비즈니스 로직 및 서비스 계층

🔹 2. Maven 설정 (pom.xml)

Spring Boot 프로젝트에서 가장 중요한 설정 파일 중 하나는 Maven 빌드 파일(pom.xml)입니다.
아래는 Licensing Service의 pom.xml 파일 기본 설정입니다.

📌 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
    https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- <1> Spring Boot 기본 부모 프로젝트 설정 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.3</version>
        <relativePath/>
    </parent>

    <groupId>com.optimagrowth</groupId>
    <artifactId>licensing-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Licensing Service</name>
    <description>Ostock Licensing Service</description>

    <properties>
        <!-- <2> Java 17 버전 사용 -->
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- <3> Spring Boot Actuator (애플리케이션 모니터링) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- <4> Spring Boot Web (REST API 개발) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Boot Test (테스트 지원) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>        
    </dependencies>

    <build>
        <plugins>
            <!-- <5> Spring Boot Maven Plugin (빌드 및 실행 지원) -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

📌 주요 설정 설명
1️⃣ Spring Boot 부모 프로젝트 설정

  • <parent> 태그를 사용하여 Spring Boot의 디폴트 설정을 상속받음.

2️⃣ Java 17 사용 설정

  • <java.version>17</java.version>을 명시하여 프로젝트에서 Java 17을 사용하도록 지정.

3️⃣ Spring Boot Actuator 추가

  • /actuator/health 등의 엔드포인트를 통해 서비스 모니터링 가능.

4️⃣ Spring Boot Web 추가

  • REST API 개발을 위해 Spring Web 모듈을 포함.

5️⃣ Spring Boot Maven Plugin 추가

  • spring-boot:run 명령을 사용하여 간편하게 애플리케이션 실행 가능.

Spring Boot의 스타터 패키지(spring-boot-starter-*)를 사용하여 필요한 종속성을 쉽게 추가 가능.
Maven 플러그인을 활용하여 애플리케이션 빌드 및 배포 자동화.

🔹 3. 프로젝트 종속성 확인 (Dependency Tree)

Maven을 사용하면 프로젝트에 포함된 모든 라이브러리를 확인할 수 있습니다.

📌 Maven Dependency Tree 확인

mvn dependency:tree

 

 

📌 출력 예시

[INFO] com.optimagrowth:licensing-service:jar:0.0.1-SNAPSHOT
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:3.4.3:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:3.4.3:compile
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:3.4.3:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:3.4.3:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:3.4.3:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.5.16:compile
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.5.16:compile
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.24.3:compile
[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.24.3:compile
[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:2.0.16:compile
[INFO] |  |  +- jakarta.annotation:jakarta.annotation-api:jar:2.1.1:compile
[INFO] |  |  \- org.yaml:snakeyaml:jar:2.3:compile
[INFO] |  +- org.springframework.boot:spring-boot-actuator-autoconfigure:jar:3.4.3:compile
[INFO] |  |  +- org.springframework.boot:spring-boot-actuator:jar:3.4.3:compile
[INFO] |  |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.18.2:compile
[INFO] |  |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.18.2:compile
[INFO] |  |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.18.2:compile
[INFO] |  |  \- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.18.2:compile
[INFO] |  +- io.micrometer:micrometer-observation:jar:1.14.4:compile
[INFO] |  |  \- io.micrometer:micrometer-commons:jar:1.14.4:compile
[INFO] |  \- io.micrometer:micrometer-jakarta9:jar:1.14.4:compile
[INFO] |     \- io.micrometer:micrometer-core:jar:1.14.4:compile
[INFO] |        +- org.hdrhistogram:HdrHistogram:jar:2.2.2:runtime
[INFO] |        \- org.latencyutils:LatencyUtils:jar:2.0.3:runtime
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:3.4.3:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:3.4.3:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.18.2:compile
[INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.18.2:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:3.4.3:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:10.1.36:compile
[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:10.1.36:compile
[INFO] |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:10.1.36:compile
[INFO] |  +- org.springframework:spring-web:jar:6.2.3:compile
[INFO] |  |  \- org.springframework:spring-beans:jar:6.2.3:compile
[INFO] |  \- org.springframework:spring-webmvc:jar:6.2.3:compile
[INFO] |     +- org.springframework:spring-aop:jar:6.2.3:compile
[INFO] |     +- org.springframework:spring-context:jar:6.2.3:compile
[INFO] |     \- org.springframework:spring-expression:jar:6.2.3:compile
[INFO] \- org.springframework.boot:spring-boot-starter-test:jar:3.4.3:test
[INFO]    +- org.springframework.boot:spring-boot-test:jar:3.4.3:test
[INFO]    +- org.springframework.boot:spring-boot-test-autoconfigure:jar:3.4.3:test
[INFO]    +- com.jayway.jsonpath:json-path:jar:2.9.0:test
[INFO]    |  \- org.slf4j:slf4j-api:jar:2.0.16:compile
[INFO]    +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.2:test
[INFO]    |  \- jakarta.activation:jakarta.activation-api:jar:2.1.3:test
[INFO]    +- net.minidev:json-smart:jar:2.5.2:test
[INFO]    |  \- net.minidev:accessors-smart:jar:2.5.2:test
[INFO]    |     \- org.ow2.asm:asm:jar:9.7.1:test
[INFO]    +- org.assertj:assertj-core:jar:3.26.3:test
[INFO]    |  \- net.bytebuddy:byte-buddy:jar:1.15.11:test
[INFO]    +- org.awaitility:awaitility:jar:4.2.2:test
[INFO]    +- org.hamcrest:hamcrest:jar:2.2:test
[INFO]    +- org.junit.jupiter:junit-jupiter:jar:5.11.4:test
[INFO]    |  +- org.junit.jupiter:junit-jupiter-api:jar:5.11.4:test
[INFO]    |  |  +- org.opentest4j:opentest4j:jar:1.3.0:test
[INFO]    |  |  +- org.junit.platform:junit-platform-commons:jar:1.11.4:test
[INFO]    |  |  \- org.apiguardian:apiguardian-api:jar:1.1.2:test
[INFO]    |  +- org.junit.jupiter:junit-jupiter-params:jar:5.11.4:test
[INFO]    |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.11.4:test
[INFO]    |     \- org.junit.platform:junit-platform-engine:jar:1.11.4:test
[INFO]    +- org.mockito:mockito-core:jar:5.14.2:test
[INFO]    |  +- net.bytebuddy:byte-buddy-agent:jar:1.15.11:test
[INFO]    |  \- org.objenesis:objenesis:jar:3.3:test
[INFO]    +- org.mockito:mockito-junit-jupiter:jar:5.14.2:test
[INFO]    +- org.skyscreamer:jsonassert:jar:1.5.3:test
[INFO]    |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
[INFO]    +- org.springframework:spring-core:jar:6.2.3:compile
[INFO]    |  \- org.springframework:spring-jcl:jar:6.2.3:compile
[INFO]    +- org.springframework:spring-test:jar:6.2.3:test
[INFO]    \- org.xmlunit:xmlunit-core:jar:2.10.0:test

Spring Boot의 핵심 모듈(Actuator, Web, Test)이 포함됨을 확인 가능.

📌 결론: Licensing Service 프로젝트 초기 설정

1️⃣ Spring Initializr를 사용하여 기본 Spring Boot 프로젝트를 생성.
2️⃣ Maven을 활용하여 프로젝트의 pom.xml을 설정.
3️⃣ Spring Boot Web, Actuator 등의 종속성을 추가.
4️⃣ Maven을 사용하여 프로젝트 종속성 확인 (mvn dependency:tree).

 

🔹 이제 Licensing Service 마이크로서비스의 핵심 기능을 구현할 준비가 완료되었습니다! 🚀