24.02.20 백엔드 관련
1. WAS (Web Apllication Server) 와 WS (Web Server) 의 차이
1) WAS (Web Apllication Server)
- 비즈니스 로직을 넣을 수 있다
- Tomcat, PHP, ASP, .NET 등
2) WS (Web Server)
- 비즈니스 로직을 넣을 수 없다
- Nginx, Apache 등
2. Spring Freamwork
- 자바 개발을 편리하게 해주는 오픈소스 프레임워크
1) 특징
(1) 경량 컨테이너로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다
(2) 제어의 역전 (IoC) 라는 기술을 통해 어플리케이션의 느슨한 결합 도모
- 컨트롤의 제어권을 사용자가 아닌 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출 함
(3) 의존성 주입 (DI, Depenedcy Injection) 을 지원
- 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜줌
(4) 관점 지향 프로그래밍 (AOP, Aspect-Oriented Programming) 을 지원
- 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을
분리하여 관리 할 수 있다
3. @RequestBody, @RequestParam, @ModelAttribute 의 차이점
1) @RequestBody
- 클라이언트가 전송하는 JSON 형태의 HTTP Body 내용을 MessageConverter 를 통해 Java Object 로
변환시켜주는 역할
- 값을 주입하지 않고 변환시키므로 (Reflection 을 사용해 할당), 변수들의 생성자 Getter, Setter 가
없어도 정상적으로 할당 됨
2) @RequestParam
- 1개의 HTTP 요청 파라미터를 받기위해 사용됨
- 필수여부가 true 이기 때문에 기본적으로 반드시 해당 파라미터가 전송되어야 한다
- 전송되지 않을 경우 400 에러를 유발할 수 있고, 반드시 필요한 변수가 아니라면 required 의 값을 false 로
설정해줘야 함
3) @ModelAttribute
- HTTP Body 내용과 HTTP 파라미터의 값들을 생성자 Getter, Setter 를 통해 주입하기 위해 사용
- 값 변환이 아닌 값을 주입시키므로 변수들의 생성자나 Getter, Setter 가 없으면 변수들이 저장되지 않음
4. SpringBoot 와 Spring Framework 의 차이점
- 가장큰 차이점은 Auto Configuration의 차이
- Spring 은 프로젝트 초기에 다양한 환결설정을 해야함
- SpringBoot 는 설저으이 많은 부분을 자동화하여 사용자가 편하게 Spring 을 활용할 수 있도록 돕는다
SpringBoot starter dependency 만 추가해주면 설정은 끝나고 내장된 톰캣을 제공해 서버를 바로 실행 할수 있다
5. Spring MVC
1) Model
- 데이터 관리 및 비지니스 로직을 처리하는 부분 (DTO, DAO, Service 등)
2) View
- 비지니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간
(html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, RestAPI 로 서버가 구현되면 json 응답으로
구성되기도 함)
3) Controller
- 사용자의 요청을 처리하고 Model 과 View 를 중개하는 역할
- Model 과 View 는 서로 연결되어 있지 않기 때문에 Controller 사이에서 통신 매체가 되어줌
4) MVC 요청 처리 흐름
- DispatcherServlet : 클라이언트에게 요청을 받아 응답까지의 MVC 처리과정을 통제
- HandlerMapping : 클라이언트의 요청 URL 을 어떤 Controller 가 처리할지 결정
- HandlerAdapter : HandlerMapping 에서 결정된 핸들러 정보로 해당 메소드를 직접 호출해주는 역할
- ViewResolver : Controller 의 처리 결과(데이터) 를 생성할 view 를 결정
(1) 클라이언트는 URL을 통해 요청을 전송
(2) DispatcherServlet 은 HandlerMapping 을 통해 해당 요청이 어느 컨트롤러에서 온 요청인지 찾음
(3) DispatcherServlet 은 HandlerAdapter 에게 요청의 전달을 맡김
(4) HandlerAdapter 는 해당 Controller 에 요청을 전달
(5) Controller 는 비즈니스 로직을 처리한 후에 반환할 View 의 이름을 반환
(6) DispatcherServlet 은 ViewResolver 를 통해 반환할 View 를 찾음
(7) DispatcherServlet 은 Controller 에서 View 에 전달할 데이터를 추가
(8) 데이터 추가된 View 를 반환
6. Lombok 라이브러리와 Lombok 이 만드는 메소드들이 생성되는 시점은?
- Lombok 은 메소드를 컴파일하는 과정에 개입해서 추가적인 코드를 만들어내는데 이것을
어노테이션 프로세싱이라고 한다
- 어노테이션 프로세싱은 자바 컴파일러가 컴파일 단계에서 어노테이션을 분석하고 처리하는 기법을 말함
7. Servlet
- 클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- Spring MVC 에서 Controller 로 이용되며 사용자의 요청을 받아 처리한 후에 결과를 반환
- 자바를 이용해 웹을 만들기 위해 필요한 기술
1) 동작방식
(1) 사용자(Clinet)가 URL 을 입력하면 HTTP Request 가 Servlet Container 로 전송 됨
(2) 요청받은 Servlet Container 는 HttpServletRequest, HttpServletResponse 객체를 생성
(3) web.xml 을 기반으로 사용자가 요청한 URL 이 어느 Servlet 에 대한 요청인지 찾음
(4) 해당 Servlet 에서 service 메소드를 호출 후 GET, POST 여부에 따라 doGet( ) 또는 doPost( ) 를 호출
(5) doGet( ) 또는 doPost( ) 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보냄
(6) 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