-
Notifications
You must be signed in to change notification settings - Fork 0
이호석 3주차 java was(2) 학습일지
HttpResponse
에서 OutputStream
으로 응답 데이터를 쏴줄 때 BufferedOutputStream
을 사용하여 지속해서 systemctl을 호출하지 않고 버퍼링을 통해 한꺼번에 전송하는 방식을 사용했습니다.
BufferedOutputStream
의 버퍼링 동작 방식이 궁금하여 내부코드를 살펴보던 중 다음과 같은 주석을 발견할 수 있었습니다!

지정된 바이트 배열에서 offset 값인
off
변수부터 시작해len
크기의 바이트를 출력 스트림에 씁니다. 지정된 배열의 바이트를BufferedOutputStream
버퍼에 저장하고 필요에 따라 버퍼를 기본 출력 스트림으로 플러시를 합니다. 또한 쓰기 요청을 한 바이트의 크기가 현재 스트림의 남은 버퍼보다 크다면 이때는 기존 버퍼를 플러시하고 인자로 받은 바이트들을 기본 출력 스트림에 직접writing
합니다.
즉, 버퍼의 크기가 현재 바이트들을 담기에 공간이 충분하지 않을 경우 기존에 담겨있던 버퍼를 플러시하고, 지금 기본 출력 스트림(여기서는 SocketOutpuStream
)에 직접 write를 하게 됩니다. 위 주석에서는 이렇게 동작하는 이유를 중복된 BufferedOutputStream이 불필요하게 데이터를 복사하지 않기 위한 동작이라고 설명하고 있습니다.
즉, A스트림 위에 BufferedOutputStream
인 B스트림이 있을 때 B스트림의 버퍼보다 큰 데이터를 입력받으면 굳이 버퍼링 -> 플러시 작업을 하지 않고, A스트림에 직접 데이터를 write
하겠다는 의미가 됩니다.
단순하게 BufferedOutputStream을 사용하면 버퍼를 이용하므로 훨씬 빠르겠다고 생각하고 사용했지만, 적절한 버퍼 크기를 설정해 주는 것도 중요한 고려 사항이 될 수 있다는 걸 조금은 알게 되었습니다!
-
Web Server (대표적으로 Apache HTTP Server)
- 주로 정적 컨텐츠를 전달할 수 있게 특화되어 있습니다. (.html, .css, .js, 이미지 파일 등)
- 다만 웹 서버들은 스크립팅 언어를 제공할 수 있는 플러그인이 있기에 동적인 컨텐츠를 지원하기도 합니다. → https://httpd.apache.org/docs/current/ko/howto/cgi.html (CGI)
- Common Gateway Interface(CGI): 웹 서버와 다른 애플리케이션간 통신을 용이하게 하는 표준이며 미들웨어 역할을 합니다. 주로 스크립트로 동작하며 Perl, C, Shell Script와 같은 언어로 작성됩니다.
- 이런 CGI를 통해 Web Server는 정적인 컨텐츠 뿐만 아니라 동적인 컨텐츠도 지원할 수있게 됩니다.
- 다만 CGI는 요청에 대해 항상 새로운 프로세스를 시작하게 되어 많은 요청이 들어올 경우 성능이 좋지 못할 수 있습니다.
- 그 밖에도 확장성, 보안, 유지 관리 및 개발에서 Web Application Server보다 부족한 모습을 보임
- 주로 정적 컨텐츠를 전달할 수 있게 특화되어 있습니다. (.html, .css, .js, 이미지 파일 등)
-
Web Application Server(대표적으로 Tomcat)
- Web Server가 제공하는 정적 컨텐츠를 전달하는 기능은 물론 동적 콘텐츠를 제공하는 역할을 합니다.
- Tomcat은 Servlet, JSP를 통해 동적 컨텐츠를 지원할 수 있습니다.
- CGI는 요청마다 새로운 프로세스를 생성하지만 WAS(톰캣)의 경우 요청마다 스레드를 생성하여 훨씬 좋은 성능을 보입니다.
- 다만 Tomcat의 경우 완벽한 WAS라고 불리기는 어려운데, 오로지 Servlet API(JSP, JSTL)만 지원하기 때문입니다.
- WAS는 Java EE에 대한 모든 기능을 제공해주어야 합니다. (동적 콘텐츠 제공, EJB 풀 관리, 분산 트랜잭션, JNDI를 통한 애플리케이션 조회, 애플리케이션 보안 등)
-
참고
- https://stackoverflow.com/questions/936197/what-is-the-difference-between-application-server-and-web-server
- https://stackoverflow.com/questions/2469949/is-tomcat-a-web-server-or-an-application-server
- https://www.geeksforgeeks.org/difference-between-java-servlet-and-cgi/
- https://www.quora.com/Why-is-CGI-not-used-anymore-for-web-applications
- https://www.java67.com/2016/06/3-difference-between-web-server-vs-application-server-vs-servlet-container.html https://tecoble.techcourse.co.kr/post/2021-05-24-apache-tomcat/
- https://www.geeksforgeeks.org/difference-between-web-server-and-application-server/?ref=next_article
TODO!!