멀티모듈 DB 연결

목차

  1. 1. common 모듈
    1. 1.1 의존성 추가
      1. build.gradle
    2. 1.2 entity 및 repository 생성
      1. Member
      2. MemberRepository
  2. 2. api 모듈
    1. 2.1 DB접속 정보 설정
      1. applicaton.yml
    2. 2.2 common모듈의 엔티티와 리포지토리 스캔 설정 추가
      1. ApiApplication
    3. 2.3 테스트 api 추가
      1. MemberController
      2. MemberService

DB접근은 공통으로 사용될 것이므로 common모듈에서 진행한다.

1. common 모듈

1.1 의존성 추가

spring-data-jpa와 mysql 의존성을 추가해준다.

build.gradle

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.4.3'
    id 'io.spring.dependency-management' version '1.1.7'
    id 'java-library' # api키워드를 사용하기 위해 추가
}

...

dependencies {
	...	
	implementation 'com.mysql:mysql-connector-j'
	api 'org.springframework.boot:spring-boot-starter-data-jpa'
	... 
}

1.2 entity 및 repository 생성

Member

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

}

MemberRepository

public interface MemberRepository extends JpaRepository<Member, Long> {}

2. api 모듈

2.1 DB접속 정보 설정

applicaton.yml

spring:
  main:
    allow-bean-definition-overriding: true
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQLDialect
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        format_sql: true
        show_sql: true
        use_sql_comments: true
        jdbc: Asia/Seoul

2.2 common모듈의 엔티티와 리포지토리 스캔 설정 추가

ApiApplication

@SpringBootApplication(scanBasePackages = {"kr.hyunbenny.api", "kr.hyunbenny.common"})
@EntityScan("kr.hyunbenny.common.domain")
@EnableJpaRepositories(basePackages = "kr.hyunbenny.common.repository")
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }

}

2.3 테스트 api 추가

MemberController

@Slf4j
@RestController
@RequiredArgsConstructor
public class MemberController {

    private final MemberService memberService;

    @PostMapping("/member")
    public ResponseEntity<ResponseDto> saveMember(@RequestParam String name) {
        Long id = memberService.saveMember(name);
        return new ResponseEntity<>(new ResponseDto(CodeEnum.SUCCESS, id), HttpStatus.OK);
    }
}

MemberService

@Slf4j
@Service
@RequiredArgsConstructor
public class MemberService {

    private final MemberRepository memberRepository;

    public Long saveMember(String name) {
        Member member = Member.builder().name(name).build();
        Member savedMember = memberRepository.save(member);
        return savedMember.getId();
    }
}

테스트 api 작성 후, 테스트를 해보면 아래와 같이 정상적으로 값이 들어간 것을 확인할 수 있다.


맨 위로 ↑

Copyright © hyunbenny. 공부한 내용을 끄적거리는 낙서장입니다.