기술면접 - Spring
기술면접 대비 23.09.05
WAS(Web Application Server)와 WS(Web Server)의 차이
WAS(Web Application Server)
- 비지니스 로직을 넣을 수 있음
- Tomcat, PHP, ASP, .NET 등
WS(Web Server)
- 비지니스 로직을 넣을 수 없음
- Apache 등
WAS는 무엇이고 WS는 무엇?
Web Server
클라이언트에게 요청 받고 정적인 Request라면 정적인 콘텐츠를 Response 해준다.
동적 Request라면 WAS로 전달 WAS에서 처리한 결과를 클라이언트에 전달
WAS
DB 조회가 필요하거나 사용자의 입력을 서버에서 받아 가변적으로 로직을 수행하는 등 동적인 처리가 필요할 때
WAS의 작동 프로세스
- Web Server로 요청이 오면 컨테이너가 응답
- 컨테이너는 web.xml을 참조하여 해당 서블릿에 대한 쓰레드 생성 httpServletRequest와 httpServletResponse 객체를 생성하여 전달
- 컨테이너는 Jsp/Servlet 호출
- 호출된 Servlet의 작업을 담당하게 된 쓰레드는 doPost()또는 doGet()을 호출
- 호출된 doPost(), doGet() 메소드는 생성된 동적 페이지를 Response객체에 담아 컨테이너에 전달
- 컨테이너는 전달받은 Response객체를 HTTPResponse형태로 바꿔 WebServer에 전달 후 생성되었던 쓰레드 종료하고 httpServletRequest, httpServletResponse 객체를 소멸시킨다.
WAS와 WS를 분리한 이유?
- 정적 콘텐츠와 동적 콘텐츠 요청을 처리하는 기능을 분리하여 서버 부하를 방지
- WS와 WAS의 port번호가 다르기 때문에 물리적으로 보안을 강화
- WS 하나에 여래 대의 WAS 설치가능 WAS의 부하를 더 낮춰줄 수 있음
Spring Framework란?
자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크
특징
- 컨테이너로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클 관리
- 제어의 역전(IOC) -> 어플리케이션의 결합도 낮춤
- 사용자가 아닌 프레임워크에 제어권이 있어 스프링에서 사용자의 코드를 호출
- 의존성 주입(DI) -> 각 서비스들 간 의존성이 존재할 경우 서로 연결 - 외부로부터 객체를 받아서 사용하기 때문에 결합도가 낮아짐
- 관점 지향 프로그래밍(AOP)
- 공통적으로 사용되는 코드를 모듈화 하고 해당 기능을 분리하여 관리한다
Spring MVC란?
MVC = Model, View, Controller의 약자, 각 기능을 구분하는 디자인 패턴
Model - 데이터 관리 및 비즈니스 로직을 처리하는 부분(DAO, DTO, Service...)
View - 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간
Controller - 사용자의 요청을 처리하고 Model과 View를 중개하는 역할
DispatcherServlet - 클라이언트에게 요청을 받아 응답까지의 MVC과정을 통제
HandlerMapping - 클라이언트의 요청 URL을 매핑한 Controller 검색 후 호출해야하는 메소드 return
HandelrAdapter - HandlerMapping에서 결정된 정보로 해당 메소드를 직접 호출해주는 역할
ViewResolver- Controller의 처리 결과(데이터)를 생성할 view 결정
클라이언트 URL을 통해 요청 전송 -> DispatchServlet -> HandlerMapping을 통해 요청받은 Controller 검색 후 반환 --> HandlerAdapter에 요청 전달 -> Controller -> Service,DAO,DB 비즈니스 로직 수행 -> Controller에서 뷰에 전달할 데이터를 Model객체에 저장 후 데이터와 View의 이름 반환 -> DispatcherServlet은 ViewResolver를 통해 View 찾음 -> view를 반환받고 해당 view에 Model 데이터를 넘겨주며 클라이언트에게 전달할 응답 데이터 요청 -> view는 응답 데이터를 생성해 다시 DispatcherServlet에 전달 -> 클라이언트에 응답 데이터 전달
Spring Bean?
IOC컨테이너 안에 들어있는 객체가 필요할 때 IOC 컨테이에서 가져와 사용
Bean 등록방법
- @Component 어노테이션 사용해 등록 -> 스프링 컨테이너에서 자동으로 생성되어 빈으로 등록
- 설정 클래스에 @Configuration 어노테이션을 클래스 선언부에 추가 -> 메소드 위에 @Bean 어노테이션 추가
VO, BO, DAO, DTO의 차이
DAO(Data Access Object): DB데이터에 접근하기 위한 객체(Repository, Mapper)
BO(Business Object): 여러 DAO를 활용해 비즈니스 로직을 처리하는 객체(Service)
DTO(Data tranfer Object): 각 계층간 데이터 교환을 위한 객체
VO(Value Object): 실제 데이터만을 저장하는 객체