본문 바로가기
Spring/MVC

애노테이션(Annotation)

by o3oppp 2024. 5. 23.

애노테이션(Annotation)

: 사전적 의미로는 주석을 의미하나, 일반적인 주석과 다르게 코드를 작성할 수 있음. 클래스, 메서드, 변수, 매개변수 등에 사용이 가능하며 문자 @로 시작

Bean

  • 빈(Bean)은 스프링 컨테이너가 관리하는 자바 객체를 뜻함
  • 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함(new 대신 사용)
  • 사용하는 가장 큰 이유는 스프링 간 객체가 의존관계를 관리하도록 하는 것에 큰 목적. 객체가 의존관계를 등록할 때 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만듬
  • Bean을 주입받는 방식
    1. @Autowired
    2. setter method
    3. @AllArgsConstructor(생성자)

@Bean

  • 개발자가 직접 제어가 불가능한 외부 라이브러리등을 Bean에 등록하려할 때 사용
  • name이라는 값을 이용하면 자신이 원하는 id로 Bean 등록 가능

@Component

  • 개발자가 직접 작성한 클래스를 Bean으로 등록하기 위한 애노테이션
  • 추가 정보가 없다면 Class의 이름을 camelCase로 변경한 것이 Bean id로 사용(class : Member -> Id : member)
  • @Bean과 다르게 name이 아닌 value를 이용해 Bean 이름을 지정

@ComponentScan

  • @Component, @Service, @Service, @Controller, @Configuration이 붙은 클래스 Bean을 찾아서 Bean 등록

@Autowired

  • field, constructor(생성자), setter method에서 사용하며 Type에 따라 알아서 Bean 주입
  • 무조건적인 객체에 대한 의존성 주입

@Controller

  • 스프링 MVC에서 애노테이션 기반 Controller로 인식(없으면 인식 불가)
  • 내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨
  • API + view를 동시에 사용하는 경우 사용
  • view return이 주목적

@RestController

  • Controller 중 View로 응답받지 않는 Controller를 의미
  • JSON 형태로 반환
  • API만 사용하는 경우 사용
  • data(json, xml 등) return이 주목적
  • @Controller + @ResponseBody

@Service

  • Service 클래스에 사용

@Repository

  • DB에 접근하는 method를 가진 클래스에 사용

@RequestMapping

  • 요청 URL을 어떤 method가 처리할지 매핑
  • Controller, Controller의 method에 적용
  • GET, POST, DELETE, PUT, PATCH 정의 가능(기본은 GET)
  • 클래스와 method 단위 둘다 적용 가능
    @RequestMapping(value="/test")
    @RequestMapping(value="/test2", method=RequestMethod.GET)

@XXMapping

  • @GetMapping = @RequestMapping(value="/test", method=RequestMethod.GET)
  • @GetMapping, @PostMapping, @PutMapping, @PatchMapping, @DeleteMapping 존재
    @GetMapping("/test")
    @PostMapping("/test/{userId}")

@PathVariable

  • method paramter 앞에 사용하면서 해당 URL에서 {}로 둘러싸인 값을 변수로 받아올 수 있음
  • URL에서 각 구분자에 들어오는 값을 처리할 때 사용
  • REST API에서 값을 호출할 때 주로 사용
  • 다중 사용 가능
  • 변수명이 같으면 생략 가능
    @GetMapping("/mapping/{userId}")
    //public String mappgingPath(@PathVariable("userId") String userId){...}
    public String mappgingPath(@PathVariable String userId){...}

@RequestParam

  • URL 뒤에 붙는 parameter 값을 가져올 때 사용
  • 괄호 안의 문자열이 전달 인자 이름
  • 필수 값 지정 가능(required)
  • 기본 값 지정 가능(defalutValue)
  • 빈 문자의 경우도 default 값으로 들어감
    // 필수 값 지정
    // int age인 경우 : 해당 값이 보내지 않는 경우 null 이므로 500 error
    // Integer age인 경우 : 해당 값이 없을 경우 error 발생 x
    public String requestParamRequired(
              @RequestParam(required = true) String username,
              @RequestParam(required = false) Integer age
              )
    // 기본 값 지정
    public String requestParamDefault(
              @RequestParam(required = true, defaultValue = "guest") String username,
              @RequestParam(required = false, defaultValue = "-1") int age
              )
    // 여러 값 전송
    public String requestParamMap(@RequestParam Map<String, Object> paramMap){
          log.info("a={}, b={}, c={}"
          ,paramMap.get("a"), paramMap.get("b"), paramMap.get("c");
      }

@ResponseBody

  • HttpMessageConverter를 이용하여 view가 아닌 JSON 혹은 XML 형식의 값을 응답할 때 사용
  • 문자열 return 시 http response header가 아닌 response body에 들어감
  • @RestController 사용 시 해당 애노테이션 미선언

@ModelAttribute

  • view에서 전달해주는 parameter를 클래스의 멤버 변수로 binding

@Slf4j

  • 로깅에 대한 추상 레이어를 제공하는 인터페이스 모음
  • log 사용 가능
  • 단계
    1. log.trace("가장 디테일한 로그");
    2. log.debug("디버깅용 로그");
    3. log.info("정보성 로그");
    4. log.warn("경고");
    5. log.error("에러",e);

@Data

  • @Getter, @Setter, @EqualsAndHashCode, @AllArgsConsturctor 관련된 모든 코드 생성

'Spring > MVC' 카테고리의 다른 글

BindingResult  (0) 2024.06.27
Model과 @ModelAttribute  (0) 2024.06.08
@Controller와 @RestController  (1) 2024.06.06
@RequestBody와 @ResponseBody  (0) 2024.06.06
스프링 MVC 구조  (0) 2024.05.22