From fed02f6f5f4308400e55c160d9495cad010f5bfb Mon Sep 17 00:00:00 2001 From: Gyeongho Yang Date: Thu, 5 Sep 2024 11:11:09 +0900 Subject: [PATCH 1/9] fix: remove implementation logback-classic on gradle (#501) --- study/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/study/build.gradle b/study/build.gradle index 5c69542f84..87a1f0313c 100644 --- a/study/build.gradle +++ b/study/build.gradle @@ -19,7 +19,6 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webflux' - implementation 'ch.qos.logback:logback-classic:1.5.7' implementation 'org.apache.commons:commons-lang3:3.14.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.1' implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.4.1' From 7e9135698878932274ddc1f523ba817ed9c56c70 Mon Sep 17 00:00:00 2001 From: Gyeongho Yang Date: Thu, 5 Sep 2024 13:51:07 +0900 Subject: [PATCH 2/9] fix: add threads min-spare configuration on properties (#502) --- study/src/main/resources/application.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/study/src/main/resources/application.yml b/study/src/main/resources/application.yml index 4e8655a962..e3503a5fb9 100644 --- a/study/src/main/resources/application.yml +++ b/study/src/main/resources/application.yml @@ -6,4 +6,5 @@ server: accept-count: 1 max-connections: 1 threads: + min-spare: 2 max: 2 From b3dce92abb8ec9dc149be43c4639ea305f870cad Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Fri, 13 Sep 2024 12:22:39 +0900 Subject: [PATCH 3/9] =?UTF-8?q?test:=20=ED=95=99=EC=8A=B5=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- study/src/main/resources/application.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/study/src/main/resources/application.yml b/study/src/main/resources/application.yml index c152bb20db..e3f03c808a 100644 --- a/study/src/main/resources/application.yml +++ b/study/src/main/resources/application.yml @@ -3,8 +3,8 @@ handlebars: server: tomcat: - accept-count: 1 - max-connections: 1 + accept-count: 2 + max-connections: 2 threads: min-spare: 2 max: 2 From be60e71cfdea8be95116278f1005479cb4116175 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Fri, 13 Sep 2024 14:01:44 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor:=20Concurrent=20Collections?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/apache/coyote/http11/session/Session.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tomcat/src/main/java/org/apache/coyote/http11/session/Session.java b/tomcat/src/main/java/org/apache/coyote/http11/session/Session.java index 9054689244..c92567d2ae 100644 --- a/tomcat/src/main/java/org/apache/coyote/http11/session/Session.java +++ b/tomcat/src/main/java/org/apache/coyote/http11/session/Session.java @@ -1,8 +1,8 @@ package org.apache.coyote.http11.session; import com.techcourse.model.User; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class Session { @@ -13,7 +13,7 @@ public class Session { public Session(String id) { this.id = id; - this.attributes = new HashMap<>(); + this.attributes = new ConcurrentHashMap<>(); } public boolean hasAttribute(String name) { From 6dce489eb53f9b38dcfd25e56d5e9077764aa029 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Fri, 13 Sep 2024 14:07:45 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor:=20=EC=8A=A4=EB=A0=88=EB=93=9C=20?= =?UTF-8?q?=ED=92=80=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/catalina/connector/Connector.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java index d171bb84a8..08cc39333a 100644 --- a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java +++ b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java @@ -4,6 +4,8 @@ import java.io.UncheckedIOException; import java.net.ServerSocket; import java.net.Socket; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import org.apache.coyote.http11.Http11Processor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,16 +16,19 @@ public class Connector implements Runnable { private static final int DEFAULT_PORT = 8080; private static final int DEFAULT_ACCEPT_COUNT = 100; + private static final int DEFAULT_MAX_THREADS = 250; private final ServerSocket serverSocket; + private final ExecutorService executor; private boolean stopped; public Connector() { - this(DEFAULT_PORT, DEFAULT_ACCEPT_COUNT); + this(DEFAULT_PORT, DEFAULT_ACCEPT_COUNT, DEFAULT_MAX_THREADS); } - public Connector(final int port, final int acceptCount) { + public Connector(final int port, final int acceptCount, final int maxThreads) { this.serverSocket = createServerSocket(port, acceptCount); + this.executor = Executors.newFixedThreadPool(maxThreads); this.stopped = false; } @@ -66,11 +71,12 @@ private void process(final Socket connection) { return; } var processor = new Http11Processor(connection); - new Thread(processor).start(); + executor.execute(processor); } public void stop() { stopped = true; + executor.shutdown(); try { serverSocket.close(); } catch (IOException e) { From 77203938b75c4ae420bef2b4658e5176192746cb Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sat, 14 Sep 2024 12:07:01 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor:=20start=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=EB=8F=84=20=EC=8A=A4=EB=A0=88=EB=93=9C=20=ED=92=80?= =?UTF-8?q?=EC=9D=84=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/apache/catalina/connector/Connector.java | 4 +--- .../main/java/org/apache/coyote/http11/Http11Processor.java | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java index 08cc39333a..7e1c09a8a6 100644 --- a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java +++ b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java @@ -43,10 +43,8 @@ private ServerSocket createServerSocket(final int port, final int acceptCount) { } public void start() { - var thread = new Thread(this); - thread.setDaemon(true); - thread.start(); stopped = false; + executor.execute(this); log.info("Web Application Server started {} port.", serverSocket.getLocalPort()); } diff --git a/tomcat/src/main/java/org/apache/coyote/http11/Http11Processor.java b/tomcat/src/main/java/org/apache/coyote/http11/Http11Processor.java index e623c76679..20e12ff933 100644 --- a/tomcat/src/main/java/org/apache/coyote/http11/Http11Processor.java +++ b/tomcat/src/main/java/org/apache/coyote/http11/Http11Processor.java @@ -55,7 +55,6 @@ private HttpResponse createResponse(HttpRequest httpRequest) { HttpResponse httpResponse = new HttpResponse(); try { handle(httpRequest, httpResponse); - return httpResponse; } catch (NotFoundException e) { httpResponse.location(httpRequest, NOT_FOUND_PATH); } catch (UnauthorizedException e) { From 3a447b79089212b7600eaacaffd7e402c7454059 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sat, 14 Sep 2024 13:04:55 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor:=20close=20wait=20=EC=83=81?= =?UTF-8?q?=ED=99=A9=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/catalina/connector/Connector.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java index 7e1c09a8a6..0453d2e6b2 100644 --- a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java +++ b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java @@ -68,8 +68,16 @@ private void process(final Socket connection) { if (connection == null) { return; } - var processor = new Http11Processor(connection); - executor.execute(processor); + try { + var processor = new Http11Processor(connection); + executor.execute(processor); + } finally { + try { + connection.close(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } } public void stop() { From 7b3e0679f8f62caba75dfd4c9e3d4a4a2ef6c3c9 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sat, 14 Sep 2024 16:48:10 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor:=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/apache/coyote/http11/httpresponse/HttpResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tomcat/src/main/java/org/apache/coyote/http11/httpresponse/HttpResponse.java b/tomcat/src/main/java/org/apache/coyote/http11/httpresponse/HttpResponse.java index f57c27375f..8d4c448715 100644 --- a/tomcat/src/main/java/org/apache/coyote/http11/httpresponse/HttpResponse.java +++ b/tomcat/src/main/java/org/apache/coyote/http11/httpresponse/HttpResponse.java @@ -122,7 +122,8 @@ public byte[] toResponse() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(httpStatusLine.createStatusLineResponse()) .append(RESPONSE_LINE_DELIMITER) - .append(httpResponseHeader.createHeadersResponse()); + .append(httpResponseHeader.createHeadersResponse()) + .append(RESPONSE_LINE_DELIMITER); if (httpResponseBody != null) { stringBuilder.append(RESPONSE_LINE_DELIMITER) .append(httpResponseBody.getBody()); From 98f4296bb950ac27b32db377198e9156dbb5d97e Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sat, 14 Sep 2024 16:57:29 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=EB=8F=99=EC=9E=91=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../techcourse/controller/AbstractController.java | 2 ++ .../org/apache/catalina/connector/Connector.java | 15 ++++----------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/tomcat/src/main/java/com/techcourse/controller/AbstractController.java b/tomcat/src/main/java/com/techcourse/controller/AbstractController.java index d91f52d861..9ee8cae097 100644 --- a/tomcat/src/main/java/com/techcourse/controller/AbstractController.java +++ b/tomcat/src/main/java/com/techcourse/controller/AbstractController.java @@ -10,9 +10,11 @@ public abstract class AbstractController implements Controller { public void service(HttpRequest httpRequest, HttpResponse httpResponse) { if (httpRequest.isMethod(HttpMethod.GET)) { doGet(httpRequest, httpResponse); + return; } if (httpRequest.isMethod(HttpMethod.POST)) { doPost(httpRequest, httpResponse); + return; } throw new IllegalArgumentException("유효하지 않은 메소드입니다."); diff --git a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java index 0453d2e6b2..2cf5e9e874 100644 --- a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java +++ b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java @@ -68,25 +68,18 @@ private void process(final Socket connection) { if (connection == null) { return; } - try { - var processor = new Http11Processor(connection); - executor.execute(processor); - } finally { - try { - connection.close(); - } catch (Exception e) { - log.error(e.getMessage(), e); - } - } + var processor = new Http11Processor(connection); + executor.execute(processor); } public void stop() { stopped = true; - executor.shutdown(); try { serverSocket.close(); } catch (IOException e) { log.error(e.getMessage(), e); + } finally { + executor.shutdown(); } }