애노테이션(Annotation)
: 사전적 의미로는 주석을 의미하나, 일반적인 주석과 다르게 코드를 작성할 수 있음. 클래스, 메서드, 변수, 매개변수 등에 사용이 가능하며 문자 @로 시작
Bean
- 빈(Bean)은 스프링 컨테이너가 관리하는 자바 객체를 뜻함
- 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 함(new 대신 사용)
- 사용하는 가장 큰 이유는 스프링 간 객체가 의존관계를 관리하도록 하는 것에 큰 목적. 객체가 의존관계를 등록할 때 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만듬
- Bean을 주입받는 방식
- @Autowired
- setter method
- @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 사용 가능
- 단계
- log.trace("가장 디테일한 로그");
- log.debug("디버깅용 로그");
- log.info("정보성 로그");
- log.warn("경고");
- 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 |