일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- batchframework
- Kotlin
- springrestdocs
- 스타트업
- 백엔드
- API
- 스프링부트
- 서브모듈
- multimodule
- react
- batch
- 회고
- 멀티모듈
- submodule
- spring
- 스프링부트배치
- 성장
- springboot
- 프론트엔드
- batch framework
- 문서화
- 스프링
- 스프링배치
- springbootbatch
- Today
- Total
노트북을 열고.
[SubModule] 3. 멀티 모듈생성 본문
1. Sub Module 생성하기
다음과 같이 총 4개의 Sub Module을 생성하겠습니다.
module-common : 공통모듈
module-web : 일반적인 서비스이용자를 위한 웹서비스 모듈
module-api : Web페이지 내부에서 직접 연결을 담당하는 서비스 또는 DB와 접점을 당하는 서비스로 구성된 모듈
module-batch : 일정한 스케쥴을 주기로 일괄처리 서비스를 담당하는 모둘
setting.gradle 파일에 다음과 같이 rootProject를 추가합니다.
rootProject.name = 'modules'
RootContext[Modules]에서 마우스 오른쪽버튼을 클릭 [New] - [Module] 을 선택합니다.
New Module 생성창이 표시되면 Gradle을 선택, Additional Libraries and Frameworks 선택항목에서 Java를 선택하하신 후 Next 를 클릭하십시오.
Add as module to 화면에서 ArtifactId항목에 생성하려는 모듈의 식별명칭을 입력하여 주십시오.
먼저 module-web이라는 이름으로 ArtifactId를 생성하겠습니다. GroupId 와 Version 항목은 현재 생성된 프로젝트를 그대로 상속(Inherit)받기 위해 Inherit 체크박스를 체크하시고 바로 Next를 클릭해 주십시오.
마지막으로 Module name은 앞서 ArtifactId와 동일한 이름인 "module-web"으로 명명하겠습니다. 바로 Next를 클릭해 주십시오.
이제 modules라는 RootContext안에 module-web이라는 Module이 생성되었습니다. 간단하죠?
src/main/java : Java 소스 경로
src/test/java : Spring Boot의 테스트코드 경로
src/main/resources/static : static한 파일(css, image, js 등)의 디폴트 경로
src/main/resources/templates : 타임리프 등 서버사이드 템플릿 파일의 경로
module-web을 생성했던 동일한 방법으로 Module-api, Module-common, Module-batch 이렇게 총 4개의 독립적인 모듈을 추가로 생성하겠습니다. 마지막으로 이제는 아무짝에 쓸모가 없어진 RootContext에 있는 Src의 폴더를 모두 삭제하겠습니다.
다 만들어진 구성은 다음과 같습니다. 어때요? 참 쉽죠.
module을 생성하기 전 setting.gradle 파일에 다음과 같이 rootProject를 생성하였습니다.
이제 4개의 module을 생성한 상태에서 setting.gradle 파일을 살펴보겠습니다.
rootProject.name = 'modules'
include 'module-web'
include 'module-api'
include 'module-batch'
include 'module-common'
rootProject.name = 'modules' 하단에 방금 전 생성한 모듈들이 자동으로 포함(include)되었습니다.
2. Build.gradle 구성하기
프로젝트 개발을 진행하면서 필요한 다양한 의존성 라이브러리 또는 플러그인들은 프로젝트 내부에 추가하거나 빼는 작업은 Gradle이라는 도구를 통해 손쉽게 관리할 수 있습니다.
이러한 작업을 관리하는 build.gradle파일을 열어 다음과 같이 정의하겠습니다. 앞으로 프로젝트를 진행해 나아가면서 필요하 의존성 라이브러리들은 그때 그때 추가해 가도록 하겠습니다.
buildscript {
ext {
springBootVersion = '2.1.5.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "io.spring.gradle:dependency-management-plugin:0.6.0.RELEASE"
}
}
subprojects {
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.salt'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compileOnly('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-jdbc')
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile('org.springframework.boot:spring-boot-starter-test')
runtime('mysql:mysql-connector-java')
runtime('com.h2database:h2')
}
}
project(':module-common') {
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
}
}
project(':module-web') {
dependencies {
compile project(':module-common')
compile('org.springframework.boot:spring-boot-starter-web')
}
}
project(':module-api') {
dependencies {
compile project(':module-common')
}
}
project('module-batch') {
dependencies {
compile project(':module-common')
}
}
buildscript : 버전, 의존 라이브러리, 저장소를 설정해 스프링부트 플러그인을 사용할 수 있게 합니다.
subprojects : 앞서 설정 setting.gradle에 include한 모든 프로젝틀에 대하여 한번에 관리합니다. 이 스코프안에서 정의한 플러그인, 버전 그리고 의존성(dependencies)은 모든 서브모듈 프로젝트에 공통적으로 적용됩니다.
project : 각각에 분리된 서브모듈 프로젝트간에 의존성을 관리합니다. 당초 우리가 설계하고자 한 구조와 동일한 형태로 module_common을 module-web, module-api, module-batch가 공통영역 을 관리하는 모듈을 의존하고 있습니다.
마지막으로 각 모듈을 시작할 Application 클래스를 생성하겠습니다. 각 모듈의 루트 컨텍스트를 기준으로 src/main/java폴더에 마우스 오른쪽버튼을 클릭 후 [New] - [Java class]를 선택합니다.
Create New Class 팝업창에서 점(.)을 기준으로 각자 원하시는 패키지경로를 정의하고 애플리케이션 클래스를 생성합니다.
네 새로 생성된 ModuleWebApplication 클래스에는 다음과 같이 main함수를 작성합니다.
package com.salt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class ModuleWebApplication {
public static void main(String[] args) {
SpringApplication.run(ModuleWebApplication.class, args);
}
@GetMapping("/helloworld")
public String HelloWorld() {
return "hello World";
}
}
@RestController : @Controller와 @ResponseBody를 합쳐놓은 형태입니다. 간혹 @RestController와 @Controller의 차이를 잘 모르시는 분들도 계십니다.(죄송합니다. 접니다.) 만약 이부분에 @Controller로 정의하신 후 어플리케이션 실행후 접속하시면 어떻게 나오는지 확인해보십시오. ViewResolver가 설정되지 않았다는 에러문구가 나올것입니다. 그 쓰임의 차이가 무엇인지 여러분의 몫으로 남겨두겠습니다. 다시 말해 @RestController는 RESTful 웹 서비스를 만들 때 사용합니다.
@getMapping : get방식으로 경로를 매핑받는 어노테이션입니다.
이제 애플리케이션을 실행시켜 봅시다. 생성하신 ModuleWebApplication 클래스파일을 선택하신 후 마우스 오른쪽 버튼을 누른이후 Run 'ModuleWebApplication...'을 클릭하십시오.
애플리케이션이 정상적으로 구동되는 것을 확인하실 수 있습니다.
인터넷 브라우저를 열어 http://Localhost/helloworld 로 접속해 봅시다.
와~우! 웹 브라우져 화면에 Hellow World가 찍혔네요!
서브모듈 중에 하나인 module-web의 애플리케이션이 정상적으로 구동되었음을 확인하실 수 있습니다.
수고많으셨습니다.
'아는 것'보다 '알아야할 것'이 더 많은 늦깎이 주니어개발자입니다.
알고 있는 지식을 전한다는 목적 보단 막 알게된 지식을 스스로 정리하는 차원에서 포스팅하고 있으니 잘못된 내용이나 부족한 부분이 있더라도 겸허한 이해 부탁드립니다. 댓글이나 쪽지를 통해 첨삭의견주시면 감사히 수렴하고 보완하겠습니다.
'SpringBoot' 카테고리의 다른 글
[spring boot batch] 2. 미납회원 배치처리 구현 (876) | 2019.07.30 |
---|---|
[spring boot batch] 1. 간단한 대용량 배치처리, 스프링부트배치 (785) | 2019.07.30 |
[SubModule] 4. 프로퍼티 설정하기 (432) | 2019.07.30 |
[SubModule] 2. 프로젝트 생성 (445) | 2019.07.30 |
[SubModule] 1. SubModule 혹은 MultiModule? (406) | 2019.07.30 |