멀티 모듈을 활용하여 직접 게시판 서비스를 만들어보려고 한다.
우선 api 모듈을 하나 만들면 아래와 같은 파일 구조가 나올 것이다.

이전의 멀티 모듈과 다른 점은 멀티 모듈을 ‘server’라는 파일 아래에 위치시켰다.
비슷한 성격의 모듈들을 저 ‘server’ 파일에서 관리하기 위함이다.
build.gradle(루트 프로젝트)
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
}
repositories {
mavenCentral()
}
bootJar.enabled = false
subprojects{
group = 'com.seungh1024'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
}
공통으로 사용할 의존성을 등록하고 bootJar.enabled = false로 설정하였다(루트는 관리만 하기 때문)
MySQL 의존성 추가하기
build.gradle(api 모듈)
bootJar{
enabled = true
}
jar{
enabled = false
}
dependencies {
runtimeOnly 'mysql:mysql-connector-java' //MySQL
}
api 모듈은 boot시킬 것이므로 bootJar는 true, jar 설정은 false로 하였다.
dependencies에 mysql 의존성을 추가했다.
런타임 시에만 사용하기 위해 runtimeOnly를 사용하여 의존성을 추가했다.
DB 정보 입력하기
application.yml(api 모듈)
server:
port: 8080
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: ${mysql.url}
username: ${mysql.username}
password: ${mysql.password}
properties 파일이 아니라 yml 파일이라 ‘.’ 이 아니라 ‘:’ 로 접근하여 작성할 수 있다.
- server.port = 8080
- 8080 포트로 설정하였다.
- spring.datasource
- driver-class-name → MySQL 설정
- url → DB Source URL 설정
- username → DB 사용자 이름 설정
- password → DB 사용자 비밀번호 설정
- username, password가 일치해야 연결이 됨
나는 url, username, password를 환경 변수로 따로 빼서 사용했다.
민감한 정보라 노출되지 않기 위해 해당 파일을 따로 관리하였다.
properties/env.properties
mysql.url = {사용할 url}
mysql.username = {사용할 사용자 ID}
mysql.password = {사용할 사용자 PW}
각자 사용하는 정보를 입력한다.
mysql.url = testurl 과 같이 입력하면 된다.
해당 파일을 생성하면 아래와 같은 파일 구조를 가질 것이다

이렇게 파일을 작성했다고 끝나지 않고 해당 변수를 사용할 수 있는 설정이 추가로 필요하다.
com.seungh1024.api 에 Application 파일을 하나 만들어주고 env패키지를 만들고 해당 변수들을 Bean으로 등록하여 읽어주기 위한 클래스를 생성한다.
env/EnvConfig
package com.seungh1024.api.env;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:properties/env.properties")
public class EnvConfig {
}
@PropertySource 어노테이션에 내가 만든 properties 파일의 위치를 넣어주면 Environment 객체에 property 값이 자동으로 주입된다.
그럼 @Value 어노테이션을 이용하여 변수에 할당할 수도 있고 application.yml 파일에서 바로 호출하여 사용할 수 있다.
여기까지 했다면 파일 구조는 아래와 같을 것이다.

DB 연결 테스트하기
ApiApplication 클래스를 작성하고 실행하면
ApiApplication
package com.seungh1024.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
}
아래와 같이 실행이 잘 되는 것을 볼 수 있다.

이렇게만 봐서는 연결된지 잘 모르겠는데?라고 할 수도 있다.
그럼 직접 비밀번호나 커넥션 url등을 이상한 값으로 넣고 다시 실행해 보면(비밀번호를 이상하게 입력하고 실행)

이렇게 해당 사용자로 연결이 되지 않는 것을 볼 수 있다.
'Java > Spring boot 프로젝트' 카테고리의 다른 글
@ControllerAdvice를 사용한 예외 처리,에러 핸들링 - 게시판 만들기 (6) (0) | 2023.03.16 |
---|---|
Spring 공통 응답 만들기(Enum, 제네릭 타입) - 게시판 만들기(5) (0) | 2023.02.20 |
JPA 레포지터리, Member CRUD - 게시판 만들기(4) (0) | 2023.02.20 |
Spring Boot JPA 설정, 테이블 생성(Entity) - 게시판 만들기(3) (2) | 2023.02.19 |
Multi Module Project 생성하기 - 게시판 만들기(1) (0) | 2023.02.07 |