Connected Posts
2021.07.16 - [3. 기술 공부/Java (Spring, Spring Boot)] - [Java Servlet] 2. Servlet과 Servlet Container
Goal
[Java Servlet] 시리즈 포스트에서는 Java Servlet에 대한 간단한 개념과, Java Servlet 역사에 큰 breakpoint가 있었던 Servlet 3.0(Async Servlet), 3.1(Non-blocking I/O)에 대해 정리해보려고 한다. 이번 포스팅에서는 breakpoint를 이해하기 위해 기초가 될 개념인 Sync, Async, Blocking, Non-Blocking에 대해 알아보도록 하겠다.
1. Synchronous? Asynchronous?
본격적으로 Servlet에 대해 이야기하기에 앞서, 대부분이 아는 내용이겠지만 간단히 싱크와 어싱크, 블록과 논블록에 대한 개념을 한번 짚고 넘어가려고 한다. 이 두가지를 이해하지 못하면 뒤에 얘기들을 모두 이해할 수 없기 때문에 굉장히 기초지만 내용을 넣어보았다.
- Sync는 위의 Synchronous 그림의 경우처럼 2개의 스레드 작업이 싱크를 맞추어 진행되는 것을 이야기 한다.
즉 Client thread가 server thread에게 작업 요청을 했을 때 완료될 때까지 기다려 결과값을 직접 받게 되고 받고난 후에서야 다음 일을 하게 된다. - Async는 반대로 Client thread가 작업을 요청하지만, 완료를 기다리지 않고 본인이 할 다른 일을 처리한다. 작업 요청에 대한 결과값을 직접적으로 받지 않고, 호출된 함수의 콜백 함수를 통해 작업 완료 여부를 확인하여 결과값을 받아 연관된 작업을 계속 진행한다.
1. Blocking? Non-Blocking?
blocking과 non-blocking은 주로 IO의 읽기, 쓰기에서 사용되는 개념이다.
- blocking 방식의 경우 요청한 작업을 마칠 때까지 계속 대기한다. Thread 관점으로 본다면, 요청한 작업을 마칠 때까지 계속 대기하며 return 값을 받을 때까지 한 Thread를 계속 사용하거나 대기하게 된다.
- non-blocking 방식의 경우 요청한 작업을 즉시 마칠 수 없다면 즉시 return한다. Thread 관점으로 본다면, 하나의 Thread가 여러 개의 IO를 처리가 가능하게 된다.
이 둘이 유사하여 처음에 봤을 때 헷갈릴 수 있지만, 각자의 관심사가 다르기 때문에 별도의 용어로 불리우는 것으로 생각하면 간단하다.
Sync/async는 "호출되는 함수의 작업완료여부를 누가 신경쓰느냐?"가 관심사이다. 즉 호출되는 함수에게 콜백을 전달하여 콜백이 완료 여부를 관리하게 되면 어싱크인 것이다.
blocking/non-blocking은 호출되는 "함수가 바로 리턴을 하느냐, 아니면 스레드를 잡고 있느냐"가 관심사이다. 호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘겨주고 호출한 함수가 다른 일을 할 수 있는 기회를 주면 논블로킹인 것이다.
이 두 개념에 대해 알고 있어야 왜 기존의 Sync/Blocking 방식이었던 기술들이 Async/Non-blocking으로 변모하며 스레드 자원을 최대로 활용할 수 있게 개선되었는지 이해할 수 있을 것이다. 위에 두개의 방식의 차이점에서 알 수 있듯이 Async/Non-blocking 방식일 때에는 스레드가 유휴상태로 점유되는 일이 없이 자유롭게 여러가지 작업을 동시에 할 수 있기 때문에 자연스럽게 스레드 자원을 최대로 활용할 수 있게 되는 것이다.
다음 포스팅에서는 자바 서블릿과 서블릿 컨테이너에 대해 살펴볼 것이다.
'3. 기술 공부 > Java (Spring, Spring Boot)' 카테고리의 다른 글
[Spring/Spring boot] Property 파일 제대로 설정하기 (0) | 2021.08.06 |
---|---|
[Java Servlet] 3. Servlet 3.0, 3.1 그리고 Spring MVC (2) | 2021.07.16 |
[Java Servlet] 2. Servlet과 Servlet Container (0) | 2021.07.16 |
[Effective Java 3E] 5. 제네릭 (Generic) (0) | 2021.03.03 |