Spring 프레임워크의 큰 특징 중 하나인 DI(Dependency Injection)은 spring에서 제공하는 의존 관계 주입 기능을 말한다. 즉, 필요할 때마다 객체를 생성해서 사용하는 것이 아닌 미리 생성 후 필요한 부분에 주입하여 사용할 수 있다. 이러한 기능을 사용하면 결과적으로 객체 간의 결합을 낮추게되고, 유지보수의 용이함을 가져온다.
Spring을 사용할 때도 마찬가지고 MVC 패턴에 맞게,
Main -> APP -> Controller -> Service -> Repository(DAO) -> DB
와 같이 접근할 수 있도록 설계하였다.
스프링 프레임워크는 MVC 패턴을 사용하고 있고, Controller는 view와 model을 연결시키는 다리 역할을 한다.
@controller인 어노테이션으로 내부적으로 컨트롤러의 역할을 할 수 있게 된다.
@AutoWired
- 자동으로 의존 객체를 찾아 주입한다.
- 의존 객체가 2개 이상일 시 오류를 발생시키고, 보통 인터페이스 선언 시 사용된다.
spring 프레임워크에서 DI는 객체 내에서 또 다른 객체가 필요할 경우 사용하여야 하고, 직접 Bean을 등록하는 등 직접 주입하여야 했는데, 이 방법을 간결하게 해주기 위해 @AutoWired 어노테이션이 나왔다.
@AutoWired는 Spring Container에 등록된 Bean 중 타입이 일치하는 객체를 어노테이션 한 번으로 주입시켜 주는 어노테이션이다.
위의 예시로는 필드 주입식으로 되어있지만, 지금은 한개를 참조하고있지만 코드양이 방대해질 수 록 서로 계속 참조하게 되면 서버가 다운되는 상황이 발생하게 된다.
private ArticleService articleService;
@Autowired
public UserArticleController(ArticleService articleService){
this.articleService = articleService;
}
생성자 주입식으로 하여 위의 문제가 되는 부분을 보완할 수 있고, final 키워드를 사용하여 잘못 주입되는 경우에도 예방이 가능하다. (테스트 코드를 작성하는데도 용이하다.) 생성자 주입 방식이 spring에서 가장 권장하는 방식이라고 한다.
@RequestMapping
- Spring에서 특정 URL로 요청(request)을 보낼 시 controller에서 어떠한 방식으로 처리할지 정의한다. 이러한 요청을 특정 메소드와 매핑하기 윙하여 사용하는 어노테이션이다.
- @RequestMapping은 Controller에서 사용되는데, DispatcherServlet이 Controller 파일을 차고, 논리적 주소가 매핑된 Method를 찾기 위해서는 @Controller와 @RequesetMapping이 작성되어야 한다.
@ResponseBody
- 메소드의 리턴 값을 response body에 포함시킨다.
- 자바 객체를 HTTP 요청의 body내용으로 매핑하여 클라이언트로 전송한다.
'Spring' 카테고리의 다른 글
SPRING(08.12) - 표준 메뉴얼, lombok (0) | 2024.08.12 |
---|---|
MyBatis? (0) | 2024.08.10 |
SPRING(08.09) - Repository(DAO) (0) | 2024.08.10 |
SPRING(08.09) - Service (0) | 2024.08.09 |
SPRING(08.08) - JAR, WAR, Maven, Gradel (0) | 2024.08.08 |