[Spring] @어노테이션

Canbu·2022년 6월 29일
0
post-thumbnail

스프링프레임워크에서 코드를 작성해나가면서 자주 사용했던 어노테이션들과 사용해보지 않았던 어노테이션들도 한번 정리해보자.

그 전에 @annotation 이 무엇인지 정확하게 알고 있지 못하다면 한번 짚고 넘어가보자.

  • annotation의 단순한 사전적 의미는 주석이다.
    그런데 생각해보자. 우리가 어떤 언어를 쓰던지 단순히 주석은 코드의 기능은 하지못하고 하나의 글로써 적어두어 다른사람이 내 코드를 빠르게 이해하도록 돕거나 나중에 내가 이 코드를 봤을 때 내가 작성했던 이 코드가 어떤 역할을 하는지 알아볼 수 있도록 하는 역할들을 했었다.
  • 하지만 자바에서는 단순 주석 이상의 역할을 한다. 코드에 추가하여 사용하면 단순 주석의 역할이 아니라 해당 어노테이션이 가지고 있는 기능을 발동시켜준다.

경험을 떠올려봤을 때 스프링에서 @Controller, @RequestParam, @RequestMapping, @ResponseBody, @Bean 등의 어노테이션을 사용하면 일단 편했다.

코드로 쳤으면 더 길어지고 귀찮아 질 것들을 하나의 어노테이션으로 끝나버리니 매우 편하고 내가 작성한 클래스나 메소드가 알아서 내가 원하는 기능들을 하게 해주는 매우 좋은 녀석들 이었다.

<자주 사용했던 annotation>

  • @Controller : 내가 작성한 클래스가 컨트롤러의 역할을 하게 해준다. 보통 어떤 컨트롤러 코드를 작성할 떄 항상 최상단에 써주었다.
@Controller
public class MyController { 
	
    @Autowired 
	private OneService oneService;
    private TwoService twoservice;
    
    @RequestMapping(value = {"/url"}, method = {})
}
  • @Autowired : @Bean을 주입해주는 역할을 해준다. 내가 사용할 때는 보통 위와 같은 코드의 위치에 작성해서 작성했던 service 클래스를 가져와 내가 원하는 데이터를 똑같은 코드를 작성할 필요없이 이미 작성해뒀던 쿼리를 이용해서 원하는 데이터를 가져올수 있게 해주었다.
  • @RequestMapping : 어떤 url을 사용했을 때 해당 메소드를 실행할지 결정해주는 역할을 해주었다.
  • @RequestParam : RequestParam은 정말 유용했는데 뷰(.jsp)에서 데이터를 넘겨줄 때 jquery - ajax로 어떻게 데이터를 넘겨주는지 알게해준 어노테이션이었다.
    HTML Form 태그에서 method 가 POST 전송일 때는 @RequestParam으로 값을 받을 수 있다.
    jQuery ajax 비동기 통신을 통해서도 값을 넘겨줄수 있다.
  • @ResponseBody : @RequestMapping이 특정한 페이지를 리턴시켜 해당 페이지로 이동시키게 해준다면 @ResponseBody는 페이지를 이동시켜주는게 아닌 HashMap이나 특정 값을 응답으로 넘겨줄 때 사용했었다.
  • @Bean : 직접 제어가 불가능한 외부 라이브러리등을 Bean으로 등록할 때 사용하였으며 사용했던 예시로 모바일 로그인 페이지를 만들 떄 DeviceResolverHandlerInterceptor(); 를 등록해서 사용했었다.
  • @Service : 비즈니스 로직을 담당하는 서비스 클래스임을 의미하게 해준다.

Spring Annotation 종류

@Annotation기능
@Configuration클래스를 Bean으로 등록할 때 사용
@EnableAutoConfigurationmeta 파일을 읽어 미리 정의되어있는 자바 설정 파일(@Configuration)을 Bean으로 등록해준다.
@ComponentScan@Component를 가진 클래스를 스캔하여 Bean으로 등록해준다.
@SpringBootApplication@Configuration + @EnableAutoConfiguration + @ComponentScan
스프링부트가 Bean을 등록하는 방식:@ComponentScan으로 Bean 등록 후 @EnableAutoConfiguration으로 추가적인 Bean을 등록함.
@Bean@Configuration + @Bean으로 직접 Bean을 정의할 때 사용한다. Spring Container 가 관리하는 자바 객체를 의미
@Component클래스를 Bean으로 등록할 때 사용
@ConfigurationPropertiesyml, properties 파일을 읽어오는 어노테이션
@Autowired@Bean을 주입해주는 어노테이션 @Resource와 유사함. @Autowired는 타입으로 연결
@Resource@Bean을 주입해주는 어노테이션 @Autowired와 유사함. @Resource는 이름으로 연결
@ControllerController 역할을 하는 class임을 의미
@RestController반환 결과가 JSON형태인 @Controller @Controller + @ResponseBody
@RequestMappingURL을 Controller의 메소드와 맵핑할 때 사용한다. 즉, 요청 url을 어떤 method가 처리할지 여부를 결정하는 어노테이션 @RequestMapping(value=[], method="", params=[], consumes=[], produces=[])
@GetMapping@RequestMapping(method = RequestMethod.GET)
@PostMapping@RequestMapping(method = RequestMethod.POST)
@PutMapping@RequestMapping(method = RequestMethod.PUT)
@DeleteMapping@RequestMapping(method = RequestMethod.DELETE)
@ResponseBodyHttpMessageConverter를 이용하여 JSON 혹은 xml 형태로 요청에 응답한다.(viewResolver를 무시하여 view가 아닌 값을 응답할 때 사용된다.)객체 return 시 JACKSON 에 의해 문자열로 변환되어 전송
@ServiceService 역할을 하는 class임을 의미 * Service 역할 : 비지니스 로직을 수행
@RepositoryDAO class에서 사용 *DAO : DB에 접근하는 메소드를 가진 class

출처 : https://velog.io/@yeoj1n/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98

profile
Code With Money

0개의 댓글