본문 바로가기

카테고리 없음

24.01.09 뉴스피드2

우선 대강 song를 완성해서 그걸 팀장님이 완성한 album에 병합시켜 보기로 했다. 

먼저 git에 올라온 파일을 받으려면 git merge를 한 다음

git pull origin dev를 해야 하는데, error: Your local changes to the following files would be overwritten by merge:
src/main/resources/application.yml 라는 에러가 뜨게 되었다. 알아보니 내가 dev를 수정했기 때문에 그걸 업로드 한 뒤에 받아야 한다고 한다. 그래서 git add .과 git commit -m "메시지" 이걸 먼저 하고, 그 뒤에 git pull origin dev를 하니 됬다.

 

참고로 어데 올렸던 S.A에 대한 피드백이 왔는데,
- {}로 전달하는 Path Parameter가 일부 잘못 표기되어 있습니다. 수정 부탁드립니다. ex) `GET /album/{albumId}/comments}` 라고 왔다. 아마 /album/{albumId}/comment/{commentId}로 된게 잘못 되었던 모양이다.

 

그리고 Song에 대해선 내가 Dto를 사용하지 않았는데, dto를 사용하는것이 보안에 더 좋다는 모양이라 dto를 만들게 되었다.

 

그리고 스웨거랑 연결하려면  build.gradle에 implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0")를 넣고

@Configuration
class SwaggerConfig {
    @Bean
    fun openAPI(): OpenAPI = OpenAPI()
        .info(
            Info()
                .title("Coding Sonyeondan API")
                .description("Welcome to Coding Sonyeondan")
                .version("1.0.0")
        )
}

이게 있어야 연결이 된다. 빼먹지 말자.

 

그리고 에러 메시지를 나나내는 녀석들도 알게됬는데,

 

data class ErrorDTO (val message: String?)

이게 에러 메시지를 나타내고

data class ModelNotFoundException(val modelName: String, val id: Long): RuntimeException(
    "Model $modelName not found with given id: $id"
)

이게 id를 찾을수가 없으면 발동하고

 

class UniqueAttributeAlreadyExistException (val modelName: String, val value: String, val attribute: String): RuntimeException(
    "$modelName's attribute $attribute $value is already exist"
)

이거는 이미 해당 모델이 존대하는데 중복됬을 경우에 작동하며

 

@RestControllerAdvice
class GlobalExceptionHandler {

    @ExceptionHandler(ModelNotFoundException::class)
    fun handleModelNotfoundException(e: ModelNotFoundException): ResponseEntity<ErrorDTO>
    {
        return ResponseEntity
            .status(HttpStatus.NOT_FOUND)
            .body(ErrorDTO(e.message))
    }

    @ExceptionHandler(UniqueAttributeAlreadyExistException::class)
    fun handleUniqueAttributeAlreadyExistException(e: UniqueAttributeAlreadyExistException): ResponseEntity<ErrorDTO>
    {
        return ResponseEntity
            .status(HttpStatus.CONFLICT)
            .body(ErrorDTO(e.message))
    }
}

이녀석은 모든 에러 메시지를 총괄하는 사령탑이다.

 

 

처음부터 dto를 넣었어야 했는데, 나중에 넣다보니 꼬이고 오류도 나고, 거기에 title를 넣어야 하는데 빼먹는다던가 하는ㄹ 실수가 계속 발생하고 있다.

 

다음부턴 꼭 서비스, 서비스임플, 컨트롤러, 리포지터리, dto를 다넣어야 할거같다.