@Slf4j

  • 로그를 남기기 위한 Logger 객체를 자동 생성하는 어노테이션
  • Slf4j는 인터페이스이고, 구현체로 Logback같은 라이브러리 선택
  • 실제 개발에서는 Spring Boot가 기본 제공하는 Logback을 대부분 사용

Logging : 스레드 정보, 클래스명 같은 부가 정보를 함께 확인 가능하다

Log Level : TRACE > DEBUG > INFO > WARN > ERROR 

설정한 레벨 이하의 로그만 출력

log.info("문자 info={}", sparta);  // 문자 info=sparta
// 중괄호가 sparta로 치환되어 로그 출력
// 이 형식의 로그 출력 권장

log.info("문자 info " + sparta);  // 문자 info sparta
// 해당 레벨의 로그를 출력하지 않는 상황에서도 문자열의 '+' 연산은 수행됨
// -> 불필요한 작업 발생

 

 

@Indexed

  • 해당 클래스가 컴포넌트 스캔 대상으로 Spring Bean에 더 빠르게 등록되도록 돕는 어노테이션

 

@Target

  • 어노테이션이 적용될 수 있는 대상(위치)을 지정하는 메타 어노테이션
  • 특정 어노테이션을 특정 위치에서만 사용하도록 제한할 때 @Target 사용 -> 사용자 지정 어노테이션에 주로 사용
  • ElementType Enum의 속성을 인자로 둠

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)  // 클래스, 인터페이스, enum에만 적용 가능
public @interface ClassOnlyAnnotation {
}


@ClassOnlyAnnotation
public class MyClass { }

// ❌ 오류: 필드에는 적용 불가능
@ClassOnlyAnnotation
private String name;

 

 

@Retention

  • 얼마나 오래 유지되는지를 결정하는 메타 어노테이션
  • RetentionPolicy Enum의 속성을 인자로 둠

CLASS는 주석과 같은 기능

 

@Documented

  • Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타내는 메타 어노테이션

 


 

@PathVariable

  • @PathVariable로 설정된 경로 변수(`user/{id}`)는 반드시 값을 가져야 하며, 값이 없으면 응답 상태 코드 404가 발생
@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 {
	
	// 변수명과 같다면 @PathVariable의 매개변수 생략가능
	@GetMapping("/{postId}")
	public String pathVariableV2(@PathVariable Long postId) {
		// logic
		String result = "PathvariableV2 결과입니다 : " + postId;
		return result;
	}
	
}
@RestController
public class PathVariableController {

    @GetMapping("/{postId}/comments/{commentId}")
    public String pathVariableV3(
    			@PathVariable Long postId,
        		@PathVariable Long commentId) {
    // logic
    String result = "PathvariableV3 결과입니다 postId : " + postId + "commentsId : " + commentId;
    return result;
    }
}

 


 

특정 파라미터 매핑

package com.example.springbasicannotation.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ParameterController {

    // parms 속성값 추가
    @GetMapping(value = "/users", params = "gender=man")
    public String params() {
        // logic
        String result = "params API가 호출 되었습니다.";
        return result;
    }

}

http://localhost:8080/users?gender=man <- 쿼리 스트링이 params대로 작성되어야 호출 가능

 

params에 저장된 값의 형태에 따라 호출 가능한 상황이 달라진다.

  • 속성 작성 규칙
    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"}
      • 배열로 속성 값을 여러 개 설정이 가능하다.

 

특정 헤더 매핑

  • MediaType Enum의 속성값 활용 가능
    • `produces = “application.json"`→ `produces = MediaType.APPLICATION_JSON_VALUE`
  • headers = "Content-Type=application/json"과 consumes = "application/json"는 표현 방식의 차이
    • 클라이언트 요청의 헤더 정보가 특정 조건인 경우에만 서버가 요청을 처리하고 응답
    • consume(수용)
  • produces = "text/plain"
    • 서버가 클라이언트에 보내는 데이터의 형식을 지정
    • produce(제공)
@RestController
public class ParameterController {
	
	// headers 속성값 추가
  @PostMapping(value = "/users", headers = "Content-Type=application/json")
  public String headers() {
      // logic
      String result = "headers API가 호출 되었습니다.";
      return result;
  }
	
}
@RestController
public class ParameterController {
	
	// consumes 속성값 추가
  @PostMapping(value = "/users", consumes = "application/json") // MediaType.APPLICATION_JSON_VALUE
  public String consumes() {
      // logic
      String result = "consumes API가 호출 되었습니다.";
      return result;
  }
	
}
@RestController
public class ParameterController {
	
	// produces 속성값 추가
  @GetMapping(value = "/users", produces = "text/plain")
  public String produces() {
      // logic
      String result = "text/plain 데이터 응답";
      return result;
  }
	
}

 

더보기

MediaType Enum의 상수값 정리

_VALUE를 붙여서 사용해줘야 객체가 아닌 문자열로 사용 가능하다

'언어, 프레임워크 > Spring' 카테고리의 다른 글

응답(Response) 데이터 전달 방식  (0) 2025.03.20
요청(Request) 데이터 전달 방식  (0) 2025.03.20
Spring MVC  (0) 2025.03.19
WAS / Servlet / SSR, CSR  (0) 2025.03.19
스프링 기초 개념  (9) 2025.03.18