-
Reactive Spring Boot: Part 1: Kotlin REST ServiceSpring 2021. 1. 17. 18:37
www.youtube.com/watch?v=coM6wWKau5E
위 영상을 토대로 만들었습니다.
코틀린으로 간단한 Spring Reactive REST Service 를 만드는 과정입니다.영상을 보면서 따라는 과정을 그대로 썼습니다. 물론 하나씩 캡쳐하는 게 정확한 가이드를 줄 수 있으나 영상을 참고할 수 있기에 내용을 놓치지 않게 설명을 하는 방식으로 제작하였습니다.
추천하는 방법은, 영상을 재생하고 이 글을 읽으면서 따라하는 것입니다.
영상은 intelliJ 의 제작사인 JetBrain 에서 만들었습니다. 당연히 IntelliJ 를 기본으로 설명합니다.
이클립스, 스프링 STS 를 사용하는 사람도 세부적으로 같진 않지만, 동일한 코드로 작업할 수 있습니다.
하지만 개인적인 입장으로는 인텔리제이를 사용하는 것을 추천합니다.
인텔리제이를 열고, Create New Project 로 새로운 프로젝트를 만듭니다.
버전마다 버튼 형태나 인터페이스가 다르게 되어 있을 수 있습니다. 당황하지 말고, 버튼을 찾아서 누르세요.
어차피 영상이 올라올 때와 지금은 버전이 업데이트되어 화면이 다를 확률이 큽니다.
새로운 프로젝트를 만들기 위해, 프로젝트의 기본 형태를 무엇으로 할 지 결정할 수 있습니다.
우리는 Spring Initializr 를 이용할 것입니다. 그리고 SDK은 Java 13 을 이용할 것입니다.
가끔씩 자바 13 버전 또는 사용하고자 하는 버전이 없을 수 있습니다.
사용하고자 하는 자바를 다운 받아서 추가해주는 방식으로 추가해주세요.
또는 인텔리제이 최신 버전은 바로 다운받을 수 있게도 해주는 것 같네요.
잘 모르겠다면 구글에 'java 13 download' 를 검색하고, 공신력 있어보이는 사이트에서 가이드를 참고하여 자바를 추가해주세요.group 이름과 artifact 이름을 추가해주세요.
group 이름은 프로젝트를 구분할 수 있게 해주는 고유의 이름이다.
artifact 이름은 jar 파일의 이름이다.
위 정의만 보고 이해가 안 간다면, 구글에 찾아보는 것을 추천한다. 찾아봐도 잘 모르겠다면 일단 잠시 접어두고 다음 글을 쭉 따라가보자.
타입은 maven 을 선택해준다. 인텔리제이 버전에 따라서 Maven Project, Maven POM 나누어진 버전도 있다.
이 땐 Maven Project 를 선택하여, maven wrapper 가 포함되도록 해준다.
만약 maven 과 gradle 이 무엇인지 모른다면, 역시 구글에 maven gradle 을 검색해보자.
읽어보고, 잘 모르겠으면 일단 다음 글을 읽자.Java version 은 11, 언어는 코틀린으로 하자.
버전과 네임 이름은 group 명과 artifact 명으로 자동 세팅될 것이고, Desription 과 Package 를 정해주자.
영상에서는 Desription 과 Package 를 설정해주는데, 특별히 추가하지 않아도 상관없다.
다음은 어떤 dependency 를 이용할 지 선택한다.
Spring Boot version 은 2.2.0.RC1 을 이용한다. 해당 버전을 선택한 이유는 영상에서 그 버전을 선택했기 때문이다.
튜토리얼을 진행하는 과정에서 영상과 다른 버전을 이용했다가 방법이 달라질 수 있기에 동일하게 선택한다.
특별한 버전이어서 선택한 것은 아니다.
(영상에서 가장 최신이고 이용할 수 있는 선택지라고 하지만... 지금 보는 사람에게 최신인지는 모르겠다.)
dependency 중 Spring Reactive Web 을 선택해준다.
그리고 넘어가서, project name 과 위치를 선택해준다. 튜토리얼에서 이름과 위치는 크게 의미 없기에 편하게 해주면 된다.
(물론 모든 튜토리얼은 영상과 같이 해주는게 변수를 줄일 수 있다.)
끝마치고 나면 인텔리제이가 선택한 속성대로 프로젝트를 만들어준다.
만약 maven 으로 잘 설정했다면, 우측 하단 (또는 버전에 따라 위치가 다를 수도 있다) 에
enable auto import 를 눌러준다. 이는 pom.xml 파일에 변경이 생길 경우 변경사항을 바로 적용해주는 설정이다.
우측 아래에 상태 바를 보면 무언가를 다운로드 하거나 resolving 하고 있다고 나올 수 있다. 이땐 잠시 기다려주자.
아직 세팅이 완료되지 않았다.
인텔리제이는 스프링 빈과 같은 스프링 element 관계를 볼 수 있게 기능을 제공한다고 설명하지만, 글을 쓰고 있는 현재까지는 아직은 사용하기에 불편하다.
pom.xml 파일을 보자. 영상에서 설명하는 정도로 무엇이 추가되어 있는 지 눈으로 확인해보는 정도로 만족하자.
파일 간의 이동을 할 때 CMD-E 를 이용하면 최근 본 파일 리스트를 볼 수 있다.
(영상을 따라해보면서 단축키를 이용하는 연습을 하는 것이 좋다. 한손으로 마우스를 쓰고, 다른 한손으로 돕는게 무조건 유리하지 않은가?)
main method 로 돌아가서, 어플리케이션을 실행한다. 환경별 단축키를 알려준다.
windows 나 linux, mac , 환경에 맞게 단축키를 눌러준다.
필자는 MAC 을 사용하고 있기에 Ctrl + Shift + R 을 눌러주었다. 불편하더라도 습관적으로 단축키를 써라.
'나는 안 써도 괜찮던데? 내가 아는 선배를 안 쓰는데?' 라는 생각이 들어도 써라.
잘 실행되었다면, 하단에 log 를 볼 수 있다.netty, 8080 이 잘 써져 있는지 영상으로 보고 확인하자. 만약 netty 8080 이 써져 있지 않다면, (무조건 써져있을 것이긴 하다..)
댓글을 남겨주시면 확인해드리겠습니다.
다음 어플리케이션을 멈추는 방법은 Cmd + F2 를 통해 멈춰준다. 윈도우는 Ctrl +F2 이다.필자는 솔직히 맥북을 쓰고 있는데, F1, F2 ... 등등 키를 이용하는게 맥북 키보드 구성 상 불편하다. 그래도 억지로 쓴다.
동일한 파일에 RestController 를 만들어 준다. 영상을 그대로 따라해서 만들어준다.
클래스 위에 @RestController 를 달아준다. 아마 쓰는 동시에 추천 의존성이 뜰 것이다. 잘 선택해준다.
클래스 안에 fun 을 입력하면, 추천 함수 형태가 나온다. 인텔리제이를 이용해 코틀린을 사용하면 이러한 장점이 있다.
변수를 하나 가지고 있는 함수를 만들기 위해 fun1 을 선택해준다.영상에 나온대로 함수를 만들어준다. Flux 에 대해 잘 모른다해도 일단 넘어가자.
(튜토리얼이 끝난 후에 Mono, Flux 에 대해 찾아보면 좋다.)
StockPrice 라는 클래스가 존재하지 않는 다해도 입력하고 Alt+Enter 를 이용하면 역으로 생성할 수 있다.
클래스를 생성하고, 써주는 것보다 훨씬 편리하다.
StockPrice 는 data class 로 만들어준다. 영상에서 말하는 것처럼 자바는 getter, setter, hashcode, toString 를 가지고 있어야 하지만 코틀린은 생성자 파라미터로 지정만 해주면 된다. 각각의 변수는 영상에서처럼 동일하게 해준다.
LocalDateTime 은 java 8 을 사용한다고 언급하고 넘어가는 이유가 궁금하면 LocalDateTime 에 대해 검색해보자.
약간의 역사와 방법을 알면 좋다. 이런저런 이야기가 구글링하면 많을 것이다.
다시 Controller 에 메소드를 만들어준다. 영상처럼 해당 메소드는 매초 마다 랜덤한 숫자를 생성해서 flux 로 반환한다.
그리고 그 숫자를 받아서 map 을 통해 StockPrice 를 반환한다.stockPrice 를 만들면서 생성자 파라미터로 randomPrice 함수를 이용한다. 역시나 먼저 사용하고 그 다음 만드는 방식으로 쓴다.
처음 공부하는 사람은 모르는 클래스나 메소드를 먼저 쓰고 빨간줄이 그어지면서 당황하기 마련이다.
먼저 사용하고 생성한다는 것을 인지하고 당황하지 말고 하자.
Http Get call 을 받기 위해 GetMapping 어노테이션도 추가하자.
produce 를 TEXT_EVENT_STREAM_VALUE 를 사용하는 건 반환값이 Flux 이기 때문이다.
(정확히 말하면 인과관계는 아니지만...)
PathVariable 도 직접 추가해주면 되지만, 인텔리제이의 기능을 보여준다. Alt + enter 를 통해 손쉽게 추가해준다.다시한번 실행해준다. (단축키 이용)
그리고 웹브라우저에서 확인해준다. Flux 가 어떤 방식으로 반환하는지 확인할 수 있다.반응형'Spring' 카테고리의 다른 글
Spring event (1) 2020.03.16 Spring kafka 적용하기 (0) 2020.03.11