2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

Servlet은 뭐고 Dispatcher - Servlet은 뭐죠..?

2024. 8. 20. 10:02ㆍ스프링

4가지 

더보기

1. Error와 Exception의 차이가 뭘까?

  • Error는 실행 중 일어날 수 있는 치명적 오류이다! 벌써부터 무섭... Error는 컴파일 시점에 체크할 수 없고 오류가 발생하면 프로그램은 비정상 종료...!  예측 불가능한 UncheckedException에 속한다..!

  • 반면에 Exception은 Error보단 그나마 비교적 경미한 오류!!, try - catch를 이용해서 프로그램의 비정상 종료를 막을 수 있다!

 


2. Checked ? UnChecked? Exception의 종류인데,, 뭐가 다르지?

  • CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야한다!
    • 대표적으로 IOException, ClassNotFoundException 등

  • UncheckedException은 실행하고 난 후에 알 수 있는 예외를 말하고, 따로 예외처리는 필요없다!
    • 대표적인 NullPointerException, ArrayIndexOutOfBoundException 등

  • RuntimeException..?
    • RuntimeException은 UncheckedException을 상속한 클래스! 반대로 RuntimeException이 아닌 것은 CheckedException을 상속한 클래스이다!

 


3. Optional API가 뭘까?

  • 개발할때 가장 많이 발생하는  예외중 하나가 바로..NullPointerException이다..! NPE를 피하려면 null 여부 검사를 필연적으로 하게 되는데 만약 null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거로워집니다! 하지만 Optional<T>로 null로 인한 예외가 발생하지 않도록 도와주고, Optional 클래스의 메소드를 통해 null을 컨트롤 할 수 있습니다!

 


4. 컬렉션 프레임워크가 무엇일까?

  • 다수의 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다!

  • 자바 컬렉션에는 List. Set, Map 인터페이스를 기준으로 여러 구현체가 존재하고, 이에 더해 Stack, Queue 인터페이스도 존재!

  • 그럼 List, Set, Map, Queue, Stack은 다 뭘까..?
    • List는 순서가 있는 데이터의 집합! 중복도 허용! List는 ArrayList, LinkedList 등의 구현체가 있다!
    • Set은 순서가 없는 데이터의 집합! 중복을 허용하지 않는다! 대표적인 구현체는 HashSet, 순서를 보장하기 위해서는  LinkedHashSet을 사용한다!

    • Map은 키와 값(Key, Value)이 한 쌍으로 이루어져 있고, 키를 기준으로 중복을 허용하지 않으며, 순서가 없습니다! Key의 순서를 보장하기 위해서 LinkedHashMap을 사용합니다

    •  Stack 객체는 직접 new 키워드로 사용할 수 있으며, Queue 인터페이스는 LinkedList에 new 키워드를 적용해 사용할 수 있습니다!

 


2.  CodeKata

문제 설명
두 수를 입력받아 두 수의 최대 공약수와 최소 공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대 공약수, 그 다음 최소 공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대 공약수는 3, 최소 공배수는 12이므로 solution(3,12)는 [3,12]를 반환해야 합니다.
제한 사항
두 수는 1 이상 10000000이하의 자연수입니다.
풀이
class Solution {
    public int[] solution(int n, int m) {
        int max = Math.max(n, m);
        int min = Math.min(n, m);
        
        while(min != 0){
            int r = max % min;
            max = min;
            min = r;
        }
        int h = n * m /max;
        
        int[] answer = {max, h};
        return answer;
    }
}​

1. Math 함수를 사용해서 m과 n  중에서 더 큰 수를 max 변수에 담았습니다.

2. max와 마찬가지로 m과 n 중에서 더 작은 수를 min 변수에 담았습니다.

3. 제한 사항에서 두 수는 1 이상이 있었기 때문에 while문으로 != 0 (0이 아니면) 조건을 넣었습니다.

4. 유클리드 호제법을 사용해서 최대 공약수를 구하였습니다.

5. 최소 공배수는 두 수의 곱 / 최대 공약수 이 공식을 사용해서 값을 구하였습니다.

 


