Port & Adapter Architecture - 3sam5oh/webtoon-recommendation-service GitHub Wiki
AWS Hexagonal Architecture ๋ฌธ์
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ํจํด(Ports and Adapters)์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฃผ์ ๋ก์ง์ ์ธ๋ถ ์์(์: ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ฌ์ฉ์ ์ธํฐํ์ด์ค)์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ์ ์ ์ฐ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ๋์ด๋ ๊ฒ์ ๋ชฉํ.
2005๋ Alistair Cockburn์ํด ์ ์๋ ์ํคํ ์ฒ์ด๋ฉฐ, ์ ํต์ ์ธ ๊ณ์ธตํ ์ํคํ ์ฒ(Layered Architecture)์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ณ ์ ๋ฑ์ฅํ์์. ๋ ์ด์ด๋ ์ํคํ ์ฒ๋ ๋ฐ์ดํฐ ์์ธ์ค ๊ณ์ธต์ ์์กดํ๋ ๊ตฌ์กฐ์ธ๋ฐ, ์ด๋ db๊ฐ์ ํ์ ๊ณ์ธต์ด ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด db์ ๋ณ๊ฒฝ์ด๋ ์ธ๋ถ ์์คํ ๊ณผ์ ์ํธ์์ด ํ์ํ ๋ ์ ์ฐํ๊ฒ ๋์ํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ๋ฐ์, ๋ํ ํน์ ๊ธฐ์ ์ ์์กด์ ๋ ์ฝ๋๋ก ์์ฑ๋๊ณ ๋๋ฉ์ธ ๋ก์ง๊ณผ ์์ด๋ฉด์ ๋ก์ง์ ํ ์คํธ ํ๋ ๊ฒ์๋ ์ฝ์ง ์๋ค๋ ๋ฌธ์ ๊ฐ ์์.
๋ฐ๋ผ์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ๋น์ฆ๋์ค์ ๋ก์ง์ ์ธ๋ถ ๊ธฐ์ ์คํ์ ์์กดํ์ง ์๊ฒ ํจ์ผ๋ก์จ, ๋ก์ง์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ ๋์ด๊ณ , ์์กด์ฑ ์ญ์ ์์น (Dependency Inversion Principle)์ ํตํด, ์ธ๋ถ ํน์ ๊ตฌํ์ ์์กดํ์ง ์๊ณ ์ธํฐํ์ด์ค์ ์์กดํ๋๋ก ์ค๊ณ (์์ ๋ชจ๋ (High-level modules) ์ ํ์ ๋ชจ๋ (Low-level modules) ์ ์์กดํด์๋ ์ ๋๋ฉฐ, ๋ ๋ค ์ถ์ํ (abstractions) ์ ์์กดํด์ผ ํ๋ค).
-
Domain (๋๋ฉ์ธ): ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋น. ๋๋ฉ์ธ ๋ก์ง์ ์ธ๋ถ ์์คํ ์ด๋ ํ๋ ์์ํฌ์ ์์กดํ์ง ์์.
-
Ports (ํฌํธ): ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ธ๋ถ ์์คํ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์. ํฌํธ๋ ์ ๋ ฅ(์ ๋ ฅ ํฌํธ)๊ณผ ์ถ๋ ฅ(์ถ๋ ฅ ํฌํธ)์ผ๋ก ๋๋ ์ ์์.
-
Adapters (์ด๋ํฐ): ํฌํธ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ๋๋ฉ์ธ ๋ก์ง์ ์ธ๋ถ ์์คํ ๊ณผ ์ฐ๊ฒฐ. ์ด๋ํฐ๋ ์ธ๋ถ ์์คํ ์ด ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ํธ์์ฉํ๋ ๋ฐฉ์์ ์ ์.
- ๋๋ฉ์ธ ์ค์ฌ: ๋น์ฆ๋์ค ๋ก์ง์ ๋๋ฉ์ธ ๊ณ์ธต์ ์์นํ๋ฉฐ, ์ด ๊ณ์ธต์ ์ธ๋ถ ์์คํ ๊ณผ์ ์ํธ์์ฉ์์ ๋ ๋ฆฝ์ .
- ํฌํธ์ ์ด๋ํฐ ๊ณ์ธต: ํฌํธ๋ ๋๋ฉ์ธ ๋ก์ง์ด ์ธ๋ถ ์์คํ ๊ณผ ์ํธ์์ฉํ ์ ์๋ ์ง์ ์ ์ ์, ์ด๋ํฐ๋ ์ด๋ฌํ ํฌํธ๋ฅผ ๊ตฌํํ์ฌ ์ค์ ์ํธ์์ฉ์ ์ํ.
- ์ ์ฐ์ฑ: ์ธ๋ถ ์์คํ ์ ๋ณ๊ฒฝํ๋๋ผ๋ ๋๋ฉ์ธ ๋ก์ง์๋ ์ํฅ์ ์ฃผ์ง ์์.
- ํ ์คํธ ์ฉ์ด์ฑ: ๋๋ฉ์ธ ๋ก์ง์ ์ธ๋ถ ์์คํ ๊ณผ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ ์ ์์.
- ์ ์ง๋ณด์์ฑ: ๊ฐ ๊ณ์ธต์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์์ด, ์ฝ๋์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ ์ ์์.
- ์น ์ ํ๋ฆฌ์ผ์ด์ : ์น UI, API, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ๋ค์ํ ์ด๋ํฐ๋ฅผ ํตํด ๋๋ฉ์ธ ๋ก์ง์ ์ ๊ทผํ ์ ์์.
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ: ๊ฐ ์๋น์ค๊ฐ ๋ ๋ฆฝ์ ์ธ ๋๋ฉ์ธ ๋ก์ง์ ๊ฐ์ง๊ณ , ๋ค๋ฅธ ์๋น์ค๋ ์ธ๋ถ ์์คํ ๊ณผ์ ํต์ ์ ์ด๋ํฐ๋ฅผ ํตํด ์ํ.
- ๋๋ฉ์ธ ๋ก์ง์ ์ ์ํ๊ณ , ์ด๋ฅผ ์ค์ฌ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณ.
- ๋๋ฉ์ธ ๋ก์ง๊ณผ ์ํธ์์ฉํ ์ ์๋ ํฌํธ๋ฅผ ์ ์.
- ํฌํธ๋ฅผ ๊ตฌํํ๋ ์ด๋ํฐ๋ฅผ ์์ฑํ์ฌ ์ธ๋ถ ์์คํ ๊ณผ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌ.
- ๋๋ฉ์ธ ๋ก์ง์ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ฉด์, ํ์์ ๋ฐ๋ผ ์ด๋ํฐ๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ํ์ฅ.
์ก๊ฐํ ์ํคํ ์ฒ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๋จ์ํํ๊ณ , ์ ์ฐ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ๋์ด๋ ๋ฐ ๋์. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ํ ์คํธํ ์ ์์ผ๋ฉฐ, ๋ณํํ๋ ์๊ตฌ ์ฌํญ์ ๋ ์ฝ๊ฒ ๋์ํ ์ ์์.
Note
์ค์ ์ ์ฉ ์ฌ๋ก ๋ฐ ๊ฐ์ ๊ณผ์ ์ ์๊ฐํฉ๋๋ค
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์์ ๋๋ฉ์ธ์ ์ ํต์ ์ธ mvc ์ํคํ ์ฒ์ ๋๋ฉ์ธ์ ๊ฐ๋ ๊ณผ๋ ๋ค๋ฅด๋ค.
- ์ ํต์ ์ธ mvc ์ํคํ ์ฒ ๋๋ฉ์ธ์ ์ํฐํฐ๋ db์ ์ฐ๊ฒฐ๋์ด์ผ ํ๋ ์ค์ ํ๋๊ฐ์ ์๋ฏธํ๋ฉฐ ORM์ด ์ ์ฉ๋๋ค.
- ํ์ง๋ง ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ๋๋ฉ์ธ์ ์ค์ ์๋น์ค์์ ์ผ์ด๋์ผ ํ๋ action์ ์ ์ํ๋ค.
- ๋ฐ๋ผ์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ domain(model)์ ์์ฑ๋๋ ์ํฐํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ ๋งตํ ํด๋์ค๊ฐ ์๋ ๊ตฌํ ๋ฉ์๋๊ฐ ๋๋ค.
- ๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ๋๊ฐ์ด ํ๋๊ฐ์ ๋ง๋ค๊ณ ๋น๋ ํจํด์ ํ์ฉํ์ฌ ์์ฑ์๋ฅผ ๋ง๋ค์ง๋ง ์ด๋ ๋น์ฆ๋์ค ๋ก์ง์์ ํด๊ฒฐํด์ผ ํ๋ action์ ์ ์ ํ๋ ๊ณผ์ ์ด๋ค
- ๋ฐ๋ผ์ application ์๋น์ค์์๋ ํด๋น ์ก์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ด ์์ฑ๋๋ค. ์๋ฅผ ๋ค์ด ์นํฐ ์ถ์ฒ์ ์ํ ๊ฒ์์ด ์๋น์ค์์ ๊ตฌํ๋์ด์ผ ํ๋ค๋ฉด, ๋๋ฉ์ธ์์๋ ์ถ์ฒ action (์ค์ ๋ก๋ method๋ฅผ ์์ฑ), ๊ฒ์ action์ ๋ง๋ค๊ณ ์๋น์ค์์๋ ํด๋น action์ ์กฐํฉํ์ฌ ์ถ์ฒ ๊ฒ์์ด๋ผ๋ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ค.
- ๋ฌผ๋ก ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ domain์๋ orm์ ํตํ db์ ํต์ ์ ํ ์ ์๋ ์ํฐํฐ๋ก ๋ง๋๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง ๊ทธ๋ ๊ฒ ๋๋ ๊ฒฝ์ฐ ํน์ ์์์ฑ ๋ ์ด์ด์ ์ข ์์ด ๋๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋์ง ์๋๋ค.
- ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ๊ธฐ์กด์ mvc ์ํคํ ์ฒ์๋ ๋ค๋ฅด๊ฒ ๋๋ถ๋ถ์ ํต์ ์ ์ถ์ํ๋ฅผ ํตํด์ ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ํ๋ฉด๊ณผ db์ ์ํฅ์ ๋ฐ์ง ์๊ณ ์๋น์ค ๋ก์ง์ ๋ง๋ค ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
- ํ์ง๋ง ์ด๋ฌํ ์ถ์ํ๋ ๊ฐ๋ ์ฑ์ด ๋ฎ์์ง๋ค๋ ๋จ์ ์ด ์์ผ๋ฉฐ, ์ด๋ฌํ ์ด์ ๋ก ๊ฐ๋จํ๊ฑฐ๋ ๋๋ ์ ์ง ๋ณด์๋ฅผ ํ๊ธฐ ์ํ ์ธ์์ด ์์ฃผ ๊ต์ฒด ๋๋ ์๋น์ค์๋ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ๋์ ํ๊ฒ ๋๋ค๋ฉด ํ์์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ๋ง์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค(Complexity๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ด์๊ฐ ๋ฐ์ ํ์ ๋ ํด๊ฒฐ์ด ๋ณต์กํ ์ ์๋ค).
- ๋ฐ๋ผ์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ฅผ ๋์ ํ๊ธฐ ์ ์๋ ์๋น์ค ๋ก์ง์ด ์์ฃผ ๋ณ๊ฒฝ๋๋์ง, ์ ์ง ๋ณด์๋ฅผ ์ํ ์ธ์์ด ์์ฃผ ๊ต์ฒด๋๋์ง, ๊ฐ๋จํ ์๋น์ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ์ธ์ง๋ฅผ ๊ณ ๋ฏผํ๊ณ ๋์ ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
- port & adapter ์ํคํ ์ฒ๋ ์ถ๊ฐ์ ์ธ ๋ ์ด์ด๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ latency issue๊ฐ ์์ ์ ์๋ค (์ด๊ฑด ์ด๋ป๊ฒ ์ธก์ ํ์ง?)
- ์ฌ๋ฌ ํ๋ฉด๊ณผ db ์ฐ๊ฒฐ์ ๊ณ ๋ คํ๋ค๋ฉด ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ์ข์ ์ ํ์ด ๋ ์ ์๋ค.
src/
โโโ main/
โโโ java/
โโโ org/
โโโ samsamohoh/
โโโ webtoonrecommendation/
โโโ application/
โ โโโ model/
โ โ โโโ webtoon/
โ โ โ โโโ Webtoon.java
โ โ โโโ user/
โ โ โโโ User.java
โ โโโ service/
โ โ โโโ webtoon/
โ โ โ โโโ WebtoonService.java
โ โ โ โโโ WebtoonRecommendationService.java
โ โ โ โโโ WebtoonSearchService.java
โ โ โโโ user/
โ โ โโโ UserService.java
โ โโโ port/
โ โโโ in/
โ โ โโโ webtoon/
โ โ โ โโโ RecommendWebtoonUseCase.java
โ โ โ โโโ SearchWebtoonUseCase.java
โ โ โโโ user/
โ โ โโโ ManageUserUseCase.java
โ โโโ out/
โ โโโ webtoon/
โ โ โโโ WebtoonPersistencePort.java
โ โ โโโ WebtoonSearchPort.java
โ โโโ user/
โ โโโ UserPersistencePort.java
โโโ adapter/
โโโ in/
โ โโโ rest/
โ โโโ dto/
โ โ โโโ WebtoonDTO.java
โ โ โโโ UserDTO.java
โ โโโ WebtoonController.java
โ โโโ UserController.java
โโโ out/
โโโ persistence/
โ โโโ webtoon/
โ โ โโโ JpaWebtoonPersistenceAdapter.java
โ โโโ user/
โ โโโ JpaUserPersistenceAdapter.java
โโโ search/
โโโ OpenSearchWebtoonAdapter.java
- Application์ด ์ด๋ค Action์ ์ํํ ๊ฒ์ธ๊ฐ์ ๋ํ ์ ์์ด๋ฉฐ, Application ๊ด์ ์์ ํ์ฉํ ์ ์๋ ์์ฒญ ์ฌ๋ก(Inbound UseCase) ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ์ ์์ฒญ์ด ํ์ํ ์ฌ๋ก(Outbound Request)๋ก ๋๋์ด์ ์ ์๋ฅผ ํ๋ ๊ฒ์ด ์ค์ application port์ ์ญํ .
- Application์์ ์ด๋ค Action์ ์ํํ ๋๋ Input, Output์ ์ด๋ป๊ฒ ๋ฐ์์ง "๋ฉ์์ง"๊ฐ ์ ์๋์ด์ผ ํ๋ค.
- Adapter์ port๋ Application์ Port์ ์ค์ ๊ตฌํ์ฒด ์ญํ ์ ๋ด๋น. ๋ฐ๋ผ์ Adapter์ port๋ ๋ณธ์ธ์ด In Adapter์ธ์ง Out Adapter์ธ์ง ์ ํ์๋ ์ ์๋ ์๊ฒ ๊ตฌํ. ๊ฒฝ์ฐ์ ๋ฐ๋ผ Inbound, Outbount๋ก ์ฐ์ผ ์ ์๊ธฐ ๋๋ฌธ.
- ํ์ฌ๋ ์ ์ฉ๋์ด ์์ง ์์ง๋ง Port & Adapter ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๋ ๊ฒฝ์ฐ, gradle multi module์ด ์ถ์ฒ. single module๋ก๋ง ๊ตฌํ๋๋ฉด ์ถํ์ ์ฝ๋ ์ค๋ณต์ด ๋ฐ์ํ์ฌ ํจ์จ์ด ๋จ์ด์ง ์ ์์.
com.example.project
โโโ ProjectApplication.java // ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
ํด๋์ค
โโโ adapter // ์ธ๋ถ ์์คํ
๊ณผ์ ์ํธ์์ฉ์ ๋ด๋น
โ โโโ config // ์ค์ ๊ด๋ จ ํด๋์ค๋ค
โ โ โโโ AppConfig.java // ์ ํ๋ฆฌ์ผ์ด์
์ค์
โ โ โโโ SecurityConfig.java // ๋ณด์ ์ค์
โ โโโ persistence // ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ๋ด๋น
โ โ โโโ UserPersistenceAdapter.java // ์ฌ์ฉ์ ์ ๋ณด ์ ์ฅ์ ์ด๋ํฐ
โ โ โโโ DataEntity.java // ๋ฐ์ดํฐ ์ํฐํฐ
โ โโโ rdbms // JPA ๊ด๋ จ ์ด๋ํฐ
โ โ โโโ UserJpaAdapter.java // JPA ์ฌ์ฉ์ ์ ์ฅ์ ์ด๋ํฐ
โ โโโ searchengine // ๊ฒ์ ์์ง๊ณผ์ ์ํธ์์ฉ์ ๋ด๋น
โ โ โโโ SearchEngineAdapter.java // ๊ฒ์ ์์ง ์ด๋ํฐ
โ โโโ web // ์น ๊ณ์ธต
โ โโโ user
โ โ โโโ UserController.java // ์ฌ์ฉ์ ์ปจํธ๋กค๋ฌ
โ โโโ content
โ โโโ ContentController.java // ์ฝํ
์ธ ์ปจํธ๋กค๋ฌ
โ โโโ ContentResponse.java // ์ฝํ
์ธ ์๋ต DTO
โโโ application // ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ ํ๋ฆฌ์ผ์ด์
์๋น์ค
โ โโโ port // ํฌํธ์ ๊ด๋ จ๋ ์ธํฐํ์ด์ค
โ โ โโโ in
โ โ โ โโโ RegisterUserUseCase.java // ์ฌ์ฉ์ ๋ฑ๋ก ์ ์ค์ผ์ด์ค
โ โ โ โโโ SearchContentUseCase.java // ์ฝํ
์ธ ๊ฒ์ ์ ์ค์ผ์ด์ค
โ โ โโโ out
โ โ โโโ AddDataPort.java // ๋ฐ์ดํฐ ์ถ๊ฐ ํฌํธ
โ โ โโโ LoadContentPort.java // ์ฝํ
์ธ ๋ก๋ ํฌํธ
โ โโโ service
โ โโโ RegisterUserService.java // ์ฌ์ฉ์ ๋ฑ๋ก ์๋น์ค
โ โโโ SearchContentService.java // ์ฝํ
์ธ ๊ฒ์ ์๋น์ค
โโโ common // ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค๋ค
โ โโโ ApiResponse.java // API ์๋ต ๊ณตํต ํด๋์ค
โ โโโ logs
โ โ โโโ LoggingAspect.java // ๋ก๊น
์ด์คํํธ
โ โโโ metrics
โ โโโ MetricsConfig.java // ๋ฉํธ๋ฆญ ์ค์
โโโ domain // ๋๋ฉ์ธ ๋ชจ๋ธ
โ โโโ UserValidation.java // ์ฌ์ฉ์ ๊ฒ์ฆ
โ โโโ SearchableContent.java // ๊ฒ์ ๊ฐ๋ฅํ ์ฝํ
์ธ
com.samsamohoh.webtoonsearch
โโโ WebtoonSearchApplication.java
โโโ adapter
โ โโโ config
โ โ โโโ SearchEngineConfig.java
โ โ โโโ SecurityConfig.java
โ โโโ persistence
โ โ โโโ MemberPersistenceAdapter.java
โ โ โโโ RegisterMemberEntity.java
โ โ โโโ SearchPersistenceAdapter.java
โ โ โโโ SearchWebtoonEntity.java
โ โ โโโ SelectPersistenceAdapter.java
โ โ โโโ SelectRecordEntity.java
โ โโโ rdbms
โ โ โโโ MemberPersistenceAdapter.java
โ โ โโโ SelectRecordAdapter.java
โ โโโ searchengine
โ โ โโโ SearchEngineAdapter.java
โ โโโ web
โ โโโ member
โ โ โโโ OAuthController.java
โ โ โโโ OAuthResponse.java
โ โโโ webtoon
โ โโโ SearchWebtoonController.java
โ โโโ SearchWebtoonResponse.java
โ โโโ SelectRecordController.java
โ โโโ SelectRecordRequest.java
โโโ application
โ โโโ port
โ โ โโโ in
โ โ โ โโโ member
โ โ โ โ โโโ RegisterMemberCommand.java
โ โ โ โ โโโ RegisterMemberUseCase.java
โ โ โ โโโ webtoon
โ โ โ โโโ LoadWebtoonQuery.java
โ โ โ โโโ SearchWebtoonCommand.java
โ โ โ โโโ SearchWebtoonUseCase.java
โ โ โ โโโ SelectRecordUseCase.java
โ โ โ โโโ SelectWebtoonDTO.java
โ โ โ โโโ WebtoonResult.java
โ โ โโโ out
โ โ โโโ AddRecordPort.java
โ โ โโโ LoadWebtoonPort.java
โ โ โโโ SaveMemberPort.java
โ โโโ service
โ โโโ RegisterMemberService.java
โ โโโ SearchWebtoonService.java
โ โโโ SelectRecordService.java
โโโ common
โ โโโ ApiResponse.java
โ โโโ logs
โ โ โโโ LoggingAspect.java
โ โโโ metrics
โ โโโ CustomMetrics.java
โ โโโ config
โ โโโ MetricsConfig.java
โโโ domain
โ โโโ MemberValidation.java
โ โโโ SearchableWebtoon.java