[Spring 입문] Spring Annotation

박화랑·2025년 3월 17일

Spring_개념정리

목록 보기
13/17

Spring Annotation 1강

1. @Slf4j

  • Slf4j는 로깅을 위한 인터페이스이며, Spring Boot에서는 기본적으로 Logback을 사용
  • System.out.println() 대신 로깅 라이브러리를 사용하여 다양한 로깅 기능 활용 가능
  • Log Level 설정 가능: TRACE > DEBUG > INFO > WARN > ERROR

Slf4j 사용 예시

@Slf4j
@RestController
public class Slf4jController {
    @RequestMapping("/logging")
    public String logging() {
        String sparta = "Sparta";
        log.trace("문자 trace={}", sparta);
        log.debug("문자 debug={}", sparta);
        log.info("문자 info={}", sparta);
        log.warn("문자 warn={}", sparta);
        log.error("문자 error={}", sparta);
        return "success";
    }
}
  • log.info("문자 info " + sparta);처럼 문자열을 직접 연산하는 방식은 불필요한 연산이 발생할 수 있으므로 {}을 사용하여 변수를 삽입하는 방식이 권장됨

로그 레벨 설정 (application.properties)

logging.level.com.example.springbasicannotation=TRACE
  • 설정된 로그 레벨에 따라 출력되는 로그가 달라짐
  • INFO 레벨 설정 시 trace, debug 로그는 출력되지 않음
  • TRACE 레벨 설정 시 모든 로그가 출력됨

로그 출력 예시 (Postman 실행 결과)

  • Default Level(INFO)에서 호출 시:
    문자 info=Sparta
    문자 warn=Sparta
    문자 error=Sparta
  • TRACE Level 설정 후 호출 시:
    문자 trace=Sparta
    문자 debug=Sparta
    문자 info=Sparta
    문자 warn=Sparta
    문자 error=Sparta

2. @Controller VS @RestController

  • Spring에서 Controller(Handler)를 만들 때 사용하는 어노테이션

1) @Controller

  • View를 반환하는 컨트롤러 (Thymeleaf, JSP 사용 시)
  • @Component를 포함하고 있어 Spring Bean으로 등록됨
@Controller
public class ViewController {
    @RequestMapping("/view")
    public String example() {
        return "sparta"; // View Name 반환
    }
}

Thymeleaf를 이용한 View 렌더링

  1. resources/templates/ 경로에 HTML 파일 생성
  2. 컨트롤러에서 View Name을 반환하면 ThymeleafViewResolver가 실행됨
  3. 설정된 ViewResolver에 따라 알맞은 HTML 파일을 찾아 렌더링

2) @RestController

  • RESTful API 개발을 위한 컨트롤러
  • @Controller + @ResponseBody의 조합과 동일
@RestController
public class ResponseController {
    @RequestMapping("/string")
    public String example() {
        return "sparta"; // 문자열 데이터 반환
    }
}

@ResponseBody의 역할

  • @Controller는 기본적으로 View를 반환하지만, @ResponseBody를 사용하면 데이터를 HTTP 응답 본문으로 반환함
  • @RestController는 내부적으로 모든 메서드에 @ResponseBody를 적용함

@Controller vs @RestController 차이점

어노테이션반환값용도
@ControllerView Name 반환템플릿 엔진 사용
@RestController데이터 반환REST API 개발

@RestController@Controller + @ResponseBody와 동일한 역할 수행


Spring Annotation 2강

1. Annotation 자세히 보기

  • Spring에서 사용하는 Annotation의 역할을 이해하면, 새로운 Annotation이 등장했을 때도 쉽게 활용 가능

1) @Component

  • Spring Bean으로 등록하는 역할을 수행
  • 애플리케이션의 주요 구성 요소를 정의하는 객체

Servlet Container와 비교

  • 서블릿 컨테이너는 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행
  • 싱글톤으로 관리하여 자원의 낭비를 방지
  • @Component는 이러한 개념을 Spring Bean에 적용하여 관리

Servlet 객체 생성 과정

  1. 개발자가 직접 인스턴스를 생성하지 않고, 서블릿 컨테이너가 객체를 관리
  2. 서블릿 컨테이너는 필요할 때 객체를 초기화하고 요청을 처리함
  3. @Component도 Spring이 관리하는 Bean으로 등록되어 유사한 개념으로 동작

2) @Target

  • Annotation이 적용될 대상(ElementType)을 지정하는 역할
@Target(ElementType.TYPE)
  • ElementType.TYPE → 클래스, 인터페이스, Enum 등에 적용 가능

ElementType Enum 속성

  • ElementType.FIELD → 필드에 적용 가능
  • ElementType.METHOD → 메서드에 적용 가능
  • ElementType.PARAMETER → 매개변수에 적용 가능

3) @Retention

  • Annotation이 유지되는 범위(RetentionPolicy)를 지정
@Retention(RetentionPolicy.RUNTIME)
  • RetentionPolicy.RUNTIME → 런타임까지 유지되어 실행 중에도 참조 가능

RetentionPolicy Enum 속성

  • RetentionPolicy.SOURCE → 소스 코드에서만 유지됨, 컴파일 후 제거됨
  • RetentionPolicy.CLASS → 클래스 파일까지 유지됨, 실행 중에는 접근 불가
  • RetentionPolicy.RUNTIME → 런타임까지 유지됨, 실행 중에도 접근 가능

4) @Documented

  • Javadoc 등의 문서화 도구에서 문서화 대상임을 명시

2. @Controller VS @RestController

  • Spring의 주요 컨트롤러 Annotation 비교

1) @Controller

  • View를 반환하는 컨트롤러 (Thymeleaf, JSP 사용 시)
  • @Component를 포함하고 있어 Spring Bean으로 등록됨
@Controller
public class ViewController {
    @RequestMapping("/view")
    public String example() {
        return "sparta"; // View Name 반환
    }
}

Thymeleaf를 이용한 View 렌더링

  1. resources/templates/ 경로에 HTML 파일 생성
  2. 컨트롤러에서 View Name을 반환하면 ThymeleafViewResolver가 실행됨
  3. 설정된 ViewResolver에 따라 알맞은 HTML 파일을 찾아 렌더링

2) @RestController

  • RESTful API 개발을 위한 컨트롤러
  • @Controller + @ResponseBody의 조합과 동일
@RestController
public class ResponseController {
    @RequestMapping("/string")
    public String example() {
        return "sparta"; // 문자열 데이터 반환
    }
}

@ResponseBody의 역할

  • @Controller는 기본적으로 View를 반환하지만, @ResponseBody를 사용하면 데이터를 HTTP 응답 본문으로 반환함
  • @RestController는 내부적으로 모든 메서드에 @ResponseBody를 적용함

@Controller vs @RestController 차이점

어노테이션반환값용도
@ControllerView Name 반환템플릿 엔진 사용
@RestController데이터 반환REST API 개발

@RestController@Controller + @ResponseBody와 동일한 역할 수행

profile
개발자 희망생

0개의 댓글