WEEK 5-3: Spring Annotation, RequestMapping

ensalada.de.pollo·2025년 5월 11일

be

목록 보기
17/44

Spring Annotation

@Slf4j와 Logging

@Slf4j는 Lombok에서 제공하는 어노테이션입니다. 클래스에 로그 객체(log)를 자동으로 생성해줍니다. Spring Boot에서는 주로 Logback을 로그 구현체로 사용합니다.
System.out.println() 대신에 반드시 로깅 라이브러리를 사용해야 하며, 로그는 파일 등 외부 저장소에 남기는 것이 일반적입니다.

Log Level

TRACE > DEBUG > INFO > WARN > ERROR 순서입니다.
원하는 레벨만 출력하도록 설정할 수 있습니다.

@Controller vs. @RestController

@Controller

@Controller는 View(JSP, Thymeleaf 등)를 반환할 때 사용합니다. 메서드의 return 값은 View이름이 되고, ViewResolver가 해당 View를 찾아서 렌더링합니다.

@RestController

@RestController는 API 응답 데이터를 직접 반환할 때 사용합니다. return 값이 View가 아니라 HTTP Message Body에 데이터로 들어갑니다. 최근 대부분 API 개발에는 @RestController를 사용합니다.

Annotation의 메타 정보

@Component

해당 어노테이션은 클래스를 Spring Bean으로 등록하는 역할을 합니다.

@Target

해당 어노테이션이 선언된 곳은 하위 어노테이션이 어떤 범위에 적용되는지 설정합니다.

@Retention

해당 어노테이션은 어노테이션이 언제까지 유지되는지 지정합니다.

Documented

해당 어노테이션은 Javadoc 문서에 어노테이션 정보를 포함시킵니다.

@RequestMapping

@RequestMapping은 URL과 컨트롤러 메서드를 매핑합니다. GET, POST, PUT, DELETE 등 HTTP 메서드를 지정할 수 있습니다.

@GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 등은 각 HTTP 메서드에 특화된 축약형입니다.

클래스 레벨에도 사용을 할 수 있으며, URL prefix 지정에 주로 사용합니다.

@PathVariable

@PathVariable은 URL 경로의 일부를 변수로 받아올 때 사용합니다.

...
@GetMapping("/{userId}")
public ResponseEntity<String> getUserById(@PathVariable("userId") Long id) {
	...
}

예를 들어, 위와 같은 방식으로 코드를 작성하면, URL 경로에서 지정한 userId를 변수로 가져올 수 있습니다.
여기서, 변수로 지정한 이름과 URL 경로에서 지정한 변수의 이름이 같아면 @PathVariable("userId")의 ("userId")를 생략할 수 있습니다.

미디어타입 매핑

params 속성

특정 쿼리 파라미터가 있을 때만 매핑합니다.

@GetMapping(value = "/users", params = "gender=man")

headers 속성

특정 HTTP 헤더가 있을 때만 매핑합니다.

@PostMapping(value = "/users", headers = "Content-Type=application/json")

consumes 속성

요청의 Content-Type이 특정 미디어 타입일 때만 매핑합니다.

@PostMapping(value = "/users", consumes = "application/json")

produces 속성

응답의 미디어 타입을 지정합니다.

@GetMapping(value = "/users", produces = "text/plain")

@RequestHeader, @CookieValue

@RequestHeader

HTTP 요청 헤더 값을 파라미터로 받을 수 있습니다. 여러 해더를 MultiValueMap으로 받을 수도 있습니다.

MultiValueMap

한 키에 여러 값을 저장할 수 있는 Map 구조입니다.
HTTP 헤더, 쿼리 파라미터 등에서 하나의 키에 여러 값이 올 수 있을 때 사용합니다.

@CookieValue

쿠키 값을 파라미터로 받을 수 있습니다.

HttpServletRequest, HttpServletResponse

서블릿 API 객체도 파라미터로 받을 수 있습니다. HttpMethod, Locale 등도 지원합니다.

자료 및 코드 출처: 스파르타 코딩클럽

0개의 댓글