Servlet이 뭔데 다들 그렇게 얘기를 하나요..?

 

난 왜 이걸 이제 공부하는거지?

 

그냥 스윽하고 지나갈만한 내용이 아니었다고 한다.... 한번 집중해서 알아가보자..!

 

1. Servlet 이란 뭘까?

 

Servlet의 동작 방식

 public abstract class HttpServlet extends GenericServlet {
      //...
       protected void doGet(HttpServletRequest req, HttpServletResponse resp){...}
       protected void doPost(HttpServletRequest req, HttpServletResponse resp){...}
       //...
 }

 

  • 자바를 사용해서 웹 페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양이다!

  • 쉽게 말해서, "웹 서버 프로그래밍을 하기 위한 사양을 갖춘 자바 코드" 정도..?라고 할 수 있다!

  • Servlet은 Servlet Container에 의해 관리, 실행된다! .HTTP Server + Servlet Container가 웹 서버 역할에 필요한 대부분을 구현해두었고, 개발자는 Servlet을 만들어 HTTP요청을 받아 처리하는 부분을 구현하는 것이라고 한다..!

  • 요청(Request)과 응답(Response) HTTP 웹 서버 기능 동작이 가능하다!

 

Servlet은 Servlet Container에 의해 관리, 실행된다는데 Servlet Container은 또 뭐죠..?

 

  • Servlet이 어떠한 역할을 수행하는 manual이라고 보면, Servlet Container은 그 manual을 보고 핸들링(handling)한다고 볼 수 있다!

  • Servlet Container는 클라이언트의 요청(Request)을 받아주고  응답(Response)할 수 있게, 웹 서버와 소켓을 통신하며 대표적인예로 아파치 톰캣(Tomcat)이 있다!

 

톰캣(Tomcat)이란?

- 웹 애플리케이션 서버(WAS)중 하나로 Servlet Container, Servlet Engine이라고 표현할 수 있으며 자바 웹 프로그래머가 작성한 Servlet을 관리한다!

- Servlet을 관리하는다는 말은 클라이언트가 어떤 요청(Request)을 했을 때ㅡ 어떤 SErvlet을 실행할 것인지 제어해준다는 것이다.

- 톸맷은 Servlet을 관리해주는 주체이기 때문에 아무 클래스가 아니라 Servlet(HttpServlet 클래스를 상속한 클래스)이어야 한다.

 

  • 서블릿의 생명주기?

    • Servlet Container는 Servlet의 탄생과 죽음을 관리한다..?

    • Servlet Class를 로딩하여 인스턴스화 하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 Servlet Method를 호출

    • 또한 Servlet이 생명을 다 한 순간에는 적절하게 Garbage Collection(GC)을 진행하여 편의를 제공한다!

 

  • DispatcherServlet ??????
    • HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)

  • DispatcherServlet의 장점!
    • dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리하면서 상당히 편리하게 이용이 가능하다! 따라서 Controller만 구현해두기만 하면 Dispatcher-Servlet이 알아서 적합한 컨틀롤러로 위임을 해주는 구조이다!

  • Dispatcher-Servlet의 동작 과정

 

  • Client의 요청을 Dispatcher - Servlet이 받음

  • 요청 정보를 통해 요청을 위임할 Controller를 찾음

  • 요청을 Controller로 위임할 핸들러 어댑터를 찾아서 전달

  • 핸들러 어댑터가 Controller로 요청을 위임

  • 비즈니스 로직을 처리

  • Controller가 반환값을 반환

  • 핸들러 어댑터가 반환값을 처리

  • 서버의 응답을 Client로 반환

'스프링' 카테고리의 다른 글

Spring JPA 뭐하는 키워드지..?  (1) 2024.08.24
스프링 의존성 주입? 강한 결합? 느슨한 결합?  (0) 2024.08.21
[Spring] Entity...!  (0) 2024.08.19
[TIL] 2024.08.16 [Java/Spring]  (0) 2024.08.19
[TIL] Java 2024.08.08  (0) 2024.08.09