2025. 3. 2. 19:12ㆍSpring 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 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 마이크로서비스의 핵심 기능을 구현할 준비가 완료되었습니다! 🚀
'Spring Microservice' 카테고리의 다른 글
The developer’s tale: Building a microservice with Spring Boot and Java (0) | 2025.03.02 |
---|---|
3.Building microserviceswith Spring Boot (0) | 2025.03.02 |
Setting up the environment (0) | 2025.03.02 |
Building a microservice with Spring Boot and Java (0) | 2025.03.02 |
Making sure our examples are relevant (0) | 2025.03.02 |