
웹 서버의 가장 기본적인 기능은 클라이언트의 요청을 받아 요청된 자원을 넘겨주는 것입니다. 그러려면 일단 클라이언트가 보내는 HTTP Requset를 받고 해석할 수 있어야 합니다. 그럼 먼저 HTTP Request 가 어떤 모습으로 전송 되는지를 알아 보겠습니다. 실제로 웹 브라우저가 보내는 HTTP Request의 모습입니다. 가장 첫번째 줄에는 요청에 대한 요약된 정보가 전해집니다. 가장 처음에 등장하는 것은 HTTP method 종류입니다(참고). 이 메소드는 이 요청이 수행해야할 동작에 대한 정보를 담고 있습니다. 그리고 나오는 것은 요청된 URL입니다. 이 URL은 요청한 자원의 절대경로일 수도 있고 매핑된 서블릿의 이름일 수도 있습니다. 그리고 마지막으로 HTTP 버전 정보가 표시됩니다. 두..

웹 애플리케이션이 동작하는 방식을 단순하게 표현하면 위의 그림과 같을 것입니다. 클라이언트가 웹 브라우저를 통해 웹 서버에 필요한 자원을 요청하면 서버가 사용자가 요청한 것을 넘겨 주게 되겠죠. 자원(resource)이라고 하는 것은 HTML 페이지나 그림파일 혹은 PDF 파일이 될 수도 있습니다. 중요한 것은 클라이언트가 요청하면 서버는 그 요청에 응답한다는 것입니다. 클라이언트와 서버가 요청과 응답을 주고 받기 위해서는 서로 같은 규칙을 가지고 대화해야 합니다. 웹 애플리케이션에서 주로 사용하는 대화의 규칙은 HTTP(Hyper Text Transfer Protocol) 입니다. 클라이언트가 HTTP 요청을 보내면 서버는 HTTP 응답으로 대답합니다. HTTP는 이렇게 요청(Request)과 응답(R..

WAS를 구현하게 된 이유 WAS를 구현하는 것은 원래 지금 다니고 있는 회사의 인턴 과제 중 하나였습니다. 하지만 저는 이 과제에 아주 부정적인 평가를 받았었습니다. 그때는 정규직 전환이 물 건너갔다고 생각을 했었죠. 이후 다행히 정규직 전환은 했으나 부정적인 평가를 받았던 이 프로젝트는 인턴기간 내내 저를 불편하게 만들었습니다. 그러던 도중 우연히 우아한 형제들에서 새롭게 시작한 우아한 테크캠프라는 코딩 교육과정에 대해 알게 되었습니다. 이 과정이 시작할 때만 해도 저는 정규직 전환이 결정되지 않은 상태였기 때문에 이 과정을 신청했고 본격적인 수업이 시작되기 전 온라인으로 이뤄지는 프리코스에 참여해 볼 수 있었습니다. 그런데 이 우아한 테크코스의 정규 커리큘럼에도 웹 서버를 직접 구현하고 서블릿 컨테..
클라이언트 요청을 받은 컨테이너가 매핑된 서블릿을 찾아서 service() 메소드를 실행시키는 것, 그리고 서블릿이 존재하지 않으면 클래스를 로드해서 인스턴스를 생성하고 초기화 시킨다는 것 까지 지난시간에 살펴 본 내용입니다. 컨테이너가 하는 일 중 또 다른 한 가지는 JSP 요청을 처리하는 것입니다. JSP는 HTML 코드 안에 JAVA 코드가 포함된 형태를 가지고 있습니다. 하지만 일단 객체가 만들어지면 동작하는 방식은 servlet과 똑같습니다. 쉽게 말하자면 JSP는 포장된 servlet이라고 할 수 있습니다. 컨테이너가 서블릿 객체를 이용하고 싶으면 일단 jsp의 겉포장을 벗겨 내야 합니다. 이렇게 번거로운 작업을 하게 된 것은 코드 작성의 편의성을 위한 것입니다. 포장을 벗겨낸다는 것은 결국 ..
서블릿의 생명주기와 동작 순서를 대략적으로 알아 봤으니 이제 잠깐 미뤄 두었던 ServletConfig에 대해 알아보도록 하겠습니다. Servlet의 init() method를 설명하면서 ServletConfig 객체를 인자로 받는다는 말을 했습니다. ServletConfig 객체는 말 그대로 Servlet에 관한 설정 정보를 서블릿으로 넘겨주기 위하여 사용하는 객체입니다. 서블릿 안에 하드코딩하기를 원하지 않는 정보들이 이 안에 포함됩니다. 이 정보는 배포서술자나 어노테이션 안에 코딩되어 있습니다. 컨테이너는 이 정보를 이름-값 쌍의 문자열 객체로 읽어들이게 됩니다. 여기서는 adminEmail 정보가 저장되어 있는데요. init() method 안에서 초기화 된 이후에는 이 정보를 getServlet..
우선 지난 시간에 배웠던 Servlet의 동작 순서를 다시한 번 복습 하겠습니다. 여기서 컨테이너는 매핑된 서블릿을 찾아서 service() 메소드를 호출한다고 했습니다. 그런데 어떤 클래스의 메소드를 호출하려면 그 클래스의 instance가 존재해야 합니다. 그렇다면 servlet의 instance가 언제 생성이되는지 궁금해 집니다. 결론부터 이야기 하면 ‘클라이언트로 부터 최초 요청을 받았을 때’ 입니다. 컨테이너는 cilent의 최초 요청이 있을 때, 매핑된 servlet 클래스 파일을 찾아서 로딩하게 됩니다. 그리고 servlet 객체를 생성하고 초기화를 담당하는 init() method를 호출하게 됩니다. 그런데 이렇게 컨테이너에 최초 요청이 들어올 때 클래스를 로드하고 생성자와 초기화 메소드를..
웹 서버의 주된 기능은 웹 페이지를 클라이언트로 전달하는 것입니다. 주로 그림, CSS, 자바스크립트를 포함한 HTML 문서가 클라이언트로 전달됩니다. 하지만 이런 웹 서버의 경우 이미 존재하는 즉, 정적인 페이지를 제공하는 역할만 할 수 있습니다. 실시간으로 작성된 페이지를 제공하거나 서버 상에 데이터를 저장하는 것은 웹 서버가 할 수 없는 일입니다. 때문에 이런 역할을 해 주는 다른 도우미 애플리케이션이 필요합니다. 이런 도우미 애플리케이션을 사용하면 웹 서버는 도우미 애플리케이션에 요청을 전달하기만 합니다. 그러면 도우미 애플리케이션은 요청받은 작업을 수행하거나 정적인 페이지를 만들어서 웹서버로 전달합니다. 웹서버는 이를 다시 클라이언트로 전해줍니다. 자바에서는 이 역할을 해 주는 것이 서블릿입니다..
멀티스레드 환경이라는 것은 다시말해 호출 스택이 여러개 존재하는 것이다 라는 이야기를 지난번에 했었습니다. 하지만 실제로 이렇게 만들어진 다중 스택들은 동시에 작업을 수행하는 것이 아니고 싱글 코어 환경이거나 혹은 스레드의 숫자가 코어의 숫자보다 더 많은 경우에는 스레드 스케줄러에 의해서 순차적으로 번갈아 가며 작업이 수행되게 됩니다. JVM은 우선순위(Priority)방식과 순환할당(Round-Robin)방식을 사용해 스레드 스케줄링을 합니다. 우선순위 방식은 우선순위가 높은 스레드에 더 많은 시간을 할당하는 방법이고, 순환할당 방식은 각각의 스레드에 정해진 시간만큼을 할당하고 돌아가면서 수행하는 것을 의미합니다. 우선순위 방식을 통해 해당하는 스레드의 할당 시간을 조절하려면 Thread 클래스에 있는..
- Total
- Today
- Yesterday
- 자바스크립트개론
- DP
- CONVENTIONS
- 클린코드
- RESTful
- 코딩의 기술
- 경고
- 야근
- 자바스크립트 개론
- Warning
- 마르코프
- 크롬
- html
- 로그
- markov chain
- java
- 유지보수
- Count
- 전략패턴
- 디자인패턴
- GROUP BY
- 동적계획법
- Markov
- REST API
- Spring in Action
- 몰라서망신
- 마르코프 연쇄
- was
- restful api
- 문장 생성기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |