# demo-hexagonal ### Hexagonal Architecture 구조로 만든 코프링 웹 애플리케이션

OpenJDK Kotlin Spring Boot Gradle MariaDB Swagger 3

1. demo-app (JDK 17 + Kotlin + Spring Boot 2 + Spring MVC + Spring Data JPA) 1. [프로젝트 구성](#a01-1) 2. [Tech Stacks](#a01-2) 3. [demo-app](#a01-3) 4. [demo-all-in-one-app](#a01-4) 2. demo-reactive (JDK 17 + Spring Boot 2 + Spring WebFlux + Spring Data MongoDB Reactive) 1. [프로젝트 구성](#a02-1) 2. [Tech Stacks](#a02-2) 3. [demo-reactive-app](#a02-3) *** ##
1. demo-app
### 1.1. 프로젝트 구성 demo-app 프로젝트는 멀티 모듈로 구성되어있습니다. architecture-1 - core - 헥사고날 아키텍처의 application core 영역에 해당 - 프로젝트의 핵심적인 비즈니스 로직이 들어있습니다 - domain, port를 포함하고 있으며, 모든 클래스는 public 접근제한자로 설정되어 있습니다. - infrastructure - 헥사고날 아키텍처의 `adapter - out` 영역에 해당 - datasource에 관련된 모듈이 들어갑니다. - persistence adapter, JpaRepository, ORM Entity 가 포함되어있습니다. - server - 헥사고날 아키텍처의 `adapter - in` 영역에 해당 - controller를 포함하고 있으며, 모든 클래스는 internal 접근제한자로 설정되어 있습니다. - util - core, server, infrastructure 모듈에서 공통적으로 사용할 유틸이 들어있습니다.
###
1.2. Tech Stacks
- JDK 17 - Kotlin 1.6.21 - Build Tools - Gradle - Kotlin DSL - Spring MVC - Tomcat - Spring Boot 2 - Spring Data JPA - MariaDB 10.8.3 - OpenAPI Specification - Swagger v3 - springdoc-openapi ui 1.6.13
###
1.3. demo-app
demo 웹 애플리케이션의 실행 진입점은 `server - demo-app` 모듈의 DemoAppApplication 입니다. DemoAppApplication

demo-app은 아래와 같이 `:util:common-util`, `:core:demo-core`, `:infrastructure:datastore-mariadb` 모듈을 포함합니다. build.gradle.kts
###
1.4. demo-all-in-one-app
demo-app을 하나의 모듈로 만든 웹 애플리케이션 adapter + core + domain 을 하나의 프로젝트 내에 구성했습니다. 스크린샷 2022-12-02 오후 2 08 10 *** ##
2. demo-reactive-app
### 2.1. 프로젝트 구성 demo-reactive-app 프로젝트도는 멀티 모듈로 구성되어있습니다. 2-1 - core - 헥사고날 아키텍처의 application core 영역에 해당 - 프로젝트의 핵심적인 비즈니스 로직이 들어있습니다 - domain, port를 포함하고 있으며, 모든 클래스는 public 접근제한자로 설정되어 있습니다. - infrastructure - 헥사고날 아키텍처의 `adapter - out` 영역에 해당 - datasource에 관련된 모듈이 들어갑니다. - persistence adapter, JpaRepository, ORM Entity 가 포함되어있습니다. - server - 헥사고날 아키텍처의 `adapter - in` 영역에 해당 - controller를 포함하고 있으며, 모든 클래스는 internal 접근제한자로 설정되어 있습니다. - util - core, server, infrastructure 모듈에서 공통적으로 사용할 유틸이 들어있습니다.
###
2.2. Tech Stacks
- JDK 17 - Kotlin 1.6.21 - Build Tools - Gradle - Kotlin DSL - Spring WebFlux - Netty - Coroutines - Spring Boot 2 - Spring Data MongoDB Reactive - MongoDB 6.0.4 - OpenAPI Specification - Swagger v3 - springdoc-openapi-kotlin 1.6.14 - springdoc-openapi-webflux-ui 1.6.14
###
2.3. demo-reactive-app
demo 웹 애플리케이션의 실행 진입점은 `server - demo-reactive-app` 모듈의 DemoReactiveAppApplication 입니다. demo-reactive-app은 아래와 같이 `:util:common-util`, `:core:demo-reactivecore`, `:infrastructure:datastore-mongodb-reactive` 모듈을 포함합니다. demo-reactive-app