inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코틀린 백엔드 프로젝트 2기 - 3주차

양치잘하기
0

섹션 4 6강 ~ 섹션 5 9강까지의 내용 학습

 

타임리프 문법 정리

 

컨트롤러 개발

@RestController

@controller와 @ResponseBody가 합쳐진 어노테이션, 리턴을 HTTP 바디에 문자열로 넣을 수 있으며 JSON형식으로도 지정이 가능

@RequestMapping("/경로")

클래스 단위에 달아주고 경로를 설정해주면 컨트롤러 클래스의 ENTRY 포인트 지정

@GetMapping("/test")

메서드 단위에 달아주면 컨트롤러에 진입한 메서드의 ENTRY 포인트 지정

http 메서드 get을 받음, post, put, patch, delete도 존재

 

@RestController
@RequestMapping("/api")
class PresentationApiController(
    private val presentationService: PresentationService
) {

    @GetMapping("/test")
    fun test(): String {
        return "OK"
    }
}

/api의 경로 에서 /test로 진입하면 fun test() 메소드가 실행됨

현재 코드에선 "ok"가 리턴됨 즉, HTTP 바디에 OK하는 문자열이 담김

 

@Controller

해당 어노테이션이 붙은 클래스는 리턴값의 이름과 같은 html파일에 연동됨 해당 html파일에는 model을 이용해서 값을 넘겨줄 수 있으며 해당 html파일이 view가 되어 model에 담긴 값을 꺼내어 사용하고 타임리프 뷰 템플릿을 사용하여 동적으로 만들어 주는 것이 가능함

@Controller
class PresentationViewController(
    private val presentationService: PresentationService
) {
    @GetMapping("/resume")
    fun resume(model: Model): String {
        val resume = presentationService.getResume() 
        model.addAttribute("resume", resume)
        model.addAttribute("skillTypes", SkillType.values())
        return "presentation/resume"
    }
}

get 메서드로 /resume로 요청을 하면 fun resume() 메소드가 실행됨

모델에 resume, SkillType.values() 값을 담고 리턴을 하면 리턴에 해당하는 html파일에서 모델에 담긴값을 이용해서 뷰를 꾸며줌

 

컨트롤러 테스트 코드

mockmvc를 주입받아서 모의 객체 생성을 함

"/api/v1/introductions"의 uri로 요청을 하면 해당 경로의 메서드가 실행되어 응답을 받고 그 응답을검증함.

 

 

인터셉터 개발

인터셉터의 호출 순서는

HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러

이며 컨틀롤러 도달전의 호출된다

HandlerInterceptor 를 구현하였고 프로젝트에선 afterCompletion만 오버라이딩 하여 모든 요청에 대한 정보를 데이터 베이스에 저장하도록 구현하였다

인터셉터는 경로를 설정하여 어떤 경로게 대하여 인터셉터를 실행할지 결정이 가능하다

WebMvcConfigurer 를 구현한 클래스의 addInterceptors() 메소드를 통해 인터셉터를 등록하고 경로 설정이 가능하다

override fun addInterceptors(registry: InterceptorRegistry) {
    registry.addInterceptor(presentationInterceptor)
     .addPathPatterns("/**")
     .excludePathPatterns("/assets/**", "/css/**", "/js/**", "/admin/**", "/h2**",
      "/favicon.ico", "/error")
 }

 

 

어드민 패키지

AdminApiControllerAdvice

@RestControllerAdvice 를 사용하면 전역적으로 모든 컨트롤러에 대한 예외를 처리하는 것이 가능해진다.

@ExceptionHandler와 같이 사용해야 하며 특정 예외 클래스에 대한 핸들러 메서드를 작성할 수 있습니다.

오류의 종류

image개발자가 직접 처리가 가능한 오류는 Exception의 하위 오류들이다. 애플리케이션에서 대응할 수 있는 오류로서

UnckechedException, ckechedException이 존재하고 UnckechedException은 실행중에 발생하는 오류이다.

 

 

답변 0