springboot

스프링부트 + kotlin - 기본 어노테이션 학습

bakerlee 2022. 9. 1. 20:07

controller

client 측의 호출에 반응하여 프로세스를 시작한다.

@RestController
@RequestMapping("/api")
class AuthController() {
    @GetMapping("/hello")
    fun hello(): ResponseEntity<String> {
        return ResponseEntity.ok("hello")
    }
​
    @PostMapping("/test-redirect")
    fun testRedirect(response: HttpServletResponse) {
         ResponseEntity.ok("hello")
    }
}
  • @RestController 어노테이션을 적용하며, @ ---Mapping("path")를 통해 해당 요청에 대한 경로를 설정한다.

DTO

data transfer object , 데이터 타입 구조체로 보면 무방할 듯 하다.

import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Size
​
data class TokenDto(
    var token: String? = null
)
​
// vaildator 사용 
data class LoginDto(
    @field:NotNull
    @field:Size(min = 3, max = 50)
    var username: String? = null,
​
    @field:NotNull
    @field:Size(min = 3, max = 100)
    var password: String? = null
)

java 환경에서는 getter setter 자동 생성을 위해 해당 라이브러리를 사용하였으나, 코틀린은 데이터 타입 전용 클래스를 지원한다.

data class 로 선언된 클래스는 getter setter 이외에도 연산자 오버라이드 같은 추가 기능을 활용할 수 있으니 이쪽을 사용하는 것이 더 좋을 것 같다.

getter setter 및 기타 기능들을 활용할 수 있다.

field 어노테이션을 활용하여 해당 데이터 타입에 대한 유효성을 검사하도록 한다.

Service

내부적인 로직 처리를 담당한다. 유사한 언어에서의 service와 동일한 역할을 하는 것 같다.

어노테이션의 경우 @component 하위의 [@Controller, @Service, @Repository] 3형제 중 하나인 것 같다.

bean으로 등록되어 전역적으로 처리되며 의존성 주입을 통한 사용을 할 수 있도록 한다.

의존성 주입

angualr, laravel 환경에 있다가 와서 따로 의식하지 않고 있었는데 생성자 단계에서 별도의 어노테이션 없이 의존성을 주입할 수 있었다.

예전에 @Autowired 를 사용했던 기억이 나서 해당 내용을 다시 찾아보았다.

Constructor

@Service 
class UserService(private val userRepository: UserRepository) { 
   ...
}

field

@Service 
class UserService { 
   @Autowired 
   private lateinit var userRepository: UserRepository 
}

Setter

@Service 
class UserService { 
   private var userRepository: UserRepository 
   // @Required 도 가능하다
   @Autowired 
   fun setRepository(userRepository: UserRepository) { 
      this.userRepository = userRepository 
   } 
}

취향 차이인 것 같은데 개인적으로는 코드가 가장 짧게 떨어지는 생성자 방식이 편해 보인다. 물론 개발 과정에 따라 다른 방식으로 해야 하는 경우가 있을 수 있으니 알아는 두도록 하자.