beaniejoy / dongne-cafe-api

☕️ kotlin & spring boot application (toy project) / siren order service for local cafe
2 stars 1 forks source link

hexagonal architecture 방식으로 multi module 구성해보기 #55

Closed beaniejoy closed 1 year ago

beaniejoy commented 1 year ago

📌 multi-module 구성도


📌 고려사항

🏷️ multi module에서 resources 내부 설정파일 관리

🏷️ test에서의 application.yml 관리

ex. service-api 에서 @SpringBootTest 수행

  1. service-api/src/test/resources/application.yml 이 있으면 이걸 최우선으로 적용
  2. 1이 없으면 implementation한 domain에서 domain/src/main/resources/application.yml 을 참고
  3. 2가 없으면 service-api/src/main/resources/config/application.yml 참고

즉, domain 모듈을 implementation 해도 해당 모듈의 src/test/resources/application.yml 내용은 참고 X

🏷️ test 하위 implementing한 모듈 포함 테스트

app:service-api 모듈 테스트 수행시, app:common, domain 모듈도 테스트가 수행되어야 할 필요가 있음
(CI 과정에서 test 수행하는데 최종 application 실행하기 위한 executable jar로 build되는 app:account-api, app:service-api로 test 수행할 예정)

// app:service-api module's build.gradle.kts
afterEvaluate {
    project.tasks.withType<Test> {
        dependsOn(":app:common:test")
    }
}

afterEvaluate를 통해 root build.gradle.kts에 설정된 Test task 설정에 대해서 특정 속성 overriding을 할 수 있다.

🏷️ mapstruct with kotlin


📌 프로젝트 수정 사항

companion object {
    val permittedUrls = arrayOf(
        "/error",
        "/auth/members/join",
        "/auth/authenticate"
    )

    // resource urls
    val resourceUrls = StaticResourceLocation
        .values()
        .flatMap {
            it.patterns.toList()
        }
        .toTypedArray()
}

/*
@Bean
fun webSecurityCustomizer(): WebSecurityCustomizer {
    return WebSecurityCustomizer { web ->
        web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations())
        web.ignoring().antMatchers("/error")
    }
}
*/
beaniejoy commented 1 year ago

References

beaniejoy commented 1 year ago

gradle 버전 업