TIL/Spring

TIL 2024-11-05 (Spring 입문 - Spring Annotation, Mapping)

myoma 2024. 11. 5. 21:49

1 ) Slf4j

  • Slf4j는 인터페이스이고 그 구현체로 Logback같은 라이브러리를 선택한다.
  • 실제 개발에서는 Spring boot가 기본으로 제공하는 Logback을 대부분 사용한다.

 

 

  • @Controller
    • View가 있는 경우 사용한다.
    • 즉, Template Engine인 Thymeleaf, JSP 등을 사용하는 경우
  • @RestController
    • 응답할 Data가 있는 경우 사용
    • 현재는 대부분 @RestController를 사용하여 API가 만들어진다 (Restful API)
    • return 값으로 view를 찾는 것이 아니라 HTTP Message Body에 Data를 입력한다.

 

2 ) Annotation

 

  • @Component
    • Spring Bean에 등록하여 역할을 수행한다.
      • Spring Bean은 애플리케이션의 구성 요소를 정의하는 객체이다.
    • @Indexed
      • 클래스가 컴포넌트 스캔의 대상으로 Spring Bean에 더 빠르게 등록되도록 도와준다.

 

  • @Target
    • @Target이 선언된 하위 어노테이션이 어떤 범위에 적용되는지 설정한다.
    • ElementType Enum

 

  • @Retention
    • @Retention 하위의 어노테이션이 얼마나 오래 유지되는지 결정한다.
    • RetentionPolicy Enum 속성
      1. SOURCE
        • 소스 코드(.java)에서만 유지된다.
        • 컴파일러에 의해 클래스 파일로 저장되지 않는다.
      2. CLASS
        • 컴파일된 클래스 파일에 저장되지만 JVM이 실행 시 읽지 않는다.(주석과 같음)
        • Default 값이다.
      3. RUNTIME
        • 클래스 파일에 저장되고, JVM에 의해 런타임 시점에 읽을 수 있다.
        • 즉 실제 런타임 시점의 코드에 반영되어 영향을 준다.

 

  • @Documented - Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타낸다.

 

 


3 ) Request Mapping

  • 특정 URL로 Request를 보내면 들어온 요청을 Controller 내부의 특정 Method와 Mapping 하기 위해 사용.
  • Client로부처 요청이 왔을 때 어떤 Controller가 호출될지 Mapping 하는것은 단순히 URL로 Mapping 하는 것이 아니라 여러가지 요소(URL, Method 등)를 조합하여 Mapping 한다.

 

  • RequestMapping
    1. Spring Boot 3.0 버전 이하
      • URL paht /example, /example/ 둘 다 허용
    2. Spring Boot 3.0 버전 이상(현재 버전)
      1. URL paht /example 만 허용.
    3. 속성값들을 설정할 때 배열 형태로 다중 설정이 가능하다.
      1. @RequestMapping({"/example", "/example2", "/example3"})
    4. HTTP Method POST, GET, PUT, PATCH, DELETE, HEAD 모두 허용한다.
    5. method 속성으로 HTTP 메서드를 지정하면 지정된것만 허용한다.

 

 

  • GetMapping
    • Spring이 제공하는 Annotation들의 내부에 다 선언되어있다.
      • 대부분 필요한 기능들이 이미 만들어져 있어서 사용만 하면 된다.
    • RequsetMapping 보다는 직관적이고 축약된 @GetMapping, @PostMapping 형식을 일반적으로 사용한다.
    • @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping
      • 모두 위의 @GetMapping 과 같은 구조이다.

 

 

  • @PathVariable
    1. 경로 변수를 중괄호에 둘러싸인 값으로 사용할 수 있다.
    2. 기본적으로 @PathVariable로 설정된 경로 변수는 반드시 값을 가져야 하며 값이 없으면 응답 상태 404 Not Found Error가 발생한다.
    3. 최근 Restful API를 설계하는 것이 API 기준이되며 해당 어노테이션의 사용 빈도가 높아졌다.

 

  • Restful API
    • Create - POST
    • Read - GET
    • Update - PUT, PATCH
    • Delete - DELETE

 

  • @PathVariable 규칙
    1. 파라미터 변수명과 PathVariable 변수명이 같으면 속상 값 생략 가능
    2. @PathVariable 다중 사용 가능

 

 

  • 속성 작성 규칙
    1. params = "gender"
      • params의 key 값은 커스텀이 가능하다.
      • value는 없어도 된다.
    2. params = "!gender"
      • gender가 없어야한다.
    3. params = "gender = man"
      • gender = man 이어야 한다.
    4. params = "gender !=  man"
      • params의 value값이 man가 아니어야한다.
    5. params = {"gender = man", "gender = woman"}
      • 배열로 속상 값을 여러 개 설정이 가능하다.