
컨테이너는 클라이언트로부터 요청이 있을 때 마다 HttpServletRequest와 HttpServletResponse 객체를 생성하고 서블릿 인스턴스를 찾아 실행시킵니다. 그런데 클라이언트의 요청은 순차적으로 이어지지 않을 확률이 높습니다. 서비스의 규모가 크다면 수 많은 요청이 한 번에 일어나게 되겠죠. 그래서 컨테이너는 요청이 들어올 때 마다 새로운 스레드를 생성하거나 스레드풀에서 스레드를 가져와서 요청을 처리하게 됩니다. 서블릿의 동작구조는 지난 포스트를 참조 부탁드립니다. 스레드는 사용자에게 한 번에 여러가지 일을 처리하는 것 처럼 보이게 만들지만 실제로는 아주 빠른 속도로 스레드를 오가며 작업을 처리하는 것에 불과합니다. CPU는 한 번에 한 가지의 작업만 처리할 수 있기 때문입니다. 그래서 ..
이제 어떤 url에 어떤 클래스를 로드해야 하는지를 알게 되었습니다. 이 때 로드하는 클래스가 바로 동적으로 페이지를 만들어 내는 Servlet이 됩니다. 동적으로 페이지를 만드는 것은 제가 만드는 Web Application Server 에서 가장 중요한 역할이라고 할 수 있고 사실 이 프로젝트의 핵심입니다. 먼저 Servlet 클래스를 만들도록 하겠습니다. 이 Web Application Server 를 사용하는 사용자는 이 Servlet 클래스를 상속받아서 사용하게 됩니다. public class Servlet { private static final String GET = "GET"; private static final String POST = "POST"; private static final..

지난번 포스팅에서 클래스로더를 알아본다고 했는데 순서를 좀 바꾸겠습니다. 어떤 url을 입력 받았을 때 어떤 서블릿을 동작해야 하는지 어떻게 알 수 있을까요? 서블릿은 배포서술자(물론 애너테이션을 사용하는 방법도 있지만 이 프로젝트에서는 고려하지 않도록 하겠습니다)를 통해서 매핑됩니다. 컨테이너는 이 배포서술자 파일을 통해 url과 일치하는 클래스를 찾아서 로드하게 됩니다. 배포서술자는 보통 xml 파일로 만들어지고 다음과 같은 구조를 하고 있습니다. web.xml 이라는 이름을 가진 xml 파일에 배포와 관련된 여러가지 설정 정보들을 담게 됩니다. 사실 이 배포서술자 안에 기술될 수 있는 정보는 매우 많지만 이 프로젝트에서는 서블릿 매핑 부분만 구현해 보도록 하겠습니다. 이 배포서술자나 애너테이션에 대..

웹서버는 클라이언트로 부터 요청받은 자원을 클라이언트로 전달해 줘야 합니다. 이 때 클라이언트가 어떤 종류의 정적파일, 그러니까 HTML 파일이나, 이미지, 혹은 PDF 같은 파일을 요청했다면 웹서버는 그 파일을 다시 클라이언트로 전송해 줘야 합니다. 물론 HTTP 응답의 형태를 따라야 합니다. HTTP Response 가 어떤 모습인지 잠깐 살펴 보겠습니다. 가장 첫번째 줄에는 상태 라인(status line)이 위치하고 있습니다. 상태 라인에는 순서대로 현재 HTTP 버전 정보, 상태 코드, 상태 텍스트가 포함되어 있습니다. 상태코드는 현재 응답의 상태를 나타냅니다. 100번 대는 조건부 응답, 200번 대는 성공, 300번 대는 리 다이렉션, 400번 대는 요청 오류, 500번 대는 서버 오류를 나..

웹 서버의 가장 기본적인 기능은 클라이언트의 요청을 받아 요청된 자원을 넘겨주는 것입니다. 그러려면 일단 클라이언트가 보내는 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의 겉포장을 벗겨 내야 합니다. 이렇게 번거로운 작업을 하게 된 것은 코드 작성의 편의성을 위한 것입니다. 포장을 벗겨낸다는 것은 결국 ..
- Total
- Today
- Yesterday
- 경고
- java
- 야근
- 자바스크립트 개론
- Markov
- Warning
- 유지보수
- 로그
- 디자인패턴
- 몰라서망신
- Count
- 마르코프 연쇄
- 크롬
- REST API
- markov chain
- GROUP BY
- 동적계획법
- was
- 마르코프
- html
- CONVENTIONS
- RESTful
- DP
- 코딩의 기술
- 전략패턴
- 클린코드
- Spring in Action
- 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 |