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
}
}
취향 차이인 것 같은데 개인적으로는 코드가 가장 짧게 떨어지는 생성자 방식이 편해 보인다. 물론 개발 과정에 따라 다른 방식으로 해야 하는 경우가 있을 수 있으니 알아는 두도록 하자.
'springboot' 카테고리의 다른 글
springboot kotlin coroutine 활용한 PromiseAll 같은 병렬처리 (0) | 2022.11.28 |
---|---|
springboot kotlin jsonParse관련 문제 해결 (0) | 2022.11.27 |
springboot(kotlin) 환경에서의 RestTemplate을 사용 및 xml 정보 파싱 (0) | 2022.11.21 |
스프링부트 + 코틀린 데이터베이스 연동 설정 (0) | 2022.09.01 |
BeanDefinitionStoreException 발생원인 및 해결 방법 (0) | 2022.08.31 |