[Spring] 스프링 프레임워크 면접 질문

2 minute read

Spring Framework

블로그, 도서, 동영상 등 참고하였습니다

스프링 프레임워크(Spring Framework)

자바 개발을 편리하게 해주는 경량급 오픈소스 애플리케이션 프레임워크로 애플리케이션 개발하는데 필요한 기능들을 포괄적으로 제공하기 때문에 개발자들이 개발에 집중할 수 있음

Spring MVC 구조와 처리과정



출처


  1. DispatcherServlet : 어플리케이션으로 들어오는 모든 Request를 받는 관문입니다. Request를 실제로 처리할 Controller에게 전달하고 그 결과값을 받아서 View에게 전달하여 적절한 응답등 생성할 수 있도록 흐름을 제어한다.
  2. HandlerMapping : Request URL 각각을 어떤 Controller가 실제로 처리할 것인지 찾아주는 역할을 합니다.
  3. Controller : Request를 직접 처리한 후 그 결과를 다시 DispatcherServlet 에게 돌려줍니다.
  4. ModelAndView : Controller가 처리한 결과와 그 결과를 보여줄 View에 관한 정보를 담고 있는 객체입니다.
  5. ViewResolver : View 관련 정보를 갖고 실제 View를 찾아주는 역할을 합니다.
  6. View : Controller가 처리한 결과값을 보여줄 View를 생성합니다.

출처

  1. 클라이언트(Client)가 서버에 어떤 요청(Request)을 한다면 스프링에서 제공하는 DispatcherServlet 이라는 클래스(일종의 front controller)가 요청을 가로챈다.
    (web.xml에 살펴보면 모든 url ( / )에 서블릿 매핑을하여 모든 요청을 DispatcherServlet이 가로채게 해둠(변경 가능))

  2. 요청을 가로챈 DispatcherServlet은 HandlerMapping(URL 분석등..)에게 어떤 컨트롤러에게 요청을 위임하면 좋을지 물어본다.
    (HandlerMapping은 servlet-context.xml에서 @Controller로 등록한 것들을 스캔해서 찾아놨기 때문에 어느 컨트롤러에게 요청을 위임해야할지 알고 있다.)

  3. 요청에 매핑된 컨트롤러가 있다면 @RequestMapping을 통하여 요청을 처리할 메서드에 도달한다.

  4. 컨트롤러에서는 해당 요청을 처리할 Service를 주입(DI)받아 비즈니스로직을 Service에게 위임한다.

  5. Service에서는 요청에 필요한 작업 대부분(코딩)을 담당하며 데이터베이스에 접근이 필요하면 DAO를 주입받아 DB처리는 DAO에게 위임한다.

  6. DAO는 mybatis(또는 hibernate등) 설정을 이용해서 SQL 쿼리를 날려 DB에 저장되어있는 정보를 받아 서비스에게 다시 돌려준다.
    (이 때, 보통 Request와 함께 날아온 DTO 객체(@RequestParam, @RequestBody, …)로 부터 DB 조회에 필요한 데이터를 받아와 쿼리를 만들어 보내고, 결과로 받은 Entity 객체를 가지고 Response에 필요한 DTO객체로 변환한다.)

  7. 모든 비즈니스 로직을 끝낸 서비스가 결과물을 컨트롤러에게 넘긴다.

  8. 결과물을 받은 컨트롤러는 필요에 따라 Model객체에 결과물 넣거나, 어떤 view(jsp)파일을 보여줄 것인지등의 정보를 담아 DispatcherServlet에게 보낸다.

  9. DispatcherServlet은 ViewResolver에게 받은 뷰의 대한 정보를 넘긴다.

  10. ViewResolver는 해당 JSP를 찾아서(응답할 View를 찾음) DispatcherServlet에게 알려준다.
    (servlet-context.xml에서 suffix, prefix를 통해 /WEB-INF/views/index.jsp 이렇게 만들어주는 것도 ViewResolver)

  11. DispatcherServlet은 응답할 View에게 Render를 지시하고 View는 응답 로직을 처리한다.

  12. 결과적으로 DispatcherServlet이 클라이언트에게 렌더링된 View를 응답한다.

출처 : 기본기를 쌓는 정아마추어 코딩블로그

Spring IoC의 역할

  • 제어권의 역전, 객체의 생성 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 말함
  • 제어권이 스프링 프레임워크로 넘어오게 되면서 DI(의존성 주입), AOP(관점 지향 프로그래밍)등을 가능하게 함

IOC 컨테이너의 특징

  1. IOC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리.
  2. POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가짐.
  3. 개발자들이 직접 POJO를 생성할 수 있지만, 컨테이너에게 맡김.

DL(Dependency LookUp)

  • 클라이언트가 서버에게 자원을 요청할때, 찾는 행위로 객체의 아이디 및 타입을 통해서, Look up 해주는 것을 말함
  • 저장소에 저장되어 있는 Bean에 접근하기 위해서, 컨테이너가 제공하는 API를 사용하여 Bean을 Look Up하는 것을 말함.

DI(Dependency Injection)

각 클래스간의 의존관계를 빈 설정(XML 파일) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함.

Spring과 SpringBoot의 차이