본문 바로가기

Kotlin

1) springboot 2.7 kotlin 1.5 시작하기 - GetMapping

반응형

java 시너어 개발자로써 개인적으로 kotlin이 궁금해 졌다. 

회사내에서 굉장히 많은 팀에서 kotlin을 사용하기 시작하기도 했고 , 어떤 장점이 있는지 java 와 어떤점이 다른지를 알고 싶었졌다.

 

그래서 간단히 GET , POST , DELTE 의 간단한 CRUD의 api 를 만들어보고자 한다. 

아래 간단한 Category -  Item 구조의 1: N. 구조를 만들어서 테스트 해보도록 한다.

 

먼저 개발을 위한 프로젝트 구성을 해보자. 조합은 아래와 같이

Spring 2.7

Kotlin 1.5

jdk 16

intelliJ

구성을 이렇게 했는데 . 처음에는 Spring 3. Kotlin 1.6 jdk 1.7 로 구성을 했는데 . 서버가 뜨고 컴파일 되는데는 문제가 없었는데

인텔리제이에서 build.gradle.kts 파일에서 에러 딱지가 떠있어서 보니까 . Kotlin 1.6을 인텔리제이 tool에서 지원이 안되서 그런거 라고 한다. ( 빨간 에러가 너무 싫어서 버전을 낮췄다)

 

아래는 기본적인 lib만 추가된 bulid.grale.kts파일이다. 

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.7.8"
    id("io.spring.dependency-management") version "1.0.15.RELEASE"
    kotlin("jvm") version "1.5.20"
    kotlin("plugin.spring") version "1.5.20"
    kotlin("plugin.jpa") version "1.5.20"
}

group = "com.ksj"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_16

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    google()
    mavenCentral()
}

dependencies {
//    implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
//    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    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")
    compileOnly("org.projectlombok:lombok")
//    runtimeOnly("com.mysql:mysql-connector-j")
//    runtimeOnly("org.mariadb.jdbc:mariadb-java-client")
    annotationProcessor("org.projectlombok:lombok")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

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

tasks.withType<Test> {
    useJUnitPlatform()
}

DB관련 lib는 일단 주석처리하고 서버가 잘 뜨고 controller가 잘 작동하는지 체크한 후에 DB설정하고 JPA 설정을 추가해 본다.

이렇게 구성된 상태에서 서버가 잘뜨는지 실행해보자. 문제가 없다면  springboot application 실행한후에 아래와같이 브라우저에서 호출해 보면 

요렇게 서버 기본 에러페이지가 뜨는것을 확인. 

이제 Contoller를 만들어 보자. Category를 등록하고 조회할수 있는 CategoryController를 만들어 보자.

@RestController
class CategoryController {
    @GetMapping("/category")
    fun findCategories() : List<String>{
        return listOf("aaaa","bbb")
    }
}

간단한 GetMapping api 를 하나 만들어 보았다.

kotlin은 접근 제한자를 명시 하지 않으면 기본적으로 public이다.  

사용가능한 접근 제한자는 아래 와 같다.

  • 접근 제한자를 표기하지 않으면 public이 기본으로 설정되며, 누구나 접근이 가능합니다.
  • private으로 표기하면 파일 안에서만 접근이 가능합니다.
  • internal로 표기하면 프로젝트의 모듈 안에서 누구나 접근이 가능합니다.
  • protected는 최상위에(top-level)에 정의되는 클래스, 인터페이스 등에서는 사용할 수 없습니다.

함수를 만드는것도 java는 다른 문법을 사용하는것을 볼수 있다.

  • 함수의 시작을 fun 키워드를 사용한는것 . 
  • 리턴타입 함수명 ( List<String> fincCategories(...) ) 가 아닌 함수명 : 리턴타입 

변수명을 선언할때도 java와는다른것을 나중에 볼수있을거 같다. 

listOf는 내장함수로 안의 내용을 list 형태로 만들어주는 함수이고 java Arrays.asList 와 같은 기능을 하고 있다.

 

이렇게 간단하게 간단하게 kotlin으로 기본적은 GetMapping api를 만들어 보았고 

다음에는 DB를 연결하고 DB 설정과 JPA 설정을 하는거까지 해보자.

'Kotlin' 카테고리의 다른 글

2) kotlin jpa 설정 간단한 샘플예제  (0) 2023.01.30