본문 바로가기

부트캠프 일지

부트캠프 21일차 후기

크리스마스 연휴가 끝나고, 다시 부트캠프가 시작되었다. 3일간의 연휴는 은근히 긴 모양이라서 평소보다 더 헤매어서 오늘은 그닥 많은 것을 하지 못했다. 특히 Kotlin을 통한 Spring Security의 파편화된 정보를 구하다가 계속 deprecated된 코드를 맞닥뜨리고 이걸 어떻게 이 버전에서 구현을 해야 할지 고민을 하다보니 그런 것 같다.

 

어쨌든 오늘 CodeKata는 5문제를 풀었다. 알고리즘/자료구조만 알고 있다면 금방 풀리는 문제들이라서 크게 어렵지 않았다. 알게 된 것이라면 String을 인덱싱할 때 indices를 사용하면 편리하다는 사실 정도이다.

 

연휴를 보내면서 이전에 구현한 것 중에 걸리는 게 있었다. 값을 검증하는 코드인데, 내가 이전에 Java로 Spring Boot를 건들이면서 알게 된 기능 중 하나가 @Valid 어노테이션이다. 그렇다면 혹시 Kotlin에서도 똑같거나 비슷한 문법이 있지 않을까? 란 생각이 연휴를 보내며 문득 떠올리게 되었다. 그래서 부트캠프를 시작하고 구글링을 한 결과 아니나다를까 똑같은 것이 있었다.

 

이전의 코드에선 Service 내에서 DTO를 검증했는데, 이 @Valid을 사용하면, DTO에서 데이터가 들어가면서 데이터 값을 검증하는 편리한 기능히다. 여기서 발생한 Error는 Controller에서 BingdingResult로 파라미터로 전달되어서 이 Error를 확인할 수 있다. 이렇게 함으로써 Service에서 데이터를 검증하는 과정을 떼어내서 더 비즈니스 로직에 집중할 수 있는 장점을 취할 수 있을 것 같다.

private fun isValidTodo(todo: Todo): Boolean
{
    return todo.content.length in 1..1000 && todo.title.length in 1..199
}
private fun validateTodo(todo: Todo)
{
    if(!isValidTodo(todo)) throw IllegalStateException("Invalid todo")
}
// 이렇게 검증하는 코드를



data class TodoCreateDTO (
    @field:Length(min = 1, max = 200, message = "title length must between 1 and 200")
    var title: String,
    @field:Length(min = 1, max = 1000, message = "content length must between 1 and 1000")
    var content: String,
    var writer: String,
    var createdDate: Date
)

@PostMapping()
fun createTodo(@RequestBody @Valid todoDTO: TodoCreateDTO, bindingResult: BindingResult):
            ResponseEntity<TodoDTO>
{
    if(bindingResult.hasErrors()){
    throw InvalidateDTOError("createDTO", bindingResult.fieldError?.defaultMessage ?: "")
    }
        return ResponseEntity.status(HttpStatus.CREATED)
            .body(todoService.createTodo(todoDTO))
}
//이렇게 수정

 

오늘 코드를 구현하면 배운 것이 있다면 페이징에 관한 코드이다. Repository에 Pagaeble한 객체를 파라미터로 전달하면 그 해당 정보로 페이징을 한 데이터 리스트를 받을 수 있다는 것이였다. 내가 이 요구사항을 처음 접했을 때 나는 @Query에 offset과 size 정도만 전달해서 JPQL을 수정할 수 있을까를 고민했었는데, 찾아본 결과 그것보다 훨씬 편리한 기능을 발견해서 다행이였다. 

 

오늘은 일단 여기까지 하도록 하고 내일은 Spring Security를 마무리 지음으로써 Step4를 다 구현하자.

'부트캠프 일지' 카테고리의 다른 글

부트캠프 23일차 후기  (0) 2023.12.28
부트캠프 22일차 후기  (0) 2023.12.27
부트캠프 20일차 후기  (2) 2023.12.22
부트캠프 19일차 후기  (1) 2023.12.21
부트캠프 18일차 후기  (0) 2023.12.20