@Slf4j는 Lombok에서 제공하는 어노테이션입니다. 클래스에 로그 객체(log)를 자동으로 생성해줍니다. Spring Boot에서는 주로 Logback을 로그 구현체로 사용합니다.
System.out.println() 대신에 반드시 로깅 라이브러리를 사용해야 하며, 로그는 파일 등 외부 저장소에 남기는 것이 일반적입니다.
TRACE > DEBUG > INFO > WARN > ERROR 순서입니다.
원하는 레벨만 출력하도록 설정할 수 있습니다.
@Controller는 View(JSP, Thymeleaf 등)를 반환할 때 사용합니다. 메서드의 return 값은 View이름이 되고, ViewResolver가 해당 View를 찾아서 렌더링합니다.
@RestController는 API 응답 데이터를 직접 반환할 때 사용합니다. return 값이 View가 아니라 HTTP Message Body에 데이터로 들어갑니다. 최근 대부분 API 개발에는 @RestController를 사용합니다.
해당 어노테이션은 클래스를 Spring Bean으로 등록하는 역할을 합니다.
해당 어노테이션이 선언된 곳은 하위 어노테이션이 어떤 범위에 적용되는지 설정합니다.
해당 어노테이션은 어노테이션이 언제까지 유지되는지 지정합니다.
해당 어노테이션은 Javadoc 문서에 어노테이션 정보를 포함시킵니다.
@RequestMapping은 URL과 컨트롤러 메서드를 매핑합니다. GET, POST, PUT, DELETE 등 HTTP 메서드를 지정할 수 있습니다.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 등은 각 HTTP 메서드에 특화된 축약형입니다.
클래스 레벨에도 사용을 할 수 있으며, URL prefix 지정에 주로 사용합니다.
@PathVariable은 URL 경로의 일부를 변수로 받아올 때 사용합니다.
...
@GetMapping("/{userId}")
public ResponseEntity<String> getUserById(@PathVariable("userId") Long id) {
...
}
예를 들어, 위와 같은 방식으로 코드를 작성하면, URL 경로에서 지정한 userId를 변수로 가져올 수 있습니다.
여기서, 변수로 지정한 이름과 URL 경로에서 지정한 변수의 이름이 같아면 @PathVariable("userId")의 ("userId")를 생략할 수 있습니다.
특정 쿼리 파라미터가 있을 때만 매핑합니다.
@GetMapping(value = "/users", params = "gender=man")
특정 HTTP 헤더가 있을 때만 매핑합니다.
@PostMapping(value = "/users", headers = "Content-Type=application/json")
요청의 Content-Type이 특정 미디어 타입일 때만 매핑합니다.
@PostMapping(value = "/users", consumes = "application/json")
응답의 미디어 타입을 지정합니다.
@GetMapping(value = "/users", produces = "text/plain")
HTTP 요청 헤더 값을 파라미터로 받을 수 있습니다. 여러 해더를 MultiValueMap으로 받을 수도 있습니다.
한 키에 여러 값을 저장할 수 있는 Map 구조입니다.
HTTP 헤더, 쿼리 파라미터 등에서 하나의 키에 여러 값이 올 수 있을 때 사용합니다.
쿠키 값을 파라미터로 받을 수 있습니다.
서블릿 API 객체도 파라미터로 받을 수 있습니다. HttpMethod, Locale 등도 지원합니다.
자료 및 코드 출처: 스파르타 코딩클럽