241031 TIL - Spring Annotation 정리

J_log·2024년 10월 31일
0
post-thumbnail

@Slf4

  • Lombok 라이브러리에서 제공하는 기능 중 하나로, 클래스에 이 어노테이션을 추가하면 자동으로 Logger 객체를 생성해 주어 코드에서 직접 Logger 인스턴스를 생성할 필요없이 간편하게 로깅을 사용할 수 있게 한다.
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {
    public void doSomething() {
        log.info("This is an info log message");
        log.error("This is an error log message");
    }
}

@Controller

  • View가 있는 경우 사용한다. 즉, Template Engine인 타임리프나 JSP등을 사용하는 경우

@RestController

  • 현재는 대부분 @RestController를 사용하여 API가 만들어진다. (Restful API)
  • return 값으로 View를 찾는 것이 아니라 HTTP Message Body에 Data를 입력한다.

@Component

  • Spring Bean에 등록하는 역할을 수행
  • 싱글톤으로 관리된다.
  • @Indexed: 클래스가 컴포넌트 스캔의 대상으로 Spring Bean에 더 빠르게 등록되도록 도와준다.

@Target

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

@Retension

  • @Retension 하위의 어노테이션이 얼마동안 유지되는지 결정
  • RetentionPolicy Enum값을 속성으로 적용 (SOURCE(.java(소스코드에서만 유지), CLASS(컴파일 하고 .class에 저장되지만 JVM이 실행 시 읽지않음), RUNTIME(컴파일 하고 RUNTIME 때 JVM이 읽음))

@RequestMapping

  • 특정 URL로 Request를 보내면 들어온 요청을 컨트롤러 내부의 특정 메서드와 Mapping 하기 위해 사용
@RestController
public class RequestMappingController {
	@RequestMapping(value = "/v1", method = RequestMethod.GET)
	public String exampleV1() {
		return "this is sparta!";
	}
}
  • 이와 같이 작성해줄 수 있다. 하지만 항상 URL과 Method를 입력해줘야 한다. 아래처럼 더 편리한 방법으로 같은 기능을 구현할 수 있다.
@GetMapping(value = "/v2")
public String exampleV2() {
	return "this is sparta!";
}
  • GET 뿐만 아니라 다른 HTTP Method들도 모두 구현되어 있다. @PostMapping, @DeleteMapping 등등

그렇다면 @RequestMapping은 언제 사용하나 ?
@RequestMapping을 Class 선언부 위쪽에 적어줘서 해당 클래스 내 모든 요청 핸들러 메서드의 URL에 고정적으로 사용할 기본경로로 붙게 된다.

예를 들어, 클래스에 @RequestMapping("/prefix")가 있고, 그 안에 @GetMapping("/example") 메서드가 있다면, 실제 접근 가능한 URL은 /prefix/example가 된다. 이를 통해, 관련된 여러 API 엔드포인트에 공통된 경로를 쉽게 부여할 수 있고, 코드의 가독성을 높여 유지보수를 편하게 할 수 있다.


@PathVariable

  • HTTP 특성 중 하나인 비연결성을 극복하여 데이터를 전달하기 위한 방법 중 하나이다. URL로 전달된 값을 파라미터로 받아오는 역할을 수행한다.
  1. 경로 변수를 중괄호에 둘러싸인 값으로 사용할 수 있다. ex) user/{id}
  2. 기본적으로 @PathVariable로 설정된 경로 변수는 반드시 값을 가져야 하며 값이 없으면 응답 상태코드 404가 발생함.
  3. 최근 Restful API를 설계하는 것이 API의 기준이 되며 해당 어노테이션의 사용 빈도가 높아졌다.
@RequestMapping("/posts")
@RestController
public class PathVariableController {
	
	// postId로 된 post 단건 조회
	@GetMapping("/{postId}")
	public String pathVariableV1(@PathVariable("postId") Long data) {
		// logic
		String result = "PathvariableV1 결과입니다 : " + data;
		return result;
	}
}
@RequestMapping("/posts")
@RestController
public class PathVariableController {
	
	// 변수명과 같다면 속성값 생략가능
	@GetMapping("/{postId}")
	public String pathVariableV2(@PathVariable Long postId) {
		// logic
		String result = "PathvariableV2 결과입니다 : " + postId;
		return result;
	}
	
}
  • 파라미터 변수명과 PathVariable 변수명이 같으면 속성 값을 생략할 수 있다.
post-custom-banner

0개의 댓글