study/summary

Spring 기초 4주차

으녕오리 2024. 11. 21. 00:51

Spring이 지원하는 다양한 기능과 파라미터 매핑, 어노테이션 활용 방법을 학습한다.

Chapter 1: Spring Annotation

  • @Slf4j
    • 인터페이스이고 그 구현체로 Logback(라이브러리)을 선택한다.
    • Logging
      • 로그를 작성하고 싶을 때 사용하는 어노테이션
      • Thread 정보, 클래스 이름과 같은 부가 정보를 함께 확인 가능
      • 실제로는 sout으로 Console에 정보를 출력하는 것이 아니라, 별도의 로깅 라이브러리(Logback)을 사용하여 로그를 출력한다.
      • Log Level : TRACE > DEBUG > INFO > WARN > ERROR
      • log를 사용할 때는 log.trace("문자 trace={}", sparta); 처럼 중괄호와 두번째 매개변수가 치환하도록 만들어주면 된다.
  • @Controller VS @RestController
    • Controller를 만들때 사용하는 어노테이션
      • @Controller
        • ★ View가 있는 경우에 사용한다. 즉, Template Engine(Thymeleaf, JSP 등)을 사용하는 경우
      • @RestController
        • 응답할 Data가 있는 경우에 사용한다.
        • 현재는 대부분 @RestController를 사용하여 API가 만들어진다. (Restful API)
        • return 값으로 View를 찾는것이 아니라 HTTP Message Body에 Data를 입력한다.
        • 동작 : Model And View 형태로 반환이 아니라 JSON, XML 등의 Data를 응답한다.
  • Annotation 자세히 보기
    • @Component
      • Spring Bean(애플리케이션의 구성 요소를 정의하는 객체)에 등록하는 역할을 수행한다.
      • @Indexed : Spring Bean에 더 빠르게 등록되도록 도와준다.
      • 싱글톤으로 관리된다.
    • @Target : 하위 어노테이션이 어떤 범위에 적용되는지 설정한다.
      • ElementType Enum 속성 : 각각의 Enum마다 적용되는 범위가 있다.
    • @Retention : 하위 어노테이션이 얼마나 오래 유지되는지를 결정한다.
      • RetentionPolicy Enum 속성
        • SOURCE : 소스 코드(.java)에서만 유지된다.
        • CLASS : 컴파일된 클래스 파일(.class)에 저장되지만, JVM이 실행 시 읽지 않는다. (주석과 같음)
        • RUNTIME : 실제 런타임 시점의 코드에 반영된다.
    • @Documented
  • 다시보는 @Controller VS @RestController
    • 개발에서는 항상 자세히 선언된 것이 우선순위가 높다! 
    • @RestController : @Controller에 @ResponseBody가 결합된 어노테이션

 

Chapter 2: Request Mapping

  • @RequestMapping
    • 특정 URL로 Request를 보내면 들어온 요청을 Controller 내부의 특정 Method와 Mapping 하기 위해 사용한다.
    • URL path : /example
    • URL, Method 등을 조합하여 Mapping 한다.
    • 속성값들을 설정할 때 배열 형태로 다중 설정이 가능하다.
    • @GetMapping
      • Target(ElementType.METHOD) Method Level에 해당 어노테이션을 적용한다.
      • 내부적으로 @RequestMapping(method = RequestMethod.GET)을 사용하고 있다.
    • @RequestMapping 보다는 @GetMapping, @PostMapping 형식을 사용한다.
    • @RequestMapping 사용 방법
      • @GetMapping 같은 것들의 Target은  Method Level 이다.
      • @RequestMapping의 Target은 Class, Method Level 이다. 
      • Restful API의 계층 구조
      • prefix로 선언할 URL을 class 레벨에 적용하는 것에 주로 사용된다.
  • @PathVariable
    • 비연결성을 극복하여(비연결 상태일 때) 데이터를 전달하기 위한 방법
    • URL로 전달된 값을 파라미터로 받아오는 역할을 수행
    • ex) user/{id} -> {} 안에 반드시 값을 가져야 한다.
    • 파라미터 변수명과 PathVariable 변수명이 같으면 속성 값(PathVariable 변수명) 생략 가능
    • @PathVariable 다중 사용 가능
  • 특정 파라미터 매핑
    • @RequestMapping에 추가적인 속성을 설정해서 특정 헤더나 특정 파라미터에 매핑되게 할 수 있다.
    • Parameter 추가 매핑
      • 속성 작성 규칙
        • params = "gender"
          • params의 key값은 커스텀이 가능하다.
          • value는 없어도 된다.
    • 특정 Header 매핑
    • MediaType 매핑, consume(수용)
      • HTTP Header Content-Type(요청)과 매핑 된다.
      • consumes 속성 value값으로는 Spring에서 제공되는 Enum인
        MediaType.APPLICATION_JSON_VALUE 형태로 사용한다.
      • 속성 작성 규칙
        • consumes="*\/*” -> 모두 허용
    • MediaType 매핑, produces(제공)
      • 요청 헤더의 Accept 값에 따라서 produces 하는 값이 변한다.
      • MediaType은 Spring 이 제공하는 Enum을 사용한다.
  • Spring이 지원하는 Parameter
  • MultiValueMap