- 스트림(Stream)이란?
스트림의 어원은 강의 물줄기를 뜻하는데, 즉 단일 방향으로 연속적으로 흘러가는 것을 말한다. 자바에서는 입력과 출력이라는 일련의 흐름이 이와 비슷하여 I(InputStream)/O(OutputStream) 스트림으로 이름을 붙인 듯 하다. 컴퓨터공학의 관점에서 데이터가 출발지에서 나와 도착지로 들어가는 형태가 이 물줄기와 비슷하기 때문이다.
- I/O 스트림이란?
스트림의 종류는 두 가지다. 입력스트림(InputStream)과 출력스트림(OutputStream)이 그것이다. 프로그램이 데이터를 입력받을 때에는 입력스트림인 것이고, 데이터를 보낼 때에는 출력스트림인 것이다(일종의 동작 상태를 뜻한다). 우리가 가장 흔하게 접하는 예로는, 컴퓨터에 정보를 입력할 때 쓰는 키보드가 입력스트림의 출발지가 되며, 서버에서 작업을 처리한 후 보내는 데이터는 모니터를 통해 출력되는데, 이 때 모니터가 출력스트림의 도착지가 된다. 그리고 이 스트림은 늘상 쌍으로 함께 다닌다고 생각하면 된다. 하나의 프로그램에는 꼭 이 두 개의 스트림이 필요한 것이다.
그리고 자바에서 바로 이 I/O 스트림을 통해 데이터의 입출력을 관장하는데, 이것이 java.io 패키지에서 API로 제공되고 있다. 그리고 여기에는 바이트 기반 스트림(그림, 멀티미디어, 문자 등 모든 종류의 데이터 가능)과 문자 기반 스트림(문자 데이터만 가능)의 두 가지 클래스가 존재한다.
- 서블릿의 응답 처리 방법
모든 웹 프로그램의 작동은 자바의 동적 서비스를 수행하는 자바 클래스의 일종인, 서블릿의 요청과 응답 처리 방법에 기반한다. 시대의 흐름에 따라 일방적으로 사용자에게 만들어진 데이터를 보내주는 것으로부터 벗어나 이제는 사용자가 원하는 데이터를 받아볼 수 있도록 실시간으로 사용자와 소통하는 클라이언트-서버의 구조가 탄생하게 되었다. 이러한 흐름 속에서 나타난 것이 바로 서블릿인 것이며, 따라서 서블릿에는 클라이언트와 소통하기 위한 요청-응답의 구조가 존재한다.
위에서 설명한 자바의 I/O 스트림 클래스가 바로 서블릿의 이 요청-응답 통신에서 사용되는 것이다. 이 통신을 네트워크라 하는데, 자바 I/O 스트림 클래스의 입출력 기능을 이용하면 쉽게 네크워크 기능을 구현할 수 있다.
크게 서블릿이 응답을 처리하는 방법은 다음과 같다.
1) 서블릿의 핵심 기능인(요청을 처리하는) 메서드인 doGet()이나 doPost() 안에서 처리한다.
2) 해당 메서드에 매개변수로 전달된 HttpServletResponse 객체를 이용한다(서블릿은 기본적으로 Http 통신규약을 사용하는 HttpServlet을 상속받으며, 클라이언트에서 요청이 올 경우 웹 어플리케이션 서버(WAS)인 톰캣이 톰캣 컨테이너에서 각각 HttpServletRequest 객체와 HttpServletResponse 객체를 생성한다).
3) setContentType()를 이용하여 클라이언트가 미리 받을 데이터의 종류를 알고 빠르게 처리할 수 있도록, 데이터의 종류(MIME-TYPE, 마임타입)를 지정한다.
4) 클라이언트와 서블릿의 통신은 자바의 I/O 스트림을 이용한다.
참고 : 도서 <이것이 자바다>, <자바 웹을 다루는 기술>
'TIL' 카테고리의 다른 글
<자바 Java> 생성자 (0) | 2021.11.04 |
---|---|
<자바 Java> 서블릿(Servlet) 개발 환경 설정 (0) | 2021.11.03 |
<자바 Java> 자바 기초 개념 (1) - 객체 지향, 변수, 메서드 (0) | 2021.11.01 |
<자바 Java> DB 연동하기 (1) (0) | 2021.10.31 |
<자바 Java> 컬렉션 프레임워크(Collection Framework) (0) | 2021.10.30 |