[수미수의 개발 브로구]

[WebFlux] Spring WebFlux 프로젝트 생성 하기 본문

Language & Framework/WebFlux

[WebFlux] Spring WebFlux 프로젝트 생성 하기

수미수 2023. 8. 14. 00:00
반응형

들어가기 전

  지난 글에서는 Spring WebFlux로 개발 하기 전, Netty 서버와 Reactive Stream Publisher 구현체인 Mono 와 Flux 에 대해서 간단히 개념만 알아 보았다. 이번 글에서 부터는 실제로 프로젝트를 생성하고, Netty 기반에서 동작하는 웹 어플리케이션 개발을 진행 할겁니다. 웹 어플리케이션을 개발 하고, API 를 노출 하고, 다른 API 와 연동 그리고 R2DBC? 를 통해서 Database 와 연결하여 데이터를 핸들링 할 예정입니다. 어? R2DBC는 머지 하시겠지만, 해당 기술은 나중에 Database 연결 부분에서 간단히 설명 드리겠습니다.

실습하기 전

  이번 장에서는 어떻게 Spring WebFlux 프로젝트를 생성 하는지에 대해서 이야기 하고자 합니다. 실습 하기전 저의 개발 환경은 아래와 같습니다.

  • IntelliJ, Java 17

프로젝트 생성 하기

  IntelliJ IDE 를 실행 시킨 후 맨위 왼쪽을 보시면 [File] -> [New] -> [Project] 를 클릭 하시면 아래 그림과 같은 창이 나타납니다. 여기서 Spring Initializer 를 통해서 프로젝트를 생성 할 것이기 때문에 해당 항목을 선택 하신 후 프로젝트 명을 입력 합니다. 

  빌드는 어떤 기술을 사용할 것인지와 어떤 언어를 사용할 것인지 그리고 Java 버전과 패키징 방식을 선택 할 수 있습니다. 저는 빌드 툴은 Gradle, Language 는 Kotlin 을 사용할 예정이라, Gradle -Kotlin Type 을 지정하고, Language 는 Kotlin 그리고, Java 버전은 OpenJDK 17 을 선택 하였습니다. 그리고, jar 패키징을 선택 하였습니다. 

여기서 어떤 패키징을 사용할 것인가 고민이시면, 일반적으로 Spring Boot 에서는 임베디드 was 를 사용하기 때문에 jar 패키징을 사용합니다. 하지만, 개발 환경, 운영환경에 따라 별도의 외부 was 를 사용해야 한다면, war 패키징을 선택하여, 해당 war 를 외부 was 배포 하는 형태로 가져가면 됩니다.

  저는 개발 시 회사 인프라팀에서 was 를 관리 하는 형태일 경우, war 패키징 하여 해당 was 로 배포 하였으나 현재는 Spring Boot 기반의 프로젝트의 경우 임베디드 was 를 사용하여 jar 로 패키징 하여 운영 하고 있습니다.

  다음 화면입니다. 다음 화면에서 Spring Boot 버전과 어떤 Web 타입을 선택할 것인지 나옵니다. 현재 Spring Boot 3 이 나왔지만, 2.7 버전을 선택 한 뒤 Spring Reactive Web 을 선택 합니다. 

Spring Boot 3 버전의 WebFlux 를 선택하여 개발 할 수 있으나, 3 버전에서 API Tracing 기능인 sleuth 를 사용 할 수 없어서 현재 2.7 버전을 사용하고 있습니다.
3 버전에서 micrometer 를 통해서 tracing 할 수 있다고 하지만 아직 잘 안되는 거 같아서 우선 2.7 버전으로 개발/운영 하고 있으나, 개발/운영 환경에 맞게 Spring Boot 버전을 선택하면 됩니다.

[Finish] 버튼을 클릭하게 되면, 아래 그림과 같이 최초 Spring WebFlux 프로젝트 최초 생성 화면을 볼 수 있습니다. 기본적인 프로젝트 구조를 확인 할 수 있습니다.

  아래 그림과 같이 build.gradle.kt 파일을 확인하면 spring webflux 관련 starter 프로젝트가 implemetation 되어 있는 것을 확인 할 수 있습니다. 

  이번글에서는 IntelliJ를 이용해서 기본적인 Spring WebFlux 프로젝트를 생성하는 방법에 대해서 알아보았습니다. 다음 글에서는 API 를 개발 하여 클라이언트와 통신 하는 과정에 대해서 이야기 해보도록 하겠습니다.

 

반응형