Skip to content

Commit

Permalink
feat: 동시성 확장을 위한 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
woo-chang committed Sep 11, 2023
1 parent 7ce5a11 commit f9a69a2
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 14 deletions.
18 changes: 13 additions & 5 deletions tomcat/src/main/java/nextstep/jwp/db/InMemoryUserRepository.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,35 @@
package nextstep.jwp.db;

import nextstep.jwp.model.User;

import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
import nextstep.jwp.model.User;

public class InMemoryUserRepository {

private static final Map<String, User> database = new ConcurrentHashMap<>();
private static final AtomicLong auto_increment = new AtomicLong(1);

static {
final User user = new User(1L, "gugu", "password", "hkkang@woowahan.com");
final User user = new User(auto_increment.getAndIncrement(), "gugu", "password", "hkkang@woowahan.com");
database.put(user.getAccount(), user);
}

public static void save(User user) {
database.put(user.getAccount(), user);
final User saveUser = new User(
auto_increment.getAndIncrement(),
user.getAccount(),
user.getPassword(),
user.getEmail()
);
database.put(saveUser.getAccount(), saveUser);
}

public static Optional<User> findByAccount(String account) {
return Optional.ofNullable(database.get(account));
}

private InMemoryUserRepository() {}
private InMemoryUserRepository() {
}
}
8 changes: 8 additions & 0 deletions tomcat/src/main/java/nextstep/jwp/model/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ public String getAccount() {
return account;
}

public String getPassword() {
return password;
}

public String getEmail() {
return email;
}

@Override
public String toString() {
return "User{" +
Expand Down
28 changes: 21 additions & 7 deletions tomcat/src/main/java/org/apache/catalina/connector/Connector.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,42 @@
package org.apache.catalina.connector;

import org.apache.coyote.http11.Http11Processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.UncheckedIOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.apache.coyote.http11.Http11Processor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Connector implements Runnable {

private static final Logger log = LoggerFactory.getLogger(Connector.class);

private static final int DEFAULT_PORT = 8080;
private static final int DEFAULT_ACCEPT_COUNT = 100;
private static final int MAX_THREAD = 250;
private static final int MAX_WAITING_COUNT = 100;

private final ExecutorService executorService;
private final ServerSocket serverSocket;
private boolean stopped;

public Connector() {
this(DEFAULT_PORT, DEFAULT_ACCEPT_COUNT);
this(DEFAULT_PORT, DEFAULT_ACCEPT_COUNT, MAX_THREAD);
}

public Connector(final int port, final int acceptCount) {
public Connector(final int port, final int acceptCount, final int maxThreads) {
this.executorService = new ThreadPoolExecutor(
maxThreads,
maxThreads,
0,
TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<>(MAX_WAITING_COUNT)
);
this.serverSocket = createServerSocket(port, acceptCount);
this.stopped = false;
}
Expand Down Expand Up @@ -67,12 +80,13 @@ private void process(final Socket connection) {
return;
}
var processor = new Http11Processor(connection);
new Thread(processor).start();
executorService.submit(processor);
}

public void stop() {
stopped = true;
try {
executorService.shutdown();
serverSocket.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package org.apache.coyote.common;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SessionManager {

private static final Map<String, Session> SESSIONS = new HashMap<>();
private static final Map<String, Session> SESSIONS = new ConcurrentHashMap<>();

private SessionManager() {
}
Expand All @@ -15,6 +15,9 @@ public static void add(final Session session) {
}

public static Session findSession(final String id) {
if (id == null) {
return null;
}
return SESSIONS.get(id);
}

Expand Down

0 comments on commit f9a69a2

Please sign in to comment.