Spring Annotation

Noob·2023년 1월 27일
0
post-thumbnail

Annotation이란?

  • 자바 소스코드에 추가하여 특별한 기능을 사용할 수 있는 메타데이터의 일종이다. 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고 Bean을 주입하기도 하며 자동으로 getter나 setter를 생성하기도 한다. 이러한 Annotation을 통하여 코드량이 감소하고 유지보수가 용이하며, 생산성이 증가한다.

대표적인 Annotation과 역할

  • @Component

    • 생성한 Class의 Bean으로 등록할 때 사용하는 Annotation이다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록한다.
  • @Bean

    • 제어가 불가능한 외부 라이브러리 같은 것들을 Bean으로 만들 때 사용한다.
  • @Controller

    • Spring에 해당 Class가 Controller의 역할을 한다고 명시한다.
  • @RequestMapping

    • @RequestMapping(value="")와 같은 형태로 작성하며 요청 들어온 URI의 요청과 Annotation value값이 일치하면 해당 클래스나 메소드가 실행된다. Controller 객체 안의 메서드와 클래스에 적용 가능하다.
      • Class 단위에 사용하면 하위 메서드에 모두 적용된다.
      • 메서드에 적용되면 해당 메서드에서 지정한 방식으로 URI를 처리한다.
    @Controller						// IdkController Class는 Controller 역할을 한다.
    @RequestMapping("/idk")				// IdkController Class는 /idk로 들어오는 요청을 모두 처리한다.
    public class IdkController {
        @RequestMapping(method=RequestMethod.GET)
        public String getIdk(String word) {
            // GET Method, /idk 요청 처리
        }
    
        @RequestMapping(method=RequestMethod.POST)
        public String addIdk(String word) {
            // POST Method, /idk 요청 처리
        }
    
        @RequestMapping("/a_word")
        public String addIdk(String word) {
            // GET Method, /idk/a_word 요청 처리
            // 요청 처리 Method 생략 시 Default Method = GET
        }
    }
  • @RequestParam

    • URL에 전달되는 파라미터를 메서드의 인자와 매칭시켜 파라미터를 받아 처리한다. JSON 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킨다.

      @Controller
      @RequestMapping("/idk")
      public class IdkController {
      	@RequestMapping(method=RequestMethod.GET)
      	public String getIdk(@RequestParam String id, @RequestParam(name="nick") String nickName {
          	// GET Method, /idk 요청 처리
              // 요청: https://velog.io/idk?id=noob&nick=babo
              String result = idk + " is " + nickName + ".";
              ...
          }
      }
      
      result = noob is babo.
  • @RequestBody

    • Body에 전달되는 데이터를 메소드의 인자와 매칭시켜 데이터를 받아서 처리할 때 사용한다. 클라이언트가 보내는 HTTP 요청 본문을 Java 오브젝트로 변환한다.(클라이언트가 Body에 JSON or XML과 같은 형태로 값을 전송하면 해당 내용을 Java 오브젝트로 변환)

      IDK = {id:Noob, old: 29}
      
      @Controller
      @RequestMapping("/idk")
      public class IdkController {
      	@RequesMapping(method=RequestMethod.POST)
          public String addIdk(@RequestBody IDK idk) {
          	String id = idk.id;
              String old = idk.old;
              ...
          }
      }
      
      result: id = Noob, old = 29
  • @ResponseBody

    • 메서드에서 리턴되는 값이 view로 출력되지 않고 HTTP Response Body에 직접 사용된다. return 시에 JSON, XML과 같은 데이터를 리턴한다.

      @Controller
      @RequestMapping("/idk")
      public class IdkController {
      	@RequesMapping(method=RequestMethod.POST)
          @ResponseBody
          public String getIdk(@RequestParam String id, @RequestParam(name="nick") String nickName) {
          	// 요청: https://velog.io/idk?id=noob&nick=babo
              IDK idk = new IDK();
              idk.setId(id);
              idk.setNickName(nickName);
              return idk;
          }
      }
      
      result: IDK = { id: noob, nickName: babo }
  • @Autowired

    • Spring Framework에서 Bean 객체를 주입받기 위해 사용한다. Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후 없으면 Name 확인) Bean을 주입한다.
  • @GetMapping

    • @RequestMapping(Method=RequestMethod.GET)과 같은 역할을 한다.
      @Controller
      @RequestMapping("/idk")
      public class IdkController {
      	@GetMapping("/")
          public String getIdk(Idk idk) {
          	// Get Method, /idk 요청 처리
          }
      }
  • @PostMapping

    • @RequestMapping(Method=RequestMethod.POST)과 같은 역할을 한다.
      @Controller
      @RequestMapping("/idk")
      public class IdkController {
      	@PostMapping("/")
          public String addIdk(Idk idk) {
          	// Post Method, /idk 요청 처리
          }
      }
  • @Test

    • JUnit에서 테스트 할 대상을 표시한다.
      @Test
      public void testIdk() {
      	// 테스트 내용
      }

출처. "스프링(Spring)에서 자주 사용하는 Annotation 개념 및 예제 정리", https://melonicedlatte.com/2021/07/18/182600.html, (2023.01.27)

profile
I m a Noob web develpoer.

0개의 댓글