컨테이너는 클라이언트로부터 요청이 있을 때 마다 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를 구현하는 것은 원래 지금 다니고 있는 회사의 인턴 과제 중 하나였습니다. 하지만 저는 이 과제에 아주 부정적인 평가를 받았었습니다. 그때는 정규직 전환이 물 건너갔다고 생각을 했었죠. 이후 다행히 정규직 전환은 했으나 부정적인 평가를 받았던 이 프로젝트는 인턴기간 내내 저를 불편하게 만들었습니다. 그러던 도중 우연히 우아한 형제들에서 새롭게 시작한 우아한 테크캠프라는 코딩 교육과정에 대해 알게 되었습니다. 이 과정이 시작할 때만 해도 저는 정규직 전환이 결정되지 않은 상태였기 때문에 이 과정을 신청했고 본격적인 수업이 시작되기 전 온라인으로 이뤄지는 프리코스에 참여해 볼 수 있었습니다. 그런데 이 우아한 테크코스의 정규 커리큘럼에도 웹 서버를 직접 구현하고 서블릿 컨테..
필터는 서블릿과 비슷한 자바 컴포넌트 입니다. 컨테이너에 전달된 요청이 서블릿을 호출하기 전에 이 필터를 거치게 됩니다. 실제로 필터를 구현한 클래스 입니다. filter 인터페이스를 구현했습니다. 이 때 init 메소드를 반드시 구현해야 합니다. 일반적으로는 config 객체를 저장합니다. 그리고 doFilter에서 실제로 필요한 코딩을 하게 됩니다. 마지막에 FilterChain 객체의 doFilter() 메소드를 호출하는데 이 부분이 다음에 실행될 필터 또는 서블릿을 호출하는 부분입니다. 배포서술자에 필터를 정으하고 매핑할 수 있습니다. 서블릿처럼 이름과 클래스 위치로 필터를 정의하고 초기화 파라미터도 지정할 수 있습니다. 필터를 url이나 servlet에 매핑시키면 해당하는 요청이 들어왔을 때 필..
- Total
- Today
- Yesterday
- markov chain
- DP
- 디자인패턴
- 마르코프
- 문장 생성기
- 전략패턴
- was
- 로그
- 자바스크립트개론
- 몰라서망신
- 동적계획법
- 경고
- restful api
- html
- java
- 마르코프 연쇄
- 자바스크립트 개론
- Count
- 클린코드
- GROUP BY
- Markov
- 유지보수
- 야근
- REST API
- 크롬
- CONVENTIONS
- RESTful
- 코딩의 기술
- Warning
- Spring in Action
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |