MSA - 간단한 상품 주문 프로젝트 : 생성(주요 설정, 의존성 설치)

twonezero·2024년 8월 13일
0

MSA - Spring Cloud

목록 보기
3/3
post-custom-banner

architecture

지난 시간에는 Spring Cloud 를 사용하여 msa 의 기본적인 개념과 동작 과정을 설명했다. 이번에는 위 사진과 같이 프로젝트를 구성해보겠다.

프로젝트 생성

Requirement

  • SpringBoot 3.3.2
  • Java17
  • gradle

msa 아키텍쳐를 생각하며 각각의 서비스를 생성할 때, 아래와 같은 디렉토리 구조로 생성하면 인텔리제이에서 보기가 수월하다.

eureka-service-directory

  • 인텔리제이에서 볼 때의 모습 (깔끔)
    eureka-service-directory-intellij

나는 spring-initializer 사이트를 통해 각각의 프로젝트를 생성해서 같은 폴더 안에 모아두었다. 생성 후 생기는 프로젝트 패키지 이름을 변경하여 Eureka ServerClient 의 역할이 구분될 수 있도록 하였다.

만약 생성 시 package name 을 auth 로 정한다면 생성되는 폴더 이름이 auth 로 돼 있을 것이다. 이걸 Group 과 Artifact 명이 다 나오도록 수정하면 된다.


Gradle 연결

만약 Eureka Server 역할을 하는 server 프로젝트를 인텔리제이로 열었을 때는 위와 같이 안 보일 것이다.(당연)

  • Server 를 기준으로 다른 서비스들이 gradle 프로젝트로 연결되게 하면 된다.
    link-gradle

Dependency 설치

프로젝트를 생성하고 각각의 서비스에 필요한 의존성을 설치한다.

  • Server : 각 유레카 클라이언트를 이어줄 서버 역할
ext {
	set('springCloudVersion', "2023.0.3")
}

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}
  • Auth
ext {
	set('springCloudVersion', "2023.0.3")
	set('querydslVersion', "5.0.0")
}

dependencies {

	// JPA 와 querydsl 관련 의존성 설치
	implementation "com.querydsl:querydsl-jpa:${querydslVersion}:jakarta"
	annotationProcessor "com.querydsl:querydsl-apt:${querydslVersion}:jakarta"
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    
    // hsqldb : 내장 db 로 실행 시 마다 초기화
	runtimeOnly 'org.hsqldb:hsqldb'

	
    // JWT
	implementation 'io.jsonwebtoken:jjwt:0.12.6'
    //Spring Security
    implementation 'org.springframework.boot:spring-boot-starter-security'
    
	implementation 'org.springframework.boot:spring-boot-starter-actuator'
	implementation 'org.springframework.boot:spring-boot-starter-web'
    
    // 유레카 클라이언트
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
	testImplementation 'io.projectreactor:reactor-test'

}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

build.gradle 에서는 ${querydslVersion} 과 같이 버전을 아래와 같이 정의할 수있다.

ext {
	set('springCloudVersion', "2023.0.3")
	set('querydslVersion', "5.0.0")
}
  • Product
    auth 와 거의 동일하다. 서비스끼리 통신을 위한 feignClient 의존성만 추가로 설치한다.
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
  • Order : Product 와 동일

  • Gateway
    해당 프로젝트에서는 spring cloud gateway 를 사용할 것이다.
    gateway 도 마찬가지로 유레카 클라이언트로 등록해준다.

dependencies {
	// Auth Filter 에서 사용하기 위한 JWT 의존성
	implementation 'io.jsonwebtoken:jjwt:0.12.6'
	implementation 'org.springframework.boot:spring-boot-starter-actuator'
	implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}

각 서비스에 대한 스프링부트 프로젝트를 생성하고 필요한 의존성을 설치했다. 다음 글에서는 아래에 대한 내용을 볼 것이다.
1. 서비스의 연결을 위한 설정파일
2. 게이트웨이 설정
3. 서비스 로직에 필요한 주요 코드

참고

각 서비스 프로젝트를 생성하고 Server 프로젝트를 기준으로 다른 서비스와 gradle로 연결하면서, 실수로 인해 한 서비스를 unlink 하고 싶을 때, 인텔리제이에서 빌드가 오류가 나거나, 어떤 서비스가 실행이 안될 때가 있다. 이럴 때는 아래와 같이 해보자.

eureka-server-folder-intellij

Server 프로젝트를 열고 다른 서비스들을 gradle 로 추가하다보면 위와 같이 .idea 폴더가 생성될 수 있다.

위와 같은 파일들은 인텔리제이 gradle tool 탭에서 서비스를 unlink 해도 안 바뀔 수 있다. 그렇기 때문에 이미 생성되고 gradle 로 연결된 프로젝트를 지울 때는 시원하게 .idea 폴더도 삭제해주자!

profile
소소한 행복을 즐기는 백엔드 개발자입니다😉
post-custom-banner

0개의 댓글