어노테이션(Annotation )의 이해와 실무에서의 활용
자바와 스프링(Spring) 개발을 진행하다 보면 메서드와 클래스 그리고 변수들 앞에
@GetMapping("searchResult") 이런 식으로 쓰는 경우가 있다. 어노테이션은
JEE5(Java Platform, Enterprise Edition 5)부터 추가된 것인데 어노테이션으로 인해 코드가 깔끔해지고
외부에 설정파일(서블릿등 각종 리소스들)을 없애고 개발의 생산성을 올려준다.
여기서 다루는 내용은 SpringBoot에서 실무에서 쓰는 어노테이션이다.
Mapping Set | ||
@RequestMapping({"/master","current"})
|
-메서드에서도 받을수있지만 클래스앞에 선언하여서 메서드에서 맵핑정보의 중복을 줄일수있다. 클래스 앞에 선언하게 되면 맵핑정보로 날라오는 모든요청을 클래스에서 받아서 처리할수있게 된다.하지만 메서드 타입 선언을 같이해주어야하고 옵션값을 설정해주어야해서 메서드앞에 쓰는건 비효율적이라고 생각이 든다. |
|
@GetMapping("/edit/{id}") |
-메서드앞에 선언해서 쓰고 리퀘스트 맵핑정보 뒤에 오는 맵핑정보를 선언하여 써준다.뒤에 저런식으로 화면에서 보내주는 변수도 받을수 있다. |
|
@PostMapping("/edit") |
-포스트맵핑 같은경우에는 보안적인 측면에서 Get보다 좋다고 하는데 URL에는 안들어가지만 데이터에 들어가서 클라이언트 측에서 볼수있다. 유출되면 안되는 데이터 같은경우 따로 암호화처리를 하는게 좋다.실무에서는 데이터베이스에 들어가는 데이터 같은경우에는 Post방식을 대부분 사용한다. 그리고 데이터(파일,이미지등)은 포스트 방식으로 받아야한다. |
|
-Get,Post 맵핑은 단번에 무슨요청인지 알수있어 가독성이 좋다. |
||
ex) @RequestMapping("/manager/item") @PostMapping("create") public String createAction @GetMapping("edit/{boardCode}") public String edit(@PathVariable("boardCode") String boardCode, Model model) |
DI Set | |||
@Controller | @Service | @Mapper | @Autowired |
-클래스 레벨 앞에 선언해주는 어노테이션이고 이렇게 선언하면 스프링에서 의존성을 관리해준다. @Controller("masterController") 이런식으로 클래스명 뒤에 따로 네이밍을 부여할수도 있지만 부여하지않으면 자동으로 클래스명으로 빈이 등록된다. |
|||
@Autowired | 의존성을 주입받을수있다. | ||
@Controller public class MasterController -Service Mapper 동일. @Autowired |
@RequestParam
처리방법. | |||
화면(JSP)에서 호출방식 | 1) $.post('/com/master/master-count', {'month' : 1 }, function(resp)
|
||
자바 처리 |
1) @RequestParam("month") int month)
public JsonView deleteMaster(@RequestParam(name = "id") long id)
|
||
-name든 value든 뷰에서 셋팅한 값을 적어주면 데이터를 정상적으로 받아온다. 그리고 선언안했을때에도 변수명과 키값이 동일하면 데이터는 정상적으로 받아온다. 세가지 차이점은 없는걸로 보인다. required=false, defaultValue = "0" required : 이값은 옵션값인데 필수값이 아닌경우 false로 해서 값이 안날라오더라도 에러없이 처리해준다. |
@ModelAttribute
처리방법 | |||
화면(JSP)에서의 호출방식. | <form:form modelAttribute="masterVO" action="${requestContext.requestUri}" method="get"> |
||
자바 처리 | public String list(@ModelAttribute("masterVO") MasterVO vo) | ||
-화면에 일반 태그 네임값이나 JSTL(form) path 이름이 VO객체에 있어야 자바단에서 받아서 처리가 가능하다. |