Spring & Springboot

[스프링/Spring] 서블릿(Servlet)과 서블릿 컨테이너

0. 들어가면서 자바 웹 기술 역사를 살펴보면 서블릿은 JSP보다도 이전에 생긴 근본적인 개념입니다. 아래에서 서블릿에 대해 자세히 기술하겠지만, 서블릿을 공부하다보면 그 당시 개발자들이 서블릿'만'으로 개발을 하면서 얼마나 고통받았을지 안타깝기도 합니다. 아무튼 서블릿에 대해 공부한다는 것은 현재 스프링 MVC 패턴의 필요성과 MVC 패턴이 서블릿을 활용하여 어떻게 수많은 기술적 어려움을 쉽게 풀어냈는지를 이해하는 데 도움이 되리라 생각합니다. 1. 서블릿(Servlet) 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램을 말하는데요. 쉽게 이야기하면, 클라이언트가 서버에 요청을 보낼 때와 응답을 받을 때 필요한 HTTP 작업을 도와주는 녀석이 서블릿입..

2021.11.03 게시됨

CS/OS

[운영체제/OS] 멀티쓰레드 구현해보기

1. 멀티쓰레드의 타입 이전 글에서 프로세스 모델과 쓰레드 모델의 차이를 설명했습니다. 프로세스 모델은 각 프로세스 안에 모든 Image와 Context들을 담고 있기 때문에 무거우며, 새로운 프로세스를 만들 때마다 fork()를 수행하기 때문에 모든 내용을 복제하는 메모리 상의 비효율성과 시간적 비효율성을 초래한다고 했죠. 그리고 이러한 맥락에서 Thread를 사용하게 되면 쓰레드를 생성하는 데 시간도 적게 걸리며 요청을 병렬적으로 처리할 수 있기 때문에 효율성을 확보할 수 있다고 했습니다. 그렇다면 실제로 멀티쓰레딩은 어떻게 구현할까요? 이에 대해서는 크게 두 가지 방법이 있는데, 아래 그림을 보도록 하겠습니다. 1) User-level Threading 왼쪽 그림이 User-level Thread를..

2021.06.14 게시됨

CS/OS

[운영체제/OS] 프로세스 모델의 한계과 멀티쓰레드의 필요성

0. 프로세스 모델의 한계 프로세스 기반 모델에서 애플리케이션은 동시에 요청되는 여러가지 상황에 대해 fork()를 통해 Child process를 만듭니다. 예를 들어 웹 서버는 각 클라이언트의 요청에 대해 서버가 Child process를 생성하여 클라이언트의 요구를 처리하죠. 하지만 요청이 많아질수록 서버가 생성해야 하는 Child 프로세스에 대한 메모리는 증가할 수밖에 없으며 주소 공간과 자원 역시 공유되어 효율성이 떨어지게 됩니다. 또한, 전통적인 프로세스 기반 모델은 Multiprocessor 아키텍쳐의 장점을 살리지 못했습니다. 각 프로세스는 오직 하나의 프로세서(CPU)에서 밖에 돌지 못했기 때문이죠. 따라서 N개의 CPU가 존재한다고 하더라도 각 프로세스는 오직 1개의 CPU에서밖에 돌지..

2021.06.14 게시됨

CS/OS

[운영체제/OS] OS 자체는 어떻게 구현할까?

1. 생각 이전 포스팅까지 우리는 운영체제란 무엇이며 구조는 어떻게 생겼는지, 그리고 Dual Mode Operation과 Interrupt에 대한 개념을 살펴봤습니다. 이후에는 프로세스란 무엇이며 Mode Switching과 Context Switching을 비교해보았습니다. 그렇다면, 정작 지금까지 공부한 운영체제는 이 자체로 어떻게 동작할까요? 흥미롭게도, 운영체제 역시 프로세서에 의해 실행되는 하나의 프로그램입니다. Linux OS에 대한 코드가 C로 짜여졌다는 것을 생각해보면 운영체제가 하나의 소프트웨어 프로그램이라는 말이 이해되시시지 않나요? 자, 그렇다면 최초에 누군가 운영체제를 만들려고 했을 때 과연 어떤 방식으로 운영체제를 디자인했을까요? 참고로 아래 포스팅에서 살펴봤던 단일 구조, 계층..

2021.06.14 게시됨