티스토리 뷰
728x90
반응형
오늘은 이어서 계산기 프로그램 프로젝트의 Step2 와 Step3를 진행해보려 한다.
1. 계산기 프로그램을 웹 애플리케이션
1) 계산기 프로그램을 웹 애플리케이션으로 만들기
- Step1 - 사용자 요청을 메인 Thread가 처리하도록 한다.
- Step2 - 사용자 요청이 들어올 때마다 Thread를 새로 생성해서 사용자 요청을 처리하도록 한다.
- Step3 - Thread Pool을 적용해 안정적인 서비스가 가능하도록 한다.
2) 구현 참고사항
- Step1의 한계
- Step1 과정에서 웹 애플리케이션 서버인 미니 톰캣을 구현하였다.
- 이 때 main 스레드에서 작업을 하였는데, main 스레드가 작업을 수행하던 중 블럭킹이 걸리게 된다면 다음 클라이언트 요청이 바로 수행되지 못하고 이전 작업이 완료될 때까지 기다려야 한다.
- 이러한 문제를 해결하기 위해 main 스레드가 아닌 별도 스레드가 생성되도록 해야한다.
- Step2에서는 요청마다 새로운 스레드를 생성하여 작업하도록 구현해보려고 한다.
- ClientRequestHandler(스레드)를 구현한다.
- 기존 CustomWebApplicationServer의 main 메서드 안에 있던 HttpRequest 파트를 잘라내어 ClientRequestHandler의 run 메서드로 이동시킨다.
- CustomWebApplicationServer에는 새로운 요청이 들어올 때마다 새로운 스레드를 생성하도록 구현한다.
new Thread(new ClientTrequestHandler(clientSocket)).start();
- 스레드의 이름을 logger로 찍어보면, 새로운 Thread-0 이 생성되는 것을 확인할 수 있다.
- Step2의 한계
- 사용자의 요청이 들어왔을 때마다 스래드를 생성하기 때문에 발생하는 문제가 있다. 독립적인 스택 메모리가 할당되기 때문에 비싼 작업이 많이 발생한다. 동시 접속자가 많아질 때는 성능이 떨어지며 최악에는 리소스 한계로 서버가 다운될 수 있는 문제가 있다. 따라서 제한을 두고 스레드를 생성하는 것이 필요하다.
- Step3에서는 스레트 풀을 적용하여 리소스가 안정적으로 사용될 수 있도록 구현해보려 한다.
- 스레드 풀을 적용하기 위해 여기서는 newFixedThreadPool을 사용할 것이다.
private final ExecutorService executorService = Executors.newFixedThreadPool(nThreads: 10);
- Step2에서 새로운 스래드를 생성해줬던 것을 대신하여 스레드 풀을 execute하면 된다.
executorService.execute(new ClientRequestHandler(clientSocket));
- logger로 찍어보면 pool-1-thread-1의 이름을 확인할 수 있다. 즉 스레드 풀의 스레드를 꺼내어 쓴 것을 알 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
728x90
반응형
'Study > FastCampus' 카테고리의 다른 글
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - JDBC 프로그래밍 (0) | 2023.08.16 |
---|---|
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 서블릿 프로그램 (0) | 2023.08.15 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 웹 애플리케이션 (0) | 2023.08.13 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 학점계산기, 음식주문 (0) | 2023.08.12 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 객체지향 (0) | 2023.08.11 |
댓글