사이드프로젝트를 개발 중에 있는데 프론트 개발을 하다보니 지겹기도 하고 얼추 기능단은 완성이 돼 가고 있어서 서버 개발을 시작해보려고 했다.
인텔리제이에서 프로젝트 생성을 하려는 순간,, 또 Spring 을 써야하나,,? 이 빌드 시간도 느리고 내가 몇 년간 회사에서 사용했던 프레임워크를,, ? 또..? 라는 생각이 들었다.
그래서 여러 프레임워크나 라이브러리 중 node 기반의 nest 와 ktor 사이에서 고민이 됐다.
nest 는 ts 기반으로 개발을 할 생각이었는데 생각해보니 회사의 한 개발자분께서 스크립트 기반으로 서버 개발하려니 너무 힘들다,, 라는 말씀을 했던 것이 기억나 주변에서 한 번도 얘기 들어보지 못 했던 ktor 를 고르게 됐다 ㅎㅎ
ktor.io 에 접속하면 해당 문구가 있다.
내부적으로 코루틴을 이용하나보다.
intellij 에서 ktor 를 이용하려면 먼저 플러그인을 다운받아야 한다.
ktor.io/docs/intellij-idea.html#top 에서 나온다.
ktor 로 프로젝트 설정을 하면
저런 식으로 기능을 선택할 수 있는 것 같다. 좋다. 그렇지만 뭐가 너무 많아서 뭘 추가해야 할지 모르겠어서 공식문서 보고 좀 추가해줬다.
서버 생성
공식문서에 따르면 서버를 생성하고 실행하는데 2가지 방법이 있다.
또한 공식적으로 지원하는 엔진은 Netty, Jetty, Tomcat, CIO(Coroutine-based IO) 로 4가지가 있다.
기본적으로는 Netty 로 설정 돼 있다. 자신만의 엔진으로도 설정할 수 있다고 한다.
embeddedServer 메소드
이 방법은 서버를 간단하게 생성하는 방법인 듯하다. 코드 상에서 서버 설정 코드를 넣을 수 있다. 그리고 서버 엔진까지 코드로 설정할 수 있는 듯 하다. 사진에서처럼 port 8000 번과 서버 엔진 Netty 로 설정을 할 수 있다.
EngineMain
서버 설정을 application.conf 파일에서 불러오는 듯하다. 쉽게 생각하면 spring 의 application.yml 또는 properties 파일 정도 되는 듯,,
netty 패키지에서 가져온 EngineMain 이기 때문에 서버 엔진은 당연하게도 네티로 설정된다.
다른 내용들은 공식문서에서 찾아보자,,
우선 ktor 는 공식문서에 아주 친절히 나와 있었다. routing 이런 부분이 좋았다.
그런데 spring 에서는 service 클래스를 DI 받아서 사용했는데 ktor 에서는 어떻게 사용해야 할지 나와 있지 않아서 잘 모르겠다..
다른 오픈소스들을 좀 살펴보아야 할 것 같다.
또한 서버엔진이 netty 이고 코루틴 기반이기 때문에 위에서 소개하는 것처럼 비동기 논블러킹,,인데 RDB 사용하면 어떡하지라는 의문은 jetbrain 에서 개발하는 exposed 를 사용하면 된다.
github.com/JetBrains/Exposed/wiki/Transactions#working-with-coroutines
해당 글에서 잘 사용할 수 있다고 나와 있는데 직접 사용해보아야 알 것 같다.
ktor 를 사용하려고 보니까 내 뇌가 너무 spring 에 맞춰진 것 같다는 생각이 들었다.
유연하게 만들어야지,,