본문 바로가기
개발 이야기/Springboot

[Kotlin] Springboot + Gradle 시작하기

by 농개 2020. 2. 22.
반응형

 

최근 회사에서 Kotlin으로 개발을 하게 되어 새로운 언어를 공부해야 됬는데요...

코틀린(Kotlin)은 이전까지 안드로이드 개발. 즉, 앱개발 할 때 사용되는 언어라 생각했습니다.

2017년 구글에서 안드로이드 개발언어로 코틀린을 정식으로 채택하고, 앱 개발 관련 공식문서들도 코틀린을 예제로 작성되는 등을 미뤄볼 때, 모바일 앱 개발자는 무조건 해야겠구나 생각했습니다.

 

하지만!!!

요즘은 Kotlin으로 서버 개발을 하는 회사도 있다고 하네요.

Kotlin도 Java와 같이 JVM에서 돌아가기 때문에 Java랑 완벽히 호환이 되고, 최근 Typescript 같은 인기 많은 언어처럼 Null Safety, 함수형과 같은 특징을 가지고 있어 서버개발에 채택되는 경우가 점점 많아지는 추세라고 합니다.

기존 Java 개발자라면 쉽게 배울수 있고

그러면 협업에 이점도 있을 거고

또 서버개발자가 추후 안드로이드 개발할 경우(?)에도 쉽게 적응할수 있을 거고

그러니 인기있고 대세인 Language가 아닐까 싶네요.

 

각설하고 이번글에서는 간단히 Springboot + Gradle 기본 환경을 구축해보려합니다.

개발환경은 아래와 같습니다.

  • OS : Windows 10
  • IDE : Intellij community(무료버전) - 최근 회사에서 상용버전을 써봤는데 괜찮더라구요... 집에선 라이선스 비용이 만만치않아 무료로..)

 

 

 

 

01. Spring initializr

Intellij community 버전은 IDE 자체에서 spring boot 초기 플젝 생성이 안됩니다.

https://start.spring.io/ 에서 zip파일 받아서 해보겠습니다.

 

  • Gradle 선택
  • Spring boot 버전 선택
  • Kotlin 선택
  • dependency는 우선 Web만 추가

위와 같이 선택해주고 Generate 해줍니다. 그럼 zip파일이 다운받아 질겁니다.

 

 

02. Intellij 프로젝트 생성 및 모듈 생성

프로젝트 생성 및 모듈 생성을 해줍니다.

Empty Project로 생성해줍니다. 추후 다른 모듈들을 쉽게 추가하기 위해서...

 

그리고 다운받은 zip파일의 압축을 풀고, File > New > Existing Module Sources... 를 클릭해서 모듈을 추가해줍니다.

Gradle 선택해주구요.

 

 

그럼 아래와 같이 모듈 패키지가 추가됨을 확인 할 수 있습니다.

 

 

03. Gradle로 빌드

무작정 빌드해봅시다.

Intellij 우측 상단에 빌드 셀렉트박스를 보면 Edit Configuration이 있어요 클릭하면 아래와 같은 창이 뜹니다.

추가 버튼을 눌러서 쉽게 빌드하기 위한 설정을 추가해봅시다. 

그리고 빌드해보면 Success Log를 확인 할 수 있을 겁니다.

 

 

04. API 서버 만들기

간단한 Rest API Server를 한번 만들어 봅시다.

api라는 패키지를 만들고 ContentsController라고 하나 만들어 줬습니다.

그리고 코드는 아래와 같이 작성해봅니다.

package com.example.springgradletest.test.api

import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/contents")
class ContentsController {

    @GetMapping()
    fun index(): ResponseEntity<String> {
        val hello = "Hello World!"
        return ResponseEntity.ok(hello)
    }
}

localhost:8080/contents로 접속하면 Hello World! 텍스트를 표시할 겁니다.

 

빌드 스크립트를 조금 수정해봅시다. build.gradle.kt 파일을 열어서 아래와같이 수정줍니다.

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.springframework.boot.gradle.tasks.run.BootRun // 추가

plugins {
	id("org.springframework.boot") version "2.2.4.RELEASE"
	id("io.spring.dependency-management") version "1.0.9.RELEASE"
	kotlin("jvm") version "1.3.61"
	kotlin("plugin.spring") version "1.3.61"
}

group = "com.example.spring-gradle-test"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
	mavenCentral()
}

dependencies {
	implementation("org.springframework.boot:spring-boot-starter-web")
	implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
	implementation("org.jetbrains.kotlin:kotlin-reflect")
	implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
	testImplementation("org.springframework.boot:spring-boot-starter-test") {
		exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
	}
}

tasks.withType<Test> {
	useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
	kotlinOptions {
		freeCompilerArgs = listOf("-Xjsr305=strict")
		jvmTarget = "1.8"
	}
}

// task 추가
tasks.getByName<BootRun>("bootRun") {
	main = "com.example.springgradletest.test.TestApplicationKt" // MainClass 경로
}

블로그 검색해보면 build.gradle 파일코드가 많이 보이는데, spring initializr로 만들면

build.gradle.kt 파일이 만들어 질꺼에요. (코틀린 전용 gradle 빌드 스크립트 파일이고, Kotlin 관련 설정을 더 쉽게 하도록 간소화된 기능을 제공하는듯 합니다...)

제일 하단에 gradle task를 하나 추가해줬어요.

task를 실행하면 main class를 실행하도록 설정해봅시다.

main 경로 작성시 마지막에!!! Kt를 붙여줘야합니다 TestApplicationKt

그래야 Spring boot가 실행이 되더군요...

 

마지막으로 Run Configuration에 task를 bootRun으로 추가해줍니다.

그리고 Run 해보면

그냥 Application.kt 파일 우클릭 Run 하는게 편하더군요..

> Task :bootRun

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-02-22 15:27:08.109  INFO 10560 --- [           main] c.e.s.test.TestApplicationKt             : Starting TestApplicationKt on KANG with PID 10560 (C:\Users\kang\workspace_intellij\kotlin-example-project\test\build\classes\kotlin\main started by kang in C:\Users\kang\workspace_intellij\kotlin-example-project\test)
2020-02-22 15:27:08.114  INFO 10560 --- [           main] c.e.s.test.TestApplicationKt             : No active profile set, falling back to default profiles: default
2020-02-22 15:27:10.406  INFO 10560 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-02-22 15:27:10.423  INFO 10560 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-22 15:27:10.424  INFO 10560 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-02-22 15:27:10.519  INFO 10560 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-22 15:27:10.519  INFO 10560 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2329 ms
2020-02-22 15:27:10.730  INFO 10560 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-02-22 15:27:10.976  INFO 10560 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-02-22 15:27:10.980  INFO 10560 --- [           main] c.e.s.test.TestApplicationKt             : Started TestApplicationKt in 3.449 seconds (JVM running for 4.064)

 

embedded 된 tomcat 서버에 어플리케이션을 띄워 볼 수 있습니다.

브라우저 띄워서 확인해봅시다.

 

잘 뜨네요.

실제 서버를 구축하려면 여러가지 dependency 추가해서 개발을 시작하면 될겁니다.

 

 

반응형