CS 전공지식

24.02.20 백엔드 관련

김용글 2024. 2. 20. 15:49

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) DispatcherServletHandlerMapping 을 통해 해당 요청이 어느 컨트롤러에서 온 요청인지 찾음

     (3) DispatcherServlet 은 HandlerAdapter 에게 요청의 전달을 맡김

     (4) HandlerAdapter 는 해당 Controller 에 요청을 전달

     (5) Controller 는 비즈니스 로직을 처리한 후에 반환할 View 의 이름을 반환

     (6) DispatcherServletViewResolver 를 통해 반환할 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 두 객체를 소멸