Annotation 정의
- 코드에 정보를 추가하는 정형화된 방법
- 소스 코드가 컴파일되거나 실행될 때 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해 주는 문법 요소
- 코드가 깔끔해지고 재사용이 가능
@Configuration
- 스프링 IoC Container에게 해당 클래스가 Bean 구성 클래스임을 알려주는 어노테이션 @Bean을 해당 클래스의 메소드에 적용하면 @Autowired로 빈을 부를 수 있다.
@Autowired
- 필드, setter메소드, 생성자에 사용하며 타입에 따라 알아서 Bean을 주입해주는 역할을 한다.
- @Autowired을 사용하면 스프링이 자동적으로 값을 할당한다.
- Controller 클래스에서 DAO나 Service에 관한 객체들을 주입시킬 때 많이 사용한다.
- Bean을 주입받는 방식(3가지)
1) @Autowired
2) setter
3) 생성자: @AllArgsConstructor 사용, 스프링에서는 생성자를 통한 방식을 권장한다.
@Component
- 개발자가 직접 작성한 클래스를 Bean을 등록하기 위한 어노테이션
- @Component 어노테이션이 있는 클래스들에 대하여 Bean 인스턴스를 생성한다.
@Bean
- 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들려할때 사용되는 어노테이션
@Configuration
public class ApplicationConfig {
@Bean
public ArrayList<String> array() {
return new ArrayList<String>();
}
}
@Controller
- Spring MVC의 컨트롤러로 사용되는, 클래스 선언을 단순화 시켜주는 어노테이션
- API와 View를 동시에 사용하는 경우에 사용
- 대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환
- view return이 주목적이다.
@RestController
- Spring에서 컨트롤러 중 View로 응답하지 않는 컨트롤러를 의미한다.
- view가 필요없는 API만 지원하는 서비스에서 사용
- @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
- data regurn이 주목적이다.
@ResquestBody
- 클라이언트 -> 서버 요청일때 사용
- json 기반의 HTTP Body를 자바 객체로 변환
@ResponseBody
- 서버 -> 클라이언트 요청일때 사용
- 자바 객체를 json 기반의 HTTP Body로 변환
@RequestMapping
- 요청 URL과 컨트롤러 메서드를 매핑
- 특정 URL이 호출될 때 어떤 메서드가 실행될지를 지정할 수 있고 value 속성은 매핑할 URL을 지정한다.
- ex) @RequestMapping(value = "/hello", method = RequestMethod.GET)
@RequestParam
- URL에서 파라미터 값과 이름을 함께 전달하는 방식
- HttpServletRequest의 request.getParameter의 기능과 동일
- 게시판 등에서 페이지 및 검색정보를 함께 전달할 때 많이 사용
- RequestParam은 URL상에서 데이터를 찾는다.
CrossOrigin
- CORS 보안상의 문제로 브라우저에서 리소스를 현재 origin에서 다른곳으로의 AJAX요청을 방지하기 위해 사용
- @RequestMapping이 있는곳에 사용하면 해당 요청은 타 도메인에서 온 ajax요청을 처리한다.
Model
- 메서드에 파라미터로 넣어주고 String 형태로 반환
- Model에 값을 넣을 때 addAttribute()사용
e.printStackTrace()
try {
} catch (Exception e) {
e.printStackTrace();
}
- printStackTrace를 통해 콘솔에 출력된 예외 정보는 예외의 발생 위치부터 호출 스택을 거슬러 올라가며 출력된다.
- 개발자는 이 정보를 통해 예외가 발생한 위치와 그 이유를 파악하고, 코드를 수정하여 예외를 해결한다.
주의: 실제 프로덕션 코드에서는 printStackTrace를 사용하여 예외 정보를 콘솔에 출력하는 것은 권장되지 않는다. 보통은 로깅 프레임워크를 사용하여 로그를 남기는 것이 더 적절하며, 콘솔 출력은 개발 중 디버깅 용도로만 사용되어야 한다.