전통적인 Spring 의 방식 (MVC) 는 컨트롤러 + 서비스 + 레포를 어노테이션으로 등록하고, Spring 이 Bean으로 등록해서 슈슈슉 뜨는 방식인데,
나도 Spring 쓸때는 이렇게 작성하긴 하는데 개인적으로 선호하는 방식은 아니다.
개인적으로는 route data (혹은 function) 으로 조합가능하게 짜는 방식이 더 우아하다고 생각한다.
다만 Webflux 의 경우 (Java 에서도) Route Function (Functional Endpoints) 방식을 사용할수있는데. MVC 는 딱히 없는걸로 알고있었다. 근데 JAVA 라 DSL 그렇게 이쁘지는 않다.
LinkedIn post 를 보다가, JetBrains 에서 발표한 자료에서 Kotlin Beans DSL 이 있는것을 보고 좀 찾아보니까.
이게 왠걸 Spring 5.2 (아마?) 이후부터 MVC 도 이런식으로 라우팅이 가능하다. (예전에는 reactive package 만,, 그러니까 Webflux 에만 route function dsl 이 있던것 같은데)
따라서 다음과 같은 2가지 DSL 이 존재한다.
- Route 용 DSL, 그리고 Kotlin 을쓰면 Java 보다 좀더 이쁘다
- Beans 용 DSL
위 DSL 을 이용하면, 좀더 우아한 방식으로 Spring 코드를 작성할수 있을것 같아서 아주아주 간단한 count 서버를 짜봤다.
간단히 보면
1. 아래처럼 route dsl 을 제공해준다. (MVC 의 경우 서블렛)
(Reative 용 route 와 코루틴용 coRoute 도 있다)
다만, 이건 그냥, router dsl 로 RouterFunction을 정의한것 뿐 이고 Spring 에서 관리하는 Beans 는 아직 아니다.
어찌됫든, Spring 에서 사용하려면 Bean 으로 맹글어줘야한다.
2. Route를 Bean DSL 로 등록할 수 있다.
위와 같이 beans + bean DSL 을 이용하여 Spring 이 관리하는 Beans 를 작성할수있다.
ref 함수는 applicationContext.getBean() 의 숏컷, 대충 autowired 마냥 넣을넘 알아서 넣어주는 역할
이러면 beans DSL 로 bean을 구축하고, 이걸 main 에서 사용하므로, 우리가 원하던
route를 DSL 로 생성하고, spring 에서 사용 (bean화) 하는것 이 가능하다.
물론 beans DSL 내에서 route 를 넣어도 되고, if문과 같은 프로그래밍적 작업도 먹는다.
아마... 어노테이션이랑 섞어쓰는것도 가능할듯.
간단해서 별 내용 없긴한데, 까먹었을때 나중에 보기위한 용도로 repo 에도 올려놨다
참고
'프로그래밍 언어 노트 > JAVA | Kotlin' 카테고리의 다른 글
Hibernate Query Plan 으로 인한 OOM 방지 (0) | 2024.06.24 |
---|---|
Kotlin ServerResponse 에 대한 DSL 을 구축해보자! (0) | 2023.03.10 |
Kotlin SQL DSL 을 구축해보자! 쓸 수 있는 방법을 전부 동원해봐서! (0) | 2023.02.18 |
Kotlin 의 Lambda 문법으로 DSL 을 구축해보자 (0) | 2022.11.18 |
[Jackson] Subtype 별 Polymorphic De/Serialization 을 제공하는 Deduction (0) | 2022.05.01 |