기술 스택
spring cloud alibaba, MySQL8, Mybatis-Plus, Nacos, knife4j API 문서, Lombok
개발 환경 설치
- JDK17 설치
- MySQL 설치
프로젝트 구축
2.1 부모-자식 프로젝트 구성
2.1.1 부모 프로젝트 생성
- 빈 Maven 프로젝트 생성, 모든 코드 제거하고 pom.xml만 유지
- 디렉토리 구조: 그림 2
2.1.2 부모 프로젝트 pom 파일 설정
<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>cloud-framework</groupId>
<artifactId>cloud-framework</artifactId>
<packaging>pom</packaging>
<name>Cloud Framework Parent</name>
<modules>
<module>shared-module</module>
<module>api-gateway</module>
<module>logging-module</module>
<module>client-feign</module>
<module>messaging-module</module>
<module>service-contract</module>
</modules>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.2</version>
</parent>
<properties>
17
UTF-8
3.5.3
8.2.0
1.18.32
4.4.0
2022.0.0
2022.0.0.0
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>${knife4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
</build>
<repositories>
<repository>
<id>aliyun</id>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
<repository>
<id>huawei</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
<repository>
<id>central</id>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
</project>
2.1.3 공통 모듈 및 서비스 API 모듈 생성
다른 모듈은 유사한 방식으로 생성합니다. service-contract 모듈의 하위 모듈은 다음과 같이 생성합니다.
service-contract 모듈 pom.xml
<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>
<parent>
<groupId>cloud-framework</groupId>
<artifactId>cloud-framework</artifactId>
<version>1.0.0</version>
</parent>
<groupId>service-contract</groupId>
<artifactId>service-contract</artifactId>
<packaging>pom</packaging>
<modules>
<module>product-contract</module>
<module>user-contract</module>
<module>order-contract</module>
<module>auth-contract</module>
</modules>
<dependencies>
<dependency>
<groupId>shared-module</groupId>
<artifactId>shared-module</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>messaging-module</groupId>
<artifactId>messaging-module</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>client-feign</groupId>
<artifactId>client-feign</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
2.1.4 Nacos 연결용 application.yml 작성
spring:
application:
name: product-contract
cloud:
nacos:
server-addr: Nacos-서버-IP:8848
username: nacos-사용자명
password: nacos-비밀번호
config:
server-addr: Nacos-서버-IP:8848
username: nacos-사용자명
password: nacos-비밀번호
file-extension: yml
group: dev
namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121
discovery:
group: dev
namespace: 21e6f6a7-3293-4db2-9fdc-e671111ec121
config:
import:
- optional:nacos:${spring.application.name}.${spring.cloud.nacos.config.file-extension}
2.1.5 Nacos 기본 설정
- 새 네임스페이스 생성 (기본 네임스페이스 사용 가능)
- 위 application.yml의 네임스페이스 그룹과 ID 수정
- 새 네임스페이스에 구성 생성
- Data ID와 Group 이름을 application.yml의 설정과 일치하도록 수정하고 아래 구성을 복사하여 데이터베이스 IP, 사용자 이름, 비밀번호를 수정합니다.
Nacos.yml
server:
port: 8081
servlet:
context-path: /product
spring:
datasource:
url: jdbc:mysql://MySQL-IP:3306/product_db
username: mysql-user
password: mysql-password
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
database: 1
host: Redis-IP
port: 6379
password: redis-password
lettuce:
pool:
enabled: true
max-active: 100
max-wait: 10000
min-idle: 0
servlet:
multipart:
enabled: true
max-file-size: 50MB
max-request-size: 50MB
knife4j:
enable: true
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2.1.6 시작 클래스 작성
package com.product;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProductContractApplication {
public static void main(String[] args) {
SpringApplication.run(ProductContractApplication.class, args);
System.out.println("Knife4j 접속 주소: http://localhost:8081/product/doc.html");
}
}
이제 Nacos, MySQL, Redis 연결이 정상적으로 작동하고 시작 클래스가 정상적으로 실행됩니다. http://localhost:8081/product/doc.html을 클릭하여 다음 페이지가 나타나면 모든 것이 정상이며 코드 작성을 시작할 수 있습니다.